Name: series-workflow8vdjp Phase: Succeeded StartedAt: 2026-08-10 09:45:08 +0000 UTC FinishedAt: 2026-08-10 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[0] Phase: Succeeded StartedAt: 2026-08-10 09:45:08 +0000 UTC FinishedAt: 2026-08-10 10:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 09:45:08 +0000 UTC FinishedAt: 2026-08-10 10:42:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "894db084-32c0-4e1b-a2f8-6c403e98028a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_ext_write_extent", "hfsplus_file_extend", "hfsplus_file_truncate", "hfsplus_get_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUmIzM0OywKICAgICYjMzQ7aGZzcGx1c19nZXRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBleGFjdGx5IGVxdWFsIHRvIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgYmVmb3JlIGNhbGxpbmcgYGhmc19ibm9kZV93cml0ZWAuIFdpdGhvdXQgdGhpcyBjaGVjaywgaWYgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXG5cblN0YW5kYXJkIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgb24gc2xhYiBhbmQgaGVhcCBhbGxvY2F0aW9ucy4gU2luY2UgdGhlIGJ1ZyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcmF0aGVyIHRoYW4gYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93IGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWI1NjkxOTc2ZTVhMGRiNzNiZmRlZmM1MWE1MTQ1ODgwNjlkODQ0Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDEwOjQwOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xMTAsNiAmIzQzOzExMCw4IEBAIHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuIFx0XHRcdFx0ZmQtXHUwMDNlZW50cnlvZmZzZXQsIGZkLVx1MDAzZWVudHJ5bGVuZ3RoKTtcbiBcdFx0aGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjY9IH5IRlNQTFVTX0VYVF9ESVJUWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZXh0ZW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV90cnVuY2F0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2dldF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaW4gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViNTY5MTk3NmU1YTBkYjczYmZkZWZjNTFhNTE0NTg4MDY5ZDg0NGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxMDo0MDoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKaW5kZXggODEzZTY4YjhlY2Q2NS4uZWI3YzExNTI0ZDE4OCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTExMCw2ICYjNDM7MTEwLDggQEAgc3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCX0gZWxzZSB7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwomIzQzOwkJaWYgKGZkLSZndDtlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSkKJiM0MzsJCQlyZXR1cm4gLUVJTzsKIAkJaGZzX2Jub2RlX3dyaXRlKGZkLSZndDtibm9kZSwgaGlwLSZndDtjYWNoZWRfZXh0ZW50cywKIAkJCQlmZC0mZ3Q7ZW50cnlvZmZzZXQsIGZkLSZndDtlbnRyeWxlbmd0aCk7CiAJCWhpcC0mZ3Q7ZXh0ZW50X3N0YXRlICZhbXA7PSB+SEZTUExVU19FWFRfRElSVFk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBSZWNlbnQgSEZTJiM0MzsgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIGEgY2hhbmdlIHRvIGBmcy9oZnNwbHVzL2V4dGVudHMuY2AuIExvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIHNpemUgY2hlY2s6IGBpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgLiBSaWdodCwgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBleHRlbnQgcmVjb3JkLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZ29vZCBwcm9hY3RpdmUgbWVhc3VyZS4KCkdpdmVuIHRoaXMgaXMgSEZTJiM0MzssIGEgZmlsZXN5c3RlbSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWFjaGFibGUgYW5kLCBjcml0aWNhbGx5LCBmdXp6YWJsZS4gQ3JhZnRpbmcgYSBtYWxpY2lvdXMgaW1hZ2UgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCBpcyBhIHZlcnkgcmVhbGlzdGljIGF0dGFjayB2ZWN0b3IuIFNvLCBsZXQmIzM5O3MgdHJlYXQgdGhpcyBzZXJpb3VzbHkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24sIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBBcmUgdGhlcmUgcG90ZW50aWFsIGNhbGxlcnMgdGhhdCBjb3VsZCBiZSB2dWxuZXJhYmxlPyBBbnkgcGxhY2VzIHdoZXJlIHRoaXMgY2hlY2sgbWlnaHQgYmUgYnlwYXNzZWQgb3IgbWlzdW5kZXJzdG9vZD8gIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEnigJlsbCBhbHNvIG5lZWQgdG8gaWRlbnRpZnkgdGhlIEtjb25maWcgb3B0aW9uIGZvciBIRlMmIzQzOyB0byBlbnN1cmUgaXQmIzM5O3MgY29tcGlsZWQgaW50byB0aGUgdGFyZ2V0IGtlcm5lbC4gVGhhdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgaG93IHRvIGV4cGxvaXQgaXQgaWYgYSB2dWxuZXJhYmlsaXR5IGV4aXN0cy4gVGhpcyBtaWdodCBiZSBhIGdvb2QgZm9jdXMgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9leHRlbnRzLmM9NzY9c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODYtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo4NzpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04OC1cdFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTEzMz1zdGF0aWMgaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDItXHRcdFx0cmV0dXJuIHJlcztcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE0MzpcdFx0cmVzID0gX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC1cdFx0aGZzX2ZpbmRfZXhpdChcdTAwMjZmZCk7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTgxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODktXHRpZiAoaGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjYgSEZTUExVU19FWFRfRElSVFkpIHtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE5MDpcdFx0cmVzID0gX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIGZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE5MS1cdFx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBFeHRlbnQgV3JpdGUgTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgYSBwcmV0dHkgdGlnaHRseSBjb3VwbGVkLCBpbnRlcm5hbCBwaWVjZSBvZiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIG91dHNpZGUgaXRzIG1vZHVsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBpdCBkb2VzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hhdCBpcyBjYWxsaW5nIGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkYCBvciBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgLiBUaGF0IHdvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IHdoZXJlIHRoZXNlIGV4dGVudCBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkLCBhbmQgc2hlZCBsaWdodCBvbiBob3cgdGhleSBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciB3cml0ZSBwcm9jZXNzLiBLbm93aW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaWRlYSBvZiBpdHMgcm9sZSBpbiB0aGUgZmlsZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZXh0ZW50cy5jPTg3PXN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMzItXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxMzM6c3RhdGljIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMzQte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE0OT1pbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTUzLVx0bXV0ZXhfbG9jayhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZWV4dGVudHNfbG9jayk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxNTQ6XHRyZXMgPSBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkKGlub2RlKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1NS1cdG11dGV4X3VubG9jayhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZWV4dGVudHNfbG9jayk7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDQwPWludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01MjktXHRoZnNfZGJnKFwmIzM0O2luc2VydCBuZXcgZXh0ZW50XFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjUzMDpcdHJlcyA9IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTMxLVx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjExCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSEZTJiM0MzsgRXh0ZW50IEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBleHRlbnQgbWFuYWdlbWVudC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IHZpc2libGUgYW5kIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIG1vZHVsZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHVzZSwgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBIRlMmIzQzOyBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoZSBub24tc3RhdGljIGRlY2xhcmF0aW9uIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXQgaXMgbGlrZWx5IGNhbGxlZCBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGRyaXZlci4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCBhIGNsb3NlciBsb29rIGF0IHRoZSBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgIGZ1bmN0aW9uLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgZXh0ZW50cyYjMzk7IGNhY2hlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9leHRlbnRzLmM9MTYwPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE4MC1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE4MTpzdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODItXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yMTA9c3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLVx0aWYgKCFyZXMpIHtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIyMjpcdFx0cmVzID0gX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoXHUwMDI2ZmQsIGlub2RlLCBibG9jayk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMjMtXHRcdGhmc19maW5kX2V4aXQoXHUwMDI2ZmQpO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTU0Nj12b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwMi1cdFx0fVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NjAzOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChcdTAwMjZmZCwgaW5vZGUsIGFsbG9jX2NudCk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy02MDQtXHRcdGlmIChyZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gSEZTJiM0MzsgZmlsZSBvcGVyYXRpb25zOgoKKipJZGVudGlmeWluZyBLZXkgSEZTJiM0MzsgRnVuY3Rpb25zIGZvciBGdXJ0aGVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIHRoYXQgYGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBmb2N1cyBzeW1ib2wgcmlnaHQgbm93LiBUaGF0IGxpa2VseSBkZWFscyB3aXRoIHdyaXRpbmcgZmlsZSBkYXRhIGFuZCBtYW5hZ2luZyBleHRlbnRzIOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEgY3J1Y2lhbCBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIGJlaGF2aW9yLiBJJiMzOTttIGFsc28gYWRkaW5nIGBoZnNwbHVzX2ZpbGVfZXh0ZW5kYCBhbmQgYGhmc3BsdXNfZmlsZV90cnVuY2F0ZWAgdG8gdGhlIHNob3J0IGxpc3QgYXMgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGFzIHRoZXkgYWxzbyBkZWFsIHdpdGggZmlsZSBtb2RpZmljYXRpb25zLiBKdXN0IHRvIHJvdW5kIHRoaW5ncyBvdXQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIHJlYWQgc2lkZSBvZiB0aGUgc2FtZSBjb2luOiBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50YCBhcyB3ZWxsIHRvIGJ1aWxkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBleHRlbnRzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNwbHVzX2V4dF9yZWFkX2V4dGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZXh0ZW50cy5jPTE0OT1pbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTU5LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTYwOnN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTYxLVx0XHRcdFx0XHQgICAgc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHRlbnQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTgxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xOTQtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxOTU6XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGZkLCBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsIGlub2RlLVx1MDAzZWlfaW5vLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTk2LVx0XHRcdFx0XHRibG9jaywgSEZTUExVU19JU19SU1JDKGlub2RlKSA/XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjA5LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjEwOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjExLXtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yMjk9aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNjYtXHQvKlxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjY3Olx0ICogaGZzcGx1c19leHRfcmVhZF9leHRlbnQgd2lsbCB3cml0ZSBvdXQgYSBjYWNoZWQgZXh0ZW50IGludG9cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI2OC1cdCAqIHRoZSBleHRlbnRzIGJ0cmVlLiAgSW4gdGhhdCBjYXNlIHdlIG1heSBoYXZlIHRvIG1hcmsgdGhlIGlub2RlXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjcxLVx0d2FzX2RpcnR5ID0gKGhpcC1cdTAwM2VleHRlbnRfc3RhdGUgXHUwMDI2IEhGU1BMVVNfRVhUX0RJUlRZKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjI3MjpcdHJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjczLVx0aWYgKHJlcykge1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTM5NT1pbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDIwLVx0ZG8ge1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDIxOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KFx1MDAyNmZkLCBleHRfZW50cnksIGNuaWQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00MjItXHRcdFx0XHRcdFx0dG90YWxfYmxvY2tzLCB0eXBlKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz00NDA9aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ2MC1cdGVsc2Uge1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDYxOlx0XHRyZXMgPSBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChpbm9kZSwgaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcyk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NjItXHRcdGlmIChyZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipIRlMmIzQzOyBDb2RlIEluc3BlY3Rpb246IEZvY3VzaW5nIG9uIENvcmUgRmlsZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIEhGUyYjNDM7IGNvZGUgYW5kIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHRhcmdldCBpbiBtaW5kOiB1bmRlcnN0YW5kaW5nIGhvdyBmaWxlIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgYXQgYSBsb3cgbGV2ZWwuIEkgc2VlIGBoZnNwbHVzX2dldF9ibG9ja2AgYXMgYSByZWFsbHkgY3J1Y2lhbCBwb2ludCB0byBzdGFydC4gVGhpcyBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSB5b3UmIzM5O3JlIHJlcXVlc3RpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgZm9jYWwgcG9pbnQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgdG8gdW5kZXJzdGFuZCBpdCBwcm9wZXJseS4KCkZvbGxvd2luZyB0aGlzIGluaXRpYWwgYW5hbHlzaXMgSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZpbGUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5LCBJIHNlZSBzb21lIGtleSBmdW5jdGlvbnMgdGhhdCB3aWxsIG1ha2UgdGhpcyBmb2N1cyByZWxldmFudC4gTmFtZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGhvdyB3ZSBoYW5kbGUgZXh0ZW5kaW5nIGEgZmlsZSAoYGhmc3BsdXNfZmlsZV9leHRlbmRgKSwgdHJ1bmNhdGluZyBhIGZpbGUgKGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgKSwgYW5kIHdyaXRpbmcgZXh0ZW50cyAoYGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGApLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGxvZ2ljYWxseSBpbnRlcnJlbGF0ZWQgb3BlcmF0aW9ucyB0byBwdXJzdWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSBjb3JlIHJvdXRpbmVzLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBIRlNQTFVTIGZlYXR1cmUgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggdGhlIHJlbGV2YW50IGJpdHMsIGFuZCB0aGF0IHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiB0aGUgYnVpbGQgSSYjMzk7bSB1c2luZy4gT3RoZXJ3aXNlLCBJJiMzOTttIGdvaW5nIHRvIGJlIGNoYXNpbmcgZ2hvc3RzLiBUaGVuLCBpdCYjMzk7cyB0aW1lIHRvIGdldCBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhGU1BMVVNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXG5mcy9oZnNwbHVzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgT3B0aW9uIGBIRlNQTFVTX0ZTYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgSEZTUExVU19GU2Agb3B0aW9uIGluIHRoZSBLY29uZmlnLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgYSBzdGFuZGFsb25lIHBpZWNlIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgb3RoZXIgb3B0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYEhGU1BMVVNfRlNgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gRGlnZ2luZyBpbnRvIGRlcGVuZGVuY2llcyBpcyBhbHdheXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU1BMVVNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBOTFNcbiAgIDc6XHRcdHNlbGVjdCBOTFNfVVRGOFxuICAgODpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XG4gIDExOlx0XHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVGhpcyBmaWxlIHN5c3RlbSBpcyBvZnRlbiBjYWxsZWQgSEZTJiM0MzsgYW5kIHdhcyBpbnRyb2R1Y2VkIHdpdGhcbiAgMTQ6XHRcdCAgTWFjT1MgOC4gSXQgaW5jbHVkZXMgYWxsIE1hYyBzcGVjaWZpYyBmaWxlc3lzdGVtIGRhdGEgc3VjaCBhc1xuICAxNTpcdFx0ICBkYXRhIGZvcmtzIGFuZCBjcmVhdG9yIGNvZGVzLCBidXQgaXQgYWxzbyBoYXMgc2V2ZXJhbCBVTklYXG4gIDE2Olx0XHQgIHN0eWxlIGZlYXR1cmVzIHN1Y2ggYXMgZmlsZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBIRlNQTFVTX0tVTklUX1RFU1RcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBIRlMmIzQzOyBmaWxlc3lzdGVtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwMQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTJiM0MzsgRmlsZXN5c3RlbSBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQuIFRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiBoaW5nZXMgb24gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBgQkxPQ0tgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgdHlwaWNhbGx5IGVuYWJsZWQsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKVGhlIGtleSBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSB2YWx1YWJsZSBhdmVudWUgdG8gcHVyc3VlLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCwgYGhmc3BsdXNfZmlsZV9leHRlbmRgLCBgaGZzcGx1c19maWxlX3RydW5jYXRlYCwgYW5kIGBoZnNwbHVzX2dldF9ibG9ja2AuIFRoZXNlIGFyZSBjbGVhcmx5IGZsYWdnZWQgYXMgYXJlYXMgb2YgaW50ZXJlc3QuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCwgd2hpY2ggc3VnZ2VzdHMgYSBwcmlvciB2dWxuZXJhYmlsaXR5IHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgZmlsZXN5c3RlbSBmdW5jdGlvbiBtYWtlcyBpdCByZWFjaGFibGUgdmlhIGZ1enplciBpbnB1dC4gVGhlIGBIRlNQTFVTX0ZTYCBjb25maWd1cmF0aW9uIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IEhGUyYjNDM7IGlzIHRoZSBwcmltYXJ5IGZvY3VzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgYW5kIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUmIzM0OywKICAgICYjMzQ7aGZzcGx1c19nZXRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUmIzM0OywKICAgICYjMzQ7aGZzcGx1c19nZXRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIHRvIGVuc3VyZSB0aGF0IGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHNgIGFycmF5LCBgaGZzX2Jub2RlX3dyaXRlYCB3aWxsIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheSAod2hpY2ggaXMgZW1iZWRkZWQgaW4gdGhlIHNsYWItYWxsb2NhdGVkIGBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvYCkuIFRoaXMgY29uc3RpdHV0ZXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LlxuXG5TdGFuZGFyZCBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIG9uIHNsYWIgYW5kIGhlYXAgYWxsb2NhdGlvbnMuIFNpbmNlIHRoZSBidWcgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHJhdGhlciB0aGFuIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgS0FTQU4gd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjU2OTE5NzZlNWEwZGI3M2JmZGVmYzUxYTUxNDU4ODA2OWQ4NDRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTA6NDA6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0xMTAsNiAmIzQzOzExMCw4IEBAIHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKIAl9IGVsc2UgewogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKJiM0MzsJCWlmIChmZC0mZ3Q7ZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCWhmc19ibm9kZV93cml0ZShmZC0mZ3Q7Ym5vZGUsIGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHMsCiAJCQkJZmQtJmd0O2VudHJ5b2Zmc2V0LCBmZC0mZ3Q7ZW50cnlsZW5ndGgpOwogCQloaXAtJmd0O2V4dGVudF9zdGF0ZSAmYW1wOz0gfkhGU1BMVVNfRVhUX0RJUlRZOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvaGZzcGx1cy9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgZnVuY3Rpb24sIGFkZGluZyBhIGNoZWNrLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGNvZGUgbm93IGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBoZnNfYm5vZGVfd3JpdGVgLiAgTGV0JiMzOTtzIHRoaW5rIHRocm91Z2ggdGhpcyBjYXJlZnVsbHkuIGBoZnNfYm5vZGVfd3JpdGVgIHdyaXRlcyBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBieXRlcyBmcm9tIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCB0byBgZmQtJmd0O2Jub2RlYCBhdCBgZmQtJmd0O2VudHJ5b2Zmc2V0YC4gTm93LCAqaWYqIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIHdhcyAqbGFyZ2VyKiB0aGFuIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgKmJlZm9yZSogdGhpcyBwYXRjaCwgaXQgd291bGQgcmVhZCBvdXQtb2YtYm91bmRzIGZyb20gYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLiAgUmlnaHQsIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBpcyBhbiBhcnJheSBvZiBgaGZzcGx1c19leHRlbnRfZGVzY3JpcHRvcmAgd2l0aGluIGFuIGBoZnNwbHVzX2V4dGVudF9yZWNgLiBMZXQgbWUgY29uZmlybS4uLiBgaGlwYCBpcyBgSEZTUExVU19JKGlub2RlKWAsIGFuZCBgY2FjaGVkX2V4dGVudHNgICppcyogYW4gYGhmc3BsdXNfZXh0ZW50X3JlY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuCgpTbywgaWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgKmlzKiBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgLCB3ZSYjMzk7ZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgT09CIHJlYWQsIGFuZCBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQuICBOb3csIHRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzLCByaWdodD8gSXQgdGhyb3dzIGFuIGVycm9yIGlmIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIHRoZSB3cm9uZyBzaXplLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZpeGluZyBhIGJ1Zy4KCldoYXQgYWJvdXQgc21hbGxlciBzaXplcz8gIElmIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIHNtYWxsZXIgdGhhbiBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgLCBpdCB3b3VsZCB3cml0ZSBmZXdlciBieXRlcywgbGVhdmluZyB1bndyaXR0ZW4gYnl0ZXMuIERvZXMgKnRoYXQqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IFRoZSBjcnVjaWFsIHRoaW5nIGlzIHdoZXRoZXIgdGhlIHNvdXJjZSwgYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLCBpcyBpdHNlbGYgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIElmIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQsIEtNU0FOICptaWdodCogZmxhZyBpdC4gSG93ZXZlciwgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgaXQgcmVhZGluZyBvdXQtb2YtYm91bmRzLgoKSGFuZyBvbi4gKlRoaXMgcGF0Y2ggaXMgcHJldmVudGluZyB0aGUgT09CIHJlYWQhKiBJdCYjMzk7cyAqZml4aW5nKiBhIGJ1ZyB0aGF0IEtBU0FOICp3b3VsZCogY2F0Y2guIFRoZSBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2AgaXMgaGVhcC1hbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEtBU0FOICp3aWxsKiBkZXRlY3QgYW4gT09CIHJlYWQuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCwgd2hpY2gsIGluIHR1cm4sIGFsc28gYXZvaWRzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHBvdGVudGlhbCB3cml0ZS4gVGhpcyBpcyBnb29kLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSB0aGluayBpdCBkb2VzLiBJJiMzOTttIHNhdGlzZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYz03Nj1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2xhc3RibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04Ni1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjg3OnN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTg4LVx0XHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTMzPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0Mi1cdFx0XHRyZXR1cm4gcmVzO1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXHUwMDI2ZmQpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTQ0LVx0XHRoZnNfZmluZF9leGl0KFx1MDAyNmZkKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE4OS1cdGlmIChoaXAtXHUwMDNlZXh0ZW50X3N0YXRlIFx1MDAyNiBIRlNQTFVTX0VYVF9ESVJUWSkge1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTkwOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTkxLVx0XHRpZiAocmVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiB0aG9yb3VnaGx5OyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgd2hlbiBkZWFsaW5nIHdpdGggSEZTJiM0MzsgZXh0ZW50IHdyaXRpbmcuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gaGFuZGxlcyBhbGxvY2F0aW5nIGFuZCB3cml0aW5nIGRhdGEgYmxvY2tzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgZnJhZ21lbnRlZCBmaWxlcyBvciB0aG9zZSBzcGFubmluZyBtdWx0aXBsZSBhbGxvY2F0aW9uIGJsb2Nrcy4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEItdHJlZSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGV4dGVudCBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgd29ya3M6IGlzIGl0IGNvbnRpZ3VvdXMsIG9yIGRvZXMgaXQgdHJ5IHRvIGNvYWxlc2NlIGV4aXN0aW5nIGV4dGVudHM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBmYWlscz8gSXMgdGhlcmUgZXJyb3IgaGFuZGxpbmc/IEhvdyBkb2VzIGl0IGhhbmRsZSBwYXJ0aWFsIHdyaXRlcz8gV2hhdCBhYm91dCBtZXRhZGF0YSB1cGRhdGVzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvbiBob3cgZXh0ZW50IHdyaXRlcyBhcmUgbWFuYWdlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd2lsbCBiZSBpbnRlcmVzdGluZywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBtaW5pbWl6ZXMgZGlzayBzZWVrcyBhbmQgb3B0aW1pemUgb3ZlcmFsbCBJL08gb3BlcmF0aW9ucy4gRmluYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgam91cm5hbGluZyBvciB0cmFuc2FjdGlvbiBsb2cgc3lzdGVtLCBpZiBvbmUgaXMgcHJlc2VudCwgdG8gZ3VhcmFudGVlIGRhdGEgaW50ZWdyaXR5IGluIHRoZSBldmVudCBvZiBhIHN5c3RlbSBjcmFzaCBvciBwb3dlciBsb3NzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZXh0ZW50cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4NzpcdHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiAgODg6XHRcdFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuICA4OTpcdHtcbiAgOTA6XHRcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4gIDkxOlx0XHRpbnQgcmVzO1xuICA5MjpcdFxuICA5MzpcdFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNmhpcC1cdTAwM2VleHRlbnRzX2xvY2spKTtcbiAgOTQ6XHRcbiAgOTU6XHRcdGhmc3BsdXNfZXh0X2J1aWxkX2tleShmZC1cdTAwM2VzZWFyY2hfa2V5LCBpbm9kZS1cdTAwM2VpX2lubywgaGlwLVx1MDAzZWNhY2hlZF9zdGFydCxcbiAgOTY6XHRcdFx0XHQgICAgICBIRlNQTFVTX0lTX1JTUkMoaW5vZGUpID9cbiAgOTc6XHRcdFx0XHRcdEhGU1BMVVNfVFlQRV9SU1JDIDogSEZTUExVU19UWVBFX0RBVEEpO1xuICA5ODpcdFxuICA5OTpcdFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG4gMTAwOlx0XHRpZiAoaGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjYgSEZTUExVU19FWFRfTkVXKSB7XG4gMTAxOlx0XHRcdGlmIChyZXMgIT0gLUVOT0VOVClcbiAxMDI6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEwMzpcdFx0XHQvKiBGYWlsIGVhcmx5IGFuZCBhdm9pZCBFTk9TUEMgZHVyaW5nIHRoZSBidHJlZSBvcGVyYXRpb24gKi9cbiAxMDQ6XHRcdFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cdTAwM2V0cmVlLCBmZC1cdTAwM2V0cmVlLVx1MDAzZWRlcHRoICYjNDM7IDEpO1xuIDEwNTpcdFx0XHRpZiAocmVzKVxuIDEwNjpcdFx0XHRcdHJldHVybiByZXM7XG4gMTA3Olx0XHRcdGhmc19icmVjX2luc2VydChmZCwgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuIDEwODpcdFx0XHRcdFx0c2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpO1xuIDEwOTpcdFx0XHRoaXAtXHUwMDNlZXh0ZW50X3N0YXRlIFx1MDAyNj0gfihIRlNQTFVTX0VYVF9ESVJUWSB8IEhGU1BMVVNfRVhUX05FVyk7XG4gMTEwOlx0XHR9IGVsc2Uge1xuIDExMTpcdFx0XHRpZiAocmVzKVxuIDExMjpcdFx0XHRcdHJldHVybiByZXM7XG4gMTEzOlx0XHRcdGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSlcbiAxMTQ6XHRcdFx0XHRyZXR1cm4gLUVJTztcbiAxMTU6XHRcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsXG4gMTE2Olx0XHRcdFx0XHRmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuIDExNzpcdFx0XHRoaXAtXHUwMDNlZXh0ZW50X3N0YXRlIFx1MDAyNj0gfkhGU1BMVVNfRVhUX0RJUlRZO1xuIDExODpcdFx0fVxuIDExOTpcdFxuIDEyMDpcdFx0LypcbiAxMjE6XHRcdCAqIFdlIGNhbiYjMzk7dCBqdXN0IHVzZSBoZnNwbHVzX21hcmtfaW5vZGVfZGlydHkgaGVyZSwgYmVjYXVzZSB3ZVxuIDEyMjpcdFx0ICogYWxzbyBnZXQgY2FsbGVkIGZyb20gaGZzcGx1c193cml0ZV9pbm9kZSwgd2hpY2ggc2hvdWxkIG5vdFxuIDEyMzpcdFx0ICogcmVkaXJ0eSB0aGUgaW5vZGUuICBJbnN0ZWFkIHRoZSBjYWxsZXJzIGhhdmUgdG8gYmUgY2FyZWZ1bFxuIDEyNDpcdFx0ICogdG8gZXhwbGljaWx5IG1hcmsgdGhlIGlub2RlIGRpcnR5LCB0b28uXG4gMTI1Olx0XHQgKi9cbiAxMjY6XHRcdHNldF9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IHBhcnQgaXMgdGhpcyBuZXcgY2hlY2s6IGBpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKWAuICBJdCBzZWVtcyBsaWtlIHRoZSBkZXZlbG9wZXIgYW50aWNpcGF0ZWQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgaGZzX2Jub2RlX3dyaXRlYC4gVGhleSYjMzk7cmUgbm93IG1ha2luZyBzdXJlIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIHRoZSByaWdodCBzaXplIGJlZm9yZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uICBUaGUgZ29hbCBpcyBwcmV0dHkgY2xlYXIg4oCTIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBpcyBhIGBoZnNwbHVzX2V4dGVudF9yZWNgLCBhbmQgdGhhdCB0aGlzIHN0cnVjdHVyZSBjb25zaXN0cyBvZiBhbiBhcnJheSBvZiBlaWdodCBgaGZzcGx1c19leHRlbnRfZGVzY3JpcHRvcmAgc3RydWN0cy4gSWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gd2hhdCBhIGBoZnNwbHVzX2V4dGVudF9yZWNgIGNhbiBob2xkLCB0aGF0IG1lYW5zIGBoZnNfYm5vZGVfd3JpdGVgIHdvdWxkIGF0dGVtcHQgdG8gcmVhZCAqcGFzdCogdGhlIGJvdW5kcyBvZiBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2Agd2hlbiBjb3B5aW5nIGRhdGEgdG8gdGhlIGJub2RlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBLQVNBTiBpcyByaWdodGx5IGZsYWdnaW5nIGl0LiBOb3csIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaXMgY29ycmVjdCwgc28gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdWxseSBjb21wcmVoZW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgYXJyYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2J0cmVlLmM9NDk5PWludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy01MDEtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdHJlZS1cdTAwM2Vpbm9kZTtcbmZzL2hmc3BsdXMvYnRyZWUuYzo1MDI6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTUwMy1cdHUzMiBjb3VudDtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz04Nz1zdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODkte1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6OTA6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtOTEtXHRpbnQgcmVzO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE4MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTgzLXtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE4NDpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODUtXHRpbnQgcmVzO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIxMD1zdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIxMS17XG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMTI6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjEzLVx0c3RydWN0IGhmc19maW5kX2RhdGEgZmQ7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MjI5PWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjMzLVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMzQ6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjM1LVx0aW50IHJlcyA9IC1FSU87XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDQwPWludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDMtXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQ0NDpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDUtXHR1MzIgc3RhcnQsIGxlbiwgZ29hbDtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz01NDY9dm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NDgtXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjU0OTpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NTAtXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0xNzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMTc4LVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MTc5OnN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8ge1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMTgwLVx0YXRvbWljX3Qgb3BlbmNudDtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yMzMtXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyMzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpIRlNQTFVTX0koc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTIzNS17XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyMzY6XHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjM3LX1cbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9MzMwPWludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzQtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLVx1MDAzZWRlbnRyeSk7XG5mcy9oZnNwbHVzL2lub2RlLmM6MzM1Olx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzYtXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTM1Nj1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTM1OS1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuZnMvaGZzcGx1cy9pbm9kZS5jOjM2MDpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2lub2RlLmMtMzYxLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ3MD1zdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00NzQtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTtcbmZzL2hmc3BsdXMvaW5vZGUuYzo0NzU6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXA7XG5mcy9oZnNwbHVzL2lub2RlLmMtNDc2LVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz01NTQ9dm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNTU3LVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG5mcy9oZnNwbHVzL2lub2RlLmM6NTU4Olx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy01NTktXHR1MzIgY291bnQ7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTc3MT1pbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTc3My1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG5mcy9oZnNwbHVzL2lub2RlLmM6Nzc0Olx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy03NzUtXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz03OTI9aW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy03OTUtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjc5NjpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2lub2RlLmMtNzk3LVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9NjkwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2hmc3BsdXMvc3VwZXIuYy02OTEte1xuZnMvaGZzcGx1cy9zdXBlci5jOjY5MjpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmk7XG5mcy9oZnNwbHVzL3N1cGVyLmMtNjkzLVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz02OTg9c3RhdGljIHZvaWQgaGZzcGx1c19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTcwMi1cbmZzL2hmc3BsdXMvc3VwZXIuYzo3MDM6I2RlZmluZSBIRlNQTFVTX0lOT0RFX1NJWkVcdHNpemVvZihzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvKVxuZnMvaGZzcGx1cy9zdXBlci5jLTcwNC1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9NzU2PXN0YXRpYyB2b2lkIGhmc3BsdXNfaW5pdF9vbmNlKHZvaWQgKnApXG5mcy9oZnNwbHVzL3N1cGVyLmMtNzU3LXtcbmZzL2hmc3BsdXMvc3VwZXIuYzo3NTg6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppID0gcDtcbmZzL2hmc3BsdXMvc3VwZXIuYy03NTktXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy0yMDEtXHRzdHJ1Y3QgaW5vZGUgKmF0dHJfZmlsZTtcbmZzL2hmc3BsdXMveGF0dHIuYzoyMDI6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXA7XG5mcy9oZnNwbHVzL3hhdHRyLmMtMjAzLVx0c3RydWN0IGhmc19ibm9kZV9kZXNjICpkZXNjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgaGZzcGx1c19pbm9kZV9pbmZvIFN0cnVjdHVyZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSEZTJiM0MzsgaW5vZGUgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gcG9yZSBvdmVyIHRoZSBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AgZGVmaW5pdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHB1bGxpbmcgaXQgZnJvbSBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGlub2RlcyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhpcyBmaWxlc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjcml0aWNhbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIG9yIGRpcmVjdG9yeSB3aXRoaW4gYW4gSEZTJiM0Mzsgdm9sdW1lLiBUaGlzIHdpbGwgaW52b2x2ZSBleGFtaW5pbmcgaXRzIGZpZWxkcywgdGhlaXIgZGF0YSB0eXBlcywgYW5kIGFueSByZWxldmFudCBjb21tZW50cy4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgYXR0cmlidXRlcywgZXh0ZW50cywgYW5kIG90aGVyIGVzc2VudGlhbCBkYXRhIGFyZSBtYW5hZ2VkIGF0IHRoZSBpbm9kZSBsZXZlbC4gSSYjMzk7bGwgYmUgbm90aW5nIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbCBvciBwYXJ0aWN1bGFybHkgd2VsbC1kZXNpZ25lZC4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGRlY29uc3RydWN0IHRoaXMgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzk6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcbiAxODA6XHRcdGF0b21pY190IG9wZW5jbnQ7XG4gMTgxOlx0XG4gMTgyOlx0XHQvKlxuIDE4MzpcdFx0ICogRXh0ZW50IGFsbG9jYXRpb24gaW5mb3JtYXRpb24sIHByb3RlY3RlZCBieSBleHRlbnRzX2xvY2suXG4gMTg0Olx0XHQgKi9cbiAxODU6XHRcdHUzMiBmaXJzdF9ibG9ja3M7XG4gMTg2Olx0XHR1MzIgY2x1bXBfYmxvY2tzO1xuIDE4NzpcdFx0dTMyIGFsbG9jX2Jsb2NrcztcbiAxODg6XHRcdHUzMiBjYWNoZWRfc3RhcnQ7XG4gMTg5Olx0XHR1MzIgY2FjaGVkX2Jsb2NrcztcbiAxOTA6XHRcdGhmc3BsdXNfZXh0ZW50X3JlYyBmaXJzdF9leHRlbnRzO1xuIDE5MTpcdFx0aGZzcGx1c19leHRlbnRfcmVjIGNhY2hlZF9leHRlbnRzO1xuIDE5MjpcdFx0dW5zaWduZWQgaW50IGV4dGVudF9zdGF0ZTtcbiAxOTM6XHRcdHN0cnVjdCBtdXRleCBleHRlbnRzX2xvY2s7XG4gMTk0Olx0XG4gMTk1Olx0XHQvKlxuIDE5NjpcdFx0ICogSW1tdXRhYmxlIGRhdGEuXG4gMTk3Olx0XHQgKi9cbiAxOTg6XHRcdHN0cnVjdCBpbm9kZSAqcnNyY19pbm9kZTtcbiAxOTk6XHRcdF9fYmUzMiBjcmVhdGVfZGF0ZTtcbiAyMDA6XHRcbiAyMDE6XHRcdC8qXG4gMjAyOlx0XHQgKiBQcm90ZWN0ZWQgYnkgc2JpLVx1MDAzZXZoX211dGV4LlxuIDIwMzpcdFx0ICovXG4gMjA0Olx0XHR1MzIgbGlua2lkO1xuIDIwNTpcdFxuIDIwNjpcdFx0LypcbiAyMDc6XHRcdCAqIEFjY2Vzc2VkIHVzaW5nIGF0b21pYyBiaXRvcHMuXG4gMjA4Olx0XHQgKi9cbiAyMDk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMjEwOlx0XG4gMjExOlx0XHQvKlxuIDIxMjpcdFx0ICogUHJvdGVjdGVkIGJ5IGlfbXV0ZXguXG4gMjEzOlx0XHQgKi9cbiAyMTQ6XHRcdHNlY3Rvcl90IGZzX2Jsb2NrcztcbiAyMTU6XHRcdHU4IHVzZXJmbGFncztcdFx0LyogQlNEIHVzZXIgZmlsZSBmbGFncyAqL1xuIDIxNjpcdFx0dTMyIHN1YmZvbGRlcnM7XHRcdC8qIFN1YmZvbGRlciBjb3VudCAoSEZTWCBvbmx5KSAqL1xuIDIxNzpcdFx0bG9mZl90IHBoeXNfc2l6ZTtcbiAyMTg6XHRcbiAyMTk6XHRcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XG4gMjIwOlx0fTtcbiAyMjE6XHRcbiAyMjI6XHQjZGVmaW5lIEhGU1BMVVNfRVhUX0RJUlRZXHQweDAwMDFcbiAyMjM6XHQjZGVmaW5lIEhGU1BMVVNfRVhUX05FV1x0XHQweDAwMDJcbiAyMjQ6XHRcbiAyMjU6XHQjZGVmaW5lIEhGU1BMVVNfSV9SU1JDXHRcdDBcdC8qIHJlcHJlc2VudHMgYSByZXNvdXJjZSBmb3JrICovXG4gMjI2Olx0I2RlZmluZSBIRlNQTFVTX0lfQ0FUX0RJUlRZXHQxXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgY2F0YWxvZyB0cmVlICovXG4gMjI3Olx0I2RlZmluZSBIRlNQTFVTX0lfRVhUX0RJUlRZXHQyXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgZXh0ZW50IHRyZWUgKi9cbiAyMjg6XHQjZGVmaW5lIEhGU1BMVVNfSV9BTExPQ19ESVJUWVx0M1x0LyogaGFzIGNoYW5nZXMgaW4gdGhlIGFsbG9jYXRpb24gZmlsZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gSEZTJiM0MzsgRXh0ZW50IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBoZnNwbHVzX2V4dGVudF9yZWNgLCB3aGljaCBpcyBqdXN0IGFuIGFycmF5IG9mIGVpZ2h0IGBoZnNwbHVzX2V4dGVudF9kZXNjcmlwdG9yYCBzdHJ1Y3RzLiBHb3QgaXQuIEFuZCBgaGZzX2Jub2RlX3dyaXRlYC4uLiByaWdodCwgaXQgdGFrZXMgYSBgdm9pZCAqYCBhbmQgd3JpdGVzIHRvIHRoZSBibm9kZS4gQ2xhc3NpYy4gTm93LCB0aGUgcHJvYmxlbS4gSXQgc2VlbXMgbGlrZSBpZiBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBpcyBiaWdnZXIgdGhhbiB0aGUgc2l6ZSBvZiBgaGZzcGx1c19leHRlbnRfcmVjYCwgd2UmIzM5O3JlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYC4gVGhhdCYjMzk7cyBiYWQuIFRoYXQmIzM5O3MgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgaXQmIzM5O3MgZnJvbSBhIHNsYWItYWxsb2NhdGVkIGBoZnNwbHVzX2lub2RlX2luZm9gIHN0cnVjdHVyZS4gS0FTQU4gc2hvdWxkIGJlIGRldGVjdGluZyB0aGF0LCB3aGljaCBpcyBnb29kLgoKQnV0IHdhaXQuIFdoYXQgaWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqPyBJZiB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIsIHRoZW4gd2UgYXJlIG9ubHkgd3JpdGluZyBmZXdlciBieXRlcyB0byB0aGUgYm5vZGUsIHdoaWNoIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBhbiBpbW1lZGlhdGUgcHJvYmxlbS4gSXQmIzM5O3MganVzdCBhIHNob3J0ZXIgd3JpdGUuIFRoZSBwYXRjaCBtZW50aW9ucyBhIGNoZWNrLCBgaWYgKGZkLSZndDtlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSkgcmV0dXJuIC1FSU87YC4gU28sIGlmIHRoZSBzaXplIGlzIGluY29ycmVjdCwgd2UgZXJyb3Igb3V0IGFuZCByZXR1cm4uIElmIHRoZSBzaXplIGlzIHNtYWxsZXIsIHRoZW4gaXQganVzdCB3cml0ZXMgZmV3ZXIgYnl0ZXMuIFNvLCB0aGF0IGRvZXNuJiMzOTt0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgaXQmIzM5O3MgbGFyZ2VyLCB3ZSBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGljaCBLQVNBTiBjYW4gY2F0Y2guCgpUaGUga2V5IHF1ZXN0aW9uIG5vdzogSXMgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlPyBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2AgaXMgcGFydCBvZiB0aGUgYGhmc3BsdXNfaW5vZGVfaW5mb2Agc3RydWN0dXJlLCBzbyB3ZSBzaG91bGQgcmVhbGx5IGtub3cgaWYgdGhhdCYjMzk7cyBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIExldCBtZSBkaWcgaW50byBgaGZzcGx1c19hbGxvY19pbm9kZWAgYW5kIHNlZSBpZiB3ZSBjYW4gZ2V0IHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9oZnNwbHVzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA2OTE6XHR7XG4gNjkyOlx0XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppO1xuIDY5MzpcdFxuIDY5NDpcdFx0aSA9IGFsbG9jX2lub2RlX3NiKHNiLCBoZnNwbHVzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4gNjk1Olx0XHRyZXR1cm4gaSA/IFx1MDAyNmktXHUwMDNldmZzX2lub2RlIDogTlVMTDtcbiA2OTY6XHR9XG4gNjk3Olx0XG4gNjk4Olx0c3RhdGljIHZvaWQgaGZzcGx1c19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gNjk5Olx0e1xuIDcwMDpcdFx0a21lbV9jYWNoZV9mcmVlKGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBIRlNQTFVTX0koaW5vZGUpKTtcbiA3MDE6XHR9XG4gNzAyOlx0XG4gNzAzOlx0I2RlZmluZSBIRlNQTFVTX0lOT0RFX1NJWkVcdHNpemVvZihzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvKVxuIDcwNDpcdFxuIDcwNTpcdHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gNzA2Olx0e1xuIDcwNzpcdFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGhmc3BsdXNfZmlsbF9zdXBlcik7XG4gNzA4Olx0fVxuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKklub2RlIEFsbG9jYXRpb24gaW4gSEZTJiM0MzsqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpbm9kZXMgYXJlIGhhbmRsZWQgaW4gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjb2RlJiMzOTtzIHVzaW5nIGBhbGxvY19pbm9kZV9zYmAgZm9yIGlub2RlIGFsbG9jYXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhhdCBtZW1vcnkgYWN0dWFsbHkgY29taW5nIGZyb20/IFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgaW5vZGVzIGZyb20gYGhmc3BsdXNfaW5vZGVfY2FjaGVwYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYSBzbGFiIGNhY2hlLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBob3cgaXMgdGhpcyBjYWNoZSBjb25maWd1cmVkPyBTcGVjaWZpY2FsbHksIGlzIHRoZSBgU0xBQl9BQ0NPVU5UYCBmbGFnIG9yIGEgc2ltaWxhciBhY2NvdW50aW5nIG1lY2hhbmlzbSBlbmFibGVkIHdoZW4gYGhmc3BsdXNfaW5vZGVfY2FjaGVwYCBpcyAqY3JlYXRlZCo/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgdHJhY2tpbmcgdGhlIG1lbW9yeSB1c2FnZSBvZiB0aGVzZSBpbm9kZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlJiMzOTtyZSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGF0IHNsYWIgY2FjaGUgaW4gbWVtb3J5IHN0YXRpc3RpY3MgYW5kIHBvdGVudGlhbGx5LCB3aXRoaW4gcmVzb3VyY2UgbGltaXRhdGlvbnMuIEkgd2FudCB0byBhdm9pZCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIGlub2RlIGRhdGEuCgpBbHJpZ2h0LCB0aW1lIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byBgaGZzcGx1c19pbml0X29uY2VgIGFuZCBzZWUgaG93IHRoYXQgY2FjaGUgaXMgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBzaG91bGQgYmUuIFRoaXMgd2lsbCBzaG93IHVzIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2FjaGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTY6XHRzdGF0aWMgdm9pZCBoZnNwbHVzX2luaXRfb25jZSh2b2lkICpwKVxuIDc1NzpcdHtcbiA3NTg6XHRcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmkgPSBwO1xuIDc1OTpcdFxuIDc2MDpcdFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmktXHUwMDNldmZzX2lub2RlKTtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIGludCBfX2luaXQgaW5pdF9oZnNwbHVzX2ZzKHZvaWQpXG4gNzY0Olx0e1xuIDc2NTpcdFx0aW50IGVycjtcbiA3NjY6XHRcbiA3Njc6XHRcdGhmc3BsdXNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7aGZzcGx1c19pY2FjaGVcJiMzNDssXG4gNzY4Olx0XHRcdEhGU1BMVVNfSU5PREVfU0laRSwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfQUNDT1VOVCxcbiA3Njk6XHRcdFx0aGZzcGx1c19pbml0X29uY2UpO1xuIDc3MDpcdFx0aWYgKCFoZnNwbHVzX2lub2RlX2NhY2hlcClcbiA3NzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzcyOlx0XHRlcnIgPSBoZnNwbHVzX2NyZWF0ZV9hdHRyX3RyZWVfY2FjaGUoKTtcbiA3NzM6XHRcdGlmIChlcnIpXG4gNzc0Olx0XHRcdGdvdG8gZGVzdHJveV9pbm9kZV9jYWNoZTtcbiA3NzU6XHRcdGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2aGZzcGx1c19mc190eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjIKCQkJCQkJCW91dHB1dDogMjUzCgkJCQkJCQl0aG91Z2h0czogNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0ZW50IFJlYWQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyYW5rbHksIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2AgYXJyYXkgaXNuJiMzOTt0IGluaXRpYWxpemVkIHRvIHplcm8gYnkgZGVmYXVsdCwgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBmdXR1cmUgcmVmZXJlbmNlLiBUaGUgc3lzdGVtIHJlYWRzIGZyb20gaXQgb3IgcG9wdWxhdGVzIGl0IGZyb20gZGlzayBhbmQgdGhhdCYjMzk7cyBva2F5LiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYGhmc3BsdXNfZXh0ZW50X3JlY2Agc3RydWN0LiBXaGVuIHRoaXMgaGFwcGVucywgYGhmc19ibm9kZV93cml0ZWAgYXR0ZW1wdHMgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLCByZXN1bHRpbmcgaW4gYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gS0FTQU4gd2lsbCBkZXRlY3QgdGhpcywgcGxhaW4gYW5kIHNpbXBsZS4KCk5vdywgSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSAqbWlnaHQqIGJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGZsb2F0aW5nIGFyb3VuZCwgYW5kIEkgYWx3YXlzIGxpa2UgdG8gY292ZXIgbXkgYmFzZXMuIEJ1dCwgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IGV2ZW4gaWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqIHRoYW4gdGhlIHN0cnVjdCBzaXplLCBgaGZzX2Jub2RlX3dyaXRlYCBqdXN0IHdyaXRlcyBmZXdlciBieXRlcy4gU28sIGl0IG1heSBiZSBhIGRhdGEgY29ycnVwdGlvbiB0aGluZywgYnV0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3Mgbm90IGEgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwb2ludCBvZiB2aWV3LiBUaGUgcmVhbCBjdWxwcml0IGlzIHRoZSBPT0IgcmVhZCB3aGVuIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIGJpZ2dlci4KClRoaXMgcGF0Y2gsIHRoYW5rZnVsbHksIGFkZHMgYSBjaGVjayBpbiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIHRvIGVuc3VyZSB0aGF0IGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIGV4YWN0bHkgdGhlIHNpemUgb2YgYGhmc3BsdXNfZXh0ZW50X3JlY2AgYmVmb3JlIGNhbGxpbmcgYGhmc19ibm9kZV93cml0ZWAuIFRoaXMgc3RvcHMgdGhlIE9PQiByZWFkLiBgaGZzX2Jub2RlX3dyaXRlYCByZWFkcyBmcm9tIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBhbmQgd3JpdGVzIHRob3NlIGJ5dGVzIHRvIHRoZSBibm9kZSwgd2hpY2ggaXMganVzdCBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSBtZXRhZGF0YS4gSW1wb3J0YW50bHksIHRoaXMgZGF0YSBpcyAqbm90KiBiZWluZyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIGFsbCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLiBUaGUgdnVsbmVyYWJpbGl0eSBpcyB0aGUgT09CIHJlYWQgaXRzZWxmLgoKVGhlcmVmb3JlLCBzaW5jZSBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgYnVpbHQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGl0JiMzOTtzIG5vdCBldmVuIGEgY2FzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSB0byB1c2VyIHNwYWNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gS0FTQU4gaGFuZGxlcyB0aGlzIGp1c3QgZmluZS4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgT09CIHJlYWQsIGFuZCBLQVNBTiB3aWxsIGVuc3VyZSBpdCBzdGF5cyBmaXhlZC4gR29vZCBlbm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCB0byBlbnN1cmUgdGhhdCBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGV4YWN0bHkgZXF1YWwgdG8gYHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpYCBiZWZvcmUgY2FsbGluZyBgaGZzX2Jub2RlX3dyaXRlYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSwgYGhmc19ibm9kZV93cml0ZWAgd2lsbCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKHdoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBzbGFiLWFsbG9jYXRlZCBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2ApLiBUaGlzIGNvbnN0aXR1dGVzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cblxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCB0byBlbnN1cmUgdGhhdCBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGV4YWN0bHkgZXF1YWwgdG8gYHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpYCBiZWZvcmUgY2FsbGluZyBgaGZzX2Jub2RlX3dyaXRlYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSwgYGhmc19ibm9kZV93cml0ZWAgd2lsbCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKHdoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBzbGFiLWFsbG9jYXRlZCBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2ApLiBUaGlzIGNvbnN0aXR1dGVzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cblxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDA6MjguODE0MDMxNTU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMzcyMjI1OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfZmlsZV9leHRlbmRcIixcbiAgICBcImhmc3BsdXNfZmlsZV90cnVuY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19nZXRfYmxvY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCB0byBlbnN1cmUgdGhhdCBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBleGFjdGx5IGVxdWFsIHRvIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgYmVmb3JlIGNhbGxpbmcgYGhmc19ibm9kZV93cml0ZWAuIFdpdGhvdXQgdGhpcyBjaGVjaywgaWYgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGBoaXAtXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSwgYGhmc19ibm9kZV93cml0ZWAgd2lsbCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKHdoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBzbGFiLWFsbG9jYXRlZCBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2ApLiBUaGlzIGNvbnN0aXR1dGVzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cXG5cXG5TdGFuZGFyZCBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIG9uIHNsYWIgYW5kIGhlYXAgYWxsb2NhdGlvbnMuIFNpbmNlIHRoZSBidWcgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHJhdGhlciB0aGFuIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgS0FTQU4gd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjI4LjgxNDA0MTAwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjI1MTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViNTY5MTk3NmU1YTBkYjczYmZkZWZjNTFhNTE0NTg4MDY5ZDg0NGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTA6NDA6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmNcXG4rKysgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbkBAIC0xMTAsNiArMTEwLDggQEAgc3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpZiAocmVzKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHRpZiAoZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLVxcdTAwM2Vibm9kZSwgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG4gXFx0XFx0XFx0XFx0ZmQtXFx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cXHUwMDNlZW50cnlsZW5ndGgpO1xcbiBcXHRcXHRoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2PSB+SEZTUExVU19FWFRfRElSVFk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjMwLjA4MDk2MzQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzE1OTczODg1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19maWxlX2V4dGVuZFwiLFxuICAgIFwiaGZzcGx1c19maWxlX3RydW5jYXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViNTY5MTk3NmU1YTBkYjczYmZkZWZjNTFhNTE0NTg4MDY5ZDg0NGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMDo0MDoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xMTAsNiArMTEwLDggQEAgc3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuIFx0XHRcdFx0ZmQtXHUwMDNlZW50cnlvZmZzZXQsIGZkLVx1MDAzZWVudHJ5bGVuZ3RoKTtcbiBcdFx0aGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjY9IH5IRlNQTFVTX0VYVF9ESVJUWTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjMwLjA4MDk2NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQxNjA1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IEhGUysgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGEgY2hhbmdlIHRvIGBmcy9oZnNwbHVzL2V4dGVudHMuY2AuIExvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBjaGVjayBpbiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgLiBTcGVjaWZpY2FsbHksIGl0J3MgYSBzaXplIGNoZWNrOiBgaWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgLiBSaWdodCwgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBleHRlbnQgcmVjb3JkLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBnb29kIHByb2FjdGl2ZSBtZWFzdXJlLlxuXG5HaXZlbiB0aGlzIGlzIEhGUyssIGEgZmlsZXN5c3RlbSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3MgcmVhY2hhYmxlIGFuZCwgY3JpdGljYWxseSwgZnV6emFibGUuIENyYWZ0aW5nIGEgbWFsaWNpb3VzIGltYWdlIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggaXMgYSB2ZXJ5IHJlYWxpc3RpYyBhdHRhY2sgdmVjdG9yLiBTbywgbGV0J3MgdHJlYXQgdGhpcyBzZXJpb3VzbHkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiwgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEFyZSB0aGVyZSBwb3RlbnRpYWwgY2FsbGVycyB0aGF0IGNvdWxkIGJlIHZ1bG5lcmFibGU/IEFueSBwbGFjZXMgd2hlcmUgdGhpcyBjaGVjayBtaWdodCBiZSBieXBhc3NlZCBvciBtaXN1bmRlcnN0b29kPyAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJ4oCZbGwgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IHRoZSBLY29uZmlnIG9wdGlvbiBmb3IgSEZTKyB0byBlbnN1cmUgaXQncyBjb21waWxlZCBpbnRvIHRoZSB0YXJnZXQga2VybmVsLiBUaGF0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBleHBsb2l0IGl0IGlmIGEgdnVsbmVyYWJpbGl0eSBleGlzdHMuIFRoaXMgbWlnaHQgYmUgYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjM0LjkyMjU3MjMxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODE1NDk0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmM9NzY9c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04Ni1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo4NzpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODgtXFx0XFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTMzPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTQyLVxcdFxcdFxcdHJldHVybiByZXM7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTg5LVxcdGlmIChoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2IEhGU1BMVVNfRVhUX0RJUlRZKSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTkwOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBmZCk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTkxLVxcdFxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjM1LjUwNDEyOTM4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDgxNTUwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIEV4dGVudCBXcml0ZSBNZWNoYW5pc21zKipcblxuT2theSwgc28gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgYSBwcmV0dHkgdGlnaHRseSBjb3VwbGVkLCBpbnRlcm5hbCBwaWVjZSBvZiB0aGUgSEZTKyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCdzIG5vdCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIGl0cyBtb2R1bGUuIExldCdzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBpdCBkb2VzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hhdCBpcyBjYWxsaW5nIGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkYCBvciBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgLiBUaGF0IHdvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IHdoZXJlIHRoZXNlIGV4dGVudCBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkLCBhbmQgc2hlZCBsaWdodCBvbiBob3cgdGhleSBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciB3cml0ZSBwcm9jZXNzLiBLbm93aW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaWRlYSBvZiBpdHMgcm9sZSBpbiB0aGUgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MDo0MS4yMTIyODYzMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzAxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2V4dGVudHMuYz04Nz1zdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMzItXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTMzOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTEzNC17XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xNDk9aW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTUzLVxcdG11dGV4X2xvY2soXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTU0OlxcdHJlcyA9IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1NS1cXHRtdXRleF91bmxvY2soXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz00NDA9aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTI5LVxcdGhmc19kYmcoXFxcImluc2VydCBuZXcgZXh0ZW50XFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo1MzA6XFx0cmVzID0gaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChpbm9kZSk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTMxLVxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjQxLjI1OTMyNDUyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTUzODE5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgSEZTKyBFeHRlbnQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBleHRlbnQgbWFuYWdlbWVudC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IHZpc2libGUgYW5kIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIG1vZHVsZSB3aGVyZSBpdCdzIGRlZmluZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIEhGUysgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGUgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0IGlzIGxpa2VseSBjYWxsZWQgaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBkcml2ZXIuIExldCdzIGRpZyBkZWVwZXIgYW5kIGdldCBhIGNsb3NlciBsb29rIGF0IHRoZSBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgIGZ1bmN0aW9uLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgZXh0ZW50cycgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MDo0NC44MTQ3MDk0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY4OTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2V4dGVudHMuYz0xNjA9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODAtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTgxOnN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODItXFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MjEwPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLVxcdGlmICghcmVzKSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjIyOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KFxcdTAwMjZmZCwgaW5vZGUsIGJsb2NrKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMjMtXFx0XFx0aGZzX2ZpbmRfZXhpdChcXHUwMDI2ZmQpO1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ2PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy02MDItXFx0XFx0fVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjYwMzpcXHRcXHRyZXMgPSBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChcXHUwMDI2ZmQsIGlub2RlLCBhbGxvY19jbnQpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwNC1cXHRcXHRpZiAocmVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MDo0NC44NTk0MDQ1ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA1OTk2MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiBIRlMrIGZpbGUgb3BlcmF0aW9uczpcblxuKipJZGVudGlmeWluZyBLZXkgSEZTKyBGdW5jdGlvbnMgZm9yIEZ1cnRoZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBIRlMrIGZpbGVzeXN0ZW0uIEknbSB0aGlua2luZyB0aGF0IGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzIGEgcGFydGljdWxhcmx5IGdvb2QgZm9jdXMgc3ltYm9sIHJpZ2h0IG5vdy4gVGhhdCBsaWtlbHkgZGVhbHMgd2l0aCB3cml0aW5nIGZpbGUgZGF0YSBhbmQgbWFuYWdpbmcgZXh0ZW50cyDigJMgdGhhdCdzIG9mdGVuIGEgY3J1Y2lhbCBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIGJlaGF2aW9yLiBJJ20gYWxzbyBhZGRpbmcgYGhmc3BsdXNfZmlsZV9leHRlbmRgIGFuZCBgaGZzcGx1c19maWxlX3RydW5jYXRlYCB0byB0aGUgc2hvcnQgbGlzdCBhcyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgYXMgdGhleSBhbHNvIGRlYWwgd2l0aCBmaWxlIG1vZGlmaWNhdGlvbnMuIEp1c3QgdG8gcm91bmQgdGhpbmdzIG91dCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgcmVhZCBzaWRlIG9mIHRoZSBzYW1lIGNvaW46IGxldCdzIHRha2UgYSBsb29rIGF0IGBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudGAgYXMgd2VsbCB0byBidWlsZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgZXh0ZW50cyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjQ4LjM2NTQwMzEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NTMyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzcGx1c19leHRfcmVhZF9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmM9MTQ5PWludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1OS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxNjA6c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTYxLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudCxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE4MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xOTQtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTk1OlxcdHJlcyA9IF9faGZzcGx1c19leHRfcmVhZF9leHRlbnQoZmQsIGhpcC1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIGlub2RlLVxcdTAwM2VpX2lubyxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xOTYtXFx0XFx0XFx0XFx0XFx0YmxvY2ssIEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkgP1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjA5LVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIxMDpzdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMTEte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MjI5PWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNjYtXFx0LypcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyNjc6XFx0ICogaGZzcGx1c19leHRfcmVhZF9leHRlbnQgd2lsbCB3cml0ZSBvdXQgYSBjYWNoZWQgZXh0ZW50IGludG9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNjgtXFx0ICogdGhlIGV4dGVudHMgYnRyZWUuICBJbiB0aGF0IGNhc2Ugd2UgbWF5IGhhdmUgdG8gbWFyayB0aGUgaW5vZGVcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3MS1cXHR3YXNfZGlydHkgPSAoaGlwLVxcdTAwM2VleHRlbnRfc3RhdGUgXFx1MDAyNiBIRlNQTFVTX0VYVF9ESVJUWSk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjcyOlxcdHJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3My1cXHRpZiAocmVzKSB7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zOTU9aW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDIwLVxcdGRvIHtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0MjE6XFx0XFx0cmVzID0gX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChcXHUwMDI2ZmQsIGV4dF9lbnRyeSwgY25pZCxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00MjItXFx0XFx0XFx0XFx0XFx0XFx0dG90YWxfYmxvY2tzLCB0eXBlKTtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTQ0MD1pbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NjAtXFx0ZWxzZSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDYxOlxcdFxcdHJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBoaXAtXFx1MDAzZWFsbG9jX2Jsb2Nrcyk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDYyLVxcdFxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjQ4LjQxMzI1OTY1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODk5OTQ0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipIRlMrIENvZGUgSW5zcGVjdGlvbjogRm9jdXNpbmcgb24gQ29yZSBGaWxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGlzIEhGUysgY29kZSBhbmQgSSd2ZSBnb3QgYSBzcGVjaWZpYyB0YXJnZXQgaW4gbWluZDogdW5kZXJzdGFuZGluZyBob3cgZmlsZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IGEgbG93IGxldmVsLiBJIHNlZSBgaGZzcGx1c19nZXRfYmxvY2tgIGFzIGEgcmVhbGx5IGNydWNpYWwgcG9pbnQgdG8gc3RhcnQuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgeW91J3JlIHJlcXVlc3RpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgZm9jYWwgcG9pbnQuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHRocmVhZCB0byByZWxhdGVkIGZ1bmN0aW9uYWxpdGllcyB0byB1bmRlcnN0YW5kIGl0IHByb3Blcmx5LlxuXG5Gb2xsb3dpbmcgdGhpcyBpbml0aWFsIGFuYWx5c2lzIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGZpbGUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5LCBJIHNlZSBzb21lIGtleSBmdW5jdGlvbnMgdGhhdCB3aWxsIG1ha2UgdGhpcyBmb2N1cyByZWxldmFudC4gTmFtZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgaG93IHdlIGhhbmRsZSBleHRlbmRpbmcgYSBmaWxlIChgaGZzcGx1c19maWxlX2V4dGVuZGApLCB0cnVuY2F0aW5nIGEgZmlsZSAoYGhmc3BsdXNfZmlsZV90cnVuY2F0ZWApLCBhbmQgd3JpdGluZyBleHRlbnRzIChgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCkuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbG9naWNhbGx5IGludGVycmVsYXRlZCBvcGVyYXRpb25zIHRvIHB1cnN1ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvcmUgcm91dGluZXMuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBkb3VibGUtY2hlY2sgdGhhdCB0aGUgSEZTUExVUyBmZWF0dXJlIGlzIGFjdHVhbGx5IGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gR290dGEgbWFrZSBzdXJlIEknbSB3b3JraW5nIHdpdGggdGhlIHJlbGV2YW50IGJpdHMsIGFuZCB0aGF0IHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiB0aGUgYnVpbGQgSSdtIHVzaW5nLiBPdGhlcndpc2UsIEknbSBnb2luZyB0byBiZSBjaGFzaW5nIGdob3N0cy4gVGhlbiwgaXQncyB0aW1lIHRvIGdldCBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjUzLjMxMzIwNjI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY5Mzg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDA6NTMuMzU2OTAzMjM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODc3MjE5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBPcHRpb24gYEhGU1BMVVNfRlNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSEZTUExVU19GU2Agb3B0aW9uIGluIHRoZSBLY29uZmlnLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBhIHN0YW5kYWxvbmUgcGllY2Ugb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvdGhlciBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgSEZTUExVU19GU2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBEaWdnaW5nIGludG8gZGVwZW5kZW5jaWVzIGlzIGFsd2F5cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJdCdzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDA6NTYuMjQ0NjI4MDUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU1BMVVNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5MU19VVEY4XFxuICAgODpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcXG4gIDExOlxcdFxcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUysgYW5kIHdhcyBpbnRyb2R1Y2VkIHdpdGhcXG4gIDE0OlxcdFxcdCAgTWFjT1MgOC4gSXQgaW5jbHVkZXMgYWxsIE1hYyBzcGVjaWZpYyBmaWxlc3lzdGVtIGRhdGEgc3VjaCBhc1xcbiAgMTU6XFx0XFx0ICBkYXRhIGZvcmtzIGFuZCBjcmVhdG9yIGNvZGVzLCBidXQgaXQgYWxzbyBoYXMgc2V2ZXJhbCBVTklYXFxuICAxNjpcXHRcXHQgIHN0eWxlIGZlYXR1cmVzIHN1Y2ggYXMgZmlsZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIEhGUysgZmlsZXN5c3RlbVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBIRlNQTFVTX0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjU2LjI0NDcwNzAwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM4MTUxOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgRmlsZXN5c3RlbSBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBUaGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24gaGluZ2VzIG9uIHRoZSBIRlMrIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBgQkxPQ0tgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgdHlwaWNhbGx5IGVuYWJsZWQsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblRoZSBrZXkgaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgaW5kaWNhdGluZyB0aGlzIGlzIGEgdmFsdWFibGUgYXZlbnVlIHRvIHB1cnN1ZS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAsIGBoZnNwbHVzX2ZpbGVfZXh0ZW5kYCwgYGhmc3BsdXNfZmlsZV90cnVuY2F0ZWAsIGFuZCBgaGZzcGx1c19nZXRfYmxvY2tgLiBUaGVzZSBhcmUgY2xlYXJseSBmbGFnZ2VkIGFzIGFyZWFzIG9mIGludGVyZXN0LlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCwgd2hpY2ggc3VnZ2VzdHMgYSBwcmlvciB2dWxuZXJhYmlsaXR5IHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBmaWxlc3lzdGVtIGZ1bmN0aW9uIG1ha2VzIGl0IHJlYWNoYWJsZSB2aWEgZnV6emVyIGlucHV0LiBUaGUgYEhGU1BMVVNfRlNgIGNvbmZpZ3VyYXRpb24gY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgSEZTKyBpcyB0aGUgcHJpbWFyeSBmb2N1cy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGFuZCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDEsIk91dHB1dFRva2VucyI6MTI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6MDEuNTgyODYxNjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0ODYwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfZmlsZV9leHRlbmRcIixcbiAgICBcImhmc3BsdXNfZmlsZV90cnVuY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19nZXRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfZmlsZV9leHRlbmRcIixcbiAgICBcImhmc3BsdXNfZmlsZV90cnVuY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19nZXRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTowMS42NzgzNTc0NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTA3ODkxMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6MDEuNjc4ODgxMjU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4NTA3MzYzMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjU2OTE5NzZlNWEwZGI3M2JmZGVmYzUxYTUxNDU4ODA2OWQ4NDRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTA6NDA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG5pbmRleCA4MTNlNjhiOGVjZDY1Li5lYjdjMTE1MjRkMTg4IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmNcbisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG5AQCAtMTEwLDYgKzExMCw4IEBAIHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKVxuK1x0XHRcdHJldHVybiAtRUlPO1xuIFx0XHRoZnNfYm5vZGVfd3JpdGUoZmQtXHUwMDNlYm5vZGUsIGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbiBcdFx0XHRcdGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gXHRcdGhpcC1cdTAwM2VleHRlbnRfc3RhdGUgXHUwMDI2PSB+SEZTUExVU19FWFRfRElSVFk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTowMS42Nzg4ODIwNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0MTUxODc3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvaGZzcGx1cy9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgZnVuY3Rpb24sIGFkZGluZyBhIGNoZWNrLiBMZXQncyBkaWcgaW4uXG5cblRoZSBjb2RlIG5vdyBpbmNsdWRlcyBhIGNoZWNrOiBgaWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBoZnNfYm5vZGVfd3JpdGVgLiAgTGV0J3MgdGhpbmsgdGhyb3VnaCB0aGlzIGNhcmVmdWxseS4gYGhmc19ibm9kZV93cml0ZWAgd3JpdGVzIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgYnl0ZXMgZnJvbSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCB0byBgZmQtXHUwMDNlYm5vZGVgIGF0IGBmZC1cdTAwM2VlbnRyeW9mZnNldGAuIE5vdywgKmlmKiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIHdhcyAqbGFyZ2VyKiB0aGFuIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgKmJlZm9yZSogdGhpcyBwYXRjaCwgaXQgd291bGQgcmVhZCBvdXQtb2YtYm91bmRzIGZyb20gYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AuICBSaWdodCwgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXMgYW4gYXJyYXkgb2YgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHdpdGhpbiBhbiBgaGZzcGx1c19leHRlbnRfcmVjYC4gTGV0IG1lIGNvbmZpcm0uLi4gYGhpcGAgaXMgYEhGU1BMVVNfSShpbm9kZSlgLCBhbmQgYGNhY2hlZF9leHRlbnRzYCAqaXMqIGFuIGBoZnNwbHVzX2V4dGVudF9yZWNgLiBUaGF0IG1lYW5zIGl0J3MgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuXG5cblNvLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgICppcyogbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpYCwgd2UnZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgT09CIHJlYWQsIGFuZCBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQuICBOb3csIHRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzLCByaWdodD8gSXQgdGhyb3dzIGFuIGVycm9yIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgdGhlIHdyb25nIHNpemUuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIGEgYnVnLlxuXG5XaGF0IGFib3V0IHNtYWxsZXIgc2l6ZXM/ICBJZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIHNtYWxsZXIgdGhhbiBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgLCBpdCB3b3VsZCB3cml0ZSBmZXdlciBieXRlcywgbGVhdmluZyB1bndyaXR0ZW4gYnl0ZXMuIERvZXMgKnRoYXQqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IFRoZSBjcnVjaWFsIHRoaW5nIGlzIHdoZXRoZXIgdGhlIHNvdXJjZSwgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AsIGlzIGl0c2VsZiBwcm9wZXJseSBpbml0aWFsaXplZC4gSWYgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQsIEtNU0FOICptaWdodCogZmxhZyBpdC4gSG93ZXZlciwgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgaXQgcmVhZGluZyBvdXQtb2YtYm91bmRzLlxuXG5IYW5nIG9uLiAqVGhpcyBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCEqIEl0J3MgKmZpeGluZyogYSBidWcgdGhhdCBLQVNBTiAqd291bGQqIGNhdGNoLiBUaGUgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXMgaGVhcC1hbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEtBU0FOICp3aWxsKiBkZXRlY3QgYW4gT09CIHJlYWQuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCwgd2hpY2gsIGluIHR1cm4sIGFsc28gYXZvaWRzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHBvdGVudGlhbCB3cml0ZS4gVGhpcyBpcyBnb29kLiBJdCBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpcyBhY3R1YWxseSBkb2luZyB3aGF0IEkgdGhpbmsgaXQgZG9lcy4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQxOjIwLjA5NDA3MjY2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NzQ4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmM9NzY9c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04Ni1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo4NzpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODgtXFx0XFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTMzPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTQyLVxcdFxcdFxcdHJldHVybiByZXM7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTg5LVxcdGlmIChoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2IEhGU1BMVVNfRVhUX0RJUlRZKSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTkwOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBmZCk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTkxLVxcdFxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQxOjIwLjEzNzg1MzI0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY0MTEzNTg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3MgcHVsbCB1cCB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiBvZiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIHRob3JvdWdobHk7IGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHdoZW4gZGVhbGluZyB3aXRoIEhGUysgZXh0ZW50IHdyaXRpbmcuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIEhGUysgZmlsZXN5c3RlbSBoYW5kbGVzIGFsbG9jYXRpbmcgYW5kIHdyaXRpbmcgZGF0YSBibG9ja3MsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBmcmFnbWVudGVkIGZpbGVzIG9yIHRob3NlIHNwYW5uaW5nIG11bHRpcGxlIGFsbG9jYXRpb24gYmxvY2tzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgQi10cmVlIHN0cnVjdHVyZXMgdXNlZCBmb3IgZXh0ZW50IG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3b3JrczogaXMgaXQgY29udGlndW91cywgb3IgZG9lcyBpdCB0cnkgdG8gY29hbGVzY2UgZXhpc3RpbmcgZXh0ZW50cz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzPyBJcyB0aGVyZSBlcnJvciBoYW5kbGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIHBhcnRpYWwgd3JpdGVzPyBXaGF0IGFib3V0IG1ldGFkYXRhIHVwZGF0ZXM/IEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb24gaG93IGV4dGVudCB3cml0ZXMgYXJlIG1hbmFnZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd2lsbCBiZSBpbnRlcmVzdGluZywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBtaW5pbWl6ZXMgZGlzayBzZWVrcyBhbmQgb3B0aW1pemUgb3ZlcmFsbCBJL08gb3BlcmF0aW9ucy4gRmluYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBqb3VybmFsaW5nIG9yIHRyYW5zYWN0aW9uIGxvZyBzeXN0ZW0sIGlmIG9uZSBpcyBwcmVzZW50LCB0byBndWFyYW50ZWUgZGF0YSBpbnRlZ3JpdHkgaW4gdGhlIGV2ZW50IG9mIGEgc3lzdGVtIGNyYXNoIG9yIHBvd2VyIGxvc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTozNS43Nzg5OTIyNDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODc6XFx0c3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgODg6XFx0XFx0XFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4gIDkxOlxcdFxcdGludCByZXM7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2aGlwLVxcdTAwM2VleHRlbnRzX2xvY2spKTtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0aGZzcGx1c19leHRfYnVpbGRfa2V5KGZkLVxcdTAwM2VzZWFyY2hfa2V5LCBpbm9kZS1cXHUwMDNlaV9pbm8sIGhpcC1cXHUwMDNlY2FjaGVkX3N0YXJ0LFxcbiAgOTY6XFx0XFx0XFx0XFx0ICAgICAgSEZTUExVU19JU19SU1JDKGlub2RlKSA/XFxuICA5NzpcXHRcXHRcXHRcXHRcXHRIRlNQTFVTX1RZUEVfUlNSQyA6IEhGU1BMVVNfVFlQRV9EQVRBKTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XFxuIDEwMDpcXHRcXHRpZiAoaGlwLVxcdTAwM2VleHRlbnRfc3RhdGUgXFx1MDAyNiBIRlNQTFVTX0VYVF9ORVcpIHtcXG4gMTAxOlxcdFxcdFxcdGlmIChyZXMgIT0gLUVOT0VOVClcXG4gMTAyOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDEwMzpcXHRcXHRcXHQvKiBGYWlsIGVhcmx5IGFuZCBhdm9pZCBFTk9TUEMgZHVyaW5nIHRoZSBidHJlZSBvcGVyYXRpb24gKi9cXG4gMTA0OlxcdFxcdFxcdHJlcyA9IGhmc19ibWFwX3Jlc2VydmUoZmQtXFx1MDAzZXRyZWUsIGZkLVxcdTAwM2V0cmVlLVxcdTAwM2VkZXB0aCArIDEpO1xcbiAxMDU6XFx0XFx0XFx0aWYgKHJlcylcXG4gMTA2OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDEwNzpcXHRcXHRcXHRoZnNfYnJlY19pbnNlcnQoZmQsIGhpcC1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuIDEwODpcXHRcXHRcXHRcXHRcXHRzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSk7XFxuIDEwOTpcXHRcXHRcXHRoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2PSB+KEhGU1BMVVNfRVhUX0RJUlRZIHwgSEZTUExVU19FWFRfTkVXKTtcXG4gMTEwOlxcdFxcdH0gZWxzZSB7XFxuIDExMTpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMTI6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTEzOlxcdFxcdFxcdGlmIChmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpXFxuIDExNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMTE1OlxcdFxcdFxcdGhmc19ibm9kZV93cml0ZShmZC1cXHUwMDNlYm5vZGUsIGhpcC1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuIDExNjpcXHRcXHRcXHRcXHRcXHRmZC1cXHUwMDNlZW50cnlvZmZzZXQsIGZkLVxcdTAwM2VlbnRyeWxlbmd0aCk7XFxuIDExNzpcXHRcXHRcXHRoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2PSB+SEZTUExVU19FWFRfRElSVFk7XFxuIDExODpcXHRcXHR9XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdC8qXFxuIDEyMTpcXHRcXHQgKiBXZSBjYW4ndCBqdXN0IHVzZSBoZnNwbHVzX21hcmtfaW5vZGVfZGlydHkgaGVyZSwgYmVjYXVzZSB3ZVxcbiAxMjI6XFx0XFx0ICogYWxzbyBnZXQgY2FsbGVkIGZyb20gaGZzcGx1c193cml0ZV9pbm9kZSwgd2hpY2ggc2hvdWxkIG5vdFxcbiAxMjM6XFx0XFx0ICogcmVkaXJ0eSB0aGUgaW5vZGUuICBJbnN0ZWFkIHRoZSBjYWxsZXJzIGhhdmUgdG8gYmUgY2FyZWZ1bFxcbiAxMjQ6XFx0XFx0ICogdG8gZXhwbGljaWx5IG1hcmsgdGhlIGlub2RlIGRpcnR5LCB0b28uXFxuIDEyNTpcXHRcXHQgKi9cXG4gMTI2OlxcdFxcdHNldF9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6MzUuNzc5MDcyNjgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDgwNDQyODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IHBhcnQgaXMgdGhpcyBuZXcgY2hlY2s6IGBpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpYC4gIEl0IHNlZW1zIGxpa2UgdGhlIGRldmVsb3BlciBhbnRpY2lwYXRlZCBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGBoZnNfYm5vZGVfd3JpdGVgLiBUaGV5J3JlIG5vdyBtYWtpbmcgc3VyZSBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIHRoZSByaWdodCBzaXplIGJlZm9yZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uICBUaGUgZ29hbCBpcyBwcmV0dHkgY2xlYXIg4oCTIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXMgYSBgaGZzcGx1c19leHRlbnRfcmVjYCwgYW5kIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuIElmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gd2hhdCBhIGBoZnNwbHVzX2V4dGVudF9yZWNgIGNhbiBob2xkLCB0aGF0IG1lYW5zIGBoZnNfYm5vZGVfd3JpdGVgIHdvdWxkIGF0dGVtcHQgdG8gcmVhZCAqcGFzdCogdGhlIGJvdW5kcyBvZiBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCB3aGVuIGNvcHlpbmcgZGF0YSB0byB0aGUgYm5vZGUuIFRoYXQncyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgS0FTQU4gaXMgcmlnaHRseSBmbGFnZ2luZyBpdC4gTm93LCBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzIGNvcnJlY3QsIHNvIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdWxseSBjb21wcmVoZW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgYXJyYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTo0OS4yNTk1MTg1MTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjg1OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9idHJlZS5jPTQ5OT1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2RlcylcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy01MDEtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IHRyZWUtXFx1MDAzZWlub2RlO1xcbmZzL2hmc3BsdXMvYnRyZWUuYzo1MDI6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTAzLVxcdHUzMiBjb3VudDtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTg3PXN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTg5LXtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo5MDpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTkxLVxcdGludCByZXM7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTgzLXtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxODQ6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODUtXFx0aW50IHJlcztcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIxMD1zdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMTEte1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIxMjpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIxMy1cXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIyOT1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjMzLVxcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIzNDpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIzNS1cXHRpbnQgcmVzID0gLUVJTztcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTQ0MD1pbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDMtXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDQ0OlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDQ1LVxcdHUzMiBzdGFydCwgbGVuLCBnb2FsO1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ2PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NDgtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjU0OTpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTU1MC1cXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTE3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTE3OC1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoxNzk6c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMTgwLVxcdGF0b21pY190IG9wZW5jbnQ7XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yMzMtXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MjM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqSEZTUExVU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjM1LXtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyMzY6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yMzctfVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTMzMD1pbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzQtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUocGF0aC1cXHUwMDNlZGVudHJ5KTtcXG5mcy9oZnNwbHVzL2lub2RlLmM6MzM1OlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMzNi1cXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz0zNTY9aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTM1OS1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbmZzL2hmc3BsdXMvaW5vZGUuYzozNjA6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzYxLVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz00NzA9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00NzQtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ3NTpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXA7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ3Ni1cXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz01NTQ9dm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01NTctXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjU1ODpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy01NTktXFx0dTMyIGNvdW50O1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTc3MT1pbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNzczLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjc3NDpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy03NzUtXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9NzkyPWludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy03OTUtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG5mcy9oZnNwbHVzL2lub2RlLmM6Nzk2OlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTc5Ny1cXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz02OTA9c3RhdGljIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2hmc3BsdXMvc3VwZXIuYy02OTEte1xcbmZzL2hmc3BsdXMvc3VwZXIuYzo2OTI6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaTtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtNjkzLVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jPTY5OD1zdGF0aWMgdm9pZCBoZnNwbHVzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy03MDItXFxuZnMvaGZzcGx1cy9zdXBlci5jOjcwMzojZGVmaW5lIEhGU1BMVVNfSU5PREVfU0laRVxcdHNpemVvZihzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvKVxcbmZzL2hmc3BsdXMvc3VwZXIuYy03MDQtXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9NzU2PXN0YXRpYyB2b2lkIGhmc3BsdXNfaW5pdF9vbmNlKHZvaWQgKnApXFxuZnMvaGZzcGx1cy9zdXBlci5jLTc1Ny17XFxuZnMvaGZzcGx1cy9zdXBlci5jOjc1ODpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppID0gcDtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtNzU5LVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTIwMS1cXHRzdHJ1Y3QgaW5vZGUgKmF0dHJfZmlsZTtcXG5mcy9oZnNwbHVzL3hhdHRyLmM6MjAyOlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcDtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtMjAzLVxcdHN0cnVjdCBoZnNfYm5vZGVfZGVzYyAqZGVzYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6NDkuMzA2ODA2OTQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NjkxNjY4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgaGZzcGx1c19pbm9kZV9pbmZvIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEhGUysgaW5vZGUgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgY2xlYXI6IEknbSBnb2luZyB0byBwb3JlIG92ZXIgdGhlIGBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvYCBkZWZpbml0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBwdWxsaW5nIGl0IGZyb20gYGZzL2hmc3BsdXMvaGZzcGx1c19mcy5oYC4gVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpbm9kZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoaXMgZmlsZXN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjcml0aWNhbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIG9yIGRpcmVjdG9yeSB3aXRoaW4gYW4gSEZTKyB2b2x1bWUuIFRoaXMgd2lsbCBpbnZvbHZlIGV4YW1pbmluZyBpdHMgZmllbGRzLCB0aGVpciBkYXRhIHR5cGVzLCBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGF0dHJpYnV0ZXMsIGV4dGVudHMsIGFuZCBvdGhlciBlc3NlbnRpYWwgZGF0YSBhcmUgbWFuYWdlZCBhdCB0aGUgaW5vZGUgbGV2ZWwuIEknbGwgYmUgbm90aW5nIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbCBvciBwYXJ0aWN1bGFybHkgd2VsbC1kZXNpZ25lZC4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGVjb25zdHJ1Y3QgdGhpcyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MjowNC45OTg0Nzc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3OTpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcXG4gMTgwOlxcdFxcdGF0b21pY190IG9wZW5jbnQ7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdC8qXFxuIDE4MzpcXHRcXHQgKiBFeHRlbnQgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiwgcHJvdGVjdGVkIGJ5IGV4dGVudHNfbG9jay5cXG4gMTg0OlxcdFxcdCAqL1xcbiAxODU6XFx0XFx0dTMyIGZpcnN0X2Jsb2NrcztcXG4gMTg2OlxcdFxcdHUzMiBjbHVtcF9ibG9ja3M7XFxuIDE4NzpcXHRcXHR1MzIgYWxsb2NfYmxvY2tzO1xcbiAxODg6XFx0XFx0dTMyIGNhY2hlZF9zdGFydDtcXG4gMTg5OlxcdFxcdHUzMiBjYWNoZWRfYmxvY2tzO1xcbiAxOTA6XFx0XFx0aGZzcGx1c19leHRlbnRfcmVjIGZpcnN0X2V4dGVudHM7XFxuIDE5MTpcXHRcXHRoZnNwbHVzX2V4dGVudF9yZWMgY2FjaGVkX2V4dGVudHM7XFxuIDE5MjpcXHRcXHR1bnNpZ25lZCBpbnQgZXh0ZW50X3N0YXRlO1xcbiAxOTM6XFx0XFx0c3RydWN0IG11dGV4IGV4dGVudHNfbG9jaztcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0LypcXG4gMTk2OlxcdFxcdCAqIEltbXV0YWJsZSBkYXRhLlxcbiAxOTc6XFx0XFx0ICovXFxuIDE5ODpcXHRcXHRzdHJ1Y3QgaW5vZGUgKnJzcmNfaW5vZGU7XFxuIDE5OTpcXHRcXHRfX2JlMzIgY3JlYXRlX2RhdGU7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdC8qXFxuIDIwMjpcXHRcXHQgKiBQcm90ZWN0ZWQgYnkgc2JpLVxcdTAwM2V2aF9tdXRleC5cXG4gMjAzOlxcdFxcdCAqL1xcbiAyMDQ6XFx0XFx0dTMyIGxpbmtpZDtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0LypcXG4gMjA3OlxcdFxcdCAqIEFjY2Vzc2VkIHVzaW5nIGF0b21pYyBiaXRvcHMuXFxuIDIwODpcXHRcXHQgKi9cXG4gMjA5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdC8qXFxuIDIxMjpcXHRcXHQgKiBQcm90ZWN0ZWQgYnkgaV9tdXRleC5cXG4gMjEzOlxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0c2VjdG9yX3QgZnNfYmxvY2tzO1xcbiAyMTU6XFx0XFx0dTggdXNlcmZsYWdzO1xcdFxcdC8qIEJTRCB1c2VyIGZpbGUgZmxhZ3MgKi9cXG4gMjE2OlxcdFxcdHUzMiBzdWJmb2xkZXJzO1xcdFxcdC8qIFN1YmZvbGRlciBjb3VudCAoSEZTWCBvbmx5KSAqL1xcbiAyMTc6XFx0XFx0bG9mZl90IHBoeXNfc2l6ZTtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcXG4gMjIwOlxcdH07XFxuIDIyMTpcXHRcXG4gMjIyOlxcdCNkZWZpbmUgSEZTUExVU19FWFRfRElSVFlcXHQweDAwMDFcXG4gMjIzOlxcdCNkZWZpbmUgSEZTUExVU19FWFRfTkVXXFx0XFx0MHgwMDAyXFxuIDIyNDpcXHRcXG4gMjI1OlxcdCNkZWZpbmUgSEZTUExVU19JX1JTUkNcXHRcXHQwXFx0LyogcmVwcmVzZW50cyBhIHJlc291cmNlIGZvcmsgKi9cXG4gMjI2OlxcdCNkZWZpbmUgSEZTUExVU19JX0NBVF9ESVJUWVxcdDFcXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgY2F0YWxvZyB0cmVlICovXFxuIDIyNzpcXHQjZGVmaW5lIEhGU1BMVVNfSV9FWFRfRElSVFlcXHQyXFx0LyogaGFzIGNoYW5nZXMgaW4gdGhlIGV4dGVudCB0cmVlICovXFxuIDIyODpcXHQjZGVmaW5lIEhGU1BMVVNfSV9BTExPQ19ESVJUWVxcdDNcXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgYWxsb2NhdGlvbiBmaWxlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQyOjA0Ljk5ODU1OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzOTc0ODI3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBIRlMrIEV4dGVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGhmc3BsdXNfZXh0ZW50X3JlY2AsIHdoaWNoIGlzIGp1c3QgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuIEdvdCBpdC4gQW5kIGBoZnNfYm5vZGVfd3JpdGVgLi4uIHJpZ2h0LCBpdCB0YWtlcyBhIGB2b2lkICpgIGFuZCB3cml0ZXMgdG8gdGhlIGJub2RlLiBDbGFzc2ljLiBOb3csIHRoZSBwcm9ibGVtLiBJdCBzZWVtcyBsaWtlIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgYmlnZ2VyIHRoYW4gdGhlIHNpemUgb2YgYGhmc3BsdXNfZXh0ZW50X3JlY2AsIHdlJ3JlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHNgLiBUaGF0J3MgYmFkLiBUaGF0J3MgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgaXQncyBmcm9tIGEgc2xhYi1hbGxvY2F0ZWQgYGhmc3BsdXNfaW5vZGVfaW5mb2Agc3RydWN0dXJlLiBLQVNBTiBzaG91bGQgYmUgZGV0ZWN0aW5nIHRoYXQsIHdoaWNoIGlzIGdvb2QuXG5cbkJ1dCB3YWl0LiBXaGF0IGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqPyBJZiB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIsIHRoZW4gd2UgYXJlIG9ubHkgd3JpdGluZyBmZXdlciBieXRlcyB0byB0aGUgYm5vZGUsIHdoaWNoIGRvZXNuJ3Qgc2VlbSBsaWtlIGFuIGltbWVkaWF0ZSBwcm9ibGVtLiBJdCdzIGp1c3QgYSBzaG9ydGVyIHdyaXRlLiBUaGUgcGF0Y2ggbWVudGlvbnMgYSBjaGVjaywgYGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSkgcmV0dXJuIC1FSU87YC4gU28sIGlmIHRoZSBzaXplIGlzIGluY29ycmVjdCwgd2UgZXJyb3Igb3V0IGFuZCByZXR1cm4uIElmIHRoZSBzaXplIGlzIHNtYWxsZXIsIHRoZW4gaXQganVzdCB3cml0ZXMgZmV3ZXIgYnl0ZXMuIFNvLCB0aGF0IGRvZXNuJ3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCdzIGxhcmdlciwgd2UgaGF2ZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hpY2ggS0FTQU4gY2FuIGNhdGNoLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdzogSXMgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlPyBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBpcyBwYXJ0IG9mIHRoZSBgaGZzcGx1c19pbm9kZV9pbmZvYCBzdHJ1Y3R1cmUsIHNvIHdlIHNob3VsZCByZWFsbHkga25vdyBpZiB0aGF0J3MgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBMZXQgbWUgZGlnIGludG8gYGhmc3BsdXNfYWxsb2NfaW5vZGVgIGFuZCBzZWUgaWYgd2UgY2FuIGdldCB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MjoyMC4zOTYwNDQ3OTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaGZzcGx1cy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHRzdGF0aWMgc3RydWN0IGlub2RlICpoZnNwbHVzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRpID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTtcXG4gNjk1OlxcdFxcdHJldHVybiBpID8gXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZSA6IE5VTEw7XFxuIDY5NjpcXHR9XFxuIDY5NzpcXHRcXG4gNjk4OlxcdHN0YXRpYyB2b2lkIGhmc3BsdXNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiA2OTk6XFx0e1xcbiA3MDA6XFx0XFx0a21lbV9jYWNoZV9mcmVlKGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBIRlNQTFVTX0koaW5vZGUpKTtcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdFxcbiA3MDM6XFx0I2RlZmluZSBIRlNQTFVTX0lOT0RFX1NJWkVcXHRzaXplb2Yoc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbylcXG4gNzA0OlxcdFxcbiA3MDU6XFx0c3RhdGljIGludCBoZnNwbHVzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gNzA2OlxcdHtcXG4gNzA3OlxcdFxcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBoZnNwbHVzX2ZpbGxfc3VwZXIpO1xcbiA3MDg6XFx0fVxcbiA3MDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQyOjIwLjM5NjE0Mjg5M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY4NjY5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbm9kZSBBbGxvY2F0aW9uIGluIEhGUysqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgaW5vZGVzIGFyZSBoYW5kbGVkIGluIHRoZSBIRlMrIGZpbGVzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjb2RlJ3MgdXNpbmcgYGFsbG9jX2lub2RlX3NiYCBmb3IgaW5vZGUgYWxsb2NhdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGF0IG1lbW9yeSBhY3R1YWxseSBjb21pbmcgZnJvbT8gVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBpbm9kZXMgZnJvbSBgaGZzcGx1c19pbm9kZV9jYWNoZXBgLCB3aGljaCBpcywgb2YgY291cnNlLCBhIHNsYWIgY2FjaGUuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludDogaG93IGlzIHRoaXMgY2FjaGUgY29uZmlndXJlZD8gU3BlY2lmaWNhbGx5LCBpcyB0aGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBvciBhIHNpbWlsYXIgYWNjb3VudGluZyBtZWNoYW5pc20gZW5hYmxlZCB3aGVuIGBoZnNwbHVzX2lub2RlX2NhY2hlcGAgaXMgKmNyZWF0ZWQqPyBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IHRyYWNraW5nIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlc2UgaW5vZGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGF0IHNsYWIgY2FjaGUgaW4gbWVtb3J5IHN0YXRpc3RpY3MgYW5kIHBvdGVudGlhbGx5LCB3aXRoaW4gcmVzb3VyY2UgbGltaXRhdGlvbnMuIEkgd2FudCB0byBhdm9pZCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIGlub2RlIGRhdGEuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3MgZGlnIGludG8gYGhmc3BsdXNfaW5pdF9vbmNlYCBhbmQgc2VlIGhvdyB0aGF0IGNhY2hlIGlzIGluaXRpYWxpemVkLiBUaGF0J3Mgd2hlcmUgdGhlIGFuc3dlciBzaG91bGQgYmUuIFRoaXMgd2lsbCBzaG93IHVzIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQyOjI0Ljk2NDgxNTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTY6XFx0c3RhdGljIHZvaWQgaGZzcGx1c19pbml0X29uY2Uodm9pZCAqcClcXG4gNzU3OlxcdHtcXG4gNzU4OlxcdFxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmkgPSBwO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZSk7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfaGZzcGx1c19mcyh2b2lkKVxcbiA3NjQ6XFx0e1xcbiA3NjU6XFx0XFx0aW50IGVycjtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0aGZzcGx1c19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcXFwiaGZzcGx1c19pY2FjaGVcXFwiLFxcbiA3Njg6XFx0XFx0XFx0SEZTUExVU19JTk9ERV9TSVpFLCAwLCBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9BQ0NPVU5ULFxcbiA3Njk6XFx0XFx0XFx0aGZzcGx1c19pbml0X29uY2UpO1xcbiA3NzA6XFx0XFx0aWYgKCFoZnNwbHVzX2lub2RlX2NhY2hlcClcXG4gNzcxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA3NzI6XFx0XFx0ZXJyID0gaGZzcGx1c19jcmVhdGVfYXR0cl90cmVlX2NhY2hlKCk7XFxuIDc3MzpcXHRcXHRpZiAoZXJyKVxcbiA3NzQ6XFx0XFx0XFx0Z290byBkZXN0cm95X2lub2RlX2NhY2hlO1xcbiA3NzU6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aGZzcGx1c19mc190eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDI6MjQuOTY0OTY0MjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyMjEyNjA1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbnQgUmVhZCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJhbmtseSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSBpc24ndCBpbml0aWFsaXplZCB0byB6ZXJvIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBmdXR1cmUgcmVmZXJlbmNlLiBUaGUgc3lzdGVtIHJlYWRzIGZyb20gaXQgb3IgcG9wdWxhdGVzIGl0IGZyb20gZGlzayBhbmQgdGhhdCdzIG9rYXkuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGBoZnNwbHVzX2V4dGVudF9yZWNgIHN0cnVjdC4gV2hlbiB0aGlzIGhhcHBlbnMsIGBoZnNfYm5vZGVfd3JpdGVgIGF0dGVtcHRzIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHNgLCByZXN1bHRpbmcgaW4gYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gS0FTQU4gd2lsbCBkZXRlY3QgdGhpcywgcGxhaW4gYW5kIHNpbXBsZS5cblxuTm93LCBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlICptaWdodCogYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZmxvYXRpbmcgYXJvdW5kLCBhbmQgSSBhbHdheXMgbGlrZSB0byBjb3ZlciBteSBiYXNlcy4gQnV0LCBsZXQncyBicmVhayBpdCBkb3duOiBldmVuIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqIHRoYW4gdGhlIHN0cnVjdCBzaXplLCBgaGZzX2Jub2RlX3dyaXRlYCBqdXN0IHdyaXRlcyBmZXdlciBieXRlcy4gU28sIGl0IG1heSBiZSBhIGRhdGEgY29ycnVwdGlvbiB0aGluZywgYnV0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdXNlciBzcGFjZS4gSXQncyBub3QgYSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsJ3MgcG9pbnQgb2Ygdmlldy4gVGhlIHJlYWwgY3VscHJpdCBpcyB0aGUgT09CIHJlYWQgd2hlbiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGJpZ2dlci5cblxuVGhpcyBwYXRjaCwgdGhhbmtmdWxseSwgYWRkcyBhIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBleGFjdGx5IHRoZSBzaXplIG9mIGBoZnNwbHVzX2V4dGVudF9yZWNgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBUaGlzIHN0b3BzIHRoZSBPT0IgcmVhZC4gYGhmc19ibm9kZV93cml0ZWAgcmVhZHMgZnJvbSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhbmQgd3JpdGVzIHRob3NlIGJ5dGVzIHRvIHRoZSBibm9kZSwgd2hpY2ggaXMganVzdCBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSBtZXRhZGF0YS4gSW1wb3J0YW50bHksIHRoaXMgZGF0YSBpcyAqbm90KiBiZWluZyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0J3MgYWxsIHdpdGhpbiB0aGUga2VybmVsJ3MgaW50ZXJuYWwgc3RydWN0dXJlcy4gVGhlIHZ1bG5lcmFiaWxpdHkgaXMgdGhlIE9PQiByZWFkIGl0c2VsZi5cblxuVGhlcmVmb3JlLCBzaW5jZSBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgYnVpbHQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGl0J3Mgbm90IGV2ZW4gYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IHRvIHVzZXIgc3BhY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBLQVNBTiBoYW5kbGVzIHRoaXMganVzdCBmaW5lLiBUaGlzIHBhdGNoIGZpeGVzIHRoZSBPT0IgcmVhZCwgYW5kIEtBU0FOIHdpbGwgZW5zdXJlIGl0IHN0YXlzIGZpeGVkLiBHb29kIGVub3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjIsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDI6NDAuMTg2MjI2ODc2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8vdjp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 09:45:08 +0000 UTC FinishedAt: 2026-08-10 10:42:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "894db084-32c0-4e1b-a2f8-6c403e98028a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_ext_write_extent", "hfsplus_file_extend", "hfsplus_file_truncate", "hfsplus_get_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUmIzM0OywKICAgICYjMzQ7aGZzcGx1c19nZXRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBleGFjdGx5IGVxdWFsIHRvIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgYmVmb3JlIGNhbGxpbmcgYGhmc19ibm9kZV93cml0ZWAuIFdpdGhvdXQgdGhpcyBjaGVjaywgaWYgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXG5cblN0YW5kYXJkIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgb24gc2xhYiBhbmQgaGVhcCBhbGxvY2F0aW9ucy4gU2luY2UgdGhlIGJ1ZyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcmF0aGVyIHRoYW4gYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93IGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWI1NjkxOTc2ZTVhMGRiNzNiZmRlZmM1MWE1MTQ1ODgwNjlkODQ0Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDEwOjQwOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xMTAsNiAmIzQzOzExMCw4IEBAIHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuIFx0XHRcdFx0ZmQtXHUwMDNlZW50cnlvZmZzZXQsIGZkLVx1MDAzZWVudHJ5bGVuZ3RoKTtcbiBcdFx0aGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjY9IH5IRlNQTFVTX0VYVF9ESVJUWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZXh0ZW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV90cnVuY2F0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2dldF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaW4gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHdyaXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViNTY5MTk3NmU1YTBkYjczYmZkZWZjNTFhNTE0NTg4MDY5ZDg0NGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxMDo0MDoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKaW5kZXggODEzZTY4YjhlY2Q2NS4uZWI3YzExNTI0ZDE4OCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTExMCw2ICYjNDM7MTEwLDggQEAgc3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCX0gZWxzZSB7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwomIzQzOwkJaWYgKGZkLSZndDtlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSkKJiM0MzsJCQlyZXR1cm4gLUVJTzsKIAkJaGZzX2Jub2RlX3dyaXRlKGZkLSZndDtibm9kZSwgaGlwLSZndDtjYWNoZWRfZXh0ZW50cywKIAkJCQlmZC0mZ3Q7ZW50cnlvZmZzZXQsIGZkLSZndDtlbnRyeWxlbmd0aCk7CiAJCWhpcC0mZ3Q7ZXh0ZW50X3N0YXRlICZhbXA7PSB+SEZTUExVU19FWFRfRElSVFk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBSZWNlbnQgSEZTJiM0MzsgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIGEgY2hhbmdlIHRvIGBmcy9oZnNwbHVzL2V4dGVudHMuY2AuIExvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIHNpemUgY2hlY2s6IGBpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgLiBSaWdodCwgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBleHRlbnQgcmVjb3JkLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZ29vZCBwcm9hY3RpdmUgbWVhc3VyZS4KCkdpdmVuIHRoaXMgaXMgSEZTJiM0MzssIGEgZmlsZXN5c3RlbSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWFjaGFibGUgYW5kLCBjcml0aWNhbGx5LCBmdXp6YWJsZS4gQ3JhZnRpbmcgYSBtYWxpY2lvdXMgaW1hZ2UgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCBpcyBhIHZlcnkgcmVhbGlzdGljIGF0dGFjayB2ZWN0b3IuIFNvLCBsZXQmIzM5O3MgdHJlYXQgdGhpcyBzZXJpb3VzbHkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24sIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBBcmUgdGhlcmUgcG90ZW50aWFsIGNhbGxlcnMgdGhhdCBjb3VsZCBiZSB2dWxuZXJhYmxlPyBBbnkgcGxhY2VzIHdoZXJlIHRoaXMgY2hlY2sgbWlnaHQgYmUgYnlwYXNzZWQgb3IgbWlzdW5kZXJzdG9vZD8gIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEnigJlsbCBhbHNvIG5lZWQgdG8gaWRlbnRpZnkgdGhlIEtjb25maWcgb3B0aW9uIGZvciBIRlMmIzQzOyB0byBlbnN1cmUgaXQmIzM5O3MgY29tcGlsZWQgaW50byB0aGUgdGFyZ2V0IGtlcm5lbC4gVGhhdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgaG93IHRvIGV4cGxvaXQgaXQgaWYgYSB2dWxuZXJhYmlsaXR5IGV4aXN0cy4gVGhpcyBtaWdodCBiZSBhIGdvb2QgZm9jdXMgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9leHRlbnRzLmM9NzY9c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODYtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo4NzpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04OC1cdFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTEzMz1zdGF0aWMgaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDItXHRcdFx0cmV0dXJuIHJlcztcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE0MzpcdFx0cmVzID0gX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC1cdFx0aGZzX2ZpbmRfZXhpdChcdTAwMjZmZCk7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTgxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODktXHRpZiAoaGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjYgSEZTUExVU19FWFRfRElSVFkpIHtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE5MDpcdFx0cmVzID0gX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoaW5vZGUsIGZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE5MS1cdFx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBFeHRlbnQgV3JpdGUgTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgYSBwcmV0dHkgdGlnaHRseSBjb3VwbGVkLCBpbnRlcm5hbCBwaWVjZSBvZiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIG91dHNpZGUgaXRzIG1vZHVsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBpdCBkb2VzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hhdCBpcyBjYWxsaW5nIGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkYCBvciBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgLiBUaGF0IHdvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IHdoZXJlIHRoZXNlIGV4dGVudCBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkLCBhbmQgc2hlZCBsaWdodCBvbiBob3cgdGhleSBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciB3cml0ZSBwcm9jZXNzLiBLbm93aW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaWRlYSBvZiBpdHMgcm9sZSBpbiB0aGUgZmlsZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZXh0ZW50cy5jPTg3PXN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMzItXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxMzM6c3RhdGljIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMzQte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE0OT1pbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTUzLVx0bXV0ZXhfbG9jayhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZWV4dGVudHNfbG9jayk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxNTQ6XHRyZXMgPSBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkKGlub2RlKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1NS1cdG11dGV4X3VubG9jayhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZWV4dGVudHNfbG9jayk7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDQwPWludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01MjktXHRoZnNfZGJnKFwmIzM0O2luc2VydCBuZXcgZXh0ZW50XFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjUzMDpcdHJlcyA9IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTMxLVx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjExCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSEZTJiM0MzsgRXh0ZW50IEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBleHRlbnQgbWFuYWdlbWVudC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IHZpc2libGUgYW5kIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIG1vZHVsZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHVzZSwgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBIRlMmIzQzOyBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoZSBub24tc3RhdGljIGRlY2xhcmF0aW9uIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXQgaXMgbGlrZWx5IGNhbGxlZCBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGRyaXZlci4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCBhIGNsb3NlciBsb29rIGF0IHRoZSBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgIGZ1bmN0aW9uLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgZXh0ZW50cyYjMzk7IGNhY2hlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9leHRlbnRzLmM9MTYwPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE4MC1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE4MTpzdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODItXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yMTA9c3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLVx0aWYgKCFyZXMpIHtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIyMjpcdFx0cmVzID0gX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoXHUwMDI2ZmQsIGlub2RlLCBibG9jayk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMjMtXHRcdGhmc19maW5kX2V4aXQoXHUwMDI2ZmQpO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTU0Nj12b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwMi1cdFx0fVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NjAzOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChcdTAwMjZmZCwgaW5vZGUsIGFsbG9jX2NudCk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy02MDQtXHRcdGlmIChyZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gSEZTJiM0MzsgZmlsZSBvcGVyYXRpb25zOgoKKipJZGVudGlmeWluZyBLZXkgSEZTJiM0MzsgRnVuY3Rpb25zIGZvciBGdXJ0aGVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIHRoYXQgYGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBmb2N1cyBzeW1ib2wgcmlnaHQgbm93LiBUaGF0IGxpa2VseSBkZWFscyB3aXRoIHdyaXRpbmcgZmlsZSBkYXRhIGFuZCBtYW5hZ2luZyBleHRlbnRzIOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEgY3J1Y2lhbCBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIGJlaGF2aW9yLiBJJiMzOTttIGFsc28gYWRkaW5nIGBoZnNwbHVzX2ZpbGVfZXh0ZW5kYCBhbmQgYGhmc3BsdXNfZmlsZV90cnVuY2F0ZWAgdG8gdGhlIHNob3J0IGxpc3QgYXMgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGFzIHRoZXkgYWxzbyBkZWFsIHdpdGggZmlsZSBtb2RpZmljYXRpb25zLiBKdXN0IHRvIHJvdW5kIHRoaW5ncyBvdXQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIHJlYWQgc2lkZSBvZiB0aGUgc2FtZSBjb2luOiBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50YCBhcyB3ZWxsIHRvIGJ1aWxkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBleHRlbnRzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNwbHVzX2V4dF9yZWFkX2V4dGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZXh0ZW50cy5jPTE0OT1pbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTU5LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTYwOnN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTYxLVx0XHRcdFx0XHQgICAgc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHRlbnQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTgxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xOTQtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxOTU6XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGZkLCBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsIGlub2RlLVx1MDAzZWlfaW5vLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTk2LVx0XHRcdFx0XHRibG9jaywgSEZTUExVU19JU19SU1JDKGlub2RlKSA/XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjA5LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjEwOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjExLXtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yMjk9aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNjYtXHQvKlxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjY3Olx0ICogaGZzcGx1c19leHRfcmVhZF9leHRlbnQgd2lsbCB3cml0ZSBvdXQgYSBjYWNoZWQgZXh0ZW50IGludG9cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI2OC1cdCAqIHRoZSBleHRlbnRzIGJ0cmVlLiAgSW4gdGhhdCBjYXNlIHdlIG1heSBoYXZlIHRvIG1hcmsgdGhlIGlub2RlXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjcxLVx0d2FzX2RpcnR5ID0gKGhpcC1cdTAwM2VleHRlbnRfc3RhdGUgXHUwMDI2IEhGU1BMVVNfRVhUX0RJUlRZKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjI3MjpcdHJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjczLVx0aWYgKHJlcykge1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTM5NT1pbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDIwLVx0ZG8ge1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDIxOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KFx1MDAyNmZkLCBleHRfZW50cnksIGNuaWQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00MjItXHRcdFx0XHRcdFx0dG90YWxfYmxvY2tzLCB0eXBlKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz00NDA9aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ2MC1cdGVsc2Uge1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDYxOlx0XHRyZXMgPSBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChpbm9kZSwgaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcyk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NjItXHRcdGlmIChyZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipIRlMmIzQzOyBDb2RlIEluc3BlY3Rpb246IEZvY3VzaW5nIG9uIENvcmUgRmlsZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIEhGUyYjNDM7IGNvZGUgYW5kIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHRhcmdldCBpbiBtaW5kOiB1bmRlcnN0YW5kaW5nIGhvdyBmaWxlIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgYXQgYSBsb3cgbGV2ZWwuIEkgc2VlIGBoZnNwbHVzX2dldF9ibG9ja2AgYXMgYSByZWFsbHkgY3J1Y2lhbCBwb2ludCB0byBzdGFydC4gVGhpcyBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSB5b3UmIzM5O3JlIHJlcXVlc3RpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgZm9jYWwgcG9pbnQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgdG8gdW5kZXJzdGFuZCBpdCBwcm9wZXJseS4KCkZvbGxvd2luZyB0aGlzIGluaXRpYWwgYW5hbHlzaXMgSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZpbGUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5LCBJIHNlZSBzb21lIGtleSBmdW5jdGlvbnMgdGhhdCB3aWxsIG1ha2UgdGhpcyBmb2N1cyByZWxldmFudC4gTmFtZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGhvdyB3ZSBoYW5kbGUgZXh0ZW5kaW5nIGEgZmlsZSAoYGhmc3BsdXNfZmlsZV9leHRlbmRgKSwgdHJ1bmNhdGluZyBhIGZpbGUgKGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgKSwgYW5kIHdyaXRpbmcgZXh0ZW50cyAoYGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGApLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGxvZ2ljYWxseSBpbnRlcnJlbGF0ZWQgb3BlcmF0aW9ucyB0byBwdXJzdWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSBjb3JlIHJvdXRpbmVzLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBIRlNQTFVTIGZlYXR1cmUgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggdGhlIHJlbGV2YW50IGJpdHMsIGFuZCB0aGF0IHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiB0aGUgYnVpbGQgSSYjMzk7bSB1c2luZy4gT3RoZXJ3aXNlLCBJJiMzOTttIGdvaW5nIHRvIGJlIGNoYXNpbmcgZ2hvc3RzLiBUaGVuLCBpdCYjMzk7cyB0aW1lIHRvIGdldCBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhGU1BMVVNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXG5mcy9oZnNwbHVzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgT3B0aW9uIGBIRlNQTFVTX0ZTYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgSEZTUExVU19GU2Agb3B0aW9uIGluIHRoZSBLY29uZmlnLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgYSBzdGFuZGFsb25lIHBpZWNlIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgb3RoZXIgb3B0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYEhGU1BMVVNfRlNgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gRGlnZ2luZyBpbnRvIGRlcGVuZGVuY2llcyBpcyBhbHdheXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU1BMVVNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBOTFNcbiAgIDc6XHRcdHNlbGVjdCBOTFNfVVRGOFxuICAgODpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XG4gIDExOlx0XHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVGhpcyBmaWxlIHN5c3RlbSBpcyBvZnRlbiBjYWxsZWQgSEZTJiM0MzsgYW5kIHdhcyBpbnRyb2R1Y2VkIHdpdGhcbiAgMTQ6XHRcdCAgTWFjT1MgOC4gSXQgaW5jbHVkZXMgYWxsIE1hYyBzcGVjaWZpYyBmaWxlc3lzdGVtIGRhdGEgc3VjaCBhc1xuICAxNTpcdFx0ICBkYXRhIGZvcmtzIGFuZCBjcmVhdG9yIGNvZGVzLCBidXQgaXQgYWxzbyBoYXMgc2V2ZXJhbCBVTklYXG4gIDE2Olx0XHQgIHN0eWxlIGZlYXR1cmVzIHN1Y2ggYXMgZmlsZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBIRlNQTFVTX0tVTklUX1RFU1RcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBIRlMmIzQzOyBmaWxlc3lzdGVtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwMQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTJiM0MzsgRmlsZXN5c3RlbSBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQuIFRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiBoaW5nZXMgb24gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBgQkxPQ0tgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgdHlwaWNhbGx5IGVuYWJsZWQsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKVGhlIGtleSBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSB2YWx1YWJsZSBhdmVudWUgdG8gcHVyc3VlLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCwgYGhmc3BsdXNfZmlsZV9leHRlbmRgLCBgaGZzcGx1c19maWxlX3RydW5jYXRlYCwgYW5kIGBoZnNwbHVzX2dldF9ibG9ja2AuIFRoZXNlIGFyZSBjbGVhcmx5IGZsYWdnZWQgYXMgYXJlYXMgb2YgaW50ZXJlc3QuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCwgd2hpY2ggc3VnZ2VzdHMgYSBwcmlvciB2dWxuZXJhYmlsaXR5IHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgZmlsZXN5c3RlbSBmdW5jdGlvbiBtYWtlcyBpdCByZWFjaGFibGUgdmlhIGZ1enplciBpbnB1dC4gVGhlIGBIRlNQTFVTX0ZTYCBjb25maWd1cmF0aW9uIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IEhGUyYjNDM7IGlzIHRoZSBwcmltYXJ5IGZvY3VzLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgYW5kIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUmIzM0OywKICAgICYjMzQ7aGZzcGx1c19nZXRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2V4dGVuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUmIzM0OywKICAgICYjMzQ7aGZzcGx1c19nZXRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIHRvIGVuc3VyZSB0aGF0IGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHNgIGFycmF5LCBgaGZzX2Jub2RlX3dyaXRlYCB3aWxsIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheSAod2hpY2ggaXMgZW1iZWRkZWQgaW4gdGhlIHNsYWItYWxsb2NhdGVkIGBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvYCkuIFRoaXMgY29uc3RpdHV0ZXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LlxuXG5TdGFuZGFyZCBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIG9uIHNsYWIgYW5kIGhlYXAgYWxsb2NhdGlvbnMuIFNpbmNlIHRoZSBidWcgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHJhdGhlciB0aGFuIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgS0FTQU4gd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjU2OTE5NzZlNWEwZGI3M2JmZGVmYzUxYTUxNDU4ODA2OWQ4NDRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTA6NDA6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0xMTAsNiAmIzQzOzExMCw4IEBAIHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKIAl9IGVsc2UgewogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKJiM0MzsJCWlmIChmZC0mZ3Q7ZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCWhmc19ibm9kZV93cml0ZShmZC0mZ3Q7Ym5vZGUsIGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHMsCiAJCQkJZmQtJmd0O2VudHJ5b2Zmc2V0LCBmZC0mZ3Q7ZW50cnlsZW5ndGgpOwogCQloaXAtJmd0O2V4dGVudF9zdGF0ZSAmYW1wOz0gfkhGU1BMVVNfRVhUX0RJUlRZOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvaGZzcGx1cy9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgZnVuY3Rpb24sIGFkZGluZyBhIGNoZWNrLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGNvZGUgbm93IGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBoZnNfYm5vZGVfd3JpdGVgLiAgTGV0JiMzOTtzIHRoaW5rIHRocm91Z2ggdGhpcyBjYXJlZnVsbHkuIGBoZnNfYm5vZGVfd3JpdGVgIHdyaXRlcyBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBieXRlcyBmcm9tIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCB0byBgZmQtJmd0O2Jub2RlYCBhdCBgZmQtJmd0O2VudHJ5b2Zmc2V0YC4gTm93LCAqaWYqIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIHdhcyAqbGFyZ2VyKiB0aGFuIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgKmJlZm9yZSogdGhpcyBwYXRjaCwgaXQgd291bGQgcmVhZCBvdXQtb2YtYm91bmRzIGZyb20gYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLiAgUmlnaHQsIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBpcyBhbiBhcnJheSBvZiBgaGZzcGx1c19leHRlbnRfZGVzY3JpcHRvcmAgd2l0aGluIGFuIGBoZnNwbHVzX2V4dGVudF9yZWNgLiBMZXQgbWUgY29uZmlybS4uLiBgaGlwYCBpcyBgSEZTUExVU19JKGlub2RlKWAsIGFuZCBgY2FjaGVkX2V4dGVudHNgICppcyogYW4gYGhmc3BsdXNfZXh0ZW50X3JlY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuCgpTbywgaWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgKmlzKiBsYXJnZXIgdGhhbiBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgLCB3ZSYjMzk7ZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgT09CIHJlYWQsIGFuZCBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQuICBOb3csIHRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzLCByaWdodD8gSXQgdGhyb3dzIGFuIGVycm9yIGlmIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIHRoZSB3cm9uZyBzaXplLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZpeGluZyBhIGJ1Zy4KCldoYXQgYWJvdXQgc21hbGxlciBzaXplcz8gIElmIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIHNtYWxsZXIgdGhhbiBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgLCBpdCB3b3VsZCB3cml0ZSBmZXdlciBieXRlcywgbGVhdmluZyB1bndyaXR0ZW4gYnl0ZXMuIERvZXMgKnRoYXQqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IFRoZSBjcnVjaWFsIHRoaW5nIGlzIHdoZXRoZXIgdGhlIHNvdXJjZSwgYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLCBpcyBpdHNlbGYgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIElmIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQsIEtNU0FOICptaWdodCogZmxhZyBpdC4gSG93ZXZlciwgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgaXQgcmVhZGluZyBvdXQtb2YtYm91bmRzLgoKSGFuZyBvbi4gKlRoaXMgcGF0Y2ggaXMgcHJldmVudGluZyB0aGUgT09CIHJlYWQhKiBJdCYjMzk7cyAqZml4aW5nKiBhIGJ1ZyB0aGF0IEtBU0FOICp3b3VsZCogY2F0Y2guIFRoZSBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2AgaXMgaGVhcC1hbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEtBU0FOICp3aWxsKiBkZXRlY3QgYW4gT09CIHJlYWQuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCwgd2hpY2gsIGluIHR1cm4sIGFsc28gYXZvaWRzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHBvdGVudGlhbCB3cml0ZS4gVGhpcyBpcyBnb29kLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSB0aGluayBpdCBkb2VzLiBJJiMzOTttIHNhdGlzZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYz03Nj1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2xhc3RibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04Ni1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjg3OnN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTg4LVx0XHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTMzPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0Mi1cdFx0XHRyZXR1cm4gcmVzO1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgXHUwMDI2ZmQpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTQ0LVx0XHRoZnNfZmluZF9leGl0KFx1MDAyNmZkKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE4OS1cdGlmIChoaXAtXHUwMDNlZXh0ZW50X3N0YXRlIFx1MDAyNiBIRlNQTFVTX0VYVF9ESVJUWSkge1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTkwOlx0XHRyZXMgPSBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTkxLVx0XHRpZiAocmVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiB0aG9yb3VnaGx5OyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgd2hlbiBkZWFsaW5nIHdpdGggSEZTJiM0MzsgZXh0ZW50IHdyaXRpbmcuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gaGFuZGxlcyBhbGxvY2F0aW5nIGFuZCB3cml0aW5nIGRhdGEgYmxvY2tzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgZnJhZ21lbnRlZCBmaWxlcyBvciB0aG9zZSBzcGFubmluZyBtdWx0aXBsZSBhbGxvY2F0aW9uIGJsb2Nrcy4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEItdHJlZSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGV4dGVudCBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgd29ya3M6IGlzIGl0IGNvbnRpZ3VvdXMsIG9yIGRvZXMgaXQgdHJ5IHRvIGNvYWxlc2NlIGV4aXN0aW5nIGV4dGVudHM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBmYWlscz8gSXMgdGhlcmUgZXJyb3IgaGFuZGxpbmc/IEhvdyBkb2VzIGl0IGhhbmRsZSBwYXJ0aWFsIHdyaXRlcz8gV2hhdCBhYm91dCBtZXRhZGF0YSB1cGRhdGVzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvbiBob3cgZXh0ZW50IHdyaXRlcyBhcmUgbWFuYWdlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd2lsbCBiZSBpbnRlcmVzdGluZywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBtaW5pbWl6ZXMgZGlzayBzZWVrcyBhbmQgb3B0aW1pemUgb3ZlcmFsbCBJL08gb3BlcmF0aW9ucy4gRmluYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgam91cm5hbGluZyBvciB0cmFuc2FjdGlvbiBsb2cgc3lzdGVtLCBpZiBvbmUgaXMgcHJlc2VudCwgdG8gZ3VhcmFudGVlIGRhdGEgaW50ZWdyaXR5IGluIHRoZSBldmVudCBvZiBhIHN5c3RlbSBjcmFzaCBvciBwb3dlciBsb3NzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZXh0ZW50cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4NzpcdHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiAgODg6XHRcdFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuICA4OTpcdHtcbiAgOTA6XHRcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4gIDkxOlx0XHRpbnQgcmVzO1xuICA5MjpcdFxuICA5MzpcdFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNmhpcC1cdTAwM2VleHRlbnRzX2xvY2spKTtcbiAgOTQ6XHRcbiAgOTU6XHRcdGhmc3BsdXNfZXh0X2J1aWxkX2tleShmZC1cdTAwM2VzZWFyY2hfa2V5LCBpbm9kZS1cdTAwM2VpX2lubywgaGlwLVx1MDAzZWNhY2hlZF9zdGFydCxcbiAgOTY6XHRcdFx0XHQgICAgICBIRlNQTFVTX0lTX1JTUkMoaW5vZGUpID9cbiAgOTc6XHRcdFx0XHRcdEhGU1BMVVNfVFlQRV9SU1JDIDogSEZTUExVU19UWVBFX0RBVEEpO1xuICA5ODpcdFxuICA5OTpcdFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG4gMTAwOlx0XHRpZiAoaGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjYgSEZTUExVU19FWFRfTkVXKSB7XG4gMTAxOlx0XHRcdGlmIChyZXMgIT0gLUVOT0VOVClcbiAxMDI6XHRcdFx0XHRyZXR1cm4gcmVzO1xuIDEwMzpcdFx0XHQvKiBGYWlsIGVhcmx5IGFuZCBhdm9pZCBFTk9TUEMgZHVyaW5nIHRoZSBidHJlZSBvcGVyYXRpb24gKi9cbiAxMDQ6XHRcdFx0cmVzID0gaGZzX2JtYXBfcmVzZXJ2ZShmZC1cdTAwM2V0cmVlLCBmZC1cdTAwM2V0cmVlLVx1MDAzZWRlcHRoICYjNDM7IDEpO1xuIDEwNTpcdFx0XHRpZiAocmVzKVxuIDEwNjpcdFx0XHRcdHJldHVybiByZXM7XG4gMTA3Olx0XHRcdGhmc19icmVjX2luc2VydChmZCwgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuIDEwODpcdFx0XHRcdFx0c2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpO1xuIDEwOTpcdFx0XHRoaXAtXHUwMDNlZXh0ZW50X3N0YXRlIFx1MDAyNj0gfihIRlNQTFVTX0VYVF9ESVJUWSB8IEhGU1BMVVNfRVhUX05FVyk7XG4gMTEwOlx0XHR9IGVsc2Uge1xuIDExMTpcdFx0XHRpZiAocmVzKVxuIDExMjpcdFx0XHRcdHJldHVybiByZXM7XG4gMTEzOlx0XHRcdGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSlcbiAxMTQ6XHRcdFx0XHRyZXR1cm4gLUVJTztcbiAxMTU6XHRcdFx0aGZzX2Jub2RlX3dyaXRlKGZkLVx1MDAzZWJub2RlLCBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsXG4gMTE2Olx0XHRcdFx0XHRmZC1cdTAwM2VlbnRyeW9mZnNldCwgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuIDExNzpcdFx0XHRoaXAtXHUwMDNlZXh0ZW50X3N0YXRlIFx1MDAyNj0gfkhGU1BMVVNfRVhUX0RJUlRZO1xuIDExODpcdFx0fVxuIDExOTpcdFxuIDEyMDpcdFx0LypcbiAxMjE6XHRcdCAqIFdlIGNhbiYjMzk7dCBqdXN0IHVzZSBoZnNwbHVzX21hcmtfaW5vZGVfZGlydHkgaGVyZSwgYmVjYXVzZSB3ZVxuIDEyMjpcdFx0ICogYWxzbyBnZXQgY2FsbGVkIGZyb20gaGZzcGx1c193cml0ZV9pbm9kZSwgd2hpY2ggc2hvdWxkIG5vdFxuIDEyMzpcdFx0ICogcmVkaXJ0eSB0aGUgaW5vZGUuICBJbnN0ZWFkIHRoZSBjYWxsZXJzIGhhdmUgdG8gYmUgY2FyZWZ1bFxuIDEyNDpcdFx0ICogdG8gZXhwbGljaWx5IG1hcmsgdGhlIGlub2RlIGRpcnR5LCB0b28uXG4gMTI1Olx0XHQgKi9cbiAxMjY6XHRcdHNldF9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IHBhcnQgaXMgdGhpcyBuZXcgY2hlY2s6IGBpZiAoZmQtJmd0O2VudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKWAuICBJdCBzZWVtcyBsaWtlIHRoZSBkZXZlbG9wZXIgYW50aWNpcGF0ZWQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgaGZzX2Jub2RlX3dyaXRlYC4gVGhleSYjMzk7cmUgbm93IG1ha2luZyBzdXJlIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIHRoZSByaWdodCBzaXplIGJlZm9yZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uICBUaGUgZ29hbCBpcyBwcmV0dHkgY2xlYXIg4oCTIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBpcyBhIGBoZnNwbHVzX2V4dGVudF9yZWNgLCBhbmQgdGhhdCB0aGlzIHN0cnVjdHVyZSBjb25zaXN0cyBvZiBhbiBhcnJheSBvZiBlaWdodCBgaGZzcGx1c19leHRlbnRfZGVzY3JpcHRvcmAgc3RydWN0cy4gSWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gd2hhdCBhIGBoZnNwbHVzX2V4dGVudF9yZWNgIGNhbiBob2xkLCB0aGF0IG1lYW5zIGBoZnNfYm5vZGVfd3JpdGVgIHdvdWxkIGF0dGVtcHQgdG8gcmVhZCAqcGFzdCogdGhlIGJvdW5kcyBvZiBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2Agd2hlbiBjb3B5aW5nIGRhdGEgdG8gdGhlIGJub2RlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBLQVNBTiBpcyByaWdodGx5IGZsYWdnaW5nIGl0LiBOb3csIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgaXMgY29ycmVjdCwgc28gbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdWxseSBjb21wcmVoZW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgYXJyYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2J0cmVlLmM9NDk5PWludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy01MDEtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdHJlZS1cdTAwM2Vpbm9kZTtcbmZzL2hmc3BsdXMvYnRyZWUuYzo1MDI6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTUwMy1cdHUzMiBjb3VudDtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz04Nz1zdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODkte1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6OTA6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtOTEtXHRpbnQgcmVzO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE4MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTgzLXtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE4NDpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODUtXHRpbnQgcmVzO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIxMD1zdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIxMS17XG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMTI6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjEzLVx0c3RydWN0IGhmc19maW5kX2RhdGEgZmQ7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MjI5PWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjMzLVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMzQ6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjM1LVx0aW50IHJlcyA9IC1FSU87XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDQwPWludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDMtXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQ0NDpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDUtXHR1MzIgc3RhcnQsIGxlbiwgZ29hbDtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz01NDY9dm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NDgtXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjU0OTpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NTAtXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0xNzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMTc4LVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MTc5OnN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8ge1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMTgwLVx0YXRvbWljX3Qgb3BlbmNudDtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yMzMtXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyMzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpIRlNQTFVTX0koc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTIzNS17XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyMzY6XHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjM3LX1cbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9MzMwPWludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzQtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLVx1MDAzZWRlbnRyeSk7XG5mcy9oZnNwbHVzL2lub2RlLmM6MzM1Olx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzYtXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTM1Nj1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTM1OS1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuZnMvaGZzcGx1cy9pbm9kZS5jOjM2MDpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2lub2RlLmMtMzYxLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ3MD1zdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00NzQtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTtcbmZzL2hmc3BsdXMvaW5vZGUuYzo0NzU6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXA7XG5mcy9oZnNwbHVzL2lub2RlLmMtNDc2LVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz01NTQ9dm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNTU3LVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG5mcy9oZnNwbHVzL2lub2RlLmM6NTU4Olx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy01NTktXHR1MzIgY291bnQ7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTc3MT1pbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTc3My1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG5mcy9oZnNwbHVzL2lub2RlLmM6Nzc0Olx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy03NzUtXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz03OTI9aW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy03OTUtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjc5NjpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG5mcy9oZnNwbHVzL2lub2RlLmMtNzk3LVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9NjkwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2hmc3BsdXMvc3VwZXIuYy02OTEte1xuZnMvaGZzcGx1cy9zdXBlci5jOjY5MjpcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmk7XG5mcy9oZnNwbHVzL3N1cGVyLmMtNjkzLVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz02OTg9c3RhdGljIHZvaWQgaGZzcGx1c19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTcwMi1cbmZzL2hmc3BsdXMvc3VwZXIuYzo3MDM6I2RlZmluZSBIRlNQTFVTX0lOT0RFX1NJWkVcdHNpemVvZihzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvKVxuZnMvaGZzcGx1cy9zdXBlci5jLTcwNC1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9NzU2PXN0YXRpYyB2b2lkIGhmc3BsdXNfaW5pdF9vbmNlKHZvaWQgKnApXG5mcy9oZnNwbHVzL3N1cGVyLmMtNzU3LXtcbmZzL2hmc3BsdXMvc3VwZXIuYzo3NTg6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppID0gcDtcbmZzL2hmc3BsdXMvc3VwZXIuYy03NTktXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy0yMDEtXHRzdHJ1Y3QgaW5vZGUgKmF0dHJfZmlsZTtcbmZzL2hmc3BsdXMveGF0dHIuYzoyMDI6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXA7XG5mcy9oZnNwbHVzL3hhdHRyLmMtMjAzLVx0c3RydWN0IGhmc19ibm9kZV9kZXNjICpkZXNjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgaGZzcGx1c19pbm9kZV9pbmZvIFN0cnVjdHVyZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSEZTJiM0MzsgaW5vZGUgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gcG9yZSBvdmVyIHRoZSBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AgZGVmaW5pdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHB1bGxpbmcgaXQgZnJvbSBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGlub2RlcyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhpcyBmaWxlc3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjcml0aWNhbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIG9yIGRpcmVjdG9yeSB3aXRoaW4gYW4gSEZTJiM0Mzsgdm9sdW1lLiBUaGlzIHdpbGwgaW52b2x2ZSBleGFtaW5pbmcgaXRzIGZpZWxkcywgdGhlaXIgZGF0YSB0eXBlcywgYW5kIGFueSByZWxldmFudCBjb21tZW50cy4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgYXR0cmlidXRlcywgZXh0ZW50cywgYW5kIG90aGVyIGVzc2VudGlhbCBkYXRhIGFyZSBtYW5hZ2VkIGF0IHRoZSBpbm9kZSBsZXZlbC4gSSYjMzk7bGwgYmUgbm90aW5nIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbCBvciBwYXJ0aWN1bGFybHkgd2VsbC1kZXNpZ25lZC4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGRlY29uc3RydWN0IHRoaXMgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzk6XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcbiAxODA6XHRcdGF0b21pY190IG9wZW5jbnQ7XG4gMTgxOlx0XG4gMTgyOlx0XHQvKlxuIDE4MzpcdFx0ICogRXh0ZW50IGFsbG9jYXRpb24gaW5mb3JtYXRpb24sIHByb3RlY3RlZCBieSBleHRlbnRzX2xvY2suXG4gMTg0Olx0XHQgKi9cbiAxODU6XHRcdHUzMiBmaXJzdF9ibG9ja3M7XG4gMTg2Olx0XHR1MzIgY2x1bXBfYmxvY2tzO1xuIDE4NzpcdFx0dTMyIGFsbG9jX2Jsb2NrcztcbiAxODg6XHRcdHUzMiBjYWNoZWRfc3RhcnQ7XG4gMTg5Olx0XHR1MzIgY2FjaGVkX2Jsb2NrcztcbiAxOTA6XHRcdGhmc3BsdXNfZXh0ZW50X3JlYyBmaXJzdF9leHRlbnRzO1xuIDE5MTpcdFx0aGZzcGx1c19leHRlbnRfcmVjIGNhY2hlZF9leHRlbnRzO1xuIDE5MjpcdFx0dW5zaWduZWQgaW50IGV4dGVudF9zdGF0ZTtcbiAxOTM6XHRcdHN0cnVjdCBtdXRleCBleHRlbnRzX2xvY2s7XG4gMTk0Olx0XG4gMTk1Olx0XHQvKlxuIDE5NjpcdFx0ICogSW1tdXRhYmxlIGRhdGEuXG4gMTk3Olx0XHQgKi9cbiAxOTg6XHRcdHN0cnVjdCBpbm9kZSAqcnNyY19pbm9kZTtcbiAxOTk6XHRcdF9fYmUzMiBjcmVhdGVfZGF0ZTtcbiAyMDA6XHRcbiAyMDE6XHRcdC8qXG4gMjAyOlx0XHQgKiBQcm90ZWN0ZWQgYnkgc2JpLVx1MDAzZXZoX211dGV4LlxuIDIwMzpcdFx0ICovXG4gMjA0Olx0XHR1MzIgbGlua2lkO1xuIDIwNTpcdFxuIDIwNjpcdFx0LypcbiAyMDc6XHRcdCAqIEFjY2Vzc2VkIHVzaW5nIGF0b21pYyBiaXRvcHMuXG4gMjA4Olx0XHQgKi9cbiAyMDk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMjEwOlx0XG4gMjExOlx0XHQvKlxuIDIxMjpcdFx0ICogUHJvdGVjdGVkIGJ5IGlfbXV0ZXguXG4gMjEzOlx0XHQgKi9cbiAyMTQ6XHRcdHNlY3Rvcl90IGZzX2Jsb2NrcztcbiAyMTU6XHRcdHU4IHVzZXJmbGFncztcdFx0LyogQlNEIHVzZXIgZmlsZSBmbGFncyAqL1xuIDIxNjpcdFx0dTMyIHN1YmZvbGRlcnM7XHRcdC8qIFN1YmZvbGRlciBjb3VudCAoSEZTWCBvbmx5KSAqL1xuIDIxNzpcdFx0bG9mZl90IHBoeXNfc2l6ZTtcbiAyMTg6XHRcbiAyMTk6XHRcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XG4gMjIwOlx0fTtcbiAyMjE6XHRcbiAyMjI6XHQjZGVmaW5lIEhGU1BMVVNfRVhUX0RJUlRZXHQweDAwMDFcbiAyMjM6XHQjZGVmaW5lIEhGU1BMVVNfRVhUX05FV1x0XHQweDAwMDJcbiAyMjQ6XHRcbiAyMjU6XHQjZGVmaW5lIEhGU1BMVVNfSV9SU1JDXHRcdDBcdC8qIHJlcHJlc2VudHMgYSByZXNvdXJjZSBmb3JrICovXG4gMjI2Olx0I2RlZmluZSBIRlNQTFVTX0lfQ0FUX0RJUlRZXHQxXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgY2F0YWxvZyB0cmVlICovXG4gMjI3Olx0I2RlZmluZSBIRlNQTFVTX0lfRVhUX0RJUlRZXHQyXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgZXh0ZW50IHRyZWUgKi9cbiAyMjg6XHQjZGVmaW5lIEhGU1BMVVNfSV9BTExPQ19ESVJUWVx0M1x0LyogaGFzIGNoYW5nZXMgaW4gdGhlIGFsbG9jYXRpb24gZmlsZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gSEZTJiM0MzsgRXh0ZW50IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBoZnNwbHVzX2V4dGVudF9yZWNgLCB3aGljaCBpcyBqdXN0IGFuIGFycmF5IG9mIGVpZ2h0IGBoZnNwbHVzX2V4dGVudF9kZXNjcmlwdG9yYCBzdHJ1Y3RzLiBHb3QgaXQuIEFuZCBgaGZzX2Jub2RlX3dyaXRlYC4uLiByaWdodCwgaXQgdGFrZXMgYSBgdm9pZCAqYCBhbmQgd3JpdGVzIHRvIHRoZSBibm9kZS4gQ2xhc3NpYy4gTm93LCB0aGUgcHJvYmxlbS4gSXQgc2VlbXMgbGlrZSBpZiBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBpcyBiaWdnZXIgdGhhbiB0aGUgc2l6ZSBvZiBgaGZzcGx1c19leHRlbnRfcmVjYCwgd2UmIzM5O3JlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYC4gVGhhdCYjMzk7cyBiYWQuIFRoYXQmIzM5O3MgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgaXQmIzM5O3MgZnJvbSBhIHNsYWItYWxsb2NhdGVkIGBoZnNwbHVzX2lub2RlX2luZm9gIHN0cnVjdHVyZS4gS0FTQU4gc2hvdWxkIGJlIGRldGVjdGluZyB0aGF0LCB3aGljaCBpcyBnb29kLgoKQnV0IHdhaXQuIFdoYXQgaWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqPyBJZiB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIsIHRoZW4gd2UgYXJlIG9ubHkgd3JpdGluZyBmZXdlciBieXRlcyB0byB0aGUgYm5vZGUsIHdoaWNoIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBhbiBpbW1lZGlhdGUgcHJvYmxlbS4gSXQmIzM5O3MganVzdCBhIHNob3J0ZXIgd3JpdGUuIFRoZSBwYXRjaCBtZW50aW9ucyBhIGNoZWNrLCBgaWYgKGZkLSZndDtlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSkgcmV0dXJuIC1FSU87YC4gU28sIGlmIHRoZSBzaXplIGlzIGluY29ycmVjdCwgd2UgZXJyb3Igb3V0IGFuZCByZXR1cm4uIElmIHRoZSBzaXplIGlzIHNtYWxsZXIsIHRoZW4gaXQganVzdCB3cml0ZXMgZmV3ZXIgYnl0ZXMuIFNvLCB0aGF0IGRvZXNuJiMzOTt0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgaXQmIzM5O3MgbGFyZ2VyLCB3ZSBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGljaCBLQVNBTiBjYW4gY2F0Y2guCgpUaGUga2V5IHF1ZXN0aW9uIG5vdzogSXMgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlPyBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2AgaXMgcGFydCBvZiB0aGUgYGhmc3BsdXNfaW5vZGVfaW5mb2Agc3RydWN0dXJlLCBzbyB3ZSBzaG91bGQgcmVhbGx5IGtub3cgaWYgdGhhdCYjMzk7cyBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIExldCBtZSBkaWcgaW50byBgaGZzcGx1c19hbGxvY19pbm9kZWAgYW5kIHNlZSBpZiB3ZSBjYW4gZ2V0IHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9oZnNwbHVzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA2OTE6XHR7XG4gNjkyOlx0XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppO1xuIDY5MzpcdFxuIDY5NDpcdFx0aSA9IGFsbG9jX2lub2RlX3NiKHNiLCBoZnNwbHVzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4gNjk1Olx0XHRyZXR1cm4gaSA/IFx1MDAyNmktXHUwMDNldmZzX2lub2RlIDogTlVMTDtcbiA2OTY6XHR9XG4gNjk3Olx0XG4gNjk4Olx0c3RhdGljIHZvaWQgaGZzcGx1c19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gNjk5Olx0e1xuIDcwMDpcdFx0a21lbV9jYWNoZV9mcmVlKGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBIRlNQTFVTX0koaW5vZGUpKTtcbiA3MDE6XHR9XG4gNzAyOlx0XG4gNzAzOlx0I2RlZmluZSBIRlNQTFVTX0lOT0RFX1NJWkVcdHNpemVvZihzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvKVxuIDcwNDpcdFxuIDcwNTpcdHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gNzA2Olx0e1xuIDcwNzpcdFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGhmc3BsdXNfZmlsbF9zdXBlcik7XG4gNzA4Olx0fVxuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKklub2RlIEFsbG9jYXRpb24gaW4gSEZTJiM0MzsqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpbm9kZXMgYXJlIGhhbmRsZWQgaW4gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjb2RlJiMzOTtzIHVzaW5nIGBhbGxvY19pbm9kZV9zYmAgZm9yIGlub2RlIGFsbG9jYXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhhdCBtZW1vcnkgYWN0dWFsbHkgY29taW5nIGZyb20/IFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgaW5vZGVzIGZyb20gYGhmc3BsdXNfaW5vZGVfY2FjaGVwYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYSBzbGFiIGNhY2hlLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBob3cgaXMgdGhpcyBjYWNoZSBjb25maWd1cmVkPyBTcGVjaWZpY2FsbHksIGlzIHRoZSBgU0xBQl9BQ0NPVU5UYCBmbGFnIG9yIGEgc2ltaWxhciBhY2NvdW50aW5nIG1lY2hhbmlzbSBlbmFibGVkIHdoZW4gYGhmc3BsdXNfaW5vZGVfY2FjaGVwYCBpcyAqY3JlYXRlZCo/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgdHJhY2tpbmcgdGhlIG1lbW9yeSB1c2FnZSBvZiB0aGVzZSBpbm9kZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlJiMzOTtyZSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGF0IHNsYWIgY2FjaGUgaW4gbWVtb3J5IHN0YXRpc3RpY3MgYW5kIHBvdGVudGlhbGx5LCB3aXRoaW4gcmVzb3VyY2UgbGltaXRhdGlvbnMuIEkgd2FudCB0byBhdm9pZCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIGlub2RlIGRhdGEuCgpBbHJpZ2h0LCB0aW1lIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkaWcgaW50byBgaGZzcGx1c19pbml0X29uY2VgIGFuZCBzZWUgaG93IHRoYXQgY2FjaGUgaXMgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBzaG91bGQgYmUuIFRoaXMgd2lsbCBzaG93IHVzIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2FjaGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTY6XHRzdGF0aWMgdm9pZCBoZnNwbHVzX2luaXRfb25jZSh2b2lkICpwKVxuIDc1NzpcdHtcbiA3NTg6XHRcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmkgPSBwO1xuIDc1OTpcdFxuIDc2MDpcdFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmktXHUwMDNldmZzX2lub2RlKTtcbiA3NjE6XHR9XG4gNzYyOlx0XG4gNzYzOlx0c3RhdGljIGludCBfX2luaXQgaW5pdF9oZnNwbHVzX2ZzKHZvaWQpXG4gNzY0Olx0e1xuIDc2NTpcdFx0aW50IGVycjtcbiA3NjY6XHRcbiA3Njc6XHRcdGhmc3BsdXNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7aGZzcGx1c19pY2FjaGVcJiMzNDssXG4gNzY4Olx0XHRcdEhGU1BMVVNfSU5PREVfU0laRSwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfQUNDT1VOVCxcbiA3Njk6XHRcdFx0aGZzcGx1c19pbml0X29uY2UpO1xuIDc3MDpcdFx0aWYgKCFoZnNwbHVzX2lub2RlX2NhY2hlcClcbiA3NzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzcyOlx0XHRlcnIgPSBoZnNwbHVzX2NyZWF0ZV9hdHRyX3RyZWVfY2FjaGUoKTtcbiA3NzM6XHRcdGlmIChlcnIpXG4gNzc0Olx0XHRcdGdvdG8gZGVzdHJveV9pbm9kZV9jYWNoZTtcbiA3NzU6XHRcdGVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2aGZzcGx1c19mc190eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjIKCQkJCQkJCW91dHB1dDogMjUzCgkJCQkJCQl0aG91Z2h0czogNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0ZW50IFJlYWQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyYW5rbHksIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBgaGlwLSZndDtjYWNoZWRfZXh0ZW50c2AgYXJyYXkgaXNuJiMzOTt0IGluaXRpYWxpemVkIHRvIHplcm8gYnkgZGVmYXVsdCwgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBmdXR1cmUgcmVmZXJlbmNlLiBUaGUgc3lzdGVtIHJlYWRzIGZyb20gaXQgb3IgcG9wdWxhdGVzIGl0IGZyb20gZGlzayBhbmQgdGhhdCYjMzk7cyBva2F5LiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiBgZmQtJmd0O2VudHJ5bGVuZ3RoYCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYGhmc3BsdXNfZXh0ZW50X3JlY2Agc3RydWN0LiBXaGVuIHRoaXMgaGFwcGVucywgYGhmc19ibm9kZV93cml0ZWAgYXR0ZW1wdHMgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgYGhpcC0mZ3Q7Y2FjaGVkX2V4dGVudHNgLCByZXN1bHRpbmcgaW4gYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gS0FTQU4gd2lsbCBkZXRlY3QgdGhpcywgcGxhaW4gYW5kIHNpbXBsZS4KCk5vdywgSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSAqbWlnaHQqIGJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGZsb2F0aW5nIGFyb3VuZCwgYW5kIEkgYWx3YXlzIGxpa2UgdG8gY292ZXIgbXkgYmFzZXMuIEJ1dCwgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IGV2ZW4gaWYgYGZkLSZndDtlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqIHRoYW4gdGhlIHN0cnVjdCBzaXplLCBgaGZzX2Jub2RlX3dyaXRlYCBqdXN0IHdyaXRlcyBmZXdlciBieXRlcy4gU28sIGl0IG1heSBiZSBhIGRhdGEgY29ycnVwdGlvbiB0aGluZywgYnV0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdXNlciBzcGFjZS4gSXQmIzM5O3Mgbm90IGEgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwb2ludCBvZiB2aWV3LiBUaGUgcmVhbCBjdWxwcml0IGlzIHRoZSBPT0IgcmVhZCB3aGVuIGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIGJpZ2dlci4KClRoaXMgcGF0Y2gsIHRoYW5rZnVsbHksIGFkZHMgYSBjaGVjayBpbiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIHRvIGVuc3VyZSB0aGF0IGBmZC0mZ3Q7ZW50cnlsZW5ndGhgIGlzIGV4YWN0bHkgdGhlIHNpemUgb2YgYGhmc3BsdXNfZXh0ZW50X3JlY2AgYmVmb3JlIGNhbGxpbmcgYGhmc19ibm9kZV93cml0ZWAuIFRoaXMgc3RvcHMgdGhlIE9PQiByZWFkLiBgaGZzX2Jub2RlX3dyaXRlYCByZWFkcyBmcm9tIGBoaXAtJmd0O2NhY2hlZF9leHRlbnRzYCBhbmQgd3JpdGVzIHRob3NlIGJ5dGVzIHRvIHRoZSBibm9kZSwgd2hpY2ggaXMganVzdCBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSBtZXRhZGF0YS4gSW1wb3J0YW50bHksIHRoaXMgZGF0YSBpcyAqbm90KiBiZWluZyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIGFsbCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLiBUaGUgdnVsbmVyYWJpbGl0eSBpcyB0aGUgT09CIHJlYWQgaXRzZWxmLgoKVGhlcmVmb3JlLCBzaW5jZSBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgYnVpbHQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGl0JiMzOTtzIG5vdCBldmVuIGEgY2FzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSB0byB1c2VyIHNwYWNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4gS0FTQU4gaGFuZGxlcyB0aGlzIGp1c3QgZmluZS4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgT09CIHJlYWQsIGFuZCBLQVNBTiB3aWxsIGVuc3VyZSBpdCBzdGF5cyBmaXhlZC4gR29vZCBlbm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCB0byBlbnN1cmUgdGhhdCBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGV4YWN0bHkgZXF1YWwgdG8gYHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpYCBiZWZvcmUgY2FsbGluZyBgaGZzX2Jub2RlX3dyaXRlYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSwgYGhmc19ibm9kZV93cml0ZWAgd2lsbCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKHdoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBzbGFiLWFsbG9jYXRlZCBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2ApLiBUaGlzIGNvbnN0aXR1dGVzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cblxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCB0byBlbnN1cmUgdGhhdCBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGV4YWN0bHkgZXF1YWwgdG8gYHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpYCBiZWZvcmUgY2FsbGluZyBgaGZzX2Jub2RlX3dyaXRlYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSwgYGhmc19ibm9kZV93cml0ZWAgd2lsbCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKHdoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBzbGFiLWFsbG9jYXRlZCBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2ApLiBUaGlzIGNvbnN0aXR1dGVzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cblxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDA6MjguODE0MDMxNTU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMzcyMjI1OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfZmlsZV9leHRlbmRcIixcbiAgICBcImhmc3BsdXNfZmlsZV90cnVuY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19nZXRfYmxvY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCB0byBlbnN1cmUgdGhhdCBgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBleGFjdGx5IGVxdWFsIHRvIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgYmVmb3JlIGNhbGxpbmcgYGhmc19ibm9kZV93cml0ZWAuIFdpdGhvdXQgdGhpcyBjaGVjaywgaWYgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGBoaXAtXFx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSwgYGhmc19ibm9kZV93cml0ZWAgd2lsbCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKHdoaWNoIGlzIGVtYmVkZGVkIGluIHRoZSBzbGFiLWFsbG9jYXRlZCBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2ApLiBUaGlzIGNvbnN0aXR1dGVzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS5cXG5cXG5TdGFuZGFyZCBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIG9uIHNsYWIgYW5kIGhlYXAgYWxsb2NhdGlvbnMuIFNpbmNlIHRoZSBidWcgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHJhdGhlciB0aGFuIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgS0FTQU4gd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjI4LjgxNDA0MTAwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjI1MTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViNTY5MTk3NmU1YTBkYjczYmZkZWZjNTFhNTE0NTg4MDY5ZDg0NGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTA6NDA6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmNcXG4rKysgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbkBAIC0xMTAsNiArMTEwLDggQEAgc3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpZiAocmVzKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHRpZiAoZmQtXFx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0aGZzX2Jub2RlX3dyaXRlKGZkLVxcdTAwM2Vibm9kZSwgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG4gXFx0XFx0XFx0XFx0ZmQtXFx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cXHUwMDNlZW50cnlsZW5ndGgpO1xcbiBcXHRcXHRoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2PSB+SEZTUExVU19FWFRfRElSVFk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjMwLjA4MDk2MzQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzE1OTczODg1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19maWxlX2V4dGVuZFwiLFxuICAgIFwiaGZzcGx1c19maWxlX3RydW5jYXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViNTY5MTk3NmU1YTBkYjczYmZkZWZjNTFhNTE0NTg4MDY5ZDg0NGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMDo0MDoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLmViN2MxMTUyNGQxODggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xMTAsNiArMTEwLDggQEAgc3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGhmc19ibm9kZV93cml0ZShmZC1cdTAwM2Vibm9kZSwgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuIFx0XHRcdFx0ZmQtXHUwMDNlZW50cnlvZmZzZXQsIGZkLVx1MDAzZWVudHJ5bGVuZ3RoKTtcbiBcdFx0aGlwLVx1MDAzZWV4dGVudF9zdGF0ZSBcdTAwMjY9IH5IRlNQTFVTX0VYVF9ESVJUWTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjMwLjA4MDk2NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQxNjA1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IEhGUysgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGEgY2hhbmdlIHRvIGBmcy9oZnNwbHVzL2V4dGVudHMuY2AuIExvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBjaGVjayBpbiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgLiBTcGVjaWZpY2FsbHksIGl0J3MgYSBzaXplIGNoZWNrOiBgaWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgLiBSaWdodCwgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBleHRlbnQgcmVjb3JkLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBnb29kIHByb2FjdGl2ZSBtZWFzdXJlLlxuXG5HaXZlbiB0aGlzIGlzIEhGUyssIGEgZmlsZXN5c3RlbSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3MgcmVhY2hhYmxlIGFuZCwgY3JpdGljYWxseSwgZnV6emFibGUuIENyYWZ0aW5nIGEgbWFsaWNpb3VzIGltYWdlIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggaXMgYSB2ZXJ5IHJlYWxpc3RpYyBhdHRhY2sgdmVjdG9yLiBTbywgbGV0J3MgdHJlYXQgdGhpcyBzZXJpb3VzbHkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiwgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEFyZSB0aGVyZSBwb3RlbnRpYWwgY2FsbGVycyB0aGF0IGNvdWxkIGJlIHZ1bG5lcmFibGU/IEFueSBwbGFjZXMgd2hlcmUgdGhpcyBjaGVjayBtaWdodCBiZSBieXBhc3NlZCBvciBtaXN1bmRlcnN0b29kPyAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJ4oCZbGwgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IHRoZSBLY29uZmlnIG9wdGlvbiBmb3IgSEZTKyB0byBlbnN1cmUgaXQncyBjb21waWxlZCBpbnRvIHRoZSB0YXJnZXQga2VybmVsLiBUaGF0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBleHBsb2l0IGl0IGlmIGEgdnVsbmVyYWJpbGl0eSBleGlzdHMuIFRoaXMgbWlnaHQgYmUgYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjM0LjkyMjU3MjMxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODE1NDk0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmM9NzY9c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04Ni1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo4NzpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODgtXFx0XFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTMzPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTQyLVxcdFxcdFxcdHJldHVybiByZXM7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTg5LVxcdGlmIChoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2IEhGU1BMVVNfRVhUX0RJUlRZKSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTkwOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBmZCk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTkxLVxcdFxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjM1LjUwNDEyOTM4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDgxNTUwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIEV4dGVudCBXcml0ZSBNZWNoYW5pc21zKipcblxuT2theSwgc28gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgYSBwcmV0dHkgdGlnaHRseSBjb3VwbGVkLCBpbnRlcm5hbCBwaWVjZSBvZiB0aGUgSEZTKyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCdzIG5vdCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIGl0cyBtb2R1bGUuIExldCdzIHNlZSB3aGF0IGNhbGxzIGl0LCBhbmQgd2hhdCBpdCBkb2VzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgd2hhdCBpcyBjYWxsaW5nIGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkYCBvciBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgLiBUaGF0IHdvdWxkIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IHdoZXJlIHRoZXNlIGV4dGVudCBvcGVyYXRpb25zIGFyZSBiZWluZyB1c2VkLCBhbmQgc2hlZCBsaWdodCBvbiBob3cgdGhleSBpbnRlZ3JhdGUgaW50byB0aGUgYnJvYWRlciB3cml0ZSBwcm9jZXNzLiBLbm93aW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaWRlYSBvZiBpdHMgcm9sZSBpbiB0aGUgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MDo0MS4yMTIyODYzMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzAxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2V4dGVudHMuYz04Nz1zdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMzItXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTMzOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTEzNC17XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xNDk9aW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTUzLVxcdG11dGV4X2xvY2soXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTU0OlxcdHJlcyA9IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1NS1cXHRtdXRleF91bmxvY2soXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz00NDA9aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTI5LVxcdGhmc19kYmcoXFxcImluc2VydCBuZXcgZXh0ZW50XFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo1MzA6XFx0cmVzID0gaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChpbm9kZSk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTMxLVxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjQxLjI1OTMyNDUyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTUzODE5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgSEZTKyBFeHRlbnQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBleHRlbnQgbWFuYWdlbWVudC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IHZpc2libGUgYW5kIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIG1vZHVsZSB3aGVyZSBpdCdzIGRlZmluZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIEhGUysgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGUgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0IGlzIGxpa2VseSBjYWxsZWQgaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBkcml2ZXIuIExldCdzIGRpZyBkZWVwZXIgYW5kIGdldCBhIGNsb3NlciBsb29rIGF0IHRoZSBgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnRgIGZ1bmN0aW9uLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgZXh0ZW50cycgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MDo0NC44MTQ3MDk0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY4OTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2V4dGVudHMuYz0xNjA9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODAtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTgxOnN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODItXFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MjEwPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLVxcdGlmICghcmVzKSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjIyOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KFxcdTAwMjZmZCwgaW5vZGUsIGJsb2NrKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMjMtXFx0XFx0aGZzX2ZpbmRfZXhpdChcXHUwMDI2ZmQpO1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ2PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy02MDItXFx0XFx0fVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjYwMzpcXHRcXHRyZXMgPSBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChcXHUwMDI2ZmQsIGlub2RlLCBhbGxvY19jbnQpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwNC1cXHRcXHRpZiAocmVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MDo0NC44NTk0MDQ1ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA1OTk2MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiBIRlMrIGZpbGUgb3BlcmF0aW9uczpcblxuKipJZGVudGlmeWluZyBLZXkgSEZTKyBGdW5jdGlvbnMgZm9yIEZ1cnRoZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBIRlMrIGZpbGVzeXN0ZW0uIEknbSB0aGlua2luZyB0aGF0IGBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgIGlzIGEgcGFydGljdWxhcmx5IGdvb2QgZm9jdXMgc3ltYm9sIHJpZ2h0IG5vdy4gVGhhdCBsaWtlbHkgZGVhbHMgd2l0aCB3cml0aW5nIGZpbGUgZGF0YSBhbmQgbWFuYWdpbmcgZXh0ZW50cyDigJMgdGhhdCdzIG9mdGVuIGEgY3J1Y2lhbCBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIGJlaGF2aW9yLiBJJ20gYWxzbyBhZGRpbmcgYGhmc3BsdXNfZmlsZV9leHRlbmRgIGFuZCBgaGZzcGx1c19maWxlX3RydW5jYXRlYCB0byB0aGUgc2hvcnQgbGlzdCBhcyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgYXMgdGhleSBhbHNvIGRlYWwgd2l0aCBmaWxlIG1vZGlmaWNhdGlvbnMuIEp1c3QgdG8gcm91bmQgdGhpbmdzIG91dCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgcmVhZCBzaWRlIG9mIHRoZSBzYW1lIGNvaW46IGxldCdzIHRha2UgYSBsb29rIGF0IGBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudGAgYXMgd2VsbCB0byBidWlsZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgZXh0ZW50cyBhcmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjQ4LjM2NTQwMzEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NTMyOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzcGx1c19leHRfcmVhZF9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmM9MTQ5PWludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1OS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxNjA6c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTYxLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudCxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE4MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xOTQtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTk1OlxcdHJlcyA9IF9faGZzcGx1c19leHRfcmVhZF9leHRlbnQoZmQsIGhpcC1cXHUwMDNlY2FjaGVkX2V4dGVudHMsIGlub2RlLVxcdTAwM2VpX2lubyxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xOTYtXFx0XFx0XFx0XFx0XFx0YmxvY2ssIEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkgP1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjA5LVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIxMDpzdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMTEte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MjI5PWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNjYtXFx0LypcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyNjc6XFx0ICogaGZzcGx1c19leHRfcmVhZF9leHRlbnQgd2lsbCB3cml0ZSBvdXQgYSBjYWNoZWQgZXh0ZW50IGludG9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNjgtXFx0ICogdGhlIGV4dGVudHMgYnRyZWUuICBJbiB0aGF0IGNhc2Ugd2UgbWF5IGhhdmUgdG8gbWFyayB0aGUgaW5vZGVcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3MS1cXHR3YXNfZGlydHkgPSAoaGlwLVxcdTAwM2VleHRlbnRfc3RhdGUgXFx1MDAyNiBIRlNQTFVTX0VYVF9ESVJUWSk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjcyOlxcdHJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3My1cXHRpZiAocmVzKSB7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zOTU9aW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDIwLVxcdGRvIHtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0MjE6XFx0XFx0cmVzID0gX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChcXHUwMDI2ZmQsIGV4dF9lbnRyeSwgY25pZCxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00MjItXFx0XFx0XFx0XFx0XFx0XFx0dG90YWxfYmxvY2tzLCB0eXBlKTtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTQ0MD1pbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NjAtXFx0ZWxzZSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDYxOlxcdFxcdHJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBoaXAtXFx1MDAzZWFsbG9jX2Jsb2Nrcyk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDYyLVxcdFxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjQ4LjQxMzI1OTY1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODk5OTQ0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipIRlMrIENvZGUgSW5zcGVjdGlvbjogRm9jdXNpbmcgb24gQ29yZSBGaWxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGlzIEhGUysgY29kZSBhbmQgSSd2ZSBnb3QgYSBzcGVjaWZpYyB0YXJnZXQgaW4gbWluZDogdW5kZXJzdGFuZGluZyBob3cgZmlsZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IGEgbG93IGxldmVsLiBJIHNlZSBgaGZzcGx1c19nZXRfYmxvY2tgIGFzIGEgcmVhbGx5IGNydWNpYWwgcG9pbnQgdG8gc3RhcnQuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgcGxhY2Ugd2hlcmUgeW91J3JlIHJlcXVlc3RpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgZm9jYWwgcG9pbnQuIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHRocmVhZCB0byByZWxhdGVkIGZ1bmN0aW9uYWxpdGllcyB0byB1bmRlcnN0YW5kIGl0IHByb3Blcmx5LlxuXG5Gb2xsb3dpbmcgdGhpcyBpbml0aWFsIGFuYWx5c2lzIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGZpbGUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5LCBJIHNlZSBzb21lIGtleSBmdW5jdGlvbnMgdGhhdCB3aWxsIG1ha2UgdGhpcyBmb2N1cyByZWxldmFudC4gTmFtZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgaG93IHdlIGhhbmRsZSBleHRlbmRpbmcgYSBmaWxlIChgaGZzcGx1c19maWxlX2V4dGVuZGApLCB0cnVuY2F0aW5nIGEgZmlsZSAoYGhmc3BsdXNfZmlsZV90cnVuY2F0ZWApLCBhbmQgd3JpdGluZyBleHRlbnRzIChgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCkuIFRoZXNlIGFsbCBzZWVtIGxpa2UgbG9naWNhbGx5IGludGVycmVsYXRlZCBvcGVyYXRpb25zIHRvIHB1cnN1ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvcmUgcm91dGluZXMuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBkb3VibGUtY2hlY2sgdGhhdCB0aGUgSEZTUExVUyBmZWF0dXJlIGlzIGFjdHVhbGx5IGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gR290dGEgbWFrZSBzdXJlIEknbSB3b3JraW5nIHdpdGggdGhlIHJlbGV2YW50IGJpdHMsIGFuZCB0aGF0IHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiB0aGUgYnVpbGQgSSdtIHVzaW5nLiBPdGhlcndpc2UsIEknbSBnb2luZyB0byBiZSBjaGFzaW5nIGdob3N0cy4gVGhlbiwgaXQncyB0aW1lIHRvIGdldCBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjUzLjMxMzIwNjI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY5Mzg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDA6NTMuMzU2OTAzMjM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODc3MjE5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBPcHRpb24gYEhGU1BMVVNfRlNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSEZTUExVU19GU2Agb3B0aW9uIGluIHRoZSBLY29uZmlnLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBhIHN0YW5kYWxvbmUgcGllY2Ugb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzLiBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvdGhlciBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgSEZTUExVU19GU2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBEaWdnaW5nIGludG8gZGVwZW5kZW5jaWVzIGlzIGFsd2F5cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJdCdzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDA6NTYuMjQ0NjI4MDUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU1BMVVNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5MU19VVEY4XFxuICAgODpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcXG4gIDExOlxcdFxcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUysgYW5kIHdhcyBpbnRyb2R1Y2VkIHdpdGhcXG4gIDE0OlxcdFxcdCAgTWFjT1MgOC4gSXQgaW5jbHVkZXMgYWxsIE1hYyBzcGVjaWZpYyBmaWxlc3lzdGVtIGRhdGEgc3VjaCBhc1xcbiAgMTU6XFx0XFx0ICBkYXRhIGZvcmtzIGFuZCBjcmVhdG9yIGNvZGVzLCBidXQgaXQgYWxzbyBoYXMgc2V2ZXJhbCBVTklYXFxuICAxNjpcXHRcXHQgIHN0eWxlIGZlYXR1cmVzIHN1Y2ggYXMgZmlsZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIEhGUysgZmlsZXN5c3RlbVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBIRlNQTFVTX0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQwOjU2LjI0NDcwNzAwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM4MTUxOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgRmlsZXN5c3RlbSBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBUaGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24gaGluZ2VzIG9uIHRoZSBIRlMrIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZ3VyYXRpb24uIEl0IGFwcGVhcnMgdGhhdCBgQkxPQ0tgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgdHlwaWNhbGx5IGVuYWJsZWQsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblRoZSBrZXkgaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgaW5kaWNhdGluZyB0aGlzIGlzIGEgdmFsdWFibGUgYXZlbnVlIHRvIHB1cnN1ZS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAsIGBoZnNwbHVzX2ZpbGVfZXh0ZW5kYCwgYGhmc3BsdXNfZmlsZV90cnVuY2F0ZWAsIGFuZCBgaGZzcGx1c19nZXRfYmxvY2tgLiBUaGVzZSBhcmUgY2xlYXJseSBmbGFnZ2VkIGFzIGFyZWFzIG9mIGludGVyZXN0LlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBib3VuZHMgY2hlY2sgaW4gYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCwgd2hpY2ggc3VnZ2VzdHMgYSBwcmlvciB2dWxuZXJhYmlsaXR5IHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBmaWxlc3lzdGVtIGZ1bmN0aW9uIG1ha2VzIGl0IHJlYWNoYWJsZSB2aWEgZnV6emVyIGlucHV0LiBUaGUgYEhGU1BMVVNfRlNgIGNvbmZpZ3VyYXRpb24gY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgSEZTKyBpcyB0aGUgcHJpbWFyeSBmb2N1cy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGFuZCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDEsIk91dHB1dFRva2VucyI6MTI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6MDEuNTgyODYxNjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0ODYwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfZmlsZV9leHRlbmRcIixcbiAgICBcImhmc3BsdXNfZmlsZV90cnVuY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19nZXRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfZmlsZV9leHRlbmRcIixcbiAgICBcImhmc3BsdXNfZmlsZV90cnVuY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19nZXRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTowMS42NzgzNTc0NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTA3ODkxMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6MDEuNjc4ODgxMjU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4NTA3MzYzMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjU2OTE5NzZlNWEwZGI3M2JmZGVmYzUxYTUxNDU4ODA2OWQ4NDRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTA6NDA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG5pbmRleCA4MTNlNjhiOGVjZDY1Li5lYjdjMTE1MjRkMTg4IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmNcbisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG5AQCAtMTEwLDYgKzExMCw4IEBAIHN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKVxuK1x0XHRcdHJldHVybiAtRUlPO1xuIFx0XHRoZnNfYm5vZGVfd3JpdGUoZmQtXHUwMDNlYm5vZGUsIGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbiBcdFx0XHRcdGZkLVx1MDAzZWVudHJ5b2Zmc2V0LCBmZC1cdTAwM2VlbnRyeWxlbmd0aCk7XG4gXHRcdGhpcC1cdTAwM2VleHRlbnRfc3RhdGUgXHUwMDI2PSB+SEZTUExVU19FWFRfRElSVFk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTowMS42Nzg4ODIwNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0MTUxODc3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZnMvaGZzcGx1cy9leHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgZnVuY3Rpb24sIGFkZGluZyBhIGNoZWNrLiBMZXQncyBkaWcgaW4uXG5cblRoZSBjb2RlIG5vdyBpbmNsdWRlcyBhIGNoZWNrOiBgaWYgKGZkLVx1MDAzZWVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKSByZXR1cm4gLUVJTztgICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBoZnNfYm5vZGVfd3JpdGVgLiAgTGV0J3MgdGhpbmsgdGhyb3VnaCB0aGlzIGNhcmVmdWxseS4gYGhmc19ibm9kZV93cml0ZWAgd3JpdGVzIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgYnl0ZXMgZnJvbSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCB0byBgZmQtXHUwMDNlYm5vZGVgIGF0IGBmZC1cdTAwM2VlbnRyeW9mZnNldGAuIE5vdywgKmlmKiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIHdhcyAqbGFyZ2VyKiB0aGFuIGBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKWAgKmJlZm9yZSogdGhpcyBwYXRjaCwgaXQgd291bGQgcmVhZCBvdXQtb2YtYm91bmRzIGZyb20gYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AuICBSaWdodCwgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXMgYW4gYXJyYXkgb2YgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHdpdGhpbiBhbiBgaGZzcGx1c19leHRlbnRfcmVjYC4gTGV0IG1lIGNvbmZpcm0uLi4gYGhpcGAgaXMgYEhGU1BMVVNfSShpbm9kZSlgLCBhbmQgYGNhY2hlZF9leHRlbnRzYCAqaXMqIGFuIGBoZnNwbHVzX2V4dGVudF9yZWNgLiBUaGF0IG1lYW5zIGl0J3MgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuXG5cblNvLCBpZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgICppcyogbGFyZ2VyIHRoYW4gYHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpYCwgd2UnZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgT09CIHJlYWQsIGFuZCBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQuICBOb3csIHRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzLCByaWdodD8gSXQgdGhyb3dzIGFuIGVycm9yIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgdGhlIHdyb25nIHNpemUuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIGEgYnVnLlxuXG5XaGF0IGFib3V0IHNtYWxsZXIgc2l6ZXM/ICBJZiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIHNtYWxsZXIgdGhhbiBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgLCBpdCB3b3VsZCB3cml0ZSBmZXdlciBieXRlcywgbGVhdmluZyB1bndyaXR0ZW4gYnl0ZXMuIERvZXMgKnRoYXQqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IFRoZSBjcnVjaWFsIHRoaW5nIGlzIHdoZXRoZXIgdGhlIHNvdXJjZSwgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AsIGlzIGl0c2VsZiBwcm9wZXJseSBpbml0aWFsaXplZC4gSWYgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQsIEtNU0FOICptaWdodCogZmxhZyBpdC4gSG93ZXZlciwgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgaXQgcmVhZGluZyBvdXQtb2YtYm91bmRzLlxuXG5IYW5nIG9uLiAqVGhpcyBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCEqIEl0J3MgKmZpeGluZyogYSBidWcgdGhhdCBLQVNBTiAqd291bGQqIGNhdGNoLiBUaGUgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXMgaGVhcC1hbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEtBU0FOICp3aWxsKiBkZXRlY3QgYW4gT09CIHJlYWQuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCwgd2hpY2gsIGluIHR1cm4sIGFsc28gYXZvaWRzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHBvdGVudGlhbCB3cml0ZS4gVGhpcyBpcyBnb29kLiBJdCBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50YCBpcyBhY3R1YWxseSBkb2luZyB3aGF0IEkgdGhpbmsgaXQgZG9lcy4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQxOjIwLjA5NDA3MjY2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NzQ4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmM9NzY9c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04Ni1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo4NzpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODgtXFx0XFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTMzPXN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTQyLVxcdFxcdFxcdHJldHVybiByZXM7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2ZmQpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC1cXHRcXHRoZnNfZmluZF9leGl0KFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTg5LVxcdGlmIChoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2IEhGU1BMVVNfRVhUX0RJUlRZKSB7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTkwOlxcdFxcdHJlcyA9IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KGlub2RlLCBmZCk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTkxLVxcdFxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQxOjIwLjEzNzg1MzI0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY0MTEzNTg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3MgcHVsbCB1cCB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiBvZiBgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIHRob3JvdWdobHk7IGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHdoZW4gZGVhbGluZyB3aXRoIEhGUysgZXh0ZW50IHdyaXRpbmcuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIEhGUysgZmlsZXN5c3RlbSBoYW5kbGVzIGFsbG9jYXRpbmcgYW5kIHdyaXRpbmcgZGF0YSBibG9ja3MsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBmcmFnbWVudGVkIGZpbGVzIG9yIHRob3NlIHNwYW5uaW5nIG11bHRpcGxlIGFsbG9jYXRpb24gYmxvY2tzLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgQi10cmVlIHN0cnVjdHVyZXMgdXNlZCBmb3IgZXh0ZW50IG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3b3JrczogaXMgaXQgY29udGlndW91cywgb3IgZG9lcyBpdCB0cnkgdG8gY29hbGVzY2UgZXhpc3RpbmcgZXh0ZW50cz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzPyBJcyB0aGVyZSBlcnJvciBoYW5kbGluZz8gSG93IGRvZXMgaXQgaGFuZGxlIHBhcnRpYWwgd3JpdGVzPyBXaGF0IGFib3V0IG1ldGFkYXRhIHVwZGF0ZXM/IEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb24gaG93IGV4dGVudCB3cml0ZXMgYXJlIG1hbmFnZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd2lsbCBiZSBpbnRlcmVzdGluZywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBtaW5pbWl6ZXMgZGlzayBzZWVrcyBhbmQgb3B0aW1pemUgb3ZlcmFsbCBJL08gb3BlcmF0aW9ucy4gRmluYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBqb3VybmFsaW5nIG9yIHRyYW5zYWN0aW9uIGxvZyBzeXN0ZW0sIGlmIG9uZSBpcyBwcmVzZW50LCB0byBndWFyYW50ZWUgZGF0YSBpbnRlZ3JpdHkgaW4gdGhlIGV2ZW50IG9mIGEgc3lzdGVtIGNyYXNoIG9yIHBvd2VyIGxvc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTozNS43Nzg5OTIyNDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaGZzcGx1cy9leHRlbnRzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODc6XFx0c3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgODg6XFx0XFx0XFx0c3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4gIDkxOlxcdFxcdGludCByZXM7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2aGlwLVxcdTAwM2VleHRlbnRzX2xvY2spKTtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0aGZzcGx1c19leHRfYnVpbGRfa2V5KGZkLVxcdTAwM2VzZWFyY2hfa2V5LCBpbm9kZS1cXHUwMDNlaV9pbm8sIGhpcC1cXHUwMDNlY2FjaGVkX3N0YXJ0LFxcbiAgOTY6XFx0XFx0XFx0XFx0ICAgICAgSEZTUExVU19JU19SU1JDKGlub2RlKSA/XFxuICA5NzpcXHRcXHRcXHRcXHRcXHRIRlNQTFVTX1RZUEVfUlNSQyA6IEhGU1BMVVNfVFlQRV9EQVRBKTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0cmVzID0gaGZzX2JyZWNfZmluZChmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XFxuIDEwMDpcXHRcXHRpZiAoaGlwLVxcdTAwM2VleHRlbnRfc3RhdGUgXFx1MDAyNiBIRlNQTFVTX0VYVF9ORVcpIHtcXG4gMTAxOlxcdFxcdFxcdGlmIChyZXMgIT0gLUVOT0VOVClcXG4gMTAyOlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDEwMzpcXHRcXHRcXHQvKiBGYWlsIGVhcmx5IGFuZCBhdm9pZCBFTk9TUEMgZHVyaW5nIHRoZSBidHJlZSBvcGVyYXRpb24gKi9cXG4gMTA0OlxcdFxcdFxcdHJlcyA9IGhmc19ibWFwX3Jlc2VydmUoZmQtXFx1MDAzZXRyZWUsIGZkLVxcdTAwM2V0cmVlLVxcdTAwM2VkZXB0aCArIDEpO1xcbiAxMDU6XFx0XFx0XFx0aWYgKHJlcylcXG4gMTA2OlxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuIDEwNzpcXHRcXHRcXHRoZnNfYnJlY19pbnNlcnQoZmQsIGhpcC1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuIDEwODpcXHRcXHRcXHRcXHRcXHRzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSk7XFxuIDEwOTpcXHRcXHRcXHRoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2PSB+KEhGU1BMVVNfRVhUX0RJUlRZIHwgSEZTUExVU19FWFRfTkVXKTtcXG4gMTEwOlxcdFxcdH0gZWxzZSB7XFxuIDExMTpcXHRcXHRcXHRpZiAocmVzKVxcbiAxMTI6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gMTEzOlxcdFxcdFxcdGlmIChmZC1cXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpXFxuIDExNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMTE1OlxcdFxcdFxcdGhmc19ibm9kZV93cml0ZShmZC1cXHUwMDNlYm5vZGUsIGhpcC1cXHUwMDNlY2FjaGVkX2V4dGVudHMsXFxuIDExNjpcXHRcXHRcXHRcXHRcXHRmZC1cXHUwMDNlZW50cnlvZmZzZXQsIGZkLVxcdTAwM2VlbnRyeWxlbmd0aCk7XFxuIDExNzpcXHRcXHRcXHRoaXAtXFx1MDAzZWV4dGVudF9zdGF0ZSBcXHUwMDI2PSB+SEZTUExVU19FWFRfRElSVFk7XFxuIDExODpcXHRcXHR9XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdC8qXFxuIDEyMTpcXHRcXHQgKiBXZSBjYW4ndCBqdXN0IHVzZSBoZnNwbHVzX21hcmtfaW5vZGVfZGlydHkgaGVyZSwgYmVjYXVzZSB3ZVxcbiAxMjI6XFx0XFx0ICogYWxzbyBnZXQgY2FsbGVkIGZyb20gaGZzcGx1c193cml0ZV9pbm9kZSwgd2hpY2ggc2hvdWxkIG5vdFxcbiAxMjM6XFx0XFx0ICogcmVkaXJ0eSB0aGUgaW5vZGUuICBJbnN0ZWFkIHRoZSBjYWxsZXJzIGhhdmUgdG8gYmUgY2FyZWZ1bFxcbiAxMjQ6XFx0XFx0ICogdG8gZXhwbGljaWx5IG1hcmsgdGhlIGlub2RlIGRpcnR5LCB0b28uXFxuIDEyNTpcXHRcXHQgKi9cXG4gMTI2OlxcdFxcdHNldF9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6MzUuNzc5MDcyNjgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDgwNDQyODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCB0aGUga2V5IHBhcnQgaXMgdGhpcyBuZXcgY2hlY2s6IGBpZiAoZmQtXHUwMDNlZW50cnlsZW5ndGggIT0gc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpYC4gIEl0IHNlZW1zIGxpa2UgdGhlIGRldmVsb3BlciBhbnRpY2lwYXRlZCBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGBoZnNfYm5vZGVfd3JpdGVgLiBUaGV5J3JlIG5vdyBtYWtpbmcgc3VyZSBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIHRoZSByaWdodCBzaXplIGJlZm9yZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uICBUaGUgZ29hbCBpcyBwcmV0dHkgY2xlYXIg4oCTIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50c2AgaXMgYSBgaGZzcGx1c19leHRlbnRfcmVjYCwgYW5kIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuIElmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gd2hhdCBhIGBoZnNwbHVzX2V4dGVudF9yZWNgIGNhbiBob2xkLCB0aGF0IG1lYW5zIGBoZnNfYm5vZGVfd3JpdGVgIHdvdWxkIGF0dGVtcHQgdG8gcmVhZCAqcGFzdCogdGhlIGJvdW5kcyBvZiBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCB3aGVuIGNvcHlpbmcgZGF0YSB0byB0aGUgYm5vZGUuIFRoYXQncyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgS0FTQU4gaXMgcmlnaHRseSBmbGFnZ2luZyBpdC4gTm93LCBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzIGNvcnJlY3QsIHNvIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mb2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdWxseSBjb21wcmVoZW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgYXJyYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MTo0OS4yNTk1MTg1MTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjg1OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9idHJlZS5jPTQ5OT1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2RlcylcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy01MDEtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IHRyZWUtXFx1MDAzZWlub2RlO1xcbmZzL2hmc3BsdXMvYnRyZWUuYzo1MDI6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTAzLVxcdHUzMiBjb3VudDtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTg3PXN0YXRpYyBpbnQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTg5LXtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo5MDpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTkxLVxcdGludCByZXM7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0xODE9c3RhdGljIGlubGluZSBpbnQgX19oZnNwbHVzX2V4dF9jYWNoZV9leHRlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMTgzLXtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxODQ6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xODUtXFx0aW50IHJlcztcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIxMD1zdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMTEte1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIxMjpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIxMy1cXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIyOT1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjMzLVxcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjIzNDpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIzNS1cXHRpbnQgcmVzID0gLUVJTztcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTQ0MD1pbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDMtXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDQ0OlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDQ1LVxcdHUzMiBzdGFydCwgbGVuLCBnb2FsO1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ2PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NDgtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjU0OTpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTU1MC1cXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTE3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTE3OC1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoxNzk6c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMTgwLVxcdGF0b21pY190IG9wZW5jbnQ7XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yMzMtXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MjM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqSEZTUExVU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjM1LXtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyMzY6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yMzctfVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTMzMD1pbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzQtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUocGF0aC1cXHUwMDNlZGVudHJ5KTtcXG5mcy9oZnNwbHVzL2lub2RlLmM6MzM1OlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMzNi1cXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz0zNTY9aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTM1OS1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbmZzL2hmc3BsdXMvaW5vZGUuYzozNjA6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzYxLVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz00NzA9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00NzQtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ3NTpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXA7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ3Ni1cXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz01NTQ9dm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01NTctXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjU1ODpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy01NTktXFx0dTMyIGNvdW50O1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTc3MT1pbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNzczLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjc3NDpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy03NzUtXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9NzkyPWludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy03OTUtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG5mcy9oZnNwbHVzL2lub2RlLmM6Nzk2OlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTc5Ny1cXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz02OTA9c3RhdGljIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2hmc3BsdXMvc3VwZXIuYy02OTEte1xcbmZzL2hmc3BsdXMvc3VwZXIuYzo2OTI6XFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaTtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtNjkzLVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jPTY5OD1zdGF0aWMgdm9pZCBoZnNwbHVzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy03MDItXFxuZnMvaGZzcGx1cy9zdXBlci5jOjcwMzojZGVmaW5lIEhGU1BMVVNfSU5PREVfU0laRVxcdHNpemVvZihzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvKVxcbmZzL2hmc3BsdXMvc3VwZXIuYy03MDQtXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9NzU2PXN0YXRpYyB2b2lkIGhmc3BsdXNfaW5pdF9vbmNlKHZvaWQgKnApXFxuZnMvaGZzcGx1cy9zdXBlci5jLTc1Ny17XFxuZnMvaGZzcGx1cy9zdXBlci5jOjc1ODpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppID0gcDtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtNzU5LVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTIwMS1cXHRzdHJ1Y3QgaW5vZGUgKmF0dHJfZmlsZTtcXG5mcy9oZnNwbHVzL3hhdHRyLmM6MjAyOlxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcDtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtMjAzLVxcdHN0cnVjdCBoZnNfYm5vZGVfZGVzYyAqZGVzYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDE6NDkuMzA2ODA2OTQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NjkxNjY4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgaGZzcGx1c19pbm9kZV9pbmZvIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEhGUysgaW5vZGUgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgY2xlYXI6IEknbSBnb2luZyB0byBwb3JlIG92ZXIgdGhlIGBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvYCBkZWZpbml0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBwdWxsaW5nIGl0IGZyb20gYGZzL2hmc3BsdXMvaGZzcGx1c19mcy5oYC4gVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpbm9kZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoaXMgZmlsZXN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjcml0aWNhbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIG9yIGRpcmVjdG9yeSB3aXRoaW4gYW4gSEZTKyB2b2x1bWUuIFRoaXMgd2lsbCBpbnZvbHZlIGV4YW1pbmluZyBpdHMgZmllbGRzLCB0aGVpciBkYXRhIHR5cGVzLCBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGF0dHJpYnV0ZXMsIGV4dGVudHMsIGFuZCBvdGhlciBlc3NlbnRpYWwgZGF0YSBhcmUgbWFuYWdlZCBhdCB0aGUgaW5vZGUgbGV2ZWwuIEknbGwgYmUgbm90aW5nIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbCBvciBwYXJ0aWN1bGFybHkgd2VsbC1kZXNpZ25lZC4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGVjb25zdHJ1Y3QgdGhpcyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MjowNC45OTg0Nzc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3OTpcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcXG4gMTgwOlxcdFxcdGF0b21pY190IG9wZW5jbnQ7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdC8qXFxuIDE4MzpcXHRcXHQgKiBFeHRlbnQgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiwgcHJvdGVjdGVkIGJ5IGV4dGVudHNfbG9jay5cXG4gMTg0OlxcdFxcdCAqL1xcbiAxODU6XFx0XFx0dTMyIGZpcnN0X2Jsb2NrcztcXG4gMTg2OlxcdFxcdHUzMiBjbHVtcF9ibG9ja3M7XFxuIDE4NzpcXHRcXHR1MzIgYWxsb2NfYmxvY2tzO1xcbiAxODg6XFx0XFx0dTMyIGNhY2hlZF9zdGFydDtcXG4gMTg5OlxcdFxcdHUzMiBjYWNoZWRfYmxvY2tzO1xcbiAxOTA6XFx0XFx0aGZzcGx1c19leHRlbnRfcmVjIGZpcnN0X2V4dGVudHM7XFxuIDE5MTpcXHRcXHRoZnNwbHVzX2V4dGVudF9yZWMgY2FjaGVkX2V4dGVudHM7XFxuIDE5MjpcXHRcXHR1bnNpZ25lZCBpbnQgZXh0ZW50X3N0YXRlO1xcbiAxOTM6XFx0XFx0c3RydWN0IG11dGV4IGV4dGVudHNfbG9jaztcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0LypcXG4gMTk2OlxcdFxcdCAqIEltbXV0YWJsZSBkYXRhLlxcbiAxOTc6XFx0XFx0ICovXFxuIDE5ODpcXHRcXHRzdHJ1Y3QgaW5vZGUgKnJzcmNfaW5vZGU7XFxuIDE5OTpcXHRcXHRfX2JlMzIgY3JlYXRlX2RhdGU7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdC8qXFxuIDIwMjpcXHRcXHQgKiBQcm90ZWN0ZWQgYnkgc2JpLVxcdTAwM2V2aF9tdXRleC5cXG4gMjAzOlxcdFxcdCAqL1xcbiAyMDQ6XFx0XFx0dTMyIGxpbmtpZDtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0LypcXG4gMjA3OlxcdFxcdCAqIEFjY2Vzc2VkIHVzaW5nIGF0b21pYyBiaXRvcHMuXFxuIDIwODpcXHRcXHQgKi9cXG4gMjA5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdC8qXFxuIDIxMjpcXHRcXHQgKiBQcm90ZWN0ZWQgYnkgaV9tdXRleC5cXG4gMjEzOlxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0c2VjdG9yX3QgZnNfYmxvY2tzO1xcbiAyMTU6XFx0XFx0dTggdXNlcmZsYWdzO1xcdFxcdC8qIEJTRCB1c2VyIGZpbGUgZmxhZ3MgKi9cXG4gMjE2OlxcdFxcdHUzMiBzdWJmb2xkZXJzO1xcdFxcdC8qIFN1YmZvbGRlciBjb3VudCAoSEZTWCBvbmx5KSAqL1xcbiAyMTc6XFx0XFx0bG9mZl90IHBoeXNfc2l6ZTtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcXG4gMjIwOlxcdH07XFxuIDIyMTpcXHRcXG4gMjIyOlxcdCNkZWZpbmUgSEZTUExVU19FWFRfRElSVFlcXHQweDAwMDFcXG4gMjIzOlxcdCNkZWZpbmUgSEZTUExVU19FWFRfTkVXXFx0XFx0MHgwMDAyXFxuIDIyNDpcXHRcXG4gMjI1OlxcdCNkZWZpbmUgSEZTUExVU19JX1JTUkNcXHRcXHQwXFx0LyogcmVwcmVzZW50cyBhIHJlc291cmNlIGZvcmsgKi9cXG4gMjI2OlxcdCNkZWZpbmUgSEZTUExVU19JX0NBVF9ESVJUWVxcdDFcXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgY2F0YWxvZyB0cmVlICovXFxuIDIyNzpcXHQjZGVmaW5lIEhGU1BMVVNfSV9FWFRfRElSVFlcXHQyXFx0LyogaGFzIGNoYW5nZXMgaW4gdGhlIGV4dGVudCB0cmVlICovXFxuIDIyODpcXHQjZGVmaW5lIEhGU1BMVVNfSV9BTExPQ19ESVJUWVxcdDNcXHQvKiBoYXMgY2hhbmdlcyBpbiB0aGUgYWxsb2NhdGlvbiBmaWxlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQyOjA0Ljk5ODU1OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzOTc0ODI3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBIRlMrIEV4dGVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGhmc3BsdXNfZXh0ZW50X3JlY2AsIHdoaWNoIGlzIGp1c3QgYW4gYXJyYXkgb2YgZWlnaHQgYGhmc3BsdXNfZXh0ZW50X2Rlc2NyaXB0b3JgIHN0cnVjdHMuIEdvdCBpdC4gQW5kIGBoZnNfYm5vZGVfd3JpdGVgLi4uIHJpZ2h0LCBpdCB0YWtlcyBhIGB2b2lkICpgIGFuZCB3cml0ZXMgdG8gdGhlIGJub2RlLiBDbGFzc2ljLiBOb3csIHRoZSBwcm9ibGVtLiBJdCBzZWVtcyBsaWtlIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgYmlnZ2VyIHRoYW4gdGhlIHNpemUgb2YgYGhmc3BsdXNfZXh0ZW50X3JlY2AsIHdlJ3JlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHNgLiBUaGF0J3MgYmFkLiBUaGF0J3MgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgaXQncyBmcm9tIGEgc2xhYi1hbGxvY2F0ZWQgYGhmc3BsdXNfaW5vZGVfaW5mb2Agc3RydWN0dXJlLiBLQVNBTiBzaG91bGQgYmUgZGV0ZWN0aW5nIHRoYXQsIHdoaWNoIGlzIGdvb2QuXG5cbkJ1dCB3YWl0LiBXaGF0IGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqPyBJZiB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIsIHRoZW4gd2UgYXJlIG9ubHkgd3JpdGluZyBmZXdlciBieXRlcyB0byB0aGUgYm5vZGUsIHdoaWNoIGRvZXNuJ3Qgc2VlbSBsaWtlIGFuIGltbWVkaWF0ZSBwcm9ibGVtLiBJdCdzIGp1c3QgYSBzaG9ydGVyIHdyaXRlLiBUaGUgcGF0Y2ggbWVudGlvbnMgYSBjaGVjaywgYGlmIChmZC1cdTAwM2VlbnRyeWxlbmd0aCAhPSBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSkgcmV0dXJuIC1FSU87YC4gU28sIGlmIHRoZSBzaXplIGlzIGluY29ycmVjdCwgd2UgZXJyb3Igb3V0IGFuZCByZXR1cm4uIElmIHRoZSBzaXplIGlzIHNtYWxsZXIsIHRoZW4gaXQganVzdCB3cml0ZXMgZmV3ZXIgYnl0ZXMuIFNvLCB0aGF0IGRvZXNuJ3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCdzIGxhcmdlciwgd2UgaGF2ZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hpY2ggS0FTQU4gY2FuIGNhdGNoLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdzogSXMgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlPyBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBpcyBwYXJ0IG9mIHRoZSBgaGZzcGx1c19pbm9kZV9pbmZvYCBzdHJ1Y3R1cmUsIHNvIHdlIHNob3VsZCByZWFsbHkga25vdyBpZiB0aGF0J3MgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBMZXQgbWUgZGlnIGludG8gYGhmc3BsdXNfYWxsb2NfaW5vZGVgIGFuZCBzZWUgaWYgd2UgY2FuIGdldCB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMDo0MjoyMC4zOTYwNDQ3OTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaGZzcGx1cy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHRzdGF0aWMgc3RydWN0IGlub2RlICpoZnNwbHVzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDY5MTpcXHR7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICppO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRpID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTtcXG4gNjk1OlxcdFxcdHJldHVybiBpID8gXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZSA6IE5VTEw7XFxuIDY5NjpcXHR9XFxuIDY5NzpcXHRcXG4gNjk4OlxcdHN0YXRpYyB2b2lkIGhmc3BsdXNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiA2OTk6XFx0e1xcbiA3MDA6XFx0XFx0a21lbV9jYWNoZV9mcmVlKGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBIRlNQTFVTX0koaW5vZGUpKTtcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdFxcbiA3MDM6XFx0I2RlZmluZSBIRlNQTFVTX0lOT0RFX1NJWkVcXHRzaXplb2Yoc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbylcXG4gNzA0OlxcdFxcbiA3MDU6XFx0c3RhdGljIGludCBoZnNwbHVzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gNzA2OlxcdHtcXG4gNzA3OlxcdFxcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBoZnNwbHVzX2ZpbGxfc3VwZXIpO1xcbiA3MDg6XFx0fVxcbiA3MDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQyOjIwLjM5NjE0Mjg5M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY4NjY5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbm9kZSBBbGxvY2F0aW9uIGluIEhGUysqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgaW5vZGVzIGFyZSBoYW5kbGVkIGluIHRoZSBIRlMrIGZpbGVzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjb2RlJ3MgdXNpbmcgYGFsbG9jX2lub2RlX3NiYCBmb3IgaW5vZGUgYWxsb2NhdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGF0IG1lbW9yeSBhY3R1YWxseSBjb21pbmcgZnJvbT8gVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBpbm9kZXMgZnJvbSBgaGZzcGx1c19pbm9kZV9jYWNoZXBgLCB3aGljaCBpcywgb2YgY291cnNlLCBhIHNsYWIgY2FjaGUuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludDogaG93IGlzIHRoaXMgY2FjaGUgY29uZmlndXJlZD8gU3BlY2lmaWNhbGx5LCBpcyB0aGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBvciBhIHNpbWlsYXIgYWNjb3VudGluZyBtZWNoYW5pc20gZW5hYmxlZCB3aGVuIGBoZnNwbHVzX2lub2RlX2NhY2hlcGAgaXMgKmNyZWF0ZWQqPyBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IHRyYWNraW5nIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlc2UgaW5vZGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciB0aGF0IHNsYWIgY2FjaGUgaW4gbWVtb3J5IHN0YXRpc3RpY3MgYW5kIHBvdGVudGlhbGx5LCB3aXRoaW4gcmVzb3VyY2UgbGltaXRhdGlvbnMuIEkgd2FudCB0byBhdm9pZCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIGlub2RlIGRhdGEuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3MgZGlnIGludG8gYGhmc3BsdXNfaW5pdF9vbmNlYCBhbmQgc2VlIGhvdyB0aGF0IGNhY2hlIGlzIGluaXRpYWxpemVkLiBUaGF0J3Mgd2hlcmUgdGhlIGFuc3dlciBzaG91bGQgYmUuIFRoaXMgd2lsbCBzaG93IHVzIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDEwOjQyOjI0Ljk2NDgxNTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTY6XFx0c3RhdGljIHZvaWQgaGZzcGx1c19pbml0X29uY2Uodm9pZCAqcClcXG4gNzU3OlxcdHtcXG4gNzU4OlxcdFxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmkgPSBwO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZSk7XFxuIDc2MTpcXHR9XFxuIDc2MjpcXHRcXG4gNzYzOlxcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfaGZzcGx1c19mcyh2b2lkKVxcbiA3NjQ6XFx0e1xcbiA3NjU6XFx0XFx0aW50IGVycjtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0aGZzcGx1c19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcXFwiaGZzcGx1c19pY2FjaGVcXFwiLFxcbiA3Njg6XFx0XFx0XFx0SEZTUExVU19JTk9ERV9TSVpFLCAwLCBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9BQ0NPVU5ULFxcbiA3Njk6XFx0XFx0XFx0aGZzcGx1c19pbml0X29uY2UpO1xcbiA3NzA6XFx0XFx0aWYgKCFoZnNwbHVzX2lub2RlX2NhY2hlcClcXG4gNzcxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA3NzI6XFx0XFx0ZXJyID0gaGZzcGx1c19jcmVhdGVfYXR0cl90cmVlX2NhY2hlKCk7XFxuIDc3MzpcXHRcXHRpZiAoZXJyKVxcbiA3NzQ6XFx0XFx0XFx0Z290byBkZXN0cm95X2lub2RlX2NhY2hlO1xcbiA3NzU6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aGZzcGx1c19mc190eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDI6MjQuOTY0OTY0MjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyMjEyNjA1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbnQgUmVhZCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJhbmtseSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhcnJheSBpc24ndCBpbml0aWFsaXplZCB0byB6ZXJvIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBmdXR1cmUgcmVmZXJlbmNlLiBUaGUgc3lzdGVtIHJlYWRzIGZyb20gaXQgb3IgcG9wdWxhdGVzIGl0IGZyb20gZGlzayBhbmQgdGhhdCdzIG9rYXkuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGBoZnNwbHVzX2V4dGVudF9yZWNgIHN0cnVjdC4gV2hlbiB0aGlzIGhhcHBlbnMsIGBoZnNfYm5vZGVfd3JpdGVgIGF0dGVtcHRzIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGBoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHNgLCByZXN1bHRpbmcgaW4gYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gS0FTQU4gd2lsbCBkZXRlY3QgdGhpcywgcGxhaW4gYW5kIHNpbXBsZS5cblxuTm93LCBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlICptaWdodCogYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZmxvYXRpbmcgYXJvdW5kLCBhbmQgSSBhbHdheXMgbGlrZSB0byBjb3ZlciBteSBiYXNlcy4gQnV0LCBsZXQncyBicmVhayBpdCBkb3duOiBldmVuIGlmIGBmZC1cdTAwM2VlbnRyeWxlbmd0aGAgaXMgKnNtYWxsZXIqIHRoYW4gdGhlIHN0cnVjdCBzaXplLCBgaGZzX2Jub2RlX3dyaXRlYCBqdXN0IHdyaXRlcyBmZXdlciBieXRlcy4gU28sIGl0IG1heSBiZSBhIGRhdGEgY29ycnVwdGlvbiB0aGluZywgYnV0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdXNlciBzcGFjZS4gSXQncyBub3QgYSByZWFkIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsJ3MgcG9pbnQgb2Ygdmlldy4gVGhlIHJlYWwgY3VscHJpdCBpcyB0aGUgT09CIHJlYWQgd2hlbiBgZmQtXHUwMDNlZW50cnlsZW5ndGhgIGlzIGJpZ2dlci5cblxuVGhpcyBwYXRjaCwgdGhhbmtmdWxseSwgYWRkcyBhIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVx1MDAzZWVudHJ5bGVuZ3RoYCBpcyBleGFjdGx5IHRoZSBzaXplIG9mIGBoZnNwbHVzX2V4dGVudF9yZWNgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBUaGlzIHN0b3BzIHRoZSBPT0IgcmVhZC4gYGhmc19ibm9kZV93cml0ZWAgcmVhZHMgZnJvbSBgaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzYCBhbmQgd3JpdGVzIHRob3NlIGJ5dGVzIHRvIHRoZSBibm9kZSwgd2hpY2ggaXMganVzdCBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSBtZXRhZGF0YS4gSW1wb3J0YW50bHksIHRoaXMgZGF0YSBpcyAqbm90KiBiZWluZyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0J3MgYWxsIHdpdGhpbiB0aGUga2VybmVsJ3MgaW50ZXJuYWwgc3RydWN0dXJlcy4gVGhlIHZ1bG5lcmFiaWxpdHkgaXMgdGhlIE9PQiByZWFkIGl0c2VsZi5cblxuVGhlcmVmb3JlLCBzaW5jZSBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgYnVpbHQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGl0J3Mgbm90IGV2ZW4gYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IHRvIHVzZXIgc3BhY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiBLQVNBTiBoYW5kbGVzIHRoaXMganVzdCBmaW5lLiBUaGlzIHBhdGNoIGZpeGVzIHRoZSBPT0IgcmVhZCwgYW5kIEtBU0FOIHdpbGwgZW5zdXJlIGl0IHN0YXlzIGZpeGVkLiBHb29kIGVub3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjIsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTA6NDI6NDAuMTg2MjI2ODc2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudGAgdG8gZW5zdXJlIHRoYXQgYGZkLVxcdTAwM2VlbnRyeWxlbmd0aGAgaXMgZXhhY3RseSBlcXVhbCB0byBgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYylgIGJlZm9yZSBjYWxsaW5nIGBoZnNfYm5vZGVfd3JpdGVgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGlmIGBmZC1cXHUwMDNlZW50cnlsZW5ndGhgIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBgaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50c2AgYXJyYXksIGBoZnNfYm5vZGVfd3JpdGVgIHdpbGwgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5ICh3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUgc2xhYi1hbGxvY2F0ZWQgYHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm9gKS4gVGhpcyBjb25zdGl0dXRlcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBvbiBzbGFiIGFuZCBoZWFwIGFsbG9jYXRpb25zLiBTaW5jZSB0aGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCByYXRoZXIgdGhhbiBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8vdjp[1] Phase: Succeeded StartedAt: 2026-08-10 10:42:51 +0000 UTC FinishedAt: 2026-08-10 10:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 10:42:51 +0000 UTC FinishedAt: 2026-08-10 10:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2] Phase: Succeeded StartedAt: 2026-08-10 10:42:51 +0000 UTC FinishedAt: 2026-08-10 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 10:42:51 +0000 UTC FinishedAt: 2026-08-10 14:29:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 10:42:51 +0000 UTC FinishedAt: 2026-08-10 10:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 10:42:51 +0000 UTC FinishedAt: 2026-08-10 10:42:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8vdjp/series-workflow8vdjp-convert-artifact-2649269213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 10:43:02 +0000 UTC FinishedAt: 2026-08-10 11:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 10:43:02 +0000 UTC FinishedAt: 2026-08-10 11:03:26 +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:*e8173f90-57d7-4515-b6be-1d5178690183,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-workflow8vdjp/series-workflow8vdjp-convert-artifact-2649269213/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": "19a3f196-2d17-4cb3-a5f1-0d5f083cf695", "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-workflow8vdjp/series-workflow8vdjp-build-action-2859169555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 10:43:02 +0000 UTC FinishedAt: 2026-08-10 11:02:59 +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:*e8173f90-57d7-4515-b6be-1d5178690183,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-workflow8vdjp/series-workflow8vdjp-convert-artifact-2649269213/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": "19a3f196-2d17-4cb3-a5f1-0d5f083cf695", "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-workflow8vdjp/series-workflow8vdjp-build-action-2859169555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 11:03:26 +0000 UTC FinishedAt: 2026-08-10 11:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 11:03:26 +0000 UTC FinishedAt: 2026-08-10 11:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 11:03:26 +0000 UTC FinishedAt: 2026-08-10 11:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 11:03:26 +0000 UTC FinishedAt: 2026-08-10 11:03:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8vdjp/series-workflow8vdjp-convert-artifact-1878707128/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 11:03:55 +0000 UTC FinishedAt: 2026-08-10 11:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 11:03:55 +0000 UTC FinishedAt: 2026-08-10 11:05:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19a3f196-2d17-4cb3-a5f1-0d5f083cf695,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-workflow8vdjp/series-workflow8vdjp-build-action-2859169555/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-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 11:05:47 +0000 UTC FinishedAt: 2026-08-10 11:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 11:05:47 +0000 UTC FinishedAt: 2026-08-10 11:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 11:05:47 +0000 UTC FinishedAt: 2026-08-10 11:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 11:05:47 +0000 UTC FinishedAt: 2026-08-10 11:25:55 +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:*e8173f90-57d7-4515-b6be-1d5178690183,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-workflow8vdjp/series-workflow8vdjp-convert-artifact-1878707128/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": "a7c567bc-611c-441a-8c8d-c0b3495300b0", "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-workflow8vdjp/series-workflow8vdjp-build-action-504292516/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 11:05:47 +0000 UTC FinishedAt: 2026-08-10 11:25:32 +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:*e8173f90-57d7-4515-b6be-1d5178690183,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-workflow8vdjp/series-workflow8vdjp-convert-artifact-1878707128/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": "a7c567bc-611c-441a-8c8d-c0b3495300b0", "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-workflow8vdjp/series-workflow8vdjp-build-action-504292516/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 11:25:55 +0000 UTC FinishedAt: 2026-08-10 11:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 11:25:55 +0000 UTC FinishedAt: 2026-08-10 11:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 11:25:55 +0000 UTC FinishedAt: 2026-08-10 11:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 11:25:55 +0000 UTC FinishedAt: 2026-08-10 11:27:44 +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:*a7c567bc-611c-441a-8c8d-c0b3495300b0,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-workflow8vdjp/series-workflow8vdjp-build-action-504292516/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-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 14:29:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*19a3f196-2d17-4cb3-a5f1-0d5f083cf695,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a7c567bc-611c-441a-8c8d-c0b3495300b0,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-workflow8vdjp/series-workflow8vdjp-build-action-2859169555/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-workflow8vdjp/series-workflow8vdjp-build-action-504292516/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 11:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 11:27:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8vdjp/series-workflow8vdjp-convert-artifact-1080587025/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 11:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 11:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 11:27:54 +0000 UTC FinishedAt: 2026-08-10 11:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 11:28:04 +0000 UTC FinishedAt: 2026-08-10 14:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vdjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_ext_write_extent","hfsplus_file_extend","hfsplus_file_truncate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"894db084-32c0-4e1b-a2f8-6c403e98028a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 11:28:04 +0000 UTC FinishedAt: 2026-08-10 14:29:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19a3f196-2d17-4cb3-a5f1-0d5f083cf695,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a7c567bc-611c-441a-8c8d-c0b3495300b0,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-workflow8vdjp/series-workflow8vdjp-build-action-2859169555/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-workflow8vdjp/series-workflow8vdjp-build-action-504292516/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-workflow8vdjp/series-workflow8vdjp-convert-artifact-1080587025/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,}