Name: series-workflow4hxsg Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 18:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[0] Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 14:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 14:30:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "FUTEX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "FUTEX" ], "series_id": "e1db7980-1f8c-4d3d-8933-6ac66e97a625" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_futex_wait", "io_futex_wait_prep" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0ZVVEVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fZnV0ZXhfd2FpdCYjMzQ7LAogICAgJiMzNDtpb19mdXRleF93YWl0X3ByZXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gaW9fdXJpbmcmIzM5O3MgZnV0ZXggd2FpdCBpbXBsZW1lbnRhdGlvbiAoaW9fZnV0ZXhfd2FpdCksIHdoZXJlIGEgZmFpbHVyZSBpbiBmdXRleF93YWl0X3NldHVwIGluY29ycmVjdGx5IGludm9rZWQgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZSgpICh3aGljaCBjYWxscyBrZnJlZSkgaW5zdGVhZCBvZiByZWxlYXNpbmcgdGhlIGNhY2hlLWFsbG9jYXRlZCBpZmQgb2JqZWN0IHZpYSBpb19jYWNoZV9mcmVlKCkuIFxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBlcnJvciBjbGVhbnVwIGFuZCBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhdGh3YXlzIChwcmV2ZW50aW5nIGludmFsaWQgZnJlZXMgb3Igc2xhYiBjb3JydXB0aW9uKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIGludmFsaWQgZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHBhdGhzIGluIGlvX2Z1dGV4X3dhaXQgd2l0aGluIGlvX3VyaW5nL2Z1dGV4LmMsIGVuc3VyaW5nIHByb3BlciBmcmVlaW5nIG9mIGNhY2hlZCBhc3luYyBkYXRhIHZpYSBpb19jYWNoZV9mcmVlIGFuZCBjbGVhcmluZyByZXF1ZXN0IGFzeW5jIHN0YXRlIG9uIGZ1dGV4IHNldHVwIGZhaWx1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb191cmluZyBzeXNjYWxscyB3aXRoIElPUklOR19PUF9GVVRFWF9XQUlULiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTczMzQ5NTQ1N2ViMjQ3ZmRhYzYzYmEzM2JlNzVjMzVjN2I3YTFlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6Mjk6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmNcbmluZGV4IGVhZWUxNDI0MmEzYTMuLjYzODliZDJmMDM5OTQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mdXRleC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jXG5AQCAtMzIxLDIwICYjNDM7MzIxLDIyIEBAIGludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRyZXQgPSBmdXRleF93YWl0X3NldHVwKGlvZi1cdTAwM2V1YWRkciwgaW9mLVx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzLFxuIFx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4tXHRpZiAoIXJldCkge1xuLVx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZyZXEtXHUwMDNlaGFzaF9ub2RlLCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCk7XG4tXHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBmcmVlX2FzeW5jO1xuIFxuLVx0XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4tXHR9XG4mIzQzO1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cmVxLVx1MDAzZWhhc2hfbm9kZSwgXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuJiM0MztcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiBcbiYjNDM7XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4mIzQzO1xuJiM0MztmcmVlX2FzeW5jOlxuJiM0MztcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xuJiM0MztcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XG4gZG9uZV91bmxvY2s6XG4gXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gZG9uZTpcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuJiM0MztcdHJlcV9zZXRfZmFpbChyZXEpO1xuIFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xuLVx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuIFx0cmV0dXJuIElPVV9DT01QTEVURTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19mdXRleF93YWl0JiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBpbiBpb19mdXRleF93YWl0IHdpdGhpbiBpb191cmluZy9mdXRleC5jLCBlbnN1cmluZyBwcm9wZXIgZnJlZWluZyBvZiBjYWNoZWQgYXN5bmMgZGF0YSB2aWEgaW9fY2FjaGVfZnJlZSBhbmQgY2xlYXJpbmcgcmVxdWVzdCBhc3luYyBzdGF0ZSBvbiBmdXRleCBzZXR1cCBmYWlsdXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9fdXJpbmcgc3lzY2FsbHMgd2l0aCBJT1JJTkdfT1BfRlVURVhfV0FJVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3MzM0OTU0NTdlYjI0N2ZkYWM2M2JhMzNiZTc1YzM1YzdiN2ExZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjI5OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmMKaW5kZXggZWFlZTE0MjQyYTNhMy4uNjM4OWJkMmYwMzk5NCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvZnV0ZXguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jCkBAIC0zMjEsMjAgJiM0MzszMjEsMjIgQEAgaW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLSZndDt1YWRkciwgaW9mLSZndDtmdXRleF92YWwsIGlvZi0mZ3Q7ZnV0ZXhfZmxhZ3MsCiAJCQkgICAgICAgJmFtcDtpZmQtJmd0O3EsIE5VTEwsIE5VTEwpOwotCWlmICghcmV0KSB7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKLQkJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBmcmVlX2FzeW5jOwogCi0JCXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKLQl9CiYjNDM7CWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKJiM0MzsJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwogCiYjNDM7CXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKJiM0MzsKJiM0MztmcmVlX2FzeW5jOgomIzQzOwlpb19jYWNoZV9mcmVlKCZhbXA7Y3R4LSZndDtmdXRleF9jYWNoZSwgaWZkKTsKJiM0MzsJaW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTsKIGRvbmVfdW5sb2NrOgogCWlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTsKIGRvbmU6Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJlcV9zZXRfZmFpbChyZXEpOwomIzQzOwlyZXFfc2V0X2ZhaWwocmVxKTsKIAlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7Ci0JaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpOwogCXJldHVybiBJT1VfQ09NUExFVEU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvZnV0ZXguYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGlvX3VyaW5nL2Z1dGV4LmNgIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgaW9fZnV0ZXhfd2FpdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUgYXJlIHNvbWUgZGVwZW5kZW5jaWVzLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpb191cmluZy9mdXRleCBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuCgpMZXQmIzM5O3MgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgYGlvX3VyaW5nL2Z1dGV4LmNgLCBhbmQgSSYjMzk7bGwganVtcCB0byBhcm91bmQgbGluZSAzMjEuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHNlZSB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uIGluIGNvbnRleHQuIEl0JiMzOTtzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIHVzZWZ1bCB0aGVyZSB0byBndWlkZSBteSB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYWxzbyBjaGVjayBLY29uZmlnIGFnYWluLCB3aGlsZSBJIGFtIGhlcmUsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2Z1dGV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0fVxuIDI5MTpcdFxuIDI5MjpcdFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDI5MzpcdFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xuIDI5NDpcdH1cbiAyOTU6XHRcbiAyOTY6XHRpbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIDI5NzpcdHtcbiAyOTg6XHRcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbiAyOTk6XHRcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVx1MDAzZWN0eDtcbiAzMDA6XHRcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSBOVUxMO1xuIDMwMTpcdFx0aW50IHJldDtcbiAzMDI6XHRcbiAzMDM6XHRcdGlmICghaW9mLVx1MDAzZWZ1dGV4X21hc2spIHtcbiAzMDQ6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAzMDU6XHRcdFx0Z290byBkb25lO1xuIDMwNjpcdFx0fVxuIDMwNzpcdFxuIDMwODpcdFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzMDk6XHRcdGlmZCA9IGlvX2NhY2hlX2FsbG9jKFx1MDAyNmN0eC1cdTAwM2VmdXRleF9jYWNoZSwgR0ZQX05PV0FJVCk7XG4gMzEwOlx0XHRpZiAoIWlmZCkge1xuIDMxMTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDMxMjpcdFx0XHRnb3RvIGRvbmVfdW5sb2NrO1xuIDMxMzpcdFx0fVxuIDMxNDpcdFxuIDMxNTpcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEE7XG4gMzE2Olx0XHRyZXEtXHUwMDNlYXN5bmNfZGF0YSA9IGlmZDtcbiAzMTc6XHRcdGlmZC1cdTAwM2VxID0gZnV0ZXhfcV9pbml0O1xuIDMxODpcdFx0aWZkLVx1MDAzZXEuYml0c2V0ID0gaW9mLVx1MDAzZWZ1dGV4X21hc2s7XG4gMzE5Olx0XHRpZmQtXHUwMDNlcS53YWtlID0gaW9fZnV0ZXhfd2FrZV9mbjtcbiAzMjA6XHRcdGlmZC1cdTAwM2VyZXEgPSByZXE7XG4gMzIxOlx0XG4gMzIyOlx0XHRyZXQgPSBmdXRleF93YWl0X3NldHVwKGlvZi1cdTAwM2V1YWRkciwgaW9mLVx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzLFxuIDMyMzpcdFx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4gMzI0Olx0XHRpZiAocmV0KVxuIDMyNTpcdFx0XHRnb3RvIGZyZWVfYXN5bmM7XG4gMzI2Olx0XG4gMzI3Olx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZyZXEtXHUwMDNlaGFzaF9ub2RlLCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCk7XG4gMzI4Olx0XHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gMzI5Olx0XG4gMzMwOlx0XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4gMzMxOlx0XG4gMzMyOlx0ZnJlZV9hc3luYzpcbiAzMzM6XHRcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xuIDMzNDpcdFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbiAzMzU6XHRkb25lX3VubG9jazpcbiAzMzY6XHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzMzc6XHRkb25lOlxuIDMzODpcdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4gMzM5Olx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gMzQwOlx0XHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHRpbnQgaW9fZnV0ZXhfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbiAzNDY6XHRcdGludCByZXQ7XG4gMzQ3Olx0XG4gMzQ4Olx0XHQvKlxuIDM0OTpcdFx0ICogU3RyaWN0IGZsYWdzIC0gZW5zdXJlIHRoYXQgd2FraW5nIDAgZnV0ZXhlcyB5aWVsZHMgYSAwIHJlc3VsdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBmdXRleC5jYCB3aXRoaW4gdGhlIGlvX3VyaW5nIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBmdXRleC5jYCBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay4gR2l2ZW4gdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgZW52aXJvbm1lbnQsIEkgaW1tZWRpYXRlbHkgcmVhY2ggZm9yIHRoZSBzdGFuZGFyZCBidWlsZCBzeXN0ZW0gZmlsZXMuIE15IHByaW1hcnkgdGFyZ2V0cyBhcmUgZ29pbmcgdG8gYmUgYGlvX3VyaW5nL01ha2VmaWxlYCBhbmQgYGlvX3VyaW5nL0tjb25maWdgLiBUaGUgYE1ha2VmaWxlYCB3aWxsLCBvZiBjb3Vyc2UsIHRlbGwgbWUgdGhlIGRpcmVjdCBidWlsZCBjb21tYW5kcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGVyIGZsYWdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBgaW9fdXJpbmdgIG1vZHVsZS4gVGhlIGBLY29uZmlnYCBmaWxlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBhbnkgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgZnV0ZXguY2AuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcGVyaGFwcyBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgZmVhdHVyZSBmbGFnLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGluZm9ybWF0aW9uIHRvIGJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHRoZXNlIGNvcmUgZmlsZXM7IGl04oCZcyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dCBuZWVkZWQgdG8gYW5hbHl6ZSBgZnV0ZXguY2Agd2l0aGluIHRoZSBvdmVyYWxsIGBpb191cmluZ2AgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lPX1dRKVx0XHQmIzQzOz0gaW8td3Eub1xuaW9fdXJpbmcvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0ZVVEVYKVx0XHQmIzQzOz0gZnV0ZXgub1xuaW9fdXJpbmcvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX0VQT0xMKVx0XHQmIzQzOz0gZXBvbGwub1xuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTE5LSNpbmNsdWRlIFwmIzM0O3dhaXRpZC5oXCYjMzQ7XG5pb191cmluZy9jYW5jZWwuYzoyMDojaW5jbHVkZSBcJiMzNDtmdXRleC5oXCYjMzQ7XG5pb191cmluZy9jYW5jZWwuYy0yMS0jaW5jbHVkZSBcJiMzNDtjYW5jZWwuaFwmIzM0O1xuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTEwNT1pbnQgaW9fdHJ5X2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy0xMjgtXG5pb191cmluZy9jYW5jZWwuYzoxMjk6XHRyZXQgPSBpb19mdXRleF9jYW5jZWwoY3R4LCBjZCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMTMwLVx0aWYgKHJldCAhPSAtRU5PRU5UKVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTU2MS1cdHJldCB8PSBpb193YWl0aWRfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xuaW9fdXJpbmcvY2FuY2VsLmM6NTYyOlx0cmV0IHw9IGlvX2Z1dGV4X3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTU2My1cdHJldCB8PSBpb191cmluZ190cnlfY2FuY2VsX3VyaW5nX2NtZChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtOS1cbmlvX3VyaW5nL2Z1dGV4LmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4va2VybmVsL2Z1dGV4L2Z1dGV4LmhcJiMzNDtcbmlvX3VyaW5nL2Z1dGV4LmMtMTEtI2luY2x1ZGUgXCYjMzQ7aW9fdXJpbmcuaFwmIzM0O1xuaW9fdXJpbmcvZnV0ZXguYy0xMi0jaW5jbHVkZSBcJiMzNDthbGxvY19jYWNoZS5oXCYjMzQ7XG5pb191cmluZy9mdXRleC5jOjEzOiNpbmNsdWRlIFwmIzM0O2Z1dGV4LmhcJiMzNDtcbmlvX3VyaW5nL2Z1dGV4LmMtMTQtXG5pb191cmluZy9mdXRleC5jOjE1OnN0cnVjdCBpb19mdXRleCB7XG5pb191cmluZy9mdXRleC5jLTE2LVx0c3RydWN0IGZpbGVcdCpmaWxlO1xuaW9fdXJpbmcvZnV0ZXguYy0xNy1cdHZvaWQgX191c2VyXHQqdWFkZHI7XG5pb191cmluZy9mdXRleC5jOjE4Olx0dW5zaWduZWQgbG9uZ1x0ZnV0ZXhfdmFsO1xuaW9fdXJpbmcvZnV0ZXguYzoxOTpcdHVuc2lnbmVkIGxvbmdcdGZ1dGV4X21hc2s7XG5pb191cmluZy9mdXRleC5jOjIwOlx0dTMyXHRcdGZ1dGV4X2ZsYWdzO1xuaW9fdXJpbmcvZnV0ZXguYzoyMTpcdHVuc2lnbmVkIGludFx0ZnV0ZXhfbnI7XG5pb191cmluZy9mdXRleC5jOjIyOlx0Ym9vbFx0XHRmdXRleHZfdW5xdWV1ZWQ7XG5pb191cmluZy9mdXRleC5jLTIzLX07XG5pb191cmluZy9mdXRleC5jLTI0LVxuaW9fdXJpbmcvZnV0ZXguYzoyNTpzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSB7XG5pb191cmluZy9mdXRleC5jOjI2Olx0c3RydWN0IGZ1dGV4X3FcdHE7XG5pb191cmluZy9mdXRleC5jLTI3LVx0c3RydWN0IGlvX2tpb2NiXHQqcmVxO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjktXG5pb191cmluZy9mdXRleC5jOjMwOnN0cnVjdCBpb19mdXRleHZfZGF0YSB7XG5pb191cmluZy9mdXRleC5jLTMxLVx0dW5zaWduZWQgbG9uZ1x0XHRvd25lZDtcbmlvX3VyaW5nL2Z1dGV4LmM6MzI6XHRzdHJ1Y3QgZnV0ZXhfdmVjdG9yXHRmdXRleHZbXTtcbmlvX3VyaW5nL2Z1dGV4LmMtMzMtfTtcbi0tXG5pb191cmluZy9mdXRleC5jLTM2LVxuaW9fdXJpbmcvZnV0ZXguYzozNzpib29sIGlvX2Z1dGV4X2NhY2hlX2luaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG5pb191cmluZy9mdXRleC5jLTM4LXtcbmlvX3VyaW5nL2Z1dGV4LmM6Mzk6XHRyZXR1cm4gaW9fYWxsb2NfY2FjaGVfaW5pdChcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIElPX0ZVVEVYX0FMTE9DX0NBQ0hFX01BWCxcbmlvX3VyaW5nL2Z1dGV4LmM6NDA6XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlvX2Z1dGV4X2RhdGEpLCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNDEtfVxuaW9fdXJpbmcvZnV0ZXguYy00Mi1cbmlvX3VyaW5nL2Z1dGV4LmM6NDM6dm9pZCBpb19mdXRleF9jYWNoZV9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvZnV0ZXguYy00NC17XG5pb191cmluZy9mdXRleC5jOjQ1Olx0aW9fYWxsb2NfY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGtmcmVlKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNDYtfVxuaW9fdXJpbmcvZnV0ZXguYy00Ny1cbmlvX3VyaW5nL2Z1dGV4LmM6NDg6c3RhdGljIHZvaWQgX19pb19mdXRleF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbmlvX3VyaW5nL2Z1dGV4LmMtNDkte1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtNTMtXG5pb191cmluZy9mdXRleC5jOjU0OnN0YXRpYyB2b2lkIGlvX2Z1dGV4X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuaW9fdXJpbmcvZnV0ZXguYy01NS17XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy01OS1cdGlvX3R3X2xvY2soY3R4LCB0dyk7XG5pb191cmluZy9mdXRleC5jOjYwOlx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIHJlcS1cdTAwM2Vhc3luY19kYXRhKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNjEtXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuaW9fdXJpbmcvZnV0ZXguYzo2MjpcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XG5pb191cmluZy9mdXRleC5jLTYzLX1cbmlvX3VyaW5nL2Z1dGV4LmMtNjQtXG5pb191cmluZy9mdXRleC5jOjY1OnN0YXRpYyB2b2lkIGlvX2Z1dGV4dl9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbmlvX3VyaW5nL2Z1dGV4LmMtNjYte1xuaW9fdXJpbmcvZnV0ZXguYy02Ny1cdHN0cnVjdCBpb19raW9jYiAqcmVxID0gdHdfcmVxLnJlcTtcbmlvX3VyaW5nL2Z1dGV4LmM6Njg6XHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XG5pb191cmluZy9mdXRleC5jOjY5Olx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXHUwMDNlYXN5bmNfZGF0YTtcbmlvX3VyaW5nL2Z1dGV4LmMtNzAtXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy03Mi1cbmlvX3VyaW5nL2Z1dGV4LmM6NzM6XHRpZiAoIWlvZi1cdTAwM2VmdXRleHZfdW5xdWV1ZWQpIHtcbmlvX3VyaW5nL2Z1dGV4LmMtNzQtXHRcdGludCByZXM7XG5pb191cmluZy9mdXRleC5jLTc1LVxuaW9fdXJpbmcvZnV0ZXguYzo3NjpcdFx0cmVzID0gZnV0ZXhfdW5xdWV1ZV9tdWx0aXBsZShpZmQtXHUwMDNlZnV0ZXh2LCBpb2YtXHUwMDNlZnV0ZXhfbnIpO1xuaW9fdXJpbmcvZnV0ZXguYy03Ny1cdFx0aWYgKHJlcyAhPSAtMSlcbi0tXG5pb191cmluZy9mdXRleC5jLTgxLVx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuaW9fdXJpbmcvZnV0ZXguYzo4MjpcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XG5pb191cmluZy9mdXRleC5jLTgzLX1cbmlvX3VyaW5nL2Z1dGV4LmMtODQtXG5pb191cmluZy9mdXRleC5jOjg1OnN0YXRpYyBib29sIGlvX2Z1dGV4dl9jbGFpbShzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZClcbmlvX3VyaW5nL2Z1dGV4LmMtODYte1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtOTEtXG5pb191cmluZy9mdXRleC5jOjkyOnN0YXRpYyBib29sIF9faW9fZnV0ZXhfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvZnV0ZXguYy05My17XG5pb191cmluZy9mdXRleC5jOjk0Olx0LyogZnV0ZXggd2FrZSBhbHJlYWR5IGRvbmUgb3IgaW4gcHJvZ3Jlc3MgKi9cbmlvX3VyaW5nL2Z1dGV4LmMtOTUtXHRpZiAocmVxLVx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfRlVURVhfV0FJVCkge1xuaW9fdXJpbmcvZnV0ZXguYzo5NjpcdFx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYy05Ny1cbmlvX3VyaW5nL2Z1dGV4LmM6OTg6XHRcdGlmICghZnV0ZXhfdW5xdWV1ZShcdTAwMjZpZmQtXHUwMDNlcSkpXG5pb191cmluZy9mdXRleC5jLTk5LVx0XHRcdHJldHVybiBmYWxzZTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTAwOlx0XHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcbmlvX3VyaW5nL2Z1dGV4LmMtMTAxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL2Z1dGV4LmM6MTAyOlx0XHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYy0xMDMtXG5pb191cmluZy9mdXRleC5jOjEwNDpcdFx0aWYgKCFpb19mdXRleHZfY2xhaW0oaWZkKSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTA1LVx0XHRcdHJldHVybiBmYWxzZTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTA2Olx0XHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleHZfY29tcGxldGU7XG5pb191cmluZy9mdXRleC5jLTEwNy1cdH1cbi0tXG5pb191cmluZy9mdXRleC5jLTExNC1cbmlvX3VyaW5nL2Z1dGV4LmM6MTE1OmludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy9mdXRleC5jLTExNi1cdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL2Z1dGV4LmMtMTE3LXtcbmlvX3VyaW5nL2Z1dGV4LmM6MTE4Olx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0LCBfX2lvX2Z1dGV4X2NhbmNlbCk7XG5pb191cmluZy9mdXRleC5jLTExOS19XG5pb191cmluZy9mdXRleC5jLTEyMC1cbmlvX3VyaW5nL2Z1dGV4LmM6MTIxOmJvb2wgaW9fZnV0ZXhfcmVtb3ZlX2FsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG5pb191cmluZy9mdXRleC5jLTEyMi1cdFx0XHQgYm9vbCBjYW5jZWxfYWxsKVxuaW9fdXJpbmcvZnV0ZXguYy0xMjMte1xuaW9fdXJpbmcvZnV0ZXguYzoxMjQ6XHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCwgY2FuY2VsX2FsbCwgX19pb19mdXRleF9jYW5jZWwpO1xuaW9fdXJpbmcvZnV0ZXguYy0xMjUtfVxuaW9fdXJpbmcvZnV0ZXguYy0xMjYtXG5pb191cmluZy9mdXRleC5jOjEyNzppbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvZnV0ZXguYy0xMjgte1xuaW9fdXJpbmcvZnV0ZXguYzoxMjk6XHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XG5pb191cmluZy9mdXRleC5jLTEzMC1cdHUzMiBmbGFncztcbmlvX3VyaW5nL2Z1dGV4LmMtMTMxLVxuaW9fdXJpbmcvZnV0ZXguYzoxMzI6XHRpZiAodW5saWtlbHkoc3FlLVx1MDAzZWxlbiB8fCBzcWUtXHUwMDNlZnV0ZXhfZmxhZ3MgfHwgc3FlLVx1MDAzZWJ1Zl9pbmRleCB8fFxuaW9fdXJpbmcvZnV0ZXguYy0xMzMtXHRcdCAgICAgc3FlLVx1MDAzZWZpbGVfaW5kZXgpKVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTM2LVx0aW9mLVx1MDAzZXVhZGRyID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXHUwMDNlYWRkcikpO1xuaW9fdXJpbmcvZnV0ZXguYzoxMzc6XHRpb2YtXHUwMDNlZnV0ZXhfdmFsID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyMik7XG5pb191cmluZy9mdXRleC5jOjEzODpcdGlvZi1cdTAwM2VmdXRleF9tYXNrID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyMyk7XG5pb191cmluZy9mdXRleC5jLTEzOS1cdGZsYWdzID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VmZCk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0xNDMtXG5pb191cmluZy9mdXRleC5jOjE0NDpcdGlvZi1cdTAwM2VmdXRleF9mbGFncyA9IGZ1dGV4Ml90b19mbGFncyhmbGFncyk7XG5pb191cmluZy9mdXRleC5jOjE0NTpcdGlmICghZnV0ZXhfZmxhZ3NfdmFsaWQoaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzKSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ3LVxuaW9fdXJpbmcvZnV0ZXguYzoxNDg6XHRpZiAoIWZ1dGV4X3ZhbGlkYXRlX2lucHV0KGlvZi1cdTAwM2VmdXRleF9mbGFncywgaW9mLVx1MDAzZWZ1dGV4X3ZhbCkgfHxcbmlvX3VyaW5nL2Z1dGV4LmM6MTQ5Olx0ICAgICFmdXRleF92YWxpZGF0ZV9pbnB1dChpb2YtXHUwMDNlZnV0ZXhfZmxhZ3MsIGlvZi1cdTAwM2VmdXRleF9tYXNrKSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTUwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9mdXRleC5jLTE1NC1cbmlvX3VyaW5nL2Z1dGV4LmM6MTU1OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTU2LXtcbmlvX3VyaW5nL2Z1dGV4LmM6MTU3Olx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuaW9fdXJpbmcvZnV0ZXguYy0xNTgtXHRpbnQgcmV0O1xuaW9fdXJpbmcvZnV0ZXguYy0xNTktXG5pb191cmluZy9mdXRleC5jOjE2MDpcdHJldCA9IGlvX2Z1dGV4X3ByZXAocmVxLCBzcWUpO1xuaW9fdXJpbmcvZnV0ZXguYy0xNjEtXHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5pb191cmluZy9mdXRleC5jLTE2NC1cdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cbmlvX3VyaW5nL2Z1dGV4LmM6MTY1Olx0aWYgKCEoaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzIFx1MDAyNiBGTEFHU19TSEFSRUQpKVxuaW9fdXJpbmcvZnV0ZXguYy0xNjYtXHRcdGlvX3JlcV90cmFja19pbmZsaWdodChyZXEpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTY5LVxuaW9fdXJpbmcvZnV0ZXguYzoxNzA6c3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZXZfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKVxuaW9fdXJpbmcvZnV0ZXguYy0xNzEte1xuaW9fdXJpbmcvZnV0ZXguYy0xNzItXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IHEtXHUwMDNld2FrZV9kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYzoxNzM6XHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYy0xNzQtXG5pb191cmluZy9mdXRleC5jOjE3NTpcdGlmICghaW9fZnV0ZXh2X2NsYWltKGlmZCkpIHtcbmlvX3VyaW5nL2Z1dGV4LmM6MTc2Olx0XHRfX2Z1dGV4X3dha2VfbWFyayhxKTtcbmlvX3VyaW5nL2Z1dGV4LmMtMTc3LVx0XHRyZXR1cm47XG5pb191cmluZy9mdXRleC5jLTE3OC1cdH1cbmlvX3VyaW5nL2Z1dGV4LmM6MTc5Olx0aWYgKHVubGlrZWx5KCFfX2Z1dGV4X3dha2VfbWFyayhxKSkpXG5pb191cmluZy9mdXRleC5jLTE4MC1cdFx0cmV0dXJuO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTgyLVx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTgzOlx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xuaW9fdXJpbmcvZnV0ZXguYy0xODQtXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTg2LVxuaW9fdXJpbmcvZnV0ZXguYzoxODc6aW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9mdXRleC5jLTE4OC17XG5pb191cmluZy9mdXRleC5jOjE4OTpcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTkwOlx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQ7XG5pb191cmluZy9mdXRleC5jLTE5MS1cdHVuc2lnbmVkIGludCBpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTk1LVx0aWYgKHVubGlrZWx5KHNxZS1cdTAwM2VmZCB8fCBzcWUtXHUwMDNlYnVmX2luZGV4IHx8IHNxZS1cdTAwM2VmaWxlX2luZGV4IHx8XG5pb191cmluZy9mdXRleC5jOjE5NjpcdFx0ICAgICBzcWUtXHUwMDNlYWRkcjIgfHwgc3FlLVx1MDAzZWZ1dGV4X2ZsYWdzIHx8IHNxZS1cdTAwM2VhZGRyMykpXG5pb191cmluZy9mdXRleC5jLTE5Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0xOTktXHRpb2YtXHUwMDNldWFkZHIgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyKSk7XG5pb191cmluZy9mdXRleC5jOjIwMDpcdGlvZi1cdTAwM2VmdXRleF9uciA9IFJFQURfT05DRShzcWUtXHUwMDNlbGVuKTtcbmlvX3VyaW5nL2Z1dGV4LmM6MjAxOlx0aWYgKCFpb2YtXHUwMDNlZnV0ZXhfbnIgfHwgaW9mLVx1MDAzZWZ1dGV4X25yIFx1MDAzZSBGVVRFWF9XQUlUVl9NQVgpXG5pb191cmluZy9mdXRleC5jLTIwMi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9mdXRleC5jLTIwMy1cbmlvX3VyaW5nL2Z1dGV4LmM6MjA0Olx0aWZkID0ga3phbGxvY19mbGV4KHN0cnVjdCBpb19mdXRleHZfZGF0YSwgZnV0ZXh2LCBpb2YtXHUwMDNlZnV0ZXhfbnIsXG5pb191cmluZy9mdXRleC5jLTIwNS1cdFx0XHQgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjA4LVxuaW9fdXJpbmcvZnV0ZXguYzoyMDk6XHRyZXQgPSBmdXRleF9wYXJzZV93YWl0dihpZmQtXHUwMDNlZnV0ZXh2LCBpb2YtXHUwMDNldWFkZHIsIGlvZi1cdTAwM2VmdXRleF9ucixcbmlvX3VyaW5nL2Z1dGV4LmM6MjEwOlx0XHRcdFx0aW9fZnV0ZXhfd2FrZXZfZm4sIHJlcSk7XG5pb191cmluZy9mdXRleC5jLTIxMS1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9mdXRleC5jLTIxNi1cdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cbmlvX3VyaW5nL2Z1dGV4LmM6MjE3Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW9mLVx1MDAzZWZ1dGV4X25yOyBpJiM0MzsmIzQzOykge1xuaW9fdXJpbmcvZnV0ZXguYzoyMTg6XHRcdGlmICghKGlmZC1cdTAwM2VmdXRleHZbaV0udy5mbGFncyBcdTAwMjYgRkxBR1NfU0hBUkVEKSkge1xuaW9fdXJpbmcvZnV0ZXguYy0yMTktXHRcdFx0aW9fcmVxX3RyYWNrX2luZmxpZ2h0KHJlcSk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yMjMtXG5pb191cmluZy9mdXRleC5jOjIyNDpcdGlvZi1cdTAwM2VmdXRleHZfdW5xdWV1ZWQgPSAwO1xuaW9fdXJpbmcvZnV0ZXguYy0yMjUtXHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTtcbi0tXG5pb191cmluZy9mdXRleC5jLTIyOS1cbmlvX3VyaW5nL2Z1dGV4LmM6MjMwOnN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2VfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKVxuaW9fdXJpbmcvZnV0ZXguYy0yMzEte1xuaW9fdXJpbmcvZnV0ZXguYzoyMzI6XHRzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSAqaWZkID0gY29udGFpbmVyX29mKHEsIHN0cnVjdCBpb19mdXRleF9kYXRhLCBxKTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjMzLVx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBpZmQtXHUwMDNlcmVxO1xuaW9fdXJpbmcvZnV0ZXguYy0yMzQtXG5pb191cmluZy9mdXRleC5jOjIzNTpcdGlmICh1bmxpa2VseSghX19mdXRleF93YWtlX21hcmsocSkpKVxuaW9fdXJpbmcvZnV0ZXguYy0yMzYtXHRcdHJldHVybjtcbi0tXG5pb191cmluZy9mdXRleC5jLTIzOC1cdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG5pb191cmluZy9mdXRleC5jOjIzOTpcdHJlcS1cdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX2Z1dGV4X2NvbXBsZXRlO1xuaW9fdXJpbmcvZnV0ZXguYy0yNDAtXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjQyLVxuaW9fdXJpbmcvZnV0ZXguYzoyNDM6aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9mdXRleC5jLTI0NC17XG5pb191cmluZy9mdXRleC5jOjI0NTpcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbmlvX3VyaW5nL2Z1dGV4LmM6MjQ2Olx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXHUwMDNlYXN5bmNfZGF0YTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjQ3LVx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjUxLVxuaW9fdXJpbmcvZnV0ZXguYzoyNTI6XHRyZXQgPSBmdXRleF93YWl0X211bHRpcGxlX3NldHVwKGlmZC1cdTAwM2VmdXRleHYsIGlvZi1cdTAwM2VmdXRleF9uciwgXHUwMDI2d29rZW4pO1xuaW9fdXJpbmcvZnV0ZXguYy0yNTMtXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yNzAtXHQgKiBsZXQgdGhhdCBzaWRlIGRvIHRoZSBjb21wbGV0aW9uLiBOb3RlIHRoYXRcbmlvX3VyaW5nL2Z1dGV4LmM6MjcxOlx0ICogZnV0ZXhfd2FpdF9tdWx0aXBsZV9zZXR1cCgpIHdpbGwgaGF2ZSB1bnF1ZXVlZCBhbGwgdGhlIGZ1dGV4ZXMgaW5cbmlvX3VyaW5nL2Z1dGV4LmMtMjcyLVx0ICogdGhpcyBjYXNlLiBNYXJrIHVzIGFzIGhhdmluZyBkb25lIHRoYXQgYWxyZWFkeSwgc2luY2UgdGhpcyBpc1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjc2LVx0XHQvKlxuaW9fdXJpbmcvZnV0ZXguYzoyNzc6XHRcdCAqIElmIGZ1dGV4X3dhaXRfbXVsdGlwbGVfc2V0dXAoKSByZXR1cm5zIDAgZm9yIGFcbmlvX3VyaW5nL2Z1dGV4LmMtMjc4LVx0XHQgKiBzdWNjZXNzZnVsIHNldHVwLCB0aGVuIHRoZSB0YXNrIHN0YXRlIHdpbGwgbm90IGJlXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yODAtXHRcdCAqIGl0JiMzOTtsbCBiZSBibG9ja2luZyB1bmxlc3Mgd2UgYWxyZWFkeSBnb3Qgb25lIG9mIHRoZVxuaW9fdXJpbmcvZnV0ZXguYzoyODE6XHRcdCAqIGZ1dGV4ZXMgd29rZW4sIGJ1dCBpdCBvYnZpb3VzbHkgd29uJiMzOTt0IHdvcmsgZm9yIGFuXG5pb191cmluZy9mdXRleC5jLTI4Mi1cdFx0ICogYXN5bmMgaW52b2NhdGlvbi4gTWFyayB1cyBydW5uYWJsZSBhZ2Fpbi5cbi0tXG5pb191cmluZy9mdXRleC5jLTI4NC1cdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuaW9fdXJpbmcvZnV0ZXguYzoyODU6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjg2LVx0fSBlbHNlIHtcbmlvX3VyaW5nL2Z1dGV4LmM6Mjg3Olx0XHRpb2YtXHUwMDNlZnV0ZXh2X3VucXVldWVkID0gMTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjg4LVx0XHRpZiAod29rZW4gIT0gLTEpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yOTUtXG5pb191cmluZy9mdXRleC5jOjI5NjppbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvZnV0ZXguYy0yOTcte1xuaW9fdXJpbmcvZnV0ZXguYzoyOTg6XHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XG5pb191cmluZy9mdXRleC5jLTI5OS1cdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVx1MDAzZWN0eDtcbmlvX3VyaW5nL2Z1dGV4LmM6MzAwOlx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IE5VTEw7XG5pb191cmluZy9mdXRleC5jLTMwMS1cdGludCByZXQ7XG5pb191cmluZy9mdXRleC5jLTMwMi1cbmlvX3VyaW5nL2Z1dGV4LmM6MzAzOlx0aWYgKCFpb2YtXHUwMDNlZnV0ZXhfbWFzaykge1xuaW9fdXJpbmcvZnV0ZXguYy0zMDQtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0zMDgtXHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvZnV0ZXguYzozMDk6XHRpZmQgPSBpb19jYWNoZV9hbGxvYyhcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIEdGUF9OT1dBSVQpO1xuaW9fdXJpbmcvZnV0ZXguYy0zMTAtXHRpZiAoIWlmZCkge1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzE2LVx0cmVxLVx1MDAzZWFzeW5jX2RhdGEgPSBpZmQ7XG5pb191cmluZy9mdXRleC5jOjMxNzpcdGlmZC1cdTAwM2VxID0gZnV0ZXhfcV9pbml0O1xuaW9fdXJpbmcvZnV0ZXguYzozMTg6XHRpZmQtXHUwMDNlcS5iaXRzZXQgPSBpb2YtXHUwMDNlZnV0ZXhfbWFzaztcbmlvX3VyaW5nL2Z1dGV4LmM6MzE5Olx0aWZkLVx1MDAzZXEud2FrZSA9IGlvX2Z1dGV4X3dha2VfZm47XG5pb191cmluZy9mdXRleC5jLTMyMC1cdGlmZC1cdTAwM2VyZXEgPSByZXE7XG5pb191cmluZy9mdXRleC5jLTMyMS1cbmlvX3VyaW5nL2Z1dGV4LmM6MzIyOlx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXHUwMDNldWFkZHIsIGlvZi1cdTAwM2VmdXRleF92YWwsIGlvZi1cdTAwM2VmdXRleF9mbGFncyxcbmlvX3VyaW5nL2Z1dGV4LmMtMzIzLVx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0zMjYtXG5pb191cmluZy9mdXRleC5jOjMyNzpcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbmlvX3VyaW5nL2Z1dGV4LmMtMzI4LVx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzMyLWZyZWVfYXN5bmM6XG5pb191cmluZy9mdXRleC5jOjMzMzpcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xuaW9fdXJpbmcvZnV0ZXguYy0zMzQtXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzQyLVxuaW9fdXJpbmcvZnV0ZXguYzozNDM6aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL2Z1dGV4LmMtMzQ0LXtcbmlvX3VyaW5nL2Z1dGV4LmM6MzQ1Olx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuaW9fdXJpbmcvZnV0ZXguYy0zNDYtXHRpbnQgcmV0O1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzQ4LVx0LypcbmlvX3VyaW5nL2Z1dGV4LmM6MzQ5Olx0ICogU3RyaWN0IGZsYWdzIC0gZW5zdXJlIHRoYXQgd2FraW5nIDAgZnV0ZXhlcyB5aWVsZHMgYSAwIHJlc3VsdC5cbmlvX3VyaW5nL2Z1dGV4LmM6MzUwOlx0ICogU2VlIGNvbW1pdCA0M2FkZjg0NDk1MTAgKFwmIzM0O2Z1dGV4OiBGTEFHU19TVFJJQ1RcJiMzNDspIGZvciBkZXRhaWxzLlxuaW9fdXJpbmcvZnV0ZXguYy0zNTEtXHQgKi9cbmlvX3VyaW5nL2Z1dGV4LmM6MzUyOlx0cmV0ID0gZnV0ZXhfd2FrZShpb2YtXHUwMDNldWFkZHIsIEZMQUdTX1NUUklDVCB8IGlvZi1cdTAwM2VmdXRleF9mbGFncywgTlVMTCxcbmlvX3VyaW5nL2Z1dGV4LmM6MzUzOlx0XHRcdCBpb2YtXHUwMDNlZnV0ZXhfdmFsLCBpb2YtXHUwMDNlZnV0ZXhfbWFzayk7XG5pb191cmluZy9mdXRleC5jLTM1NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW9fdXJpbmcvZnV0ZXguaC00LVxuaW9fdXJpbmcvZnV0ZXguaDo1OmludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvZnV0ZXguaDo2OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9mdXRleC5oOjc6aW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvZnV0ZXguaDo4OmludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvZnV0ZXguaDo5OmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6MTA6aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9mdXRleC5oLTExLVxuaW9fdXJpbmcvZnV0ZXguaC0xMi0jaWYgZGVmaW5lZChDT05GSUdfRlVURVgpXG5pb191cmluZy9mdXRleC5oOjEzOmludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy9mdXRleC5oLTE0LVx0XHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6MTU6Ym9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL2Z1dGV4LmgtMTYtXHRcdFx0IGJvb2wgY2FuY2VsX2FsbCk7XG5pb191cmluZy9mdXRleC5oOjE3OmJvb2wgaW9fZnV0ZXhfY2FjaGVfaW5pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5pb191cmluZy9mdXRleC5oOjE4OnZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5pb191cmluZy9mdXRleC5oLTE5LSNlbHNlXG5pb191cmluZy9mdXRleC5oOjIwOnN0YXRpYyBpbmxpbmUgaW50IGlvX2Z1dGV4X2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbmlvX3VyaW5nL2Z1dGV4LmgtMjEtXHRcdFx0XHQgIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG4tLVxuaW9fdXJpbmcvZnV0ZXguaC0yNS19XG5pb191cmluZy9mdXRleC5oOjI2OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvZnV0ZXguaC0yNy1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwgYm9vbCBjYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmgtMzAtfVxuaW9fdXJpbmcvZnV0ZXguaDozMTpzdGF0aWMgaW5saW5lIGJvb2wgaW9fZnV0ZXhfY2FjaGVfaW5pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2Z1dGV4LmgtMzIte1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmgtMzQtfVxuaW9fdXJpbmcvZnV0ZXguaDozNTpzdGF0aWMgaW5saW5lIHZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2Z1dGV4LmgtMzYte1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtODQtI2luY2x1ZGUgXCYjMzQ7d2FpdGlkLmhcJiMzNDtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6ODU6I2luY2x1ZGUgXCYjMzQ7ZnV0ZXguaFwmIzM0O1xuaW9fdXJpbmcvaW9fdXJpbmcuYy04Ni0jaW5jbHVkZSBcJiMzNDtuYXBpLmhcJiMzNDtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIxNj1zdGF0aWMgdm9pZCBpb19mcmVlX2FsbG9jX2NhY2hlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIyMS1cdGlvX2FsbG9jX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWNtZF9jYWNoZSwgaW9fY21kX2NhY2hlX2ZyZWUpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMjI6XHRpb19mdXRleF9jYWNoZV9mcmVlKGN0eCk7XG5pb191cmluZy9pb191cmluZy5jLTIyMy1cdGlvX3JzcmNfY2FjaGVfZnJlZShjdHgpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjI2PXN0YXRpYyBfX2NvbGQgc3RydWN0IGlvX3JpbmdfY3R4ICppb19yaW5nX2N0eF9hbGxvYyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjY4LVx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX2NtZCkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNjk6XHRyZXQgfD0gaW9fZnV0ZXhfY2FjaGVfaW5pdChjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzAtXHRyZXQgfD0gaW9fcnNyY19jYWNoZV9pbml0KGN0eCk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTAtI2lmZGVmIENPTkZJR19GVVRFWFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTE6XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTItI2VuZGlmXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0zNy0jaW5jbHVkZSBcJiMzNDt3YWl0aWQuaFwmIzM0O1xuaW9fdXJpbmcvb3BkZWYuYzozODojaW5jbHVkZSBcJiMzNDtmdXRleC5oXCYjMzQ7XG5pb191cmluZy9vcGRlZi5jLTM5LSNpbmNsdWRlIFwmIzM0O3RydW5jYXRlLmhcJiMzNDtcbi0tXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xuLS1cbmlvX3VyaW5nL29wZGVmLmMtNDY5LSNpZiBkZWZpbmVkKENPTkZJR19GVVRFWClcbmlvX3VyaW5nL29wZGVmLmM6NDcwOlx0XHQucHJlcFx0XHRcdD0gaW9fZnV0ZXhfd2FpdF9wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzo0NzE6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fZnV0ZXhfd2FpdCxcbmlvX3VyaW5nL29wZGVmLmMtNDcyLSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00NzctI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxuaW9fdXJpbmcvb3BkZWYuYzo0Nzg6XHRcdC5wcmVwXHRcdFx0PSBpb19mdXRleF9wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzo0Nzk6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fZnV0ZXhfd2FrZSxcbmlvX3VyaW5nL29wZGVmLmMtNDgwLSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00ODUtI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxuaW9fdXJpbmcvb3BkZWYuYzo0ODY6XHRcdC5wcmVwXHRcdFx0PSBpb19mdXRleHZfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6NDg3Olx0XHQuaXNzdWVcdFx0XHQ9IGlvX2Z1dGV4dl93YWl0LFxuaW9fdXJpbmcvb3BkZWYuYy00ODgtI2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGZ1dGV4IFdhaXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhpcyBwYXRjaCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBpb191cmluZy9mdXRleC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9fZnV0ZXhfd2FpdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgY29ycmVjdGlvbiBoZXJlLgoKQmVmb3JlLCBpZiBgZnV0ZXhfd2FpdF9zZXR1cGAgZmFpbGVkIGZvciB3aGF0ZXZlciByZWFzb24g4oCTIHdoaWNoIGNvdWxkIGJlIGEgYmFkIGZ1dGV4IGFkZHJlc3MsIGEgZmFpbGVkIG1hc2sgY2hlY2sgKGBpb2YtJmd0O2Z1dGV4X21hc2sgPT0gMGApLCBvciBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgdmlhIGBpb19jYWNoZV9hbGxvY2Ag4oCTIHRoZSBjb2RlIHdvdWxkIGp1bXAgZG93biB0byBgZG9uZWAgb3IgYGRvbmVfdW5sb2NrYC4gSXQgd291bGQgdGhlbiBjYWxsIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgLiBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAgd2lsbCBmcmVlIHVwICphbGwqIGBhc3luY19kYXRhYC4gVGhpcyBjYXVzZWQgYSBwcm9ibGVtLiBJZiB0aGUgYWxsb2NhdGlvbiB2aWEgYGlvX2NhY2hlX2FsbG9jKCZhbXA7Y3R4LSZndDtmdXRleF9jYWNoZSwgLi4uKWAgZmFpbGVkLCBpdCB3b3VsZG4mIzM5O3QgZnJlZSB0aGUgY2FjaGVkIG9iamVjdCBiYWNrIHRvIHRoZSBgZnV0ZXhfY2FjaGVgLgoKTm93LCB3aXRoIHRoaXMgcGF0Y2gsIHRoZXJlJiMzOTtzIGEgY3J1Y2lhbCBjaGFuZ2UuIElmIGBmdXRleF93YWl0X3NldHVwYCByZXR1cm5zIGFuIGVycm9yIChgcmV0ICE9IDBgKSwgaXQmIzM5O2xsIGp1bXAgdG8gYGZyZWVfYXN5bmNgLiAgVGhlIGNhY2hlZCBvYmplY3Qgd2lsbCBiZSBmcmVlZCBiYWNrIGludG8gdGhlIGBjdHgtJmd0O2Z1dGV4X2NhY2hlYCBhbmQgYHJlcS0mZ3Q7YXN5bmNfZGF0YWAgaXMgY2xlYXJlZC4gSWYgdGhlIGZhaWx1cmUgaGFwcGVucyAqYmVmb3JlKiBhbGxvY2F0aW9uLCB3ZSBqdXN0IGp1bXAgdG8gYGRvbmVgIHNpbmNlIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gZnJlZS4gIFRoaXMgbG9va3MgbXVjaCBjbGVhbmVyLiBJdCBoYW5kbGVzIHRoZSB2YXJpb3VzIGZhaWx1cmUgY2FzZXMgbW9yZSBwcmVjaXNlbHkgYW5kIGF2b2lkcyBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB0aGUgcHJpb3IgY29kZSB3YXMgZnJlZWluZyBhbGwgYXN5bmMgZGF0YSB3aGVuLCBpbiBzb21lIGNhc2VzLCBpdCBzaG91bGRuJiMzOTt0IGhhdmUgYmVlbi4KCkdpdmVuIHRoYXQgdGhpcyB0b3VjaGVzIHN1Y2ggYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwgKGlvX3VyaW5nIGFuZCBmdXRleCksIGFjY2Vzc2libGUgdmlhIGBpb191cmluZ19lbnRlcmAgd2l0aCB0aGUgYElPUklOR19PUF9GVVRFWF9XQUlUYCBvcGNvZGUsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIGFyZWEgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4gV2UgaGF2ZSBhIHBvdGVudGlhbGx5IG5ldyBjb2RlIHBhdGggdG8gdGVzdC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGBDT05GSUdfSU9fVVJJTkdgIChvciBqdXN0IGBJT19VUklOR2ApIGFuZCBgQ09ORklHX0ZVVEVYYCAob3IgYEZVVEVYYCkuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgaW5pdC9LY29uZmlnYCBvciBgaW9fdXJpbmcvS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBleGFjdCBuYW1lcywgYnV0IHRob3NlIGFyZSB0aGUgbGlrZWx5IHN1c3BlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTk1OS1cbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5NjEtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTY5PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTk4MS1cbmluaXQvS2NvbmZpZzoxOTgyOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTgzLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyODUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYENPTkZJR19GVVRFWGAqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGBDT05GSUdfRlVURVhgIHN0YW5kcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zIGl0IGhhcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNwYWNlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9wZXJseSBmb3IgW2luc2VydCB1c2VyJiMzOTtzIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgJiMzNDtteSBwZXJmb3JtYW5jZSBhbmFseXNpcyB3b3JrJiMzNDssIG9yICYjMzQ7dGhpcyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQmIzM0O10uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGRpc2N1c3Npb25zIHJlZ2FyZGluZyBgRlVURVhgIGNvbmZpZ3VyYXRpb24gY291bGQgaW1wYWN0IG15IGN1cnJlbnQgY29uY2VybnMuIE15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBzdGF0ZSwgaXMgaXQgbW9kdWxlLWFibGUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZG9lcyBpdCBpbXBhY3QuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgYW5kIGhlbHBzIG1lIGRlY2lkZSBob3cgdG8gcHJvY2VlZCB3aXRoIFtpbnNlcnQgdXNlciYjMzk7cyB0YXNrXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4Njk9Y29uZmlnIEJBU0VfU01BTExcbi0tXG5pbml0L0tjb25maWctMTg3NS1cbmluaXQvS2NvbmZpZzoxODc2OmNvbmZpZyBGVVRFWFxuaW5pdC9LY29uZmlnLTE4NzctXHRib29sIFwmIzM0O0VuYWJsZSBmdXRleCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZy0xODg1LVxuaW5pdC9LY29uZmlnOjE4ODY6Y29uZmlnIEZVVEVYX1BJXG5pbml0L0tjb25maWctMTg4Ny1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg5MC1cbmluaXQvS2NvbmZpZzoxODkxOmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODkyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xODk1LVxuaW5pdC9LY29uZmlnOjE4OTY6Y29uZmlnIEZVVEVYX01QT0xcbmluaXQvS2NvbmZpZy0xODk3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZz0xOTAxPWNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbi0tXG5pbml0L0tjb25maWctMTkwMy1cbmluaXQvS2NvbmZpZzoxOTA0OmNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXG5pbml0L0tjb25maWctMTkwNS1cdGRlZl9ib29sIEZVVEVYIFx1MDAyNlx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcdTAwMjZcdTAwMjYgUlNFUSBcdTAwMjZcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODA3CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDgxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX2Z1dGV4X3dhaXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBgRm9jdXNTeW1ib2xzYCBzdWdnZXN0cyB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiBgaW9fZnV0ZXhfd2FpdGAsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGhlcmUsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBpb19mdXRleF93YWl0X3ByZXBgLCBgaW9fZnV0ZXhfd2FrZWAsIGV0Yy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBgaW9fZnV0ZXhfd2FpdGAgaXMgc3BlY2lmaWMgdG8gYGlvX3VyaW5nYCYjMzk7cyBgSU9SSU5HX09QX0ZVVEVYX1dBSVRgLCBzbyBpdCBpc24mIzM5O3Qgc29tZSBnbG9iYWxseSB1YmlxdWl0b3VzIGZ1dGV4IGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgc2NvcGUuIEFmdGVyIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIHRoZSBwYXRjaCBkaWZmLCBpdCYjMzk7cyBjb25maXJtZWQgdGhhdCBgaW9fZnV0ZXhfd2FpdGAgaW4gYGlvX3VyaW5nL2Z1dGV4LmNgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIGhlcmUuCgpUaGUgZGlmZiBpdHNlbGYgcmV2ZWFscyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlOiBpdCYjMzk7cyBhbGwgYWJvdXQgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIFdlJiMzOTtyZSBsb29raW5nIGF0IHJldmlzZWQgY2xlYW51cCBsb2dpYyB3aXRoaW4gdGhlIGBpb19mdXRleF93YWl0YCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBwYXRjaCBhaW1zIHRvIGltcHJvdmUgYXN5bmMgZGF0YSBjYWNoaW5nIGFuZCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIHdlIGFyZSByZXR1cm5pbmcgYWxsb2NhdGVkIHN0cnVjdHVyZXMgdG8gdGhlIGZ1dGV4IGNhY2hlIChgaW9fY2FjaGVfZnJlZWApIGFuZCBjbGVhcmluZyByZXF1ZXN0IGFzeW5jIGRhdGEgaW5zdGVhZCBvZiBpbnZva2luZyBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZWAuIFRoaXMgaXMgZXNzZW50aWFsIGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNyaXRpY2FsIHBhdGggd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZ1dGV4IGltcGxlbWVudGF0aW9uIChgaW9fdXJpbmcvZnV0ZXguY2ApLiBUaGlzIHN1YnN5c3RlbSBpcywgb2YgY291cnNlLCBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGBpb191cmluZ2Agc3lzY2FsbHMgKGBJT1JJTkdfT1BfRlVURVhfV0FJVGApLgoKTG9va3Mgc29saWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19mdXRleF93YWl0JiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBpbiBpb19mdXRleF93YWl0IHdpdGhpbiBpb191cmluZy9mdXRleC5jLCBlbnN1cmluZyBwcm9wZXIgZnJlZWluZyBvZiBjYWNoZWQgYXN5bmMgZGF0YSB2aWEgaW9fY2FjaGVfZnJlZSBhbmQgY2xlYXJpbmcgcmVxdWVzdCBhc3luYyBzdGF0ZSBvbiBmdXRleCBzZXR1cCBmYWlsdXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9fdXJpbmcgc3lzY2FsbHMgd2l0aCBJT1JJTkdfT1BfRlVURVhfV0FJVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19mdXRleF93YWl0JiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBpbiBpb19mdXRleF93YWl0IHdpdGhpbiBpb191cmluZy9mdXRleC5jLCBlbnN1cmluZyBwcm9wZXIgZnJlZWluZyBvZiBjYWNoZWQgYXN5bmMgZGF0YSB2aWEgaW9fY2FjaGVfZnJlZSBhbmQgY2xlYXJpbmcgcmVxdWVzdCBhc3luYyBzdGF0ZSBvbiBmdXRleCBzZXR1cCBmYWlsdXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9fdXJpbmcgc3lzY2FsbHMgd2l0aCBJT1JJTkdfT1BfRlVURVhfV0FJVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZyYjMzk7cyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3MzM0OTU0NTdlYjI0N2ZkYWM2M2JhMzNiZTc1YzM1YzdiN2ExZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjI5OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmMKaW5kZXggZWFlZTE0MjQyYTNhMy4uNjM4OWJkMmYwMzk5NCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvZnV0ZXguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jCkBAIC0zMjEsMjAgJiM0MzszMjEsMjIgQEAgaW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLSZndDt1YWRkciwgaW9mLSZndDtmdXRleF92YWwsIGlvZi0mZ3Q7ZnV0ZXhfZmxhZ3MsCiAJCQkgICAgICAgJmFtcDtpZmQtJmd0O3EsIE5VTEwsIE5VTEwpOwotCWlmICghcmV0KSB7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKLQkJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBmcmVlX2FzeW5jOwogCi0JCXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKLQl9CiYjNDM7CWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKJiM0MzsJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwogCiYjNDM7CXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKJiM0MzsKJiM0MztmcmVlX2FzeW5jOgomIzQzOwlpb19jYWNoZV9mcmVlKCZhbXA7Y3R4LSZndDtmdXRleF9jYWNoZSwgaWZkKTsKJiM0MzsJaW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTsKIGRvbmVfdW5sb2NrOgogCWlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTsKIGRvbmU6Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJlcV9zZXRfZmFpbChyZXEpOwomIzQzOwlyZXFfc2V0X2ZhaWwocmVxKTsKIAlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7Ci0JaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpOwogCXJldHVybiBJT1VfQ09NUExFVEU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBpb191cmluZy9mdXRleC5jYCYjMzk7cyBEaWZmKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgZGlmZiBvZiBgaW9fdXJpbmcvZnV0ZXguY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgdGhlIGxpbmVzIHRoYXQgd2VyZSBhbHRlcmVkOyBJJiMzOTttIHRyeWluZyB0byBncmFzcCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBtb2RpZmljYXRpb24uIFdoYXQgcHJvYmxlbSBpcyB0aGlzIHBhdGNoIGFpbWluZyB0byBzb2x2ZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyB0aGF0IHRoZSBkaWZmIG1pZ2h0IGludHJvZHVjZS4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTttIG5vdCBqdXN0IGdvaW5nIHRvIHJlbHkgb24gdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCBsaW5lIDMyMSwgdXNpbmcgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgYW5kIGFuYWx5emUgdGhhdCBlbnRpcmUgc2VjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29kZSBibG9jayBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGhpcyBncmFudWxhciBpbnNwZWN0aW9uIGlzIGVzc2VudGlhbCB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgYnVncywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSYjMzk7bSB0aGlua2luZyBvZiBjaGVja2luZyBkYXRhIHN0cnVjdHVyZXMsIG11dGV4IGxvY2tzLCBhbmQgb3ZlcmFsbCBmdW5jdGlvbiBjYWxscywgd2hpY2ggY291bGQgYmUgdGhlIHNvdXJjZSBvZiBteSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvZnV0ZXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XHR9XG4gMjkxOlx0XG4gMjkyOlx0XHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gMjkzOlx0XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4gMjk0Olx0fVxuIDI5NTpcdFxuIDI5NjpcdGludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gMjk3Olx0e1xuIDI5ODpcdFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuIDI5OTpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuIDMwMDpcdFx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IE5VTEw7XG4gMzAxOlx0XHRpbnQgcmV0O1xuIDMwMjpcdFxuIDMwMzpcdFx0aWYgKCFpb2YtXHUwMDNlZnV0ZXhfbWFzaykge1xuIDMwNDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDMwNTpcdFx0XHRnb3RvIGRvbmU7XG4gMzA2Olx0XHR9XG4gMzA3Olx0XG4gMzA4Olx0XHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDMwOTpcdFx0aWZkID0gaW9fY2FjaGVfYWxsb2MoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBHRlBfTk9XQUlUKTtcbiAzMTA6XHRcdGlmICghaWZkKSB7XG4gMzExOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMzEyOlx0XHRcdGdvdG8gZG9uZV91bmxvY2s7XG4gMzEzOlx0XHR9XG4gMzE0Olx0XG4gMzE1Olx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTtcbiAzMTY6XHRcdHJlcS1cdTAwM2Vhc3luY19kYXRhID0gaWZkO1xuIDMxNzpcdFx0aWZkLVx1MDAzZXEgPSBmdXRleF9xX2luaXQ7XG4gMzE4Olx0XHRpZmQtXHUwMDNlcS5iaXRzZXQgPSBpb2YtXHUwMDNlZnV0ZXhfbWFzaztcbiAzMTk6XHRcdGlmZC1cdTAwM2VxLndha2UgPSBpb19mdXRleF93YWtlX2ZuO1xuIDMyMDpcdFx0aWZkLVx1MDAzZXJlcSA9IHJlcTtcbiAzMjE6XHRcbiAzMjI6XHRcdHJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLVx1MDAzZXVhZGRyLCBpb2YtXHUwMDNlZnV0ZXhfdmFsLCBpb2YtXHUwMDNlZnV0ZXhfZmxhZ3MsXG4gMzIzOlx0XHRcdFx0ICAgICAgIFx1MDAyNmlmZC1cdTAwM2VxLCBOVUxMLCBOVUxMKTtcbiAzMjQ6XHRcdGlmIChyZXQpXG4gMzI1Olx0XHRcdGdvdG8gZnJlZV9hc3luYztcbiAzMjY6XHRcbiAzMjc6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbiAzMjg6XHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzMjk6XHRcbiAzMzA6XHRcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcbiAzMzE6XHRcbiAzMzI6XHRmcmVlX2FzeW5jOlxuIDMzMzpcdFx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XG4gMzM0Olx0XHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuIDMzNTpcdGRvbmVfdW5sb2NrOlxuIDMzNjpcdFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDMzNzpcdGRvbmU6XG4gMzM4Olx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiAzMzk6XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiAzNDA6XHRcdHJldHVybiBJT1VfQ09NUExFVEU7XG4gMzQxOlx0fVxuIDM0MjpcdFxuIDM0MzpcdGludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuIDM0NjpcdFx0aW50IHJldDtcbiAzNDc6XHRcbiAzNDg6XHRcdC8qXG4gMzQ5Olx0XHQgKiBTdHJpY3QgZmxhZ3MgLSBlbnN1cmUgdGhhdCB3YWtpbmcgMCBmdXRleGVzIHlpZWxkcyBhIDAgcmVzdWx0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjUxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fZnV0ZXhfd2FpdCBQYXRjaDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBpb19mdXRleF93YWl0YCBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgZGlmZi4gTG9va2luZyBhdCB0aGUgcHJlLXBhdGNoIGNvZGUgYmxvY2ssIHNwZWNpZmljYWxseSB3aXRoaW4gYGlvX2Z1dGV4X3dhaXRgLCBJIHNlZSB0aGUgY29yZSBsb2dpYzogYSBjYWxsIHRvIGBmdXRleF93YWl0X3NldHVwYCwgYW5kIHRoZW4gYSByZXR1cm4uIFRoZSBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBjb25kaXRpb25hbCBlcnJvciBoYW5kbGluZyBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpYC4KCk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgIGNhbGwuIEkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4gSSBrbm93IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGFzeW5jaHJvbm91cyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlcXVlc3QuIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyB0aGUgY2FsbCBpbiBtdWx0aXBsZSBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIGBpb19mdXRleF93YWl0YCBmYWlscyBlYXJseSwgbGlrZSB3aGVuIGVpdGhlciBgIWlvZi0mZ3Q7ZnV0ZXhfbWFza2Agb3IgYCFpZmRgIGV2YWx1YXRlIHRvIHRydWUuIEluIHRob3NlIGNhc2VzLCBgcmV0ID0gLUVJTlZBTGAgb3Igc2ltaWxhciBpcyBzZXQsIGFuZCB0aGUgY29kZSBqdW1wcyB0byBgZG9uZWAsIGNhbGxpbmcgYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAuCgpXYWl0IGEgbWludXRlLi4uIEl0JiMzOTtzIHBvc3NpYmxlIGZvciBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZWAgdG8gYmUgY2FsbGVkICpldmVuKiBpZiBgcmVxLSZndDthc3luY19kYXRhYCBoYXNuJiMzOTt0IGJlZW4gYWxsb2NhdGVkIG9yIGByZXEtJmd0O2ZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEFgIGhhc24mIzM5O3QgYmVlbiBzZXQuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSEgSSByZW1lbWJlciB0aGlzIGNvZGUgdXNlcyBgaW9fY2FjaGVfZnJlZWAsIGFuZCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGRhbmdlcm91cy4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBleGFjdGx5IGhvdyBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZWAgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgaGFzIHRoZSByaWdodCBjaGVja3MgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGFuZCBpZiBub3QsIHRoaXMgY291bGQgYmUgYSBzZXJpb3VzIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVxX2FzeW5jX2RhdGFfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2Z1dGV4LmM9NTQ9c3RhdGljIHZvaWQgaW9fZnV0ZXhfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy02MC1cdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCByZXEtXHUwMDNlYXN5bmNfZGF0YSk7XG5pb191cmluZy9mdXRleC5jOjYxOlx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNjItXHRfX2lvX2Z1dGV4X2NvbXBsZXRlKHR3X3JlcSwgdHcpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmM9NjU9c3RhdGljIHZvaWQgaW9fZnV0ZXh2X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtODAtXG5pb191cmluZy9mdXRleC5jOjgxOlx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuaW9fdXJpbmcvZnV0ZXguYy04Mi1cdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYz0yNDM9aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yNjAtXHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmM6MjYxOlx0XHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XG5pb191cmluZy9mdXRleC5jLTI2Mi1cdFx0cmV0dXJuIElPVV9DT01QTEVURTtcbi0tXG5pb191cmluZy9mdXRleC5jPTI5Nj1pbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzMzLVx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XG5pb191cmluZy9mdXRleC5jOjMzNDpcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XG5pb191cmluZy9mdXRleC5jLTMzNS1kb25lX3VubG9jazpcbi0tXG5pb191cmluZy9pb191cmluZy5oPTM2OD1zdGF0aWMgaW5saW5lIGJvb2wgcmVxX2hhc19hc3luY19kYXRhKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzcyLVxuaW9fdXJpbmcvaW9fdXJpbmcuaDozNzM6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNzQtXHRcdFx0XHRcdCAgIGlvX3JlcV9mbGFnc190IGV4dHJhX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzc5LVxuaW9fdXJpbmcvaW9fdXJpbmcuaDozODA6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hc3luY19kYXRhX2ZyZWUoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9pb191cmluZy5oLTM4MS17XG5pb191cmluZy9pb191cmluZy5oLTM4Mi1cdGtmcmVlKHJlcS1cdTAwM2Vhc3luY19kYXRhKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzgzOlx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzg0LX1cbi0tXG5pb191cmluZy9uZXQuYz0xNjc9c3RhdGljIHZvaWQgaW9fbmV0bXNnX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xODItXHRpZiAoaW9fYWxsb2NfY2FjaGVfcHV0KFx1MDAyNnJlcS1cdTAwM2VjdHgtXHUwMDNlbmV0bXNnX2NhY2hlLCBoZHIpKVxuaW9fdXJpbmcvbmV0LmM6MTgzOlx0XHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIFJFUV9GX05FRURfQ0xFQU5VUCk7XG5pb191cmluZy9uZXQuYy0xODQtfVxuLS1cbmlvX3VyaW5nL3J3LmM9MTMzPXN0YXRpYyBib29sIGlvX3J3X3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ydy5jLTE0NC1cdGlmIChpb19hbGxvY19jYWNoZV9wdXQoXHUwMDI2cmVxLVx1MDAzZWN0eC1cdTAwM2Vyd19jYWNoZSwgcncpKSB7XG5pb191cmluZy9ydy5jOjE0NTpcdFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbmlvX3VyaW5nL3J3LmMtMTQ2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0yNj1zdGF0aWMgdm9pZCBpb19yZXFfdXJpbmdfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTM5LVx0XHRpb3VjbWQtXHUwMDNlc3FlID0gTlVMTDtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjQwOlx0XHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIFJFUV9GX05FRURfQ0xFQU5VUCk7XG5pb191cmluZy91cmluZ19jbWQuYy00MS1cdH0gZWxzZSB7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9MzU9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2ZyZWUoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMzktXHRwdXRfcGlkKGl3YS1cdTAwM2V3by53b19waWQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6NDA6XHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XG5pb191cmluZy93YWl0aWQuYy00MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzQKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogOTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBpb191cmluZyBmdXRleCBidWcgZml4KioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkgc2VlIHRoaXMgcGF0Y2guIEl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIGluY29ycmVjdGx5IGZyZWVpbmcgYSBwaWVjZSBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb20gdGhlIGBpb19jYWNoZWAgdXNpbmcgYGtmcmVlYCwgd2hpY2ggaXMgYSBjbGFzc2ljIGludmFsaWQgZnJlZSBhbmQgYSBwb3RlbnRpYWwgc291cmNlIG9mIHNsYWIgY29ycnVwdGlvbiBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBlcnJvcnMuIFNwZWNpZmljYWxseSwgYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAgd2FzIGJlaW5nIGNhbGxlZCBvbiBgcmVxLSZndDthc3luY19kYXRhYCwgd2hpY2ggc29tZXRpbWVzIHBvaW50ZWQgdG8gYW4gYGlmZGAgc3RydWN0dXJlIHRoYXQgd2FzIGFsbG9jYXRlZCB2aWEgYGlvX2NhY2hlX2FsbG9jYCBhbmQgdGh1cyBzaG91bGQgaGF2ZSBiZWVuIGZyZWVkIHZpYSBgaW9fY2FjaGVfZnJlZWAuCgpUaGUgZml4IGludHJvZHVjZXMgYSBgZnJlZV9hc3luY2AgbGFiZWwgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGguIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYGZ1dGV4X3dhaXRfc2V0dXBgIGZhaWxzLCB3ZSBqdW1wIHRvIGBmcmVlX2FzeW5jYC4gSW4gdGhpcyBibG9jaywgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBjYWxscyBgaW9fY2FjaGVfZnJlZWAgdG8gcmVsZWFzZSB0aGUgYGlmZGAgc3RydWN0dXJlIGFuZCBhbHNvIGNhbGxzIGBpb19yZXFfYXN5bmNfZGF0YV9jbGVhcmAgdG8gY2xlYXIgdGhlIHJlcXVlc3QmIzM5O3MgYXN5bmMgZGF0YSwgd2hpY2ggbG9va3MgbGlrZSBnb29kIHByYWN0aWNlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYXJlYXMgZm9yIEtNU0FOIGNvbmNlcm5zLiBJJiMzOTt2ZSBjb25zaWRlcmVkOgoKMS4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgc2VudCB0byB1c2VyIHNwYWNlKio6IFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBzb2xlbHkgY29uY2VybmVkIHdpdGggZXJyb3IgY2xlYW51cCB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBpc24mIzM5O3QgYSBjb25jZXJuLgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYyoqOiBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gdGhpcyBwYXRjaC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMqKjogSSBkb24mIzM5O3Qgc2VlIGFueSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICAqKkJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzKio6IFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVjYXVzZSB0aGUgcGF0Y2ggaXMgY29uY2VybmVkIHdpdGggZXJyb3IgcGF0aHMsIGFuZCBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuCgpUaGlzIHBhdGNoIGlzIHB1cmVseSBhYm91dCBmaXhpbmcgYSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoYXQgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBhIGNhY2hlIGFyZSBmcmVlZCB1c2luZyB0aGUgY2FjaGUmIzM5O3MgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLiBBbnkgbWVtb3J5IGVycm9ycyB3aWxsIGJlIGRldGVjdGVkIGJ5IEtBU0FOIC8gU0xVQiBkZWJ1Z2dlcnMsIHNvIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoYXQuIEkgc2VlIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KClRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZyYjMzk7cyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZyYjMzk7cyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6Mjk6NDMuODI3NjUyODE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNTc0ODM0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gaW9fdXJpbmcncyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgZXJyb3IgY2xlYW51cCBhbmQgbWVtb3J5IGRlYWxsb2NhdGlvbiBwYXRod2F5cyAocHJldmVudGluZyBpbnZhbGlkIGZyZWVzIG9yIHNsYWIgY29ycnVwdGlvbikuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBhbnkgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgc3VjaCBhcyBpbnZhbGlkIGZyZWVzIG9yIHVzZS1hZnRlci1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHBhdGhzIGluIGlvX2Z1dGV4X3dhaXQgd2l0aGluIGlvX3VyaW5nL2Z1dGV4LmMsIGVuc3VyaW5nIHByb3BlciBmcmVlaW5nIG9mIGNhY2hlZCBhc3luYyBkYXRhIHZpYSBpb19jYWNoZV9mcmVlIGFuZCBjbGVhcmluZyByZXF1ZXN0IGFzeW5jIHN0YXRlIG9uIGZ1dGV4IHNldHVwIGZhaWx1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb191cmluZyBzeXNjYWxscyB3aXRoIElPUklOR19PUF9GVVRFWF9XQUlULlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyOTo0My44Mjc2ODk2NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTA5NzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3MzM0OTU0NTdlYjI0N2ZkYWM2M2JhMzNiZTc1YzM1YzdiN2ExZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxNDoyOTo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0ZXguY1xcbmluZGV4IGVhZWUxNDI0MmEzYTMuLjYzODliZDJmMDM5OTQgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xcbisrKyBiL2lvX3VyaW5nL2Z1dGV4LmNcXG5AQCAtMzIxLDIwICszMjEsMjIgQEAgaW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gXFxuIFxcdHJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLVxcdTAwM2V1YWRkciwgaW9mLVxcdTAwM2VmdXRleF92YWwsIGlvZi1cXHUwMDNlZnV0ZXhfZmxhZ3MsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aWZkLVxcdTAwM2VxLCBOVUxMLCBOVUxMKTtcXG4tXFx0aWYgKCFyZXQpIHtcXG4tXFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnJlcS1cXHUwMDNlaGFzaF9ub2RlLCBcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9saXN0KTtcXG4tXFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGZyZWVfYXN5bmM7XFxuIFxcbi1cXHRcXHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XFxuLVxcdH1cXG4rXFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnJlcS1cXHUwMDNlaGFzaF9ub2RlLCBcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9saXN0KTtcXG4rXFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiBcXG4rXFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xcbitcXG4rZnJlZV9hc3luYzpcXG4rXFx0aW9fY2FjaGVfZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcXG4rXFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcXG4gZG9uZV91bmxvY2s6XFxuIFxcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4gZG9uZTpcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbitcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4gXFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbi1cXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XFxuIFxcdHJldHVybiBJT1VfQ09NUExFVEU7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjI5OjQ0LjMxOTczNTc5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUyMjQ2Mzc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgcGF0aHMgaW4gaW9fZnV0ZXhfd2FpdCB3aXRoaW4gaW9fdXJpbmcvZnV0ZXguYywgZW5zdXJpbmcgcHJvcGVyIGZyZWVpbmcgb2YgY2FjaGVkIGFzeW5jIGRhdGEgdmlhIGlvX2NhY2hlX2ZyZWUgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgc3RhdGUgb24gZnV0ZXggc2V0dXAgZmFpbHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvX3VyaW5nIHN5c2NhbGxzIHdpdGggSU9SSU5HX09QX0ZVVEVYX1dBSVQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTczMzQ5NTQ1N2ViMjQ3ZmRhYzYzYmEzM2JlNzVjMzVjN2I3YTFlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6Mjk6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0ZXguY1xuaW5kZXggZWFlZTE0MjQyYTNhMy4uNjM4OWJkMmYwMzk5NCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2Z1dGV4LmNcbisrKyBiL2lvX3VyaW5nL2Z1dGV4LmNcbkBAIC0zMjEsMjAgKzMyMSwyMiBAQCBpbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIFx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXHUwMDNldWFkZHIsIGlvZi1cdTAwM2VmdXRleF92YWwsIGlvZi1cdTAwM2VmdXRleF9mbGFncyxcbiBcdFx0XHQgICAgICAgXHUwMDI2aWZkLVx1MDAzZXEsIE5VTEwsIE5VTEwpO1xuLVx0aWYgKCFyZXQpIHtcbi1cdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cmVxLVx1MDAzZWhhc2hfbm9kZSwgXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuLVx0XHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGZyZWVfYXN5bmM7XG4gXG4tXHRcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcbi1cdH1cbitcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbitcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiBcbitcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcbitcbitmcmVlX2FzeW5jOlxuK1x0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XG4rXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuIGRvbmVfdW5sb2NrOlxuIFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIGRvbmU6XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbitcdHJlcV9zZXRfZmFpbChyZXEpO1xuIFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xuLVx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuIFx0cmV0dXJuIElPVV9DT01QTEVURTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyOTo0NC4zMTk3MzgxOTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjE1MDkxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvZnV0ZXguYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgaW9fdXJpbmcvZnV0ZXguY2AgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRzIGBpb19mdXRleF93YWl0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSdtIGFzc3VtaW5nIHRoZXJlIGFyZSBzb21lIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW9fdXJpbmcvZnV0ZXggc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5MZXQncyB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiBgaW9fdXJpbmcvZnV0ZXguY2AsIGFuZCBJJ2xsIGp1bXAgdG8gYXJvdW5kIGxpbmUgMzIxLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byBzZWUgdGhlIGBpb19mdXRleF93YWl0YCBmdW5jdGlvbiBpbiBjb250ZXh0LiBJdCdzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIHVzZWZ1bCB0aGVyZSB0byBndWlkZSBteSB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYWxzbyBjaGVjayBLY29uZmlnIGFnYWluLCB3aGlsZSBJIGFtIGhlcmUsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6Mjk6NTEuOTM0ODM0NDA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2Z1dGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcdH1cXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAyOTM6XFx0XFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xcbiAyOTQ6XFx0fVxcbiAyOTU6XFx0XFxuIDI5NjpcXHRpbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAyOTc6XFx0e1xcbiAyOTg6XFx0XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbiAyOTk6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXFx1MDAzZWN0eDtcXG4gMzAwOlxcdFxcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSBOVUxMO1xcbiAzMDE6XFx0XFx0aW50IHJldDtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0aWYgKCFpb2YtXFx1MDAzZWZ1dGV4X21hc2spIHtcXG4gMzA0OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDMwNTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDMwNjpcXHRcXHR9XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGlvX3Jpbmdfc3VibWl0X2xvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDMwOTpcXHRcXHRpZmQgPSBpb19jYWNoZV9hbGxvYyhcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgR0ZQX05PV0FJVCk7XFxuIDMxMDpcXHRcXHRpZiAoIWlmZCkge1xcbiAzMTE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMzEyOlxcdFxcdFxcdGdvdG8gZG9uZV91bmxvY2s7XFxuIDMxMzpcXHRcXHR9XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTtcXG4gMzE2OlxcdFxcdHJlcS1cXHUwMDNlYXN5bmNfZGF0YSA9IGlmZDtcXG4gMzE3OlxcdFxcdGlmZC1cXHUwMDNlcSA9IGZ1dGV4X3FfaW5pdDtcXG4gMzE4OlxcdFxcdGlmZC1cXHUwMDNlcS5iaXRzZXQgPSBpb2YtXFx1MDAzZWZ1dGV4X21hc2s7XFxuIDMxOTpcXHRcXHRpZmQtXFx1MDAzZXEud2FrZSA9IGlvX2Z1dGV4X3dha2VfZm47XFxuIDMyMDpcXHRcXHRpZmQtXFx1MDAzZXJlcSA9IHJlcTtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXFx1MDAzZXVhZGRyLCBpb2YtXFx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVxcdTAwM2VmdXRleF9mbGFncyxcXG4gMzIzOlxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aWZkLVxcdTAwM2VxLCBOVUxMLCBOVUxMKTtcXG4gMzI0OlxcdFxcdGlmIChyZXQpXFxuIDMyNTpcXHRcXHRcXHRnb3RvIGZyZWVfYXN5bmM7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZyZXEtXFx1MDAzZWhhc2hfbm9kZSwgXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfbGlzdCk7XFxuIDMyODpcXHRcXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0ZnJlZV9hc3luYzpcXG4gMzMzOlxcdFxcdGlvX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XFxuIDMzNDpcXHRcXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbiAzMzU6XFx0ZG9uZV91bmxvY2s6XFxuIDMzNjpcXHRcXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDMzNzpcXHRkb25lOlxcbiAzMzg6XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuIDMzOTpcXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuIDM0MDpcXHRcXHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xcbiAzNDE6XFx0fVxcbiAzNDI6XFx0XFxuIDM0MzpcXHRpbnQgaW9fZnV0ZXhfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbiAzNDY6XFx0XFx0aW50IHJldDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0LypcXG4gMzQ5OlxcdFxcdCAqIFN0cmljdCBmbGFncyAtIGVuc3VyZSB0aGF0IHdha2luZyAwIGZ1dGV4ZXMgeWllbGRzIGEgMCByZXN1bHQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjI5OjUxLjkzNDk0MzUyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDM2NTk3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBmdXRleC5jYCB3aXRoaW4gdGhlIGlvX3VyaW5nIFN1YnN5c3RlbSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgYGZ1dGV4LmNgIGNvZGUgaXRzZWxmLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBmcmFtZXdvcmsuIEdpdmVuIHRoYXQgSSdtIHdvcmtpbmcgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgZW52aXJvbm1lbnQsIEkgaW1tZWRpYXRlbHkgcmVhY2ggZm9yIHRoZSBzdGFuZGFyZCBidWlsZCBzeXN0ZW0gZmlsZXMuIE15IHByaW1hcnkgdGFyZ2V0cyBhcmUgZ29pbmcgdG8gYmUgYGlvX3VyaW5nL01ha2VmaWxlYCBhbmQgYGlvX3VyaW5nL0tjb25maWdgLiBUaGUgYE1ha2VmaWxlYCB3aWxsLCBvZiBjb3Vyc2UsIHRlbGwgbWUgdGhlIGRpcmVjdCBidWlsZCBjb21tYW5kcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGVyIGZsYWdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBgaW9fdXJpbmdgIG1vZHVsZS4gVGhlIGBLY29uZmlnYCBmaWxlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBhbnkgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgZnV0ZXguY2AuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBwZXJoYXBzIGNvbnRyb2xsZWQgYnkgYSBzcGVjaWZpYyBmZWF0dXJlIGZsYWcuIEknbSBleHBlY3RpbmcgdGhpcyBpbmZvcm1hdGlvbiB0byBiZSByZWFkaWx5IGF2YWlsYWJsZSBpbiB0aGVzZSBjb3JlIGZpbGVzOyBpdOKAmXMgdGhlIHN0YW5kYXJkIHByYWN0aWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbmFsIGNvbnRleHQgbmVlZGVkIHRvIGFuYWx5emUgYGZ1dGV4LmNgIHdpdGhpbiB0aGUgb3ZlcmFsbCBgaW9fdXJpbmdgIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6Mjk6NTQuNDM4NjA2MzQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE1NjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbmlvX3VyaW5nL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19GVVRFWClcXHRcXHQrPSBmdXRleC5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX0VQT0xMKVxcdFxcdCs9IGVwb2xsLm9cXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTE5LSNpbmNsdWRlIFxcXCJ3YWl0aWQuaFxcXCJcXG5pb191cmluZy9jYW5jZWwuYzoyMDojaW5jbHVkZSBcXFwiZnV0ZXguaFxcXCJcXG5pb191cmluZy9jYW5jZWwuYy0yMS0jaW5jbHVkZSBcXFwiY2FuY2VsLmhcXFwiXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz0xMDU9aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy0xMjgtXFxuaW9fdXJpbmcvY2FuY2VsLmM6MTI5OlxcdHJldCA9IGlvX2Z1dGV4X2NhbmNlbChjdHgsIGNkLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtMTMwLVxcdGlmIChyZXQgIT0gLUVOT0VOVClcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNTYxLVxcdHJldCB8PSBpb193YWl0aWRfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjU2MjpcXHRyZXQgfD0gaW9fZnV0ZXhfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTU2My1cXHRyZXQgfD0gaW9fdXJpbmdfdHJ5X2NhbmNlbF91cmluZ19jbWQoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtOS1cXG5pb191cmluZy9mdXRleC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9rZXJuZWwvZnV0ZXgvZnV0ZXguaFxcXCJcXG5pb191cmluZy9mdXRleC5jLTExLSNpbmNsdWRlIFxcXCJpb191cmluZy5oXFxcIlxcbmlvX3VyaW5nL2Z1dGV4LmMtMTItI2luY2x1ZGUgXFxcImFsbG9jX2NhY2hlLmhcXFwiXFxuaW9fdXJpbmcvZnV0ZXguYzoxMzojaW5jbHVkZSBcXFwiZnV0ZXguaFxcXCJcXG5pb191cmluZy9mdXRleC5jLTE0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTU6c3RydWN0IGlvX2Z1dGV4IHtcXG5pb191cmluZy9mdXRleC5jLTE2LVxcdHN0cnVjdCBmaWxlXFx0KmZpbGU7XFxuaW9fdXJpbmcvZnV0ZXguYy0xNy1cXHR2b2lkIF9fdXNlclxcdCp1YWRkcjtcXG5pb191cmluZy9mdXRleC5jOjE4OlxcdHVuc2lnbmVkIGxvbmdcXHRmdXRleF92YWw7XFxuaW9fdXJpbmcvZnV0ZXguYzoxOTpcXHR1bnNpZ25lZCBsb25nXFx0ZnV0ZXhfbWFzaztcXG5pb191cmluZy9mdXRleC5jOjIwOlxcdHUzMlxcdFxcdGZ1dGV4X2ZsYWdzO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjE6XFx0dW5zaWduZWQgaW50XFx0ZnV0ZXhfbnI7XFxuaW9fdXJpbmcvZnV0ZXguYzoyMjpcXHRib29sXFx0XFx0ZnV0ZXh2X3VucXVldWVkO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjMtfTtcXG5pb191cmluZy9mdXRleC5jLTI0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MjU6c3RydWN0IGlvX2Z1dGV4X2RhdGEge1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjY6XFx0c3RydWN0IGZ1dGV4X3FcXHRxO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjctXFx0c3RydWN0IGlvX2tpb2NiXFx0KnJlcTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjktXFxuaW9fdXJpbmcvZnV0ZXguYzozMDpzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEge1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzEtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG93bmVkO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MzI6XFx0c3RydWN0IGZ1dGV4X3ZlY3RvclxcdGZ1dGV4dltdO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzMtfTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMzYtXFxuaW9fdXJpbmcvZnV0ZXguYzozNzpib29sIGlvX2Z1dGV4X2NhY2hlX2luaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuaW9fdXJpbmcvZnV0ZXguYy0zOC17XFxuaW9fdXJpbmcvZnV0ZXguYzozOTpcXHRyZXR1cm4gaW9fYWxsb2NfY2FjaGVfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgSU9fRlVURVhfQUxMT0NfQ0FDSEVfTUFYLFxcbmlvX3VyaW5nL2Z1dGV4LmM6NDA6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpb19mdXRleF9kYXRhKSwgMCk7XFxuaW9fdXJpbmcvZnV0ZXguYy00MS19XFxuaW9fdXJpbmcvZnV0ZXguYy00Mi1cXG5pb191cmluZy9mdXRleC5jOjQzOnZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9mdXRleC5jLTQ0LXtcXG5pb191cmluZy9mdXRleC5jOjQ1OlxcdGlvX2FsbG9jX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIGtmcmVlKTtcXG5pb191cmluZy9mdXRleC5jLTQ2LX1cXG5pb191cmluZy9mdXRleC5jLTQ3LVxcbmlvX3VyaW5nL2Z1dGV4LmM6NDg6c3RhdGljIHZvaWQgX19pb19mdXRleF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5pb191cmluZy9mdXRleC5jLTQ5LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtNTMtXFxuaW9fdXJpbmcvZnV0ZXguYzo1NDpzdGF0aWMgdm9pZCBpb19mdXRleF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5pb191cmluZy9mdXRleC5jLTU1LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtNTktXFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcXG5pb191cmluZy9mdXRleC5jOjYwOlxcdGlvX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIHJlcS1cXHUwMDNlYXN5bmNfZGF0YSk7XFxuaW9fdXJpbmcvZnV0ZXguYy02MS1cXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbmlvX3VyaW5nL2Z1dGV4LmM6NjI6XFx0X19pb19mdXRleF9jb21wbGV0ZSh0d19yZXEsIHR3KTtcXG5pb191cmluZy9mdXRleC5jLTYzLX1cXG5pb191cmluZy9mdXRleC5jLTY0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6NjU6c3RhdGljIHZvaWQgaW9fZnV0ZXh2X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbmlvX3VyaW5nL2Z1dGV4LmMtNjYte1xcbmlvX3VyaW5nL2Z1dGV4LmMtNjctXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSB0d19yZXEucmVxO1xcbmlvX3VyaW5nL2Z1dGV4LmM6Njg6XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbmlvX3VyaW5nL2Z1dGV4LmM6Njk6XFx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYy03MC1cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtNzItXFxuaW9fdXJpbmcvZnV0ZXguYzo3MzpcXHRpZiAoIWlvZi1cXHUwMDNlZnV0ZXh2X3VucXVldWVkKSB7XFxuaW9fdXJpbmcvZnV0ZXguYy03NC1cXHRcXHRpbnQgcmVzO1xcbmlvX3VyaW5nL2Z1dGV4LmMtNzUtXFxuaW9fdXJpbmcvZnV0ZXguYzo3NjpcXHRcXHRyZXMgPSBmdXRleF91bnF1ZXVlX211bHRpcGxlKGlmZC1cXHUwMDNlZnV0ZXh2LCBpb2YtXFx1MDAzZWZ1dGV4X25yKTtcXG5pb191cmluZy9mdXRleC5jLTc3LVxcdFxcdGlmIChyZXMgIT0gLTEpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTgxLVxcdGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKTtcXG5pb191cmluZy9mdXRleC5jOjgyOlxcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XFxuaW9fdXJpbmcvZnV0ZXguYy04My19XFxuaW9fdXJpbmcvZnV0ZXguYy04NC1cXG5pb191cmluZy9mdXRleC5jOjg1OnN0YXRpYyBib29sIGlvX2Z1dGV4dl9jbGFpbShzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZClcXG5pb191cmluZy9mdXRleC5jLTg2LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtOTEtXFxuaW9fdXJpbmcvZnV0ZXguYzo5MjpzdGF0aWMgYm9vbCBfX2lvX2Z1dGV4X2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9mdXRleC5jLTkzLXtcXG5pb191cmluZy9mdXRleC5jOjk0OlxcdC8qIGZ1dGV4IHdha2UgYWxyZWFkeSBkb25lIG9yIGluIHByb2dyZXNzICovXFxuaW9fdXJpbmcvZnV0ZXguYy05NS1cXHRpZiAocmVxLVxcdTAwM2VvcGNvZGUgPT0gSU9SSU5HX09QX0ZVVEVYX1dBSVQpIHtcXG5pb191cmluZy9mdXRleC5jOjk2OlxcdFxcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYy05Ny1cXG5pb191cmluZy9mdXRleC5jOjk4OlxcdFxcdGlmICghZnV0ZXhfdW5xdWV1ZShcXHUwMDI2aWZkLVxcdTAwM2VxKSlcXG5pb191cmluZy9mdXRleC5jLTk5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5pb191cmluZy9mdXRleC5jOjEwMDpcXHRcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXhfY29tcGxldGU7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMDEtXFx0fSBlbHNlIHtcXG5pb191cmluZy9mdXRleC5jOjEwMjpcXHRcXHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cXHUwMDNlYXN5bmNfZGF0YTtcXG5pb191cmluZy9mdXRleC5jLTEwMy1cXG5pb191cmluZy9mdXRleC5jOjEwNDpcXHRcXHRpZiAoIWlvX2Z1dGV4dl9jbGFpbShpZmQpKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTA1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5pb191cmluZy9mdXRleC5jOjEwNjpcXHRcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTA3LVxcdH1cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTE0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTE1OmludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuaW9fdXJpbmcvZnV0ZXguYy0xMTYtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTExNy17XFxuaW9fdXJpbmcvZnV0ZXguYzoxMTg6XFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QsIF9faW9fZnV0ZXhfY2FuY2VsKTtcXG5pb191cmluZy9mdXRleC5jLTExOS19XFxuaW9fdXJpbmcvZnV0ZXguYy0xMjAtXFxuaW9fdXJpbmcvZnV0ZXguYzoxMjE6Ym9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcXG5pb191cmluZy9mdXRleC5jLTEyMi1cXHRcXHRcXHQgYm9vbCBjYW5jZWxfYWxsKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTIzLXtcXG5pb191cmluZy9mdXRleC5jOjEyNDpcXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9saXN0LCBjYW5jZWxfYWxsLCBfX2lvX2Z1dGV4X2NhbmNlbCk7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMjUtfVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTI2LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTI3OmludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvZnV0ZXguYy0xMjgte1xcbmlvX3VyaW5nL2Z1dGV4LmM6MTI5OlxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG5pb191cmluZy9mdXRleC5jLTEzMC1cXHR1MzIgZmxhZ3M7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMzEtXFxuaW9fdXJpbmcvZnV0ZXguYzoxMzI6XFx0aWYgKHVubGlrZWx5KHNxZS1cXHUwMDNlbGVuIHx8IHNxZS1cXHUwMDNlZnV0ZXhfZmxhZ3MgfHwgc3FlLVxcdTAwM2VidWZfaW5kZXggfHxcXG5pb191cmluZy9mdXRleC5jLTEzMy1cXHRcXHQgICAgIHNxZS1cXHUwMDNlZmlsZV9pbmRleCkpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTEzNi1cXHRpb2YtXFx1MDAzZXVhZGRyID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXFx1MDAzZWFkZHIpKTtcXG5pb191cmluZy9mdXRleC5jOjEzNzpcXHRpb2YtXFx1MDAzZWZ1dGV4X3ZhbCA9IFJFQURfT05DRShzcWUtXFx1MDAzZWFkZHIyKTtcXG5pb191cmluZy9mdXRleC5jOjEzODpcXHRpb2YtXFx1MDAzZWZ1dGV4X21hc2sgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VhZGRyMyk7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMzktXFx0ZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VmZCk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTE0My1cXG5pb191cmluZy9mdXRleC5jOjE0NDpcXHRpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzID0gZnV0ZXgyX3RvX2ZsYWdzKGZsYWdzKTtcXG5pb191cmluZy9mdXRleC5jOjE0NTpcXHRpZiAoIWZ1dGV4X2ZsYWdzX3ZhbGlkKGlvZi1cXHUwMDNlZnV0ZXhfZmxhZ3MpKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ3LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTQ4OlxcdGlmICghZnV0ZXhfdmFsaWRhdGVfaW5wdXQoaW9mLVxcdTAwM2VmdXRleF9mbGFncywgaW9mLVxcdTAwM2VmdXRleF92YWwpIHx8XFxuaW9fdXJpbmcvZnV0ZXguYzoxNDk6XFx0ICAgICFmdXRleF92YWxpZGF0ZV9pbnB1dChpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzLCBpb2YtXFx1MDAzZWZ1dGV4X21hc2spKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTUwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xNTQtXFxuaW9fdXJpbmcvZnV0ZXguYzoxNTU6aW50IGlvX2Z1dGV4X3dhaXRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTU2LXtcXG5pb191cmluZy9mdXRleC5jOjE1NzpcXHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XFxuaW9fdXJpbmcvZnV0ZXguYy0xNTgtXFx0aW50IHJldDtcXG5pb191cmluZy9mdXRleC5jLTE1OS1cXG5pb191cmluZy9mdXRleC5jOjE2MDpcXHRyZXQgPSBpb19mdXRleF9wcmVwKHJlcSwgc3FlKTtcXG5pb191cmluZy9mdXRleC5jLTE2MS1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTY0LVxcdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cXG5pb191cmluZy9mdXRleC5jOjE2NTpcXHRpZiAoIShpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzIFxcdTAwMjYgRkxBR1NfU0hBUkVEKSlcXG5pb191cmluZy9mdXRleC5jLTE2Ni1cXHRcXHRpb19yZXFfdHJhY2tfaW5mbGlnaHQocmVxKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTY5LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTcwOnN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2V2X2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG5pb191cmluZy9mdXRleC5jLTE3MS17XFxuaW9fdXJpbmcvZnV0ZXguYy0xNzItXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBxLVxcdTAwM2V3YWtlX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYzoxNzM6XFx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYy0xNzQtXFxuaW9fdXJpbmcvZnV0ZXguYzoxNzU6XFx0aWYgKCFpb19mdXRleHZfY2xhaW0oaWZkKSkge1xcbmlvX3VyaW5nL2Z1dGV4LmM6MTc2OlxcdFxcdF9fZnV0ZXhfd2FrZV9tYXJrKHEpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTc3LVxcdFxcdHJldHVybjtcXG5pb191cmluZy9mdXRleC5jLTE3OC1cXHR9XFxuaW9fdXJpbmcvZnV0ZXguYzoxNzk6XFx0aWYgKHVubGlrZWx5KCFfX2Z1dGV4X3dha2VfbWFyayhxKSkpXFxuaW9fdXJpbmcvZnV0ZXguYy0xODAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xODItXFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcXG5pb191cmluZy9mdXRleC5jOjE4MzpcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTg0LVxcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTE4Ni1cXG5pb191cmluZy9mdXRleC5jOjE4NzppbnQgaW9fZnV0ZXh2X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9mdXRleC5jLTE4OC17XFxuaW9fdXJpbmcvZnV0ZXguYzoxODk6XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MTkwOlxcdHN0cnVjdCBpb19mdXRleHZfZGF0YSAqaWZkO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTkxLVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xOTUtXFx0aWYgKHVubGlrZWx5KHNxZS1cXHUwMDNlZmQgfHwgc3FlLVxcdTAwM2VidWZfaW5kZXggfHwgc3FlLVxcdTAwM2VmaWxlX2luZGV4IHx8XFxuaW9fdXJpbmcvZnV0ZXguYzoxOTY6XFx0XFx0ICAgICBzcWUtXFx1MDAzZWFkZHIyIHx8IHNxZS1cXHUwMDNlZnV0ZXhfZmxhZ3MgfHwgc3FlLVxcdTAwM2VhZGRyMykpXFxuaW9fdXJpbmcvZnV0ZXguYy0xOTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTE5OS1cXHRpb2YtXFx1MDAzZXVhZGRyID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXFx1MDAzZWFkZHIpKTtcXG5pb191cmluZy9mdXRleC5jOjIwMDpcXHRpb2YtXFx1MDAzZWZ1dGV4X25yID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlbGVuKTtcXG5pb191cmluZy9mdXRleC5jOjIwMTpcXHRpZiAoIWlvZi1cXHUwMDNlZnV0ZXhfbnIgfHwgaW9mLVxcdTAwM2VmdXRleF9uciBcXHUwMDNlIEZVVEVYX1dBSVRWX01BWClcXG5pb191cmluZy9mdXRleC5jLTIwMi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9mdXRleC5jLTIwMy1cXG5pb191cmluZy9mdXRleC5jOjIwNDpcXHRpZmQgPSBremFsbG9jX2ZsZXgoc3RydWN0IGlvX2Z1dGV4dl9kYXRhLCBmdXRleHYsIGlvZi1cXHUwMDNlZnV0ZXhfbnIsXFxuaW9fdXJpbmcvZnV0ZXguYy0yMDUtXFx0XFx0XFx0ICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjA4LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MjA5OlxcdHJldCA9IGZ1dGV4X3BhcnNlX3dhaXR2KGlmZC1cXHUwMDNlZnV0ZXh2LCBpb2YtXFx1MDAzZXVhZGRyLCBpb2YtXFx1MDAzZWZ1dGV4X25yLFxcbmlvX3VyaW5nL2Z1dGV4LmM6MjEwOlxcdFxcdFxcdFxcdGlvX2Z1dGV4X3dha2V2X2ZuLCByZXEpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjE2LVxcdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cXG5pb191cmluZy9mdXRleC5jOjIxNzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW9mLVxcdTAwM2VmdXRleF9ucjsgaSsrKSB7XFxuaW9fdXJpbmcvZnV0ZXguYzoyMTg6XFx0XFx0aWYgKCEoaWZkLVxcdTAwM2VmdXRleHZbaV0udy5mbGFncyBcXHUwMDI2IEZMQUdTX1NIQVJFRCkpIHtcXG5pb191cmluZy9mdXRleC5jLTIxOS1cXHRcXHRcXHRpb19yZXFfdHJhY2tfaW5mbGlnaHQocmVxKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjIzLVxcbmlvX3VyaW5nL2Z1dGV4LmM6MjI0OlxcdGlvZi1cXHUwMDNlZnV0ZXh2X3VucXVldWVkID0gMDtcXG5pb191cmluZy9mdXRleC5jLTIyNS1cXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEE7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTIyOS1cXG5pb191cmluZy9mdXRleC5jOjIzMDpzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG5pb191cmluZy9mdXRleC5jLTIzMS17XFxuaW9fdXJpbmcvZnV0ZXguYzoyMzI6XFx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSwgcSk7XFxuaW9fdXJpbmcvZnV0ZXguYy0yMzMtXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBpZmQtXFx1MDAzZXJlcTtcXG5pb191cmluZy9mdXRleC5jLTIzNC1cXG5pb191cmluZy9mdXRleC5jOjIzNTpcXHRpZiAodW5saWtlbHkoIV9fZnV0ZXhfd2FrZV9tYXJrKHEpKSlcXG5pb191cmluZy9mdXRleC5jLTIzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTIzOC1cXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjM5OlxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcXG5pb191cmluZy9mdXRleC5jLTI0MC1cXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yNDItXFxuaW9fdXJpbmcvZnV0ZXguYzoyNDM6aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvZnV0ZXguYy0yNDQte1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjQ1OlxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG5pb191cmluZy9mdXRleC5jOjI0NjpcXHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cXHUwMDNlYXN5bmNfZGF0YTtcXG5pb191cmluZy9mdXRleC5jLTI0Ny1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yNTEtXFxuaW9fdXJpbmcvZnV0ZXguYzoyNTI6XFx0cmV0ID0gZnV0ZXhfd2FpdF9tdWx0aXBsZV9zZXR1cChpZmQtXFx1MDAzZWZ1dGV4diwgaW9mLVxcdTAwM2VmdXRleF9uciwgXFx1MDAyNndva2VuKTtcXG5pb191cmluZy9mdXRleC5jLTI1My1cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjcwLVxcdCAqIGxldCB0aGF0IHNpZGUgZG8gdGhlIGNvbXBsZXRpb24uIE5vdGUgdGhhdFxcbmlvX3VyaW5nL2Z1dGV4LmM6MjcxOlxcdCAqIGZ1dGV4X3dhaXRfbXVsdGlwbGVfc2V0dXAoKSB3aWxsIGhhdmUgdW5xdWV1ZWQgYWxsIHRoZSBmdXRleGVzIGluXFxuaW9fdXJpbmcvZnV0ZXguYy0yNzItXFx0ICogdGhpcyBjYXNlLiBNYXJrIHVzIGFzIGhhdmluZyBkb25lIHRoYXQgYWxyZWFkeSwgc2luY2UgdGhpcyBpc1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yNzYtXFx0XFx0LypcXG5pb191cmluZy9mdXRleC5jOjI3NzpcXHRcXHQgKiBJZiBmdXRleF93YWl0X211bHRpcGxlX3NldHVwKCkgcmV0dXJucyAwIGZvciBhXFxuaW9fdXJpbmcvZnV0ZXguYy0yNzgtXFx0XFx0ICogc3VjY2Vzc2Z1bCBzZXR1cCwgdGhlbiB0aGUgdGFzayBzdGF0ZSB3aWxsIG5vdCBiZVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yODAtXFx0XFx0ICogaXQnbGwgYmUgYmxvY2tpbmcgdW5sZXNzIHdlIGFscmVhZHkgZ290IG9uZSBvZiB0aGVcXG5pb191cmluZy9mdXRleC5jOjI4MTpcXHRcXHQgKiBmdXRleGVzIHdva2VuLCBidXQgaXQgb2J2aW91c2x5IHdvbid0IHdvcmsgZm9yIGFuXFxuaW9fdXJpbmcvZnV0ZXguYy0yODItXFx0XFx0ICogYXN5bmMgaW52b2NhdGlvbi4gTWFyayB1cyBydW5uYWJsZSBhZ2Fpbi5cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjg0LVxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG5pb191cmluZy9mdXRleC5jOjI4NTpcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cmVxLVxcdTAwM2VoYXNoX25vZGUsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjg2LVxcdH0gZWxzZSB7XFxuaW9fdXJpbmcvZnV0ZXguYzoyODc6XFx0XFx0aW9mLVxcdTAwM2VmdXRleHZfdW5xdWV1ZWQgPSAxO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjg4LVxcdFxcdGlmICh3b2tlbiAhPSAtMSlcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjk1LVxcbmlvX3VyaW5nL2Z1dGV4LmM6Mjk2OmludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvZnV0ZXguYy0yOTcte1xcbmlvX3VyaW5nL2Z1dGV4LmM6Mjk4OlxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG5pb191cmluZy9mdXRleC5jLTI5OS1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbmlvX3VyaW5nL2Z1dGV4LmM6MzAwOlxcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSBOVUxMO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzAxLVxcdGludCByZXQ7XFxuaW9fdXJpbmcvZnV0ZXguYy0zMDItXFxuaW9fdXJpbmcvZnV0ZXguYzozMDM6XFx0aWYgKCFpb2YtXFx1MDAzZWZ1dGV4X21hc2spIHtcXG5pb191cmluZy9mdXRleC5jLTMwNC1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0zMDgtXFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9mdXRleC5jOjMwOTpcXHRpZmQgPSBpb19jYWNoZV9hbGxvYyhcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgR0ZQX05PV0FJVCk7XFxuaW9fdXJpbmcvZnV0ZXguYy0zMTAtXFx0aWYgKCFpZmQpIHtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMzE2LVxcdHJlcS1cXHUwMDNlYXN5bmNfZGF0YSA9IGlmZDtcXG5pb191cmluZy9mdXRleC5jOjMxNzpcXHRpZmQtXFx1MDAzZXEgPSBmdXRleF9xX2luaXQ7XFxuaW9fdXJpbmcvZnV0ZXguYzozMTg6XFx0aWZkLVxcdTAwM2VxLmJpdHNldCA9IGlvZi1cXHUwMDNlZnV0ZXhfbWFzaztcXG5pb191cmluZy9mdXRleC5jOjMxOTpcXHRpZmQtXFx1MDAzZXEud2FrZSA9IGlvX2Z1dGV4X3dha2VfZm47XFxuaW9fdXJpbmcvZnV0ZXguYy0zMjAtXFx0aWZkLVxcdTAwM2VyZXEgPSByZXE7XFxuaW9fdXJpbmcvZnV0ZXguYy0zMjEtXFxuaW9fdXJpbmcvZnV0ZXguYzozMjI6XFx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXFx1MDAzZXVhZGRyLCBpb2YtXFx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVxcdTAwM2VmdXRleF9mbGFncyxcXG5pb191cmluZy9mdXRleC5jLTMyMy1cXHRcXHRcXHQgICAgICAgXFx1MDAyNmlmZC1cXHUwMDNlcSwgTlVMTCwgTlVMTCk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTMyNi1cXG5pb191cmluZy9mdXRleC5jOjMyNzpcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cmVxLVxcdTAwM2VoYXNoX25vZGUsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzI4LVxcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMzMyLWZyZWVfYXN5bmM6XFxuaW9fdXJpbmcvZnV0ZXguYzozMzM6XFx0aW9fY2FjaGVfZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcXG5pb191cmluZy9mdXRleC5jLTMzNC1cXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0zNDItXFxuaW9fdXJpbmcvZnV0ZXguYzozNDM6aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTM0NC17XFxuaW9fdXJpbmcvZnV0ZXguYzozNDU6XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzQ2LVxcdGludCByZXQ7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTM0OC1cXHQvKlxcbmlvX3VyaW5nL2Z1dGV4LmM6MzQ5OlxcdCAqIFN0cmljdCBmbGFncyAtIGVuc3VyZSB0aGF0IHdha2luZyAwIGZ1dGV4ZXMgeWllbGRzIGEgMCByZXN1bHQuXFxuaW9fdXJpbmcvZnV0ZXguYzozNTA6XFx0ICogU2VlIGNvbW1pdCA0M2FkZjg0NDk1MTAgKFxcXCJmdXRleDogRkxBR1NfU1RSSUNUXFxcIikgZm9yIGRldGFpbHMuXFxuaW9fdXJpbmcvZnV0ZXguYy0zNTEtXFx0ICovXFxuaW9fdXJpbmcvZnV0ZXguYzozNTI6XFx0cmV0ID0gZnV0ZXhfd2FrZShpb2YtXFx1MDAzZXVhZGRyLCBGTEFHU19TVFJJQ1QgfCBpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzLCBOVUxMLFxcbmlvX3VyaW5nL2Z1dGV4LmM6MzUzOlxcdFxcdFxcdCBpb2YtXFx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVxcdTAwM2VmdXRleF9tYXNrKTtcXG5pb191cmluZy9mdXRleC5jLTM1NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmgtNC1cXG5pb191cmluZy9mdXRleC5oOjU6aW50IGlvX2Z1dGV4X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaDo2OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaDo3OmludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy9mdXRleC5oOjg6aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaDo5OmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9mdXRleC5oOjEwOmludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2Z1dGV4LmgtMTEtXFxuaW9fdXJpbmcvZnV0ZXguaC0xMi0jaWYgZGVmaW5lZChDT05GSUdfRlVURVgpXFxuaW9fdXJpbmcvZnV0ZXguaDoxMzppbnQgaW9fZnV0ZXhfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL2Z1dGV4LmgtMTQtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaDoxNTpib29sIGlvX2Z1dGV4X3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbmlvX3VyaW5nL2Z1dGV4LmgtMTYtXFx0XFx0XFx0IGJvb2wgY2FuY2VsX2FsbCk7XFxuaW9fdXJpbmcvZnV0ZXguaDoxNzpib29sIGlvX2Z1dGV4X2NhY2hlX2luaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbmlvX3VyaW5nL2Z1dGV4Lmg6MTg6dm9pZCBpb19mdXRleF9jYWNoZV9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG5pb191cmluZy9mdXRleC5oLTE5LSNlbHNlXFxuaW9fdXJpbmcvZnV0ZXguaDoyMDpzdGF0aWMgaW5saW5lIGludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuaW9fdXJpbmcvZnV0ZXguaC0yMS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy9mdXRleC5oLTI1LX1cXG5pb191cmluZy9mdXRleC5oOjI2OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbmlvX3VyaW5nL2Z1dGV4LmgtMjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9mdXRleC5oLTMwLX1cXG5pb191cmluZy9mdXRleC5oOjMxOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19mdXRleF9jYWNoZV9pbml0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmlvX3VyaW5nL2Z1dGV4LmgtMzIte1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguaC0zNC19XFxuaW9fdXJpbmcvZnV0ZXguaDozNTpzdGF0aWMgaW5saW5lIHZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9mdXRleC5oLTM2LXtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtODQtI2luY2x1ZGUgXFxcIndhaXRpZC5oXFxcIlxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6ODU6I2luY2x1ZGUgXFxcImZ1dGV4LmhcXFwiXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy04Ni0jaW5jbHVkZSBcXFwibmFwaS5oXFxcIlxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTY9c3RhdGljIHZvaWQgaW9fZnJlZV9hbGxvY19jYWNoZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTIyMS1cXHRpb19hbGxvY19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZWNtZF9jYWNoZSwgaW9fY21kX2NhY2hlX2ZyZWUpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjIyOlxcdGlvX2Z1dGV4X2NhY2hlX2ZyZWUoY3R4KTtcXG5pb191cmluZy9pb191cmluZy5jLTIyMy1cXHRpb19yc3JjX2NhY2hlX2ZyZWUoY3R4KTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjI2PXN0YXRpYyBfX2NvbGQgc3RydWN0IGlvX3JpbmdfY3R4ICppb19yaW5nX2N0eF9hbGxvYyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNjgtXFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfY21kKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNjk6XFx0cmV0IHw9IGlvX2Z1dGV4X2NhY2hlX2luaXQoY3R4KTtcXG5pb191cmluZy9pb191cmluZy5jLTI3MC1cXHRyZXQgfD0gaW9fcnNyY19jYWNoZV9pbml0KGN0eCk7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI5MC0jaWZkZWYgQ09ORklHX0ZVVEVYXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTE6XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjkyLSNlbmRpZlxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0zNy0jaW5jbHVkZSBcXFwid2FpdGlkLmhcXFwiXFxuaW9fdXJpbmcvb3BkZWYuYzozODojaW5jbHVkZSBcXFwiZnV0ZXguaFxcXCJcXG5pb191cmluZy9vcGRlZi5jLTM5LSNpbmNsdWRlIFxcXCJ0cnVuY2F0ZS5oXFxcIlxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNDY5LSNpZiBkZWZpbmVkKENPTkZJR19GVVRFWClcXG5pb191cmluZy9vcGRlZi5jOjQ3MDpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fZnV0ZXhfd2FpdF9wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6NDcxOlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fZnV0ZXhfd2FpdCxcXG5pb191cmluZy9vcGRlZi5jLTQ3Mi0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00NzctI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxcbmlvX3VyaW5nL29wZGVmLmM6NDc4OlxcdFxcdC5wcmVwXFx0XFx0XFx0PSBpb19mdXRleF9wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6NDc5OlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fZnV0ZXhfd2FrZSxcXG5pb191cmluZy9vcGRlZi5jLTQ4MC0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00ODUtI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxcbmlvX3VyaW5nL29wZGVmLmM6NDg2OlxcdFxcdC5wcmVwXFx0XFx0XFx0PSBpb19mdXRleHZfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jOjQ4NzpcXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX2Z1dGV4dl93YWl0LFxcbmlvX3VyaW5nL29wZGVmLmMtNDg4LSNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjI5OjU0LjU1NTc2NzU5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTU1OTEzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBmdXRleCBXYWl0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgaW9fdXJpbmcvZnV0ZXguY2AsIHNwZWNpZmljYWxseSB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgY29ycmVjdGlvbiBoZXJlLlxuXG5CZWZvcmUsIGlmIGBmdXRleF93YWl0X3NldHVwYCBmYWlsZWQgZm9yIHdoYXRldmVyIHJlYXNvbiDigJMgd2hpY2ggY291bGQgYmUgYSBiYWQgZnV0ZXggYWRkcmVzcywgYSBmYWlsZWQgbWFzayBjaGVjayAoYGlvZi1cdTAwM2VmdXRleF9tYXNrID09IDBgKSwgb3IgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIHZpYSBgaW9fY2FjaGVfYWxsb2NgIOKAkyB0aGUgY29kZSB3b3VsZCBqdW1wIGRvd24gdG8gYGRvbmVgIG9yIGBkb25lX3VubG9ja2AuIEl0IHdvdWxkIHRoZW4gY2FsbCBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpYC4gVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgIHdpbGwgZnJlZSB1cCAqYWxsKiBgYXN5bmNfZGF0YWAuIFRoaXMgY2F1c2VkIGEgcHJvYmxlbS4gSWYgdGhlIGFsbG9jYXRpb24gdmlhIGBpb19jYWNoZV9hbGxvYyhcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIC4uLilgIGZhaWxlZCwgaXQgd291bGRuJ3QgZnJlZSB0aGUgY2FjaGVkIG9iamVjdCBiYWNrIHRvIHRoZSBgZnV0ZXhfY2FjaGVgLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdGhlcmUncyBhIGNydWNpYWwgY2hhbmdlLiBJZiBgZnV0ZXhfd2FpdF9zZXR1cGAgcmV0dXJucyBhbiBlcnJvciAoYHJldCAhPSAwYCksIGl0J2xsIGp1bXAgdG8gYGZyZWVfYXN5bmNgLiAgVGhlIGNhY2hlZCBvYmplY3Qgd2lsbCBiZSBmcmVlZCBiYWNrIGludG8gdGhlIGBjdHgtXHUwMDNlZnV0ZXhfY2FjaGVgIGFuZCBgcmVxLVx1MDAzZWFzeW5jX2RhdGFgIGlzIGNsZWFyZWQuIElmIHRoZSBmYWlsdXJlIGhhcHBlbnMgKmJlZm9yZSogYWxsb2NhdGlvbiwgd2UganVzdCBqdW1wIHRvIGBkb25lYCBzaW5jZSB0aGVyZSdzIG5vdGhpbmcgdG8gZnJlZS4gIFRoaXMgbG9va3MgbXVjaCBjbGVhbmVyLiBJdCBoYW5kbGVzIHRoZSB2YXJpb3VzIGZhaWx1cmUgY2FzZXMgbW9yZSBwcmVjaXNlbHkgYW5kIGF2b2lkcyBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB0aGUgcHJpb3IgY29kZSB3YXMgZnJlZWluZyBhbGwgYXN5bmMgZGF0YSB3aGVuLCBpbiBzb21lIGNhc2VzLCBpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuLlxuXG5HaXZlbiB0aGF0IHRoaXMgdG91Y2hlcyBzdWNoIGEgY3JpdGljYWwgcGFydCBvZiB0aGUga2VybmVsIChpb191cmluZyBhbmQgZnV0ZXgpLCBhY2Nlc3NpYmxlIHZpYSBgaW9fdXJpbmdfZW50ZXJgIHdpdGggdGhlIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAgb3Bjb2RlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBhbiBhcmVhIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIFdlIGhhdmUgYSBwb3RlbnRpYWxseSBuZXcgY29kZSBwYXRoIHRvIHRlc3QuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UncmUgbG9va2luZyBmb3IgYENPTkZJR19JT19VUklOR2AgKG9yIGp1c3QgYElPX1VSSU5HYCkgYW5kIGBDT05GSUdfRlVURVhgIChvciBgRlVURVhgKS4gSSdsbCBkb3VibGUtY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYGlvX3VyaW5nL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgZXhhY3QgbmFtZXMsIGJ1dCB0aG9zZSBhcmUgdGhlIGxpa2VseSBzdXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MDAuMzUxMzYxMDc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzU2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTk1OS1cXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk2MS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTk2OT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTk4MS1cXG5pbml0L0tjb25maWc6MTk4Mjpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5ODMtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MDAuNDQyMTIzNTAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NjQ5NzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfRlVURVhgKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgYENPTkZJR19GVVRFWGAgc3RhbmRzIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgaXQgaGFzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoaXMgcHJvcGVybHkgZm9yIFtpbnNlcnQgdXNlcidzIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgXCJteSBwZXJmb3JtYW5jZSBhbmFseXNpcyB3b3JrXCIsIG9yIFwidGhpcyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnRcIl0uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGRpc2N1c3Npb25zIHJlZ2FyZGluZyBgRlVURVhgIGNvbmZpZ3VyYXRpb24gY291bGQgaW1wYWN0IG15IGN1cnJlbnQgY29uY2VybnMuIE15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCdzIHRoZSBkZWZhdWx0IHN0YXRlLCBpcyBpdCBtb2R1bGUtYWJsZSwgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGltcGFjdC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCBhbmQgaGVscHMgbWUgZGVjaWRlIGhvdyB0byBwcm9jZWVkIHdpdGggW2luc2VydCB1c2VyJ3MgdGFza10uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MDIuNjI4NjI0MDY5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMzE5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODY5PWNvbmZpZyBCQVNFX1NNQUxMXFxuLS1cXG5pbml0L0tjb25maWctMTg3NS1cXG5pbml0L0tjb25maWc6MTg3Njpjb25maWcgRlVURVhcXG5pbml0L0tjb25maWctMTg3Ny1cXHRib29sIFxcXCJFbmFibGUgZnV0ZXggc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWctMTg4NS1cXG5pbml0L0tjb25maWc6MTg4Njpjb25maWcgRlVURVhfUElcXG5pbml0L0tjb25maWctMTg4Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTg5MC1cXG5pbml0L0tjb25maWc6MTg5MTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4OTItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4OTUtXFxuaW5pdC9LY29uZmlnOjE4OTY6Y29uZmlnIEZVVEVYX01QT0xcXG5pbml0L0tjb25maWctMTg5Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWc9MTkwMT1jb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuLS1cXG5pbml0L0tjb25maWctMTkwMy1cXG5pbml0L0tjb25maWc6MTkwNDpjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xcbmluaXQvS2NvbmZpZy0xOTA1LVxcdGRlZl9ib29sIEZVVEVYIFxcdTAwMjZcXHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFxcdTAwMjZcXHUwMDI2IFJTRVEgXFx1MDAyNlxcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjAyLjc0MDc2MTMxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjU1MzMyOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fZnV0ZXhfd2FpdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBgRm9jdXNTeW1ib2xzYCBzdWdnZXN0cyB3ZSdyZSB6ZXJvaW5nIGluIG9uIGBpb19mdXRleF93YWl0YCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgaGVyZSwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGlvX2Z1dGV4X3dhaXRfcHJlcGAsIGBpb19mdXRleF93YWtlYCwgZXRjLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gYGlvX2Z1dGV4X3dhaXRgIGlzIHNwZWNpZmljIHRvIGBpb191cmluZ2AncyBgSU9SSU5HX09QX0ZVVEVYX1dBSVRgLCBzbyBpdCBpc24ndCBzb21lIGdsb2JhbGx5IHViaXF1aXRvdXMgZnV0ZXggZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgc2NvcGUuIEFmdGVyIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIHRoZSBwYXRjaCBkaWZmLCBpdCdzIGNvbmZpcm1lZCB0aGF0IGBpb19mdXRleF93YWl0YCBpbiBgaW9fdXJpbmcvZnV0ZXguY2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgaGVyZS5cblxuVGhlIGRpZmYgaXRzZWxmIHJldmVhbHMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogaXQncyBhbGwgYWJvdXQgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIFdlJ3JlIGxvb2tpbmcgYXQgcmV2aXNlZCBjbGVhbnVwIGxvZ2ljIHdpdGhpbiB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIHBhdGNoIGFpbXMgdG8gaW1wcm92ZSBhc3luYyBkYXRhIGNhY2hpbmcgYW5kIGNsZWFudXAuIFNwZWNpZmljYWxseSwgd2UgYXJlIHJldHVybmluZyBhbGxvY2F0ZWQgc3RydWN0dXJlcyB0byB0aGUgZnV0ZXggY2FjaGUgKGBpb19jYWNoZV9mcmVlYCkgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgZGF0YSBpbnN0ZWFkIG9mIGludm9raW5nIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlYC4gVGhpcyBpcyBlc3NlbnRpYWwgYmVjYXVzZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgY3JpdGljYWwgcGF0aCB3aXRoaW4gdGhlIGBpb191cmluZ2AgZnV0ZXggaW1wbGVtZW50YXRpb24gKGBpb191cmluZy9mdXRleC5jYCkuIFRoaXMgc3Vic3lzdGVtIGlzLCBvZiBjb3Vyc2UsIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYGlvX3VyaW5nYCBzeXNjYWxscyAoYElPUklOR19PUF9GVVRFWF9XQUlUYCkuXG5cbkxvb2tzIHNvbGlkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MDcsIk91dHB1dFRva2VucyI6MTM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjA5LjM5NjA5NzcyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI3MTc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgcGF0aHMgaW4gaW9fZnV0ZXhfd2FpdCB3aXRoaW4gaW9fdXJpbmcvZnV0ZXguYywgZW5zdXJpbmcgcHJvcGVyIGZyZWVpbmcgb2YgY2FjaGVkIGFzeW5jIGRhdGEgdmlhIGlvX2NhY2hlX2ZyZWUgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgc3RhdGUgb24gZnV0ZXggc2V0dXAgZmFpbHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvX3VyaW5nIHN5c2NhbGxzIHdpdGggSU9SSU5HX09QX0ZVVEVYX1dBSVQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgcGF0aHMgaW4gaW9fZnV0ZXhfd2FpdCB3aXRoaW4gaW9fdXJpbmcvZnV0ZXguYywgZW5zdXJpbmcgcHJvcGVyIGZyZWVpbmcgb2YgY2FjaGVkIGFzeW5jIGRhdGEgdmlhIGlvX2NhY2hlX2ZyZWUgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgc3RhdGUgb24gZnV0ZXggc2V0dXAgZmFpbHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvX3VyaW5nIHN5c2NhbGxzIHdpdGggSU9SSU5HX09QX0ZVVEVYX1dBSVQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjA5LjU0NDM3ODEzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNDA3MzM4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDowOS41NDQ4OTAxMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjM0MDIxNTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGlvX3VyaW5nJ3MgZnV0ZXggd2FpdCBpbXBsZW1lbnRhdGlvbiAoaW9fZnV0ZXhfd2FpdCksIHdoZXJlIGEgZmFpbHVyZSBpbiBmdXRleF93YWl0X3NldHVwIGluY29ycmVjdGx5IGludm9rZWQgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZSgpICh3aGljaCBjYWxscyBrZnJlZSkgaW5zdGVhZCBvZiByZWxlYXNpbmcgdGhlIGNhY2hlLWFsbG9jYXRlZCBpZmQgb2JqZWN0IHZpYSBpb19jYWNoZV9mcmVlKCkuIFxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzMzNDk1NDU3ZWIyNDdmZGFjNjNiYTMzYmU3NWMzNWM3YjdhMWUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNDoyOTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXG5pbmRleCBlYWVlMTQyNDJhM2EzLi42Mzg5YmQyZjAzOTk0IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xuQEAgLTMyMSwyMCArMzIxLDIyIEBAIGludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRyZXQgPSBmdXRleF93YWl0X3NldHVwKGlvZi1cdTAwM2V1YWRkciwgaW9mLVx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzLFxuIFx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4tXHRpZiAoIXJldCkge1xuLVx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZyZXEtXHUwMDNlaGFzaF9ub2RlLCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCk7XG4tXHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9hc3luYztcbiBcbi1cdFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xuLVx0fVxuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cmVxLVx1MDAzZWhhc2hfbm9kZSwgXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuK1x0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIFxuK1x0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xuK1xuK2ZyZWVfYXN5bmM6XG4rXHRpb19jYWNoZV9mcmVlKFx1MDAyNmN0eC1cdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcbitcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XG4gZG9uZV91bmxvY2s6XG4gXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gZG9uZTpcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuK1x0cmVxX3NldF9mYWlsKHJlcSk7XG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4tXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XG4gXHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjA5LjU0NDg5MzA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxODIxODQxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGlvX3VyaW5nL2Z1dGV4LmNgJ3MgRGlmZioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgZGlmZiBvZiBgaW9fdXJpbmcvZnV0ZXguY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEknbSBub3QganVzdCBsb29raW5nIGZvciB0aGUgbGluZXMgdGhhdCB3ZXJlIGFsdGVyZWQ7IEknbSB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBXaGF0IHByb2JsZW0gaXMgdGhpcyBwYXRjaCBhaW1pbmcgdG8gc29sdmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyB0aGF0IHRoZSBkaWZmIG1pZ2h0IGludHJvZHVjZS5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbSBub3QganVzdCBnb2luZyB0byByZWx5IG9uIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCBsaW5lIDMyMSwgdXNpbmcgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgYW5kIGFuYWx5emUgdGhhdCBlbnRpcmUgc2VjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHksIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBjb2RlIGJsb2NrIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRoaXMgZ3JhbnVsYXIgaW5zcGVjdGlvbiBpcyBlc3NlbnRpYWwgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJ1Z3MsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEknbSB0aGlua2luZyBvZiBjaGVja2luZyBkYXRhIHN0cnVjdHVyZXMsIG11dGV4IGxvY2tzLCBhbmQgb3ZlcmFsbCBmdW5jdGlvbiBjYWxscywgd2hpY2ggY291bGQgYmUgdGhlIHNvdXJjZSBvZiBteSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjE2LjcyNzA4MTkxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9mdXRleC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHR9XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4gMjkzOlxcdFxcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcXG4gMjk0OlxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gMjk3OlxcdHtcXG4gMjk4OlxcdFxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG4gMjk5OlxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVxcdTAwM2VjdHg7XFxuIDMwMDpcXHRcXHRzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSAqaWZkID0gTlVMTDtcXG4gMzAxOlxcdFxcdGludCByZXQ7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdGlmICghaW9mLVxcdTAwM2VmdXRleF9tYXNrKSB7XFxuIDMwNDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAzMDU6XFx0XFx0XFx0Z290byBkb25lO1xcbiAzMDY6XFx0XFx0fVxcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzMDk6XFx0XFx0aWZkID0gaW9fY2FjaGVfYWxsb2MoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIEdGUF9OT1dBSVQpO1xcbiAzMTA6XFx0XFx0aWYgKCFpZmQpIHtcXG4gMzExOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDMxMjpcXHRcXHRcXHRnb3RvIGRvbmVfdW5sb2NrO1xcbiAzMTM6XFx0XFx0fVxcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEE7XFxuIDMxNjpcXHRcXHRyZXEtXFx1MDAzZWFzeW5jX2RhdGEgPSBpZmQ7XFxuIDMxNzpcXHRcXHRpZmQtXFx1MDAzZXEgPSBmdXRleF9xX2luaXQ7XFxuIDMxODpcXHRcXHRpZmQtXFx1MDAzZXEuYml0c2V0ID0gaW9mLVxcdTAwM2VmdXRleF9tYXNrO1xcbiAzMTk6XFx0XFx0aWZkLVxcdTAwM2VxLndha2UgPSBpb19mdXRleF93YWtlX2ZuO1xcbiAzMjA6XFx0XFx0aWZkLVxcdTAwM2VyZXEgPSByZXE7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdHJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLVxcdTAwM2V1YWRkciwgaW9mLVxcdTAwM2VmdXRleF92YWwsIGlvZi1cXHUwMDNlZnV0ZXhfZmxhZ3MsXFxuIDMyMzpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlmZC1cXHUwMDNlcSwgTlVMTCwgTlVMTCk7XFxuIDMyNDpcXHRcXHRpZiAocmV0KVxcbiAzMjU6XFx0XFx0XFx0Z290byBmcmVlX2FzeW5jO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cmVxLVxcdTAwM2VoYXNoX25vZGUsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbiAzMjg6XFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdGZyZWVfYXN5bmM6XFxuIDMzMzpcXHRcXHRpb19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xcbiAzMzQ6XFx0XFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcXG4gMzM1OlxcdGRvbmVfdW5sb2NrOlxcbiAzMzY6XFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzMzc6XFx0ZG9uZTpcXG4gMzM4OlxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbiAzMzk6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbiAzNDA6XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG4gMzQ2OlxcdFxcdGludCByZXQ7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qXFxuIDM0OTpcXHRcXHQgKiBTdHJpY3QgZmxhZ3MgLSBlbnN1cmUgdGhhdCB3YWtpbmcgMCBmdXRleGVzIHlpZWxkcyBhIDAgcmVzdWx0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDoxNi43MjcyMTg5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTc3MTE5NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fZnV0ZXhfd2FpdCBQYXRjaDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgaW9fZnV0ZXhfd2FpdGAgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgcGF0Y2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGRpZmYuIExvb2tpbmcgYXQgdGhlIHByZS1wYXRjaCBjb2RlIGJsb2NrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpb19mdXRleF93YWl0YCwgSSBzZWUgdGhlIGNvcmUgbG9naWM6IGEgY2FsbCB0byBgZnV0ZXhfd2FpdF9zZXR1cGAsIGFuZCB0aGVuIGEgcmV0dXJuLiBUaGUgaW50ZXJlc3RpbmcgcGFydCwgdGhvdWdoLCBpcyB0aGUgY29uZGl0aW9uYWwgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAuXG5cbk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgIGNhbGwuIEkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4gSSBrbm93IGl0J3MgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGUgYXN5bmNocm9ub3VzIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHRoZSBjYWxsIGluIG11bHRpcGxlIHNjZW5hcmlvcywgc3BlY2lmaWNhbGx5IHdoZW4gYGlvX2Z1dGV4X3dhaXRgIGZhaWxzIGVhcmx5LCBsaWtlIHdoZW4gZWl0aGVyIGAhaW9mLVx1MDAzZWZ1dGV4X21hc2tgIG9yIGAhaWZkYCBldmFsdWF0ZSB0byB0cnVlLiBJbiB0aG9zZSBjYXNlcywgYHJldCA9IC1FSU5WQUxgIG9yIHNpbWlsYXIgaXMgc2V0LCBhbmQgdGhlIGNvZGUganVtcHMgdG8gYGRvbmVgLCBjYWxsaW5nIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgLlxuXG5XYWl0IGEgbWludXRlLi4uIEl0J3MgcG9zc2libGUgZm9yIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlYCB0byBiZSBjYWxsZWQgKmV2ZW4qIGlmIGByZXEtXHUwMDNlYXN5bmNfZGF0YWAgaGFzbid0IGJlZW4gYWxsb2NhdGVkIG9yIGByZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQWAgaGFzbid0IGJlZW4gc2V0LiBUaGF0J3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSEgSSByZW1lbWJlciB0aGlzIGNvZGUgdXNlcyBgaW9fY2FjaGVfZnJlZWAsIGFuZCB0aGF0J3MgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLiBUaGlzIGRlZmluaXRlbHkgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGV4YWN0bHkgaG93IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlYCBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCBoYXMgdGhlIHJpZ2h0IGNoZWNrcyB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYW5kIGlmIG5vdCwgdGhpcyBjb3VsZCBiZSBhIHNlcmlvdXMgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjUxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MjAuNzA0MzQyMzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU2MDAzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlcV9hc3luY19kYXRhX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9mdXRleC5jPTU0PXN0YXRpYyB2b2lkIGlvX2Z1dGV4X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy02MC1cXHRpb19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2NhY2hlLCByZXEtXFx1MDAzZWFzeW5jX2RhdGEpO1xcbmlvX3VyaW5nL2Z1dGV4LmM6NjE6XFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcXG5pb191cmluZy9mdXRleC5jLTYyLVxcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jPTY1PXN0YXRpYyB2b2lkIGlvX2Z1dGV4dl9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtODAtXFxuaW9fdXJpbmcvZnV0ZXguYzo4MTpcXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XFxuaW9fdXJpbmcvZnV0ZXguYy04Mi1cXHRfX2lvX2Z1dGV4X2NvbXBsZXRlKHR3X3JlcSwgdHcpO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYz0yNDM9aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTI2MC1cXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuaW9fdXJpbmcvZnV0ZXguYzoyNjE6XFx0XFx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjYyLVxcdFxcdHJldHVybiBJT1VfQ09NUExFVEU7XFxuLS1cXG5pb191cmluZy9mdXRleC5jPTI5Nj1pbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0zMzMtXFx0aW9fY2FjaGVfZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcXG5pb191cmluZy9mdXRleC5jOjMzNDpcXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzM1LWRvbmVfdW5sb2NrOlxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zNjg9c3RhdGljIGlubGluZSBib29sIHJlcV9oYXNfYXN5bmNfZGF0YShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzcyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzczOnN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9pb191cmluZy5oLTM3NC1cXHRcXHRcXHRcXHRcXHQgICBpb19yZXFfZmxhZ3NfdCBleHRyYV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzc5LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzgwOnN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzgxLXtcXG5pb191cmluZy9pb191cmluZy5oLTM4Mi1cXHRrZnJlZShyZXEtXFx1MDAzZWFzeW5jX2RhdGEpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzgzOlxcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zODQtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTY3PXN0YXRpYyB2b2lkIGlvX25ldG1zZ19yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xODItXFx0aWYgKGlvX2FsbG9jX2NhY2hlX3B1dChcXHUwMDI2cmVxLVxcdTAwM2VjdHgtXFx1MDAzZW5ldG1zZ19jYWNoZSwgaGRyKSlcXG5pb191cmluZy9uZXQuYzoxODM6XFx0XFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCBSRVFfRl9ORUVEX0NMRUFOVVApO1xcbmlvX3VyaW5nL25ldC5jLTE4NC19XFxuLS1cXG5pb191cmluZy9ydy5jPTEzMz1zdGF0aWMgYm9vbCBpb19yd19yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9ydy5jLTE0NC1cXHRpZiAoaW9fYWxsb2NfY2FjaGVfcHV0KFxcdTAwMjZyZXEtXFx1MDAzZWN0eC1cXHUwMDNlcndfY2FjaGUsIHJ3KSkge1xcbmlvX3VyaW5nL3J3LmM6MTQ1OlxcdFxcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XFxuaW9fdXJpbmcvcncuYy0xNDYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0yNj1zdGF0aWMgdm9pZCBpb19yZXFfdXJpbmdfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzktXFx0XFx0aW91Y21kLVxcdTAwM2VzcWUgPSBOVUxMO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjQwOlxcdFxcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgUkVRX0ZfTkVFRF9DTEVBTlVQKTtcXG5pb191cmluZy91cmluZ19jbWQuYy00MS1cXHR9IGVsc2Uge1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmM9MzU9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2ZyZWUoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0zOS1cXHRwdXRfcGlkKGl3YS1cXHUwMDNld28ud29fcGlkKTtcXG5pb191cmluZy93YWl0aWQuYzo0MDpcXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XFxuaW9fdXJpbmcvd2FpdGlkLmMtNDEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDoyMy4wNjAzNTUyNDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgyNDcyMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgaW9fdXJpbmcgZnV0ZXggYnVnIGZpeCoqXG5cbk9rYXksIGhlcmUncyBob3cgSSBzZWUgdGhpcyBwYXRjaC4gSXQgYWRkcmVzc2VzIGEgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIHRoZSBgaW9fZnV0ZXhfd2FpdGAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgaW5jb3JyZWN0bHkgZnJlZWluZyBhIHBpZWNlIG9mIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGUgYGlvX2NhY2hlYCB1c2luZyBga2ZyZWVgLCB3aGljaCBpcyBhIGNsYXNzaWMgaW52YWxpZCBmcmVlIGFuZCBhIHBvdGVudGlhbCBzb3VyY2Ugb2Ygc2xhYiBjb3JydXB0aW9uIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycy4gU3BlY2lmaWNhbGx5LCBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpYCB3YXMgYmVpbmcgY2FsbGVkIG9uIGByZXEtXHUwMDNlYXN5bmNfZGF0YWAsIHdoaWNoIHNvbWV0aW1lcyBwb2ludGVkIHRvIGFuIGBpZmRgIHN0cnVjdHVyZSB0aGF0IHdhcyBhbGxvY2F0ZWQgdmlhIGBpb19jYWNoZV9hbGxvY2AgYW5kIHRodXMgc2hvdWxkIGhhdmUgYmVlbiBmcmVlZCB2aWEgYGlvX2NhY2hlX2ZyZWVgLlxuXG5UaGUgZml4IGludHJvZHVjZXMgYSBgZnJlZV9hc3luY2AgbGFiZWwgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGguIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYGZ1dGV4X3dhaXRfc2V0dXBgIGZhaWxzLCB3ZSBqdW1wIHRvIGBmcmVlX2FzeW5jYC4gSW4gdGhpcyBibG9jaywgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBjYWxscyBgaW9fY2FjaGVfZnJlZWAgdG8gcmVsZWFzZSB0aGUgYGlmZGAgc3RydWN0dXJlIGFuZCBhbHNvIGNhbGxzIGBpb19yZXFfYXN5bmNfZGF0YV9jbGVhcmAgdG8gY2xlYXIgdGhlIHJlcXVlc3QncyBhc3luYyBkYXRhLCB3aGljaCBsb29rcyBsaWtlIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYXJlYXMgZm9yIEtNU0FOIGNvbmNlcm5zLiBJJ3ZlIGNvbnNpZGVyZWQ6XG5cbjEuICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNlbnQgdG8gdXNlciBzcGFjZSoqOiBUaGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCdzIHNvbGVseSBjb25jZXJuZWQgd2l0aCBlcnJvciBjbGVhbnVwIHdpdGhpbiB0aGUga2VybmVsLCBzbyB0aGlzIGlzbid0IGEgY29uY2Vybi5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljKio6IFRoZXJlJ3Mgbm8gYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIHRoaXMgcGF0Y2guXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyoqOiBJIGRvbid0IHNlZSBhbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMqKjogVGhlcmUncyBubyByaXNrIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGJlY2F1c2UgdGhlIHBhdGNoIGlzIGNvbmNlcm5lZCB3aXRoIGVycm9yIHBhdGhzLCBhbmQgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkLlxuXG5UaGlzIHBhdGNoIGlzIHB1cmVseSBhYm91dCBmaXhpbmcgYSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoYXQgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBhIGNhY2hlIGFyZSBmcmVlZCB1c2luZyB0aGUgY2FjaGUncyBkZWFsbG9jYXRpb24gZnVuY3Rpb24uIEFueSBtZW1vcnkgZXJyb3JzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gLyBTTFVCIGRlYnVnZ2Vycywgc28gSSdtIGNvbmZpZGVudCBhYm91dCB0aGF0LiBJIHNlZSBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuXG5cblRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzM0LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDozMS44ODUwNzg3NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZydzIGZ1dGV4IHdhaXQgaW1wbGVtZW50YXRpb24gKGlvX2Z1dGV4X3dhaXQpLCB3aGVyZSBhIGZhaWx1cmUgaW4gZnV0ZXhfd2FpdF9zZXR1cCBpbmNvcnJlY3RseSBpbnZva2VkIGlvX3JlcV9hc3luY19kYXRhX2ZyZWUoKSAod2hpY2ggY2FsbHMga2ZyZWUpIGluc3RlYWQgb2YgcmVsZWFzaW5nIHRoZSBjYWNoZS1hbGxvY2F0ZWQgaWZkIG9iamVjdCB2aWEgaW9fY2FjaGVfZnJlZSgpLiBcXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBlcnJvciBjbGVhbnVwIGFuZCBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhdGh3YXlzIChwcmV2ZW50aW5nIGludmFsaWQgZnJlZXMgb3Igc2xhYiBjb3JydXB0aW9uKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIGludmFsaWQgZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGlvX3VyaW5nJ3MgZnV0ZXggd2FpdCBpbXBsZW1lbnRhdGlvbiAoaW9fZnV0ZXhfd2FpdCksIHdoZXJlIGEgZmFpbHVyZSBpbiBmdXRleF93YWl0X3NldHVwIGluY29ycmVjdGx5IGludm9rZWQgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZSgpICh3aGljaCBjYWxscyBrZnJlZSkgaW5zdGVhZCBvZiByZWxlYXNpbmcgdGhlIGNhY2hlLWFsbG9jYXRlZCBpZmQgb2JqZWN0IHZpYSBpb19jYWNoZV9mcmVlKCkuIFxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4hxsg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 14:10:11 +0000 UTC FinishedAt: 2026-09-03 14:30:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "FUTEX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "FUTEX" ], "series_id": "e1db7980-1f8c-4d3d-8933-6ac66e97a625" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_futex_wait", "io_futex_wait_prep" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0ZVVEVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fZnV0ZXhfd2FpdCYjMzQ7LAogICAgJiMzNDtpb19mdXRleF93YWl0X3ByZXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gaW9fdXJpbmcmIzM5O3MgZnV0ZXggd2FpdCBpbXBsZW1lbnRhdGlvbiAoaW9fZnV0ZXhfd2FpdCksIHdoZXJlIGEgZmFpbHVyZSBpbiBmdXRleF93YWl0X3NldHVwIGluY29ycmVjdGx5IGludm9rZWQgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZSgpICh3aGljaCBjYWxscyBrZnJlZSkgaW5zdGVhZCBvZiByZWxlYXNpbmcgdGhlIGNhY2hlLWFsbG9jYXRlZCBpZmQgb2JqZWN0IHZpYSBpb19jYWNoZV9mcmVlKCkuIFxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBlcnJvciBjbGVhbnVwIGFuZCBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhdGh3YXlzIChwcmV2ZW50aW5nIGludmFsaWQgZnJlZXMgb3Igc2xhYiBjb3JydXB0aW9uKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIGludmFsaWQgZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHBhdGhzIGluIGlvX2Z1dGV4X3dhaXQgd2l0aGluIGlvX3VyaW5nL2Z1dGV4LmMsIGVuc3VyaW5nIHByb3BlciBmcmVlaW5nIG9mIGNhY2hlZCBhc3luYyBkYXRhIHZpYSBpb19jYWNoZV9mcmVlIGFuZCBjbGVhcmluZyByZXF1ZXN0IGFzeW5jIHN0YXRlIG9uIGZ1dGV4IHNldHVwIGZhaWx1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb191cmluZyBzeXNjYWxscyB3aXRoIElPUklOR19PUF9GVVRFWF9XQUlULiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTczMzQ5NTQ1N2ViMjQ3ZmRhYzYzYmEzM2JlNzVjMzVjN2I3YTFlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6Mjk6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmNcbmluZGV4IGVhZWUxNDI0MmEzYTMuLjYzODliZDJmMDM5OTQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mdXRleC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jXG5AQCAtMzIxLDIwICYjNDM7MzIxLDIyIEBAIGludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRyZXQgPSBmdXRleF93YWl0X3NldHVwKGlvZi1cdTAwM2V1YWRkciwgaW9mLVx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzLFxuIFx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4tXHRpZiAoIXJldCkge1xuLVx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZyZXEtXHUwMDNlaGFzaF9ub2RlLCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCk7XG4tXHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBmcmVlX2FzeW5jO1xuIFxuLVx0XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4tXHR9XG4mIzQzO1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cmVxLVx1MDAzZWhhc2hfbm9kZSwgXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuJiM0MztcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiBcbiYjNDM7XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4mIzQzO1xuJiM0MztmcmVlX2FzeW5jOlxuJiM0MztcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xuJiM0MztcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XG4gZG9uZV91bmxvY2s6XG4gXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gZG9uZTpcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuJiM0MztcdHJlcV9zZXRfZmFpbChyZXEpO1xuIFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xuLVx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuIFx0cmV0dXJuIElPVV9DT01QTEVURTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19mdXRleF93YWl0JiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBpbiBpb19mdXRleF93YWl0IHdpdGhpbiBpb191cmluZy9mdXRleC5jLCBlbnN1cmluZyBwcm9wZXIgZnJlZWluZyBvZiBjYWNoZWQgYXN5bmMgZGF0YSB2aWEgaW9fY2FjaGVfZnJlZSBhbmQgY2xlYXJpbmcgcmVxdWVzdCBhc3luYyBzdGF0ZSBvbiBmdXRleCBzZXR1cCBmYWlsdXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9fdXJpbmcgc3lzY2FsbHMgd2l0aCBJT1JJTkdfT1BfRlVURVhfV0FJVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3MzM0OTU0NTdlYjI0N2ZkYWM2M2JhMzNiZTc1YzM1YzdiN2ExZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjI5OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmMKaW5kZXggZWFlZTE0MjQyYTNhMy4uNjM4OWJkMmYwMzk5NCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvZnV0ZXguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jCkBAIC0zMjEsMjAgJiM0MzszMjEsMjIgQEAgaW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLSZndDt1YWRkciwgaW9mLSZndDtmdXRleF92YWwsIGlvZi0mZ3Q7ZnV0ZXhfZmxhZ3MsCiAJCQkgICAgICAgJmFtcDtpZmQtJmd0O3EsIE5VTEwsIE5VTEwpOwotCWlmICghcmV0KSB7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKLQkJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBmcmVlX2FzeW5jOwogCi0JCXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKLQl9CiYjNDM7CWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKJiM0MzsJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwogCiYjNDM7CXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKJiM0MzsKJiM0MztmcmVlX2FzeW5jOgomIzQzOwlpb19jYWNoZV9mcmVlKCZhbXA7Y3R4LSZndDtmdXRleF9jYWNoZSwgaWZkKTsKJiM0MzsJaW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTsKIGRvbmVfdW5sb2NrOgogCWlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTsKIGRvbmU6Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJlcV9zZXRfZmFpbChyZXEpOwomIzQzOwlyZXFfc2V0X2ZhaWwocmVxKTsKIAlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7Ci0JaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpOwogCXJldHVybiBJT1VfQ09NUExFVEU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvZnV0ZXguYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGlvX3VyaW5nL2Z1dGV4LmNgIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgaW9fZnV0ZXhfd2FpdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUgYXJlIHNvbWUgZGVwZW5kZW5jaWVzLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpb191cmluZy9mdXRleCBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuCgpMZXQmIzM5O3MgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgYGlvX3VyaW5nL2Z1dGV4LmNgLCBhbmQgSSYjMzk7bGwganVtcCB0byBhcm91bmQgbGluZSAzMjEuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHNlZSB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uIGluIGNvbnRleHQuIEl0JiMzOTtzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIHVzZWZ1bCB0aGVyZSB0byBndWlkZSBteSB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYWxzbyBjaGVjayBLY29uZmlnIGFnYWluLCB3aGlsZSBJIGFtIGhlcmUsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2Z1dGV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0fVxuIDI5MTpcdFxuIDI5MjpcdFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDI5MzpcdFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xuIDI5NDpcdH1cbiAyOTU6XHRcbiAyOTY6XHRpbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIDI5NzpcdHtcbiAyOTg6XHRcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbiAyOTk6XHRcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVx1MDAzZWN0eDtcbiAzMDA6XHRcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSBOVUxMO1xuIDMwMTpcdFx0aW50IHJldDtcbiAzMDI6XHRcbiAzMDM6XHRcdGlmICghaW9mLVx1MDAzZWZ1dGV4X21hc2spIHtcbiAzMDQ6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAzMDU6XHRcdFx0Z290byBkb25lO1xuIDMwNjpcdFx0fVxuIDMwNzpcdFxuIDMwODpcdFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzMDk6XHRcdGlmZCA9IGlvX2NhY2hlX2FsbG9jKFx1MDAyNmN0eC1cdTAwM2VmdXRleF9jYWNoZSwgR0ZQX05PV0FJVCk7XG4gMzEwOlx0XHRpZiAoIWlmZCkge1xuIDMxMTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDMxMjpcdFx0XHRnb3RvIGRvbmVfdW5sb2NrO1xuIDMxMzpcdFx0fVxuIDMxNDpcdFxuIDMxNTpcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEE7XG4gMzE2Olx0XHRyZXEtXHUwMDNlYXN5bmNfZGF0YSA9IGlmZDtcbiAzMTc6XHRcdGlmZC1cdTAwM2VxID0gZnV0ZXhfcV9pbml0O1xuIDMxODpcdFx0aWZkLVx1MDAzZXEuYml0c2V0ID0gaW9mLVx1MDAzZWZ1dGV4X21hc2s7XG4gMzE5Olx0XHRpZmQtXHUwMDNlcS53YWtlID0gaW9fZnV0ZXhfd2FrZV9mbjtcbiAzMjA6XHRcdGlmZC1cdTAwM2VyZXEgPSByZXE7XG4gMzIxOlx0XG4gMzIyOlx0XHRyZXQgPSBmdXRleF93YWl0X3NldHVwKGlvZi1cdTAwM2V1YWRkciwgaW9mLVx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzLFxuIDMyMzpcdFx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4gMzI0Olx0XHRpZiAocmV0KVxuIDMyNTpcdFx0XHRnb3RvIGZyZWVfYXN5bmM7XG4gMzI2Olx0XG4gMzI3Olx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZyZXEtXHUwMDNlaGFzaF9ub2RlLCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCk7XG4gMzI4Olx0XHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gMzI5Olx0XG4gMzMwOlx0XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4gMzMxOlx0XG4gMzMyOlx0ZnJlZV9hc3luYzpcbiAzMzM6XHRcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xuIDMzNDpcdFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbiAzMzU6XHRkb25lX3VubG9jazpcbiAzMzY6XHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzMzc6XHRkb25lOlxuIDMzODpcdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4gMzM5Olx0XHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gMzQwOlx0XHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xuIDM0MTpcdH1cbiAzNDI6XHRcbiAzNDM6XHRpbnQgaW9fZnV0ZXhfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbiAzNDY6XHRcdGludCByZXQ7XG4gMzQ3Olx0XG4gMzQ4Olx0XHQvKlxuIDM0OTpcdFx0ICogU3RyaWN0IGZsYWdzIC0gZW5zdXJlIHRoYXQgd2FraW5nIDAgZnV0ZXhlcyB5aWVsZHMgYSAwIHJlc3VsdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDA4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBmdXRleC5jYCB3aXRoaW4gdGhlIGlvX3VyaW5nIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBmdXRleC5jYCBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay4gR2l2ZW4gdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgZW52aXJvbm1lbnQsIEkgaW1tZWRpYXRlbHkgcmVhY2ggZm9yIHRoZSBzdGFuZGFyZCBidWlsZCBzeXN0ZW0gZmlsZXMuIE15IHByaW1hcnkgdGFyZ2V0cyBhcmUgZ29pbmcgdG8gYmUgYGlvX3VyaW5nL01ha2VmaWxlYCBhbmQgYGlvX3VyaW5nL0tjb25maWdgLiBUaGUgYE1ha2VmaWxlYCB3aWxsLCBvZiBjb3Vyc2UsIHRlbGwgbWUgdGhlIGRpcmVjdCBidWlsZCBjb21tYW5kcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGVyIGZsYWdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBgaW9fdXJpbmdgIG1vZHVsZS4gVGhlIGBLY29uZmlnYCBmaWxlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBhbnkgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgZnV0ZXguY2AuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcGVyaGFwcyBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgZmVhdHVyZSBmbGFnLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGluZm9ybWF0aW9uIHRvIGJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHRoZXNlIGNvcmUgZmlsZXM7IGl04oCZcyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uYWwgY29udGV4dCBuZWVkZWQgdG8gYW5hbHl6ZSBgZnV0ZXguY2Agd2l0aGluIHRoZSBvdmVyYWxsIGBpb191cmluZ2AgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lPX1dRKVx0XHQmIzQzOz0gaW8td3Eub1xuaW9fdXJpbmcvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0ZVVEVYKVx0XHQmIzQzOz0gZnV0ZXgub1xuaW9fdXJpbmcvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX0VQT0xMKVx0XHQmIzQzOz0gZXBvbGwub1xuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTE5LSNpbmNsdWRlIFwmIzM0O3dhaXRpZC5oXCYjMzQ7XG5pb191cmluZy9jYW5jZWwuYzoyMDojaW5jbHVkZSBcJiMzNDtmdXRleC5oXCYjMzQ7XG5pb191cmluZy9jYW5jZWwuYy0yMS0jaW5jbHVkZSBcJiMzNDtjYW5jZWwuaFwmIzM0O1xuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTEwNT1pbnQgaW9fdHJ5X2NhbmNlbChzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy0xMjgtXG5pb191cmluZy9jYW5jZWwuYzoxMjk6XHRyZXQgPSBpb19mdXRleF9jYW5jZWwoY3R4LCBjZCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMTMwLVx0aWYgKHJldCAhPSAtRU5PRU5UKVxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTU2MS1cdHJldCB8PSBpb193YWl0aWRfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xuaW9fdXJpbmcvY2FuY2VsLmM6NTYyOlx0cmV0IHw9IGlvX2Z1dGV4X3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTU2My1cdHJldCB8PSBpb191cmluZ190cnlfY2FuY2VsX3VyaW5nX2NtZChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtOS1cbmlvX3VyaW5nL2Z1dGV4LmM6MTA6I2luY2x1ZGUgXCYjMzQ7Li4va2VybmVsL2Z1dGV4L2Z1dGV4LmhcJiMzNDtcbmlvX3VyaW5nL2Z1dGV4LmMtMTEtI2luY2x1ZGUgXCYjMzQ7aW9fdXJpbmcuaFwmIzM0O1xuaW9fdXJpbmcvZnV0ZXguYy0xMi0jaW5jbHVkZSBcJiMzNDthbGxvY19jYWNoZS5oXCYjMzQ7XG5pb191cmluZy9mdXRleC5jOjEzOiNpbmNsdWRlIFwmIzM0O2Z1dGV4LmhcJiMzNDtcbmlvX3VyaW5nL2Z1dGV4LmMtMTQtXG5pb191cmluZy9mdXRleC5jOjE1OnN0cnVjdCBpb19mdXRleCB7XG5pb191cmluZy9mdXRleC5jLTE2LVx0c3RydWN0IGZpbGVcdCpmaWxlO1xuaW9fdXJpbmcvZnV0ZXguYy0xNy1cdHZvaWQgX191c2VyXHQqdWFkZHI7XG5pb191cmluZy9mdXRleC5jOjE4Olx0dW5zaWduZWQgbG9uZ1x0ZnV0ZXhfdmFsO1xuaW9fdXJpbmcvZnV0ZXguYzoxOTpcdHVuc2lnbmVkIGxvbmdcdGZ1dGV4X21hc2s7XG5pb191cmluZy9mdXRleC5jOjIwOlx0dTMyXHRcdGZ1dGV4X2ZsYWdzO1xuaW9fdXJpbmcvZnV0ZXguYzoyMTpcdHVuc2lnbmVkIGludFx0ZnV0ZXhfbnI7XG5pb191cmluZy9mdXRleC5jOjIyOlx0Ym9vbFx0XHRmdXRleHZfdW5xdWV1ZWQ7XG5pb191cmluZy9mdXRleC5jLTIzLX07XG5pb191cmluZy9mdXRleC5jLTI0LVxuaW9fdXJpbmcvZnV0ZXguYzoyNTpzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSB7XG5pb191cmluZy9mdXRleC5jOjI2Olx0c3RydWN0IGZ1dGV4X3FcdHE7XG5pb191cmluZy9mdXRleC5jLTI3LVx0c3RydWN0IGlvX2tpb2NiXHQqcmVxO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjktXG5pb191cmluZy9mdXRleC5jOjMwOnN0cnVjdCBpb19mdXRleHZfZGF0YSB7XG5pb191cmluZy9mdXRleC5jLTMxLVx0dW5zaWduZWQgbG9uZ1x0XHRvd25lZDtcbmlvX3VyaW5nL2Z1dGV4LmM6MzI6XHRzdHJ1Y3QgZnV0ZXhfdmVjdG9yXHRmdXRleHZbXTtcbmlvX3VyaW5nL2Z1dGV4LmMtMzMtfTtcbi0tXG5pb191cmluZy9mdXRleC5jLTM2LVxuaW9fdXJpbmcvZnV0ZXguYzozNzpib29sIGlvX2Z1dGV4X2NhY2hlX2luaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG5pb191cmluZy9mdXRleC5jLTM4LXtcbmlvX3VyaW5nL2Z1dGV4LmM6Mzk6XHRyZXR1cm4gaW9fYWxsb2NfY2FjaGVfaW5pdChcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIElPX0ZVVEVYX0FMTE9DX0NBQ0hFX01BWCxcbmlvX3VyaW5nL2Z1dGV4LmM6NDA6XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlvX2Z1dGV4X2RhdGEpLCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNDEtfVxuaW9fdXJpbmcvZnV0ZXguYy00Mi1cbmlvX3VyaW5nL2Z1dGV4LmM6NDM6dm9pZCBpb19mdXRleF9jYWNoZV9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvZnV0ZXguYy00NC17XG5pb191cmluZy9mdXRleC5jOjQ1Olx0aW9fYWxsb2NfY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGtmcmVlKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNDYtfVxuaW9fdXJpbmcvZnV0ZXguYy00Ny1cbmlvX3VyaW5nL2Z1dGV4LmM6NDg6c3RhdGljIHZvaWQgX19pb19mdXRleF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbmlvX3VyaW5nL2Z1dGV4LmMtNDkte1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtNTMtXG5pb191cmluZy9mdXRleC5jOjU0OnN0YXRpYyB2b2lkIGlvX2Z1dGV4X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuaW9fdXJpbmcvZnV0ZXguYy01NS17XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy01OS1cdGlvX3R3X2xvY2soY3R4LCB0dyk7XG5pb191cmluZy9mdXRleC5jOjYwOlx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIHJlcS1cdTAwM2Vhc3luY19kYXRhKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNjEtXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuaW9fdXJpbmcvZnV0ZXguYzo2MjpcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XG5pb191cmluZy9mdXRleC5jLTYzLX1cbmlvX3VyaW5nL2Z1dGV4LmMtNjQtXG5pb191cmluZy9mdXRleC5jOjY1OnN0YXRpYyB2b2lkIGlvX2Z1dGV4dl9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbmlvX3VyaW5nL2Z1dGV4LmMtNjYte1xuaW9fdXJpbmcvZnV0ZXguYy02Ny1cdHN0cnVjdCBpb19raW9jYiAqcmVxID0gdHdfcmVxLnJlcTtcbmlvX3VyaW5nL2Z1dGV4LmM6Njg6XHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XG5pb191cmluZy9mdXRleC5jOjY5Olx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXHUwMDNlYXN5bmNfZGF0YTtcbmlvX3VyaW5nL2Z1dGV4LmMtNzAtXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy03Mi1cbmlvX3VyaW5nL2Z1dGV4LmM6NzM6XHRpZiAoIWlvZi1cdTAwM2VmdXRleHZfdW5xdWV1ZWQpIHtcbmlvX3VyaW5nL2Z1dGV4LmMtNzQtXHRcdGludCByZXM7XG5pb191cmluZy9mdXRleC5jLTc1LVxuaW9fdXJpbmcvZnV0ZXguYzo3NjpcdFx0cmVzID0gZnV0ZXhfdW5xdWV1ZV9tdWx0aXBsZShpZmQtXHUwMDNlZnV0ZXh2LCBpb2YtXHUwMDNlZnV0ZXhfbnIpO1xuaW9fdXJpbmcvZnV0ZXguYy03Ny1cdFx0aWYgKHJlcyAhPSAtMSlcbi0tXG5pb191cmluZy9mdXRleC5jLTgxLVx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuaW9fdXJpbmcvZnV0ZXguYzo4MjpcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XG5pb191cmluZy9mdXRleC5jLTgzLX1cbmlvX3VyaW5nL2Z1dGV4LmMtODQtXG5pb191cmluZy9mdXRleC5jOjg1OnN0YXRpYyBib29sIGlvX2Z1dGV4dl9jbGFpbShzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZClcbmlvX3VyaW5nL2Z1dGV4LmMtODYte1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtOTEtXG5pb191cmluZy9mdXRleC5jOjkyOnN0YXRpYyBib29sIF9faW9fZnV0ZXhfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvZnV0ZXguYy05My17XG5pb191cmluZy9mdXRleC5jOjk0Olx0LyogZnV0ZXggd2FrZSBhbHJlYWR5IGRvbmUgb3IgaW4gcHJvZ3Jlc3MgKi9cbmlvX3VyaW5nL2Z1dGV4LmMtOTUtXHRpZiAocmVxLVx1MDAzZW9wY29kZSA9PSBJT1JJTkdfT1BfRlVURVhfV0FJVCkge1xuaW9fdXJpbmcvZnV0ZXguYzo5NjpcdFx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYy05Ny1cbmlvX3VyaW5nL2Z1dGV4LmM6OTg6XHRcdGlmICghZnV0ZXhfdW5xdWV1ZShcdTAwMjZpZmQtXHUwMDNlcSkpXG5pb191cmluZy9mdXRleC5jLTk5LVx0XHRcdHJldHVybiBmYWxzZTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTAwOlx0XHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcbmlvX3VyaW5nL2Z1dGV4LmMtMTAxLVx0fSBlbHNlIHtcbmlvX3VyaW5nL2Z1dGV4LmM6MTAyOlx0XHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYy0xMDMtXG5pb191cmluZy9mdXRleC5jOjEwNDpcdFx0aWYgKCFpb19mdXRleHZfY2xhaW0oaWZkKSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTA1LVx0XHRcdHJldHVybiBmYWxzZTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTA2Olx0XHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleHZfY29tcGxldGU7XG5pb191cmluZy9mdXRleC5jLTEwNy1cdH1cbi0tXG5pb191cmluZy9mdXRleC5jLTExNC1cbmlvX3VyaW5nL2Z1dGV4LmM6MTE1OmludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy9mdXRleC5jLTExNi1cdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL2Z1dGV4LmMtMTE3LXtcbmlvX3VyaW5nL2Z1dGV4LmM6MTE4Olx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0LCBfX2lvX2Z1dGV4X2NhbmNlbCk7XG5pb191cmluZy9mdXRleC5jLTExOS19XG5pb191cmluZy9mdXRleC5jLTEyMC1cbmlvX3VyaW5nL2Z1dGV4LmM6MTIxOmJvb2wgaW9fZnV0ZXhfcmVtb3ZlX2FsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG5pb191cmluZy9mdXRleC5jLTEyMi1cdFx0XHQgYm9vbCBjYW5jZWxfYWxsKVxuaW9fdXJpbmcvZnV0ZXguYy0xMjMte1xuaW9fdXJpbmcvZnV0ZXguYzoxMjQ6XHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCwgY2FuY2VsX2FsbCwgX19pb19mdXRleF9jYW5jZWwpO1xuaW9fdXJpbmcvZnV0ZXguYy0xMjUtfVxuaW9fdXJpbmcvZnV0ZXguYy0xMjYtXG5pb191cmluZy9mdXRleC5jOjEyNzppbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvZnV0ZXguYy0xMjgte1xuaW9fdXJpbmcvZnV0ZXguYzoxMjk6XHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XG5pb191cmluZy9mdXRleC5jLTEzMC1cdHUzMiBmbGFncztcbmlvX3VyaW5nL2Z1dGV4LmMtMTMxLVxuaW9fdXJpbmcvZnV0ZXguYzoxMzI6XHRpZiAodW5saWtlbHkoc3FlLVx1MDAzZWxlbiB8fCBzcWUtXHUwMDNlZnV0ZXhfZmxhZ3MgfHwgc3FlLVx1MDAzZWJ1Zl9pbmRleCB8fFxuaW9fdXJpbmcvZnV0ZXguYy0xMzMtXHRcdCAgICAgc3FlLVx1MDAzZWZpbGVfaW5kZXgpKVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTM2LVx0aW9mLVx1MDAzZXVhZGRyID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXHUwMDNlYWRkcikpO1xuaW9fdXJpbmcvZnV0ZXguYzoxMzc6XHRpb2YtXHUwMDNlZnV0ZXhfdmFsID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyMik7XG5pb191cmluZy9mdXRleC5jOjEzODpcdGlvZi1cdTAwM2VmdXRleF9tYXNrID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyMyk7XG5pb191cmluZy9mdXRleC5jLTEzOS1cdGZsYWdzID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VmZCk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0xNDMtXG5pb191cmluZy9mdXRleC5jOjE0NDpcdGlvZi1cdTAwM2VmdXRleF9mbGFncyA9IGZ1dGV4Ml90b19mbGFncyhmbGFncyk7XG5pb191cmluZy9mdXRleC5jOjE0NTpcdGlmICghZnV0ZXhfZmxhZ3NfdmFsaWQoaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzKSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ3LVxuaW9fdXJpbmcvZnV0ZXguYzoxNDg6XHRpZiAoIWZ1dGV4X3ZhbGlkYXRlX2lucHV0KGlvZi1cdTAwM2VmdXRleF9mbGFncywgaW9mLVx1MDAzZWZ1dGV4X3ZhbCkgfHxcbmlvX3VyaW5nL2Z1dGV4LmM6MTQ5Olx0ICAgICFmdXRleF92YWxpZGF0ZV9pbnB1dChpb2YtXHUwMDNlZnV0ZXhfZmxhZ3MsIGlvZi1cdTAwM2VmdXRleF9tYXNrKSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTUwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9mdXRleC5jLTE1NC1cbmlvX3VyaW5nL2Z1dGV4LmM6MTU1OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL2Z1dGV4LmMtMTU2LXtcbmlvX3VyaW5nL2Z1dGV4LmM6MTU3Olx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuaW9fdXJpbmcvZnV0ZXguYy0xNTgtXHRpbnQgcmV0O1xuaW9fdXJpbmcvZnV0ZXguYy0xNTktXG5pb191cmluZy9mdXRleC5jOjE2MDpcdHJldCA9IGlvX2Z1dGV4X3ByZXAocmVxLCBzcWUpO1xuaW9fdXJpbmcvZnV0ZXguYy0xNjEtXHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5pb191cmluZy9mdXRleC5jLTE2NC1cdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cbmlvX3VyaW5nL2Z1dGV4LmM6MTY1Olx0aWYgKCEoaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzIFx1MDAyNiBGTEFHU19TSEFSRUQpKVxuaW9fdXJpbmcvZnV0ZXguYy0xNjYtXHRcdGlvX3JlcV90cmFja19pbmZsaWdodChyZXEpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTY5LVxuaW9fdXJpbmcvZnV0ZXguYzoxNzA6c3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZXZfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKVxuaW9fdXJpbmcvZnV0ZXguYy0xNzEte1xuaW9fdXJpbmcvZnV0ZXguYy0xNzItXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IHEtXHUwMDNld2FrZV9kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYzoxNzM6XHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cdTAwM2Vhc3luY19kYXRhO1xuaW9fdXJpbmcvZnV0ZXguYy0xNzQtXG5pb191cmluZy9mdXRleC5jOjE3NTpcdGlmICghaW9fZnV0ZXh2X2NsYWltKGlmZCkpIHtcbmlvX3VyaW5nL2Z1dGV4LmM6MTc2Olx0XHRfX2Z1dGV4X3dha2VfbWFyayhxKTtcbmlvX3VyaW5nL2Z1dGV4LmMtMTc3LVx0XHRyZXR1cm47XG5pb191cmluZy9mdXRleC5jLTE3OC1cdH1cbmlvX3VyaW5nL2Z1dGV4LmM6MTc5Olx0aWYgKHVubGlrZWx5KCFfX2Z1dGV4X3dha2VfbWFyayhxKSkpXG5pb191cmluZy9mdXRleC5jLTE4MC1cdFx0cmV0dXJuO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTgyLVx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTgzOlx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xuaW9fdXJpbmcvZnV0ZXguYy0xODQtXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTg2LVxuaW9fdXJpbmcvZnV0ZXguYzoxODc6aW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9mdXRleC5jLTE4OC17XG5pb191cmluZy9mdXRleC5jOjE4OTpcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbmlvX3VyaW5nL2Z1dGV4LmM6MTkwOlx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQ7XG5pb191cmluZy9mdXRleC5jLTE5MS1cdHVuc2lnbmVkIGludCBpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMTk1LVx0aWYgKHVubGlrZWx5KHNxZS1cdTAwM2VmZCB8fCBzcWUtXHUwMDNlYnVmX2luZGV4IHx8IHNxZS1cdTAwM2VmaWxlX2luZGV4IHx8XG5pb191cmluZy9mdXRleC5jOjE5NjpcdFx0ICAgICBzcWUtXHUwMDNlYWRkcjIgfHwgc3FlLVx1MDAzZWZ1dGV4X2ZsYWdzIHx8IHNxZS1cdTAwM2VhZGRyMykpXG5pb191cmluZy9mdXRleC5jLTE5Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0xOTktXHRpb2YtXHUwMDNldWFkZHIgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyKSk7XG5pb191cmluZy9mdXRleC5jOjIwMDpcdGlvZi1cdTAwM2VmdXRleF9uciA9IFJFQURfT05DRShzcWUtXHUwMDNlbGVuKTtcbmlvX3VyaW5nL2Z1dGV4LmM6MjAxOlx0aWYgKCFpb2YtXHUwMDNlZnV0ZXhfbnIgfHwgaW9mLVx1MDAzZWZ1dGV4X25yIFx1MDAzZSBGVVRFWF9XQUlUVl9NQVgpXG5pb191cmluZy9mdXRleC5jLTIwMi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy9mdXRleC5jLTIwMy1cbmlvX3VyaW5nL2Z1dGV4LmM6MjA0Olx0aWZkID0ga3phbGxvY19mbGV4KHN0cnVjdCBpb19mdXRleHZfZGF0YSwgZnV0ZXh2LCBpb2YtXHUwMDNlZnV0ZXhfbnIsXG5pb191cmluZy9mdXRleC5jLTIwNS1cdFx0XHQgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjA4LVxuaW9fdXJpbmcvZnV0ZXguYzoyMDk6XHRyZXQgPSBmdXRleF9wYXJzZV93YWl0dihpZmQtXHUwMDNlZnV0ZXh2LCBpb2YtXHUwMDNldWFkZHIsIGlvZi1cdTAwM2VmdXRleF9ucixcbmlvX3VyaW5nL2Z1dGV4LmM6MjEwOlx0XHRcdFx0aW9fZnV0ZXhfd2FrZXZfZm4sIHJlcSk7XG5pb191cmluZy9mdXRleC5jLTIxMS1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9mdXRleC5jLTIxNi1cdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cbmlvX3VyaW5nL2Z1dGV4LmM6MjE3Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW9mLVx1MDAzZWZ1dGV4X25yOyBpJiM0MzsmIzQzOykge1xuaW9fdXJpbmcvZnV0ZXguYzoyMTg6XHRcdGlmICghKGlmZC1cdTAwM2VmdXRleHZbaV0udy5mbGFncyBcdTAwMjYgRkxBR1NfU0hBUkVEKSkge1xuaW9fdXJpbmcvZnV0ZXguYy0yMTktXHRcdFx0aW9fcmVxX3RyYWNrX2luZmxpZ2h0KHJlcSk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yMjMtXG5pb191cmluZy9mdXRleC5jOjIyNDpcdGlvZi1cdTAwM2VmdXRleHZfdW5xdWV1ZWQgPSAwO1xuaW9fdXJpbmcvZnV0ZXguYy0yMjUtXHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTtcbi0tXG5pb191cmluZy9mdXRleC5jLTIyOS1cbmlvX3VyaW5nL2Z1dGV4LmM6MjMwOnN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2VfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKVxuaW9fdXJpbmcvZnV0ZXguYy0yMzEte1xuaW9fdXJpbmcvZnV0ZXguYzoyMzI6XHRzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSAqaWZkID0gY29udGFpbmVyX29mKHEsIHN0cnVjdCBpb19mdXRleF9kYXRhLCBxKTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjMzLVx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBpZmQtXHUwMDNlcmVxO1xuaW9fdXJpbmcvZnV0ZXguYy0yMzQtXG5pb191cmluZy9mdXRleC5jOjIzNTpcdGlmICh1bmxpa2VseSghX19mdXRleF93YWtlX21hcmsocSkpKVxuaW9fdXJpbmcvZnV0ZXguYy0yMzYtXHRcdHJldHVybjtcbi0tXG5pb191cmluZy9mdXRleC5jLTIzOC1cdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG5pb191cmluZy9mdXRleC5jOjIzOTpcdHJlcS1cdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX2Z1dGV4X2NvbXBsZXRlO1xuaW9fdXJpbmcvZnV0ZXguYy0yNDAtXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjQyLVxuaW9fdXJpbmcvZnV0ZXguYzoyNDM6aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9mdXRleC5jLTI0NC17XG5pb191cmluZy9mdXRleC5jOjI0NTpcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcbmlvX3VyaW5nL2Z1dGV4LmM6MjQ2Olx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXHUwMDNlYXN5bmNfZGF0YTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjQ3LVx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjUxLVxuaW9fdXJpbmcvZnV0ZXguYzoyNTI6XHRyZXQgPSBmdXRleF93YWl0X211bHRpcGxlX3NldHVwKGlmZC1cdTAwM2VmdXRleHYsIGlvZi1cdTAwM2VmdXRleF9uciwgXHUwMDI2d29rZW4pO1xuaW9fdXJpbmcvZnV0ZXguYy0yNTMtXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yNzAtXHQgKiBsZXQgdGhhdCBzaWRlIGRvIHRoZSBjb21wbGV0aW9uLiBOb3RlIHRoYXRcbmlvX3VyaW5nL2Z1dGV4LmM6MjcxOlx0ICogZnV0ZXhfd2FpdF9tdWx0aXBsZV9zZXR1cCgpIHdpbGwgaGF2ZSB1bnF1ZXVlZCBhbGwgdGhlIGZ1dGV4ZXMgaW5cbmlvX3VyaW5nL2Z1dGV4LmMtMjcyLVx0ICogdGhpcyBjYXNlLiBNYXJrIHVzIGFzIGhhdmluZyBkb25lIHRoYXQgYWxyZWFkeSwgc2luY2UgdGhpcyBpc1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMjc2LVx0XHQvKlxuaW9fdXJpbmcvZnV0ZXguYzoyNzc6XHRcdCAqIElmIGZ1dGV4X3dhaXRfbXVsdGlwbGVfc2V0dXAoKSByZXR1cm5zIDAgZm9yIGFcbmlvX3VyaW5nL2Z1dGV4LmMtMjc4LVx0XHQgKiBzdWNjZXNzZnVsIHNldHVwLCB0aGVuIHRoZSB0YXNrIHN0YXRlIHdpbGwgbm90IGJlXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yODAtXHRcdCAqIGl0JiMzOTtsbCBiZSBibG9ja2luZyB1bmxlc3Mgd2UgYWxyZWFkeSBnb3Qgb25lIG9mIHRoZVxuaW9fdXJpbmcvZnV0ZXguYzoyODE6XHRcdCAqIGZ1dGV4ZXMgd29rZW4sIGJ1dCBpdCBvYnZpb3VzbHkgd29uJiMzOTt0IHdvcmsgZm9yIGFuXG5pb191cmluZy9mdXRleC5jLTI4Mi1cdFx0ICogYXN5bmMgaW52b2NhdGlvbi4gTWFyayB1cyBydW5uYWJsZSBhZ2Fpbi5cbi0tXG5pb191cmluZy9mdXRleC5jLTI4NC1cdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuaW9fdXJpbmcvZnV0ZXguYzoyODU6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjg2LVx0fSBlbHNlIHtcbmlvX3VyaW5nL2Z1dGV4LmM6Mjg3Olx0XHRpb2YtXHUwMDNlZnV0ZXh2X3VucXVldWVkID0gMTtcbmlvX3VyaW5nL2Z1dGV4LmMtMjg4LVx0XHRpZiAod29rZW4gIT0gLTEpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yOTUtXG5pb191cmluZy9mdXRleC5jOjI5NjppbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvZnV0ZXguYy0yOTcte1xuaW9fdXJpbmcvZnV0ZXguYzoyOTg6XHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XG5pb191cmluZy9mdXRleC5jLTI5OS1cdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVx1MDAzZWN0eDtcbmlvX3VyaW5nL2Z1dGV4LmM6MzAwOlx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IE5VTEw7XG5pb191cmluZy9mdXRleC5jLTMwMS1cdGludCByZXQ7XG5pb191cmluZy9mdXRleC5jLTMwMi1cbmlvX3VyaW5nL2Z1dGV4LmM6MzAzOlx0aWYgKCFpb2YtXHUwMDNlZnV0ZXhfbWFzaykge1xuaW9fdXJpbmcvZnV0ZXguYy0zMDQtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0zMDgtXHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvZnV0ZXguYzozMDk6XHRpZmQgPSBpb19jYWNoZV9hbGxvYyhcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIEdGUF9OT1dBSVQpO1xuaW9fdXJpbmcvZnV0ZXguYy0zMTAtXHRpZiAoIWlmZCkge1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzE2LVx0cmVxLVx1MDAzZWFzeW5jX2RhdGEgPSBpZmQ7XG5pb191cmluZy9mdXRleC5jOjMxNzpcdGlmZC1cdTAwM2VxID0gZnV0ZXhfcV9pbml0O1xuaW9fdXJpbmcvZnV0ZXguYzozMTg6XHRpZmQtXHUwMDNlcS5iaXRzZXQgPSBpb2YtXHUwMDNlZnV0ZXhfbWFzaztcbmlvX3VyaW5nL2Z1dGV4LmM6MzE5Olx0aWZkLVx1MDAzZXEud2FrZSA9IGlvX2Z1dGV4X3dha2VfZm47XG5pb191cmluZy9mdXRleC5jLTMyMC1cdGlmZC1cdTAwM2VyZXEgPSByZXE7XG5pb191cmluZy9mdXRleC5jLTMyMS1cbmlvX3VyaW5nL2Z1dGV4LmM6MzIyOlx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXHUwMDNldWFkZHIsIGlvZi1cdTAwM2VmdXRleF92YWwsIGlvZi1cdTAwM2VmdXRleF9mbGFncyxcbmlvX3VyaW5nL2Z1dGV4LmMtMzIzLVx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0zMjYtXG5pb191cmluZy9mdXRleC5jOjMyNzpcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbmlvX3VyaW5nL2Z1dGV4LmMtMzI4LVx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzMyLWZyZWVfYXN5bmM6XG5pb191cmluZy9mdXRleC5jOjMzMzpcdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xuaW9fdXJpbmcvZnV0ZXguYy0zMzQtXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzQyLVxuaW9fdXJpbmcvZnV0ZXguYzozNDM6aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL2Z1dGV4LmMtMzQ0LXtcbmlvX3VyaW5nL2Z1dGV4LmM6MzQ1Olx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuaW9fdXJpbmcvZnV0ZXguYy0zNDYtXHRpbnQgcmV0O1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzQ4LVx0LypcbmlvX3VyaW5nL2Z1dGV4LmM6MzQ5Olx0ICogU3RyaWN0IGZsYWdzIC0gZW5zdXJlIHRoYXQgd2FraW5nIDAgZnV0ZXhlcyB5aWVsZHMgYSAwIHJlc3VsdC5cbmlvX3VyaW5nL2Z1dGV4LmM6MzUwOlx0ICogU2VlIGNvbW1pdCA0M2FkZjg0NDk1MTAgKFwmIzM0O2Z1dGV4OiBGTEFHU19TVFJJQ1RcJiMzNDspIGZvciBkZXRhaWxzLlxuaW9fdXJpbmcvZnV0ZXguYy0zNTEtXHQgKi9cbmlvX3VyaW5nL2Z1dGV4LmM6MzUyOlx0cmV0ID0gZnV0ZXhfd2FrZShpb2YtXHUwMDNldWFkZHIsIEZMQUdTX1NUUklDVCB8IGlvZi1cdTAwM2VmdXRleF9mbGFncywgTlVMTCxcbmlvX3VyaW5nL2Z1dGV4LmM6MzUzOlx0XHRcdCBpb2YtXHUwMDNlZnV0ZXhfdmFsLCBpb2YtXHUwMDNlZnV0ZXhfbWFzayk7XG5pb191cmluZy9mdXRleC5jLTM1NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW9fdXJpbmcvZnV0ZXguaC00LVxuaW9fdXJpbmcvZnV0ZXguaDo1OmludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvZnV0ZXguaDo2OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XG5pb191cmluZy9mdXRleC5oOjc6aW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvZnV0ZXguaDo4OmludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvZnV0ZXguaDo5OmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6MTA6aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9mdXRleC5oLTExLVxuaW9fdXJpbmcvZnV0ZXguaC0xMi0jaWYgZGVmaW5lZChDT05GSUdfRlVURVgpXG5pb191cmluZy9mdXRleC5oOjEzOmludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy9mdXRleC5oLTE0LVx0XHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6MTU6Ym9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL2Z1dGV4LmgtMTYtXHRcdFx0IGJvb2wgY2FuY2VsX2FsbCk7XG5pb191cmluZy9mdXRleC5oOjE3OmJvb2wgaW9fZnV0ZXhfY2FjaGVfaW5pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5pb191cmluZy9mdXRleC5oOjE4OnZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5pb191cmluZy9mdXRleC5oLTE5LSNlbHNlXG5pb191cmluZy9mdXRleC5oOjIwOnN0YXRpYyBpbmxpbmUgaW50IGlvX2Z1dGV4X2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbmlvX3VyaW5nL2Z1dGV4LmgtMjEtXHRcdFx0XHQgIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG4tLVxuaW9fdXJpbmcvZnV0ZXguaC0yNS19XG5pb191cmluZy9mdXRleC5oOjI2OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvZnV0ZXguaC0yNy1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwgYm9vbCBjYW5jZWxfYWxsKVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmgtMzAtfVxuaW9fdXJpbmcvZnV0ZXguaDozMTpzdGF0aWMgaW5saW5lIGJvb2wgaW9fZnV0ZXhfY2FjaGVfaW5pdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2Z1dGV4LmgtMzIte1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmgtMzQtfVxuaW9fdXJpbmcvZnV0ZXguaDozNTpzdGF0aWMgaW5saW5lIHZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2Z1dGV4LmgtMzYte1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtODQtI2luY2x1ZGUgXCYjMzQ7d2FpdGlkLmhcJiMzNDtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6ODU6I2luY2x1ZGUgXCYjMzQ7ZnV0ZXguaFwmIzM0O1xuaW9fdXJpbmcvaW9fdXJpbmcuYy04Ni0jaW5jbHVkZSBcJiMzNDtuYXBpLmhcJiMzNDtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIxNj1zdGF0aWMgdm9pZCBpb19mcmVlX2FsbG9jX2NhY2hlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIyMS1cdGlvX2FsbG9jX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWNtZF9jYWNoZSwgaW9fY21kX2NhY2hlX2ZyZWUpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMjI6XHRpb19mdXRleF9jYWNoZV9mcmVlKGN0eCk7XG5pb191cmluZy9pb191cmluZy5jLTIyMy1cdGlvX3JzcmNfY2FjaGVfZnJlZShjdHgpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjI2PXN0YXRpYyBfX2NvbGQgc3RydWN0IGlvX3JpbmdfY3R4ICppb19yaW5nX2N0eF9hbGxvYyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjY4LVx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX2NtZCkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNjk6XHRyZXQgfD0gaW9fZnV0ZXhfY2FjaGVfaW5pdChjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzAtXHRyZXQgfD0gaW9fcnNyY19jYWNoZV9pbml0KGN0eCk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTAtI2lmZGVmIENPTkZJR19GVVRFWFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTE6XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTItI2VuZGlmXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0zNy0jaW5jbHVkZSBcJiMzNDt3YWl0aWQuaFwmIzM0O1xuaW9fdXJpbmcvb3BkZWYuYzozODojaW5jbHVkZSBcJiMzNDtmdXRleC5oXCYjMzQ7XG5pb191cmluZy9vcGRlZi5jLTM5LSNpbmNsdWRlIFwmIzM0O3RydW5jYXRlLmhcJiMzNDtcbi0tXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xuLS1cbmlvX3VyaW5nL29wZGVmLmMtNDY5LSNpZiBkZWZpbmVkKENPTkZJR19GVVRFWClcbmlvX3VyaW5nL29wZGVmLmM6NDcwOlx0XHQucHJlcFx0XHRcdD0gaW9fZnV0ZXhfd2FpdF9wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzo0NzE6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fZnV0ZXhfd2FpdCxcbmlvX3VyaW5nL29wZGVmLmMtNDcyLSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00NzctI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxuaW9fdXJpbmcvb3BkZWYuYzo0Nzg6XHRcdC5wcmVwXHRcdFx0PSBpb19mdXRleF9wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzo0Nzk6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fZnV0ZXhfd2FrZSxcbmlvX3VyaW5nL29wZGVmLmMtNDgwLSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00ODUtI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxuaW9fdXJpbmcvb3BkZWYuYzo0ODY6XHRcdC5wcmVwXHRcdFx0PSBpb19mdXRleHZfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6NDg3Olx0XHQuaXNzdWVcdFx0XHQ9IGlvX2Z1dGV4dl93YWl0LFxuaW9fdXJpbmcvb3BkZWYuYy00ODgtI2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGZ1dGV4IFdhaXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhpcyBwYXRjaCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBpb191cmluZy9mdXRleC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9fZnV0ZXhfd2FpdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgY29ycmVjdGlvbiBoZXJlLgoKQmVmb3JlLCBpZiBgZnV0ZXhfd2FpdF9zZXR1cGAgZmFpbGVkIGZvciB3aGF0ZXZlciByZWFzb24g4oCTIHdoaWNoIGNvdWxkIGJlIGEgYmFkIGZ1dGV4IGFkZHJlc3MsIGEgZmFpbGVkIG1hc2sgY2hlY2sgKGBpb2YtJmd0O2Z1dGV4X21hc2sgPT0gMGApLCBvciBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgdmlhIGBpb19jYWNoZV9hbGxvY2Ag4oCTIHRoZSBjb2RlIHdvdWxkIGp1bXAgZG93biB0byBgZG9uZWAgb3IgYGRvbmVfdW5sb2NrYC4gSXQgd291bGQgdGhlbiBjYWxsIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgLiBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAgd2lsbCBmcmVlIHVwICphbGwqIGBhc3luY19kYXRhYC4gVGhpcyBjYXVzZWQgYSBwcm9ibGVtLiBJZiB0aGUgYWxsb2NhdGlvbiB2aWEgYGlvX2NhY2hlX2FsbG9jKCZhbXA7Y3R4LSZndDtmdXRleF9jYWNoZSwgLi4uKWAgZmFpbGVkLCBpdCB3b3VsZG4mIzM5O3QgZnJlZSB0aGUgY2FjaGVkIG9iamVjdCBiYWNrIHRvIHRoZSBgZnV0ZXhfY2FjaGVgLgoKTm93LCB3aXRoIHRoaXMgcGF0Y2gsIHRoZXJlJiMzOTtzIGEgY3J1Y2lhbCBjaGFuZ2UuIElmIGBmdXRleF93YWl0X3NldHVwYCByZXR1cm5zIGFuIGVycm9yIChgcmV0ICE9IDBgKSwgaXQmIzM5O2xsIGp1bXAgdG8gYGZyZWVfYXN5bmNgLiAgVGhlIGNhY2hlZCBvYmplY3Qgd2lsbCBiZSBmcmVlZCBiYWNrIGludG8gdGhlIGBjdHgtJmd0O2Z1dGV4X2NhY2hlYCBhbmQgYHJlcS0mZ3Q7YXN5bmNfZGF0YWAgaXMgY2xlYXJlZC4gSWYgdGhlIGZhaWx1cmUgaGFwcGVucyAqYmVmb3JlKiBhbGxvY2F0aW9uLCB3ZSBqdXN0IGp1bXAgdG8gYGRvbmVgIHNpbmNlIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gZnJlZS4gIFRoaXMgbG9va3MgbXVjaCBjbGVhbmVyLiBJdCBoYW5kbGVzIHRoZSB2YXJpb3VzIGZhaWx1cmUgY2FzZXMgbW9yZSBwcmVjaXNlbHkgYW5kIGF2b2lkcyBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB0aGUgcHJpb3IgY29kZSB3YXMgZnJlZWluZyBhbGwgYXN5bmMgZGF0YSB3aGVuLCBpbiBzb21lIGNhc2VzLCBpdCBzaG91bGRuJiMzOTt0IGhhdmUgYmVlbi4KCkdpdmVuIHRoYXQgdGhpcyB0b3VjaGVzIHN1Y2ggYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwgKGlvX3VyaW5nIGFuZCBmdXRleCksIGFjY2Vzc2libGUgdmlhIGBpb191cmluZ19lbnRlcmAgd2l0aCB0aGUgYElPUklOR19PUF9GVVRFWF9XQUlUYCBvcGNvZGUsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGFuIGFyZWEgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4gV2UgaGF2ZSBhIHBvdGVudGlhbGx5IG5ldyBjb2RlIHBhdGggdG8gdGVzdC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGBDT05GSUdfSU9fVVJJTkdgIChvciBqdXN0IGBJT19VUklOR2ApIGFuZCBgQ09ORklHX0ZVVEVYYCAob3IgYEZVVEVYYCkuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgaW5pdC9LY29uZmlnYCBvciBgaW9fdXJpbmcvS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBleGFjdCBuYW1lcywgYnV0IHRob3NlIGFyZSB0aGUgbGlrZWx5IHN1c3BlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTk1OS1cbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5NjEtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTY5PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTk4MS1cbmluaXQvS2NvbmZpZzoxOTgyOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTgzLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyODUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYENPTkZJR19GVVRFWGAqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGBDT05GSUdfRlVURVhgIHN0YW5kcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zIGl0IGhhcyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNwYWNlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9wZXJseSBmb3IgW2luc2VydCB1c2VyJiMzOTtzIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgJiMzNDtteSBwZXJmb3JtYW5jZSBhbmFseXNpcyB3b3JrJiMzNDssIG9yICYjMzQ7dGhpcyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQmIzM0O10uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGRpc2N1c3Npb25zIHJlZ2FyZGluZyBgRlVURVhgIGNvbmZpZ3VyYXRpb24gY291bGQgaW1wYWN0IG15IGN1cnJlbnQgY29uY2VybnMuIE15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBzdGF0ZSwgaXMgaXQgbW9kdWxlLWFibGUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgZG9lcyBpdCBpbXBhY3QuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgYW5kIGhlbHBzIG1lIGRlY2lkZSBob3cgdG8gcHJvY2VlZCB3aXRoIFtpbnNlcnQgdXNlciYjMzk7cyB0YXNrXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4Njk9Y29uZmlnIEJBU0VfU01BTExcbi0tXG5pbml0L0tjb25maWctMTg3NS1cbmluaXQvS2NvbmZpZzoxODc2OmNvbmZpZyBGVVRFWFxuaW5pdC9LY29uZmlnLTE4NzctXHRib29sIFwmIzM0O0VuYWJsZSBmdXRleCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZy0xODg1LVxuaW5pdC9LY29uZmlnOjE4ODY6Y29uZmlnIEZVVEVYX1BJXG5pbml0L0tjb25maWctMTg4Ny1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg5MC1cbmluaXQvS2NvbmZpZzoxODkxOmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODkyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xODk1LVxuaW5pdC9LY29uZmlnOjE4OTY6Y29uZmlnIEZVVEVYX01QT0xcbmluaXQvS2NvbmZpZy0xODk3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZz0xOTAxPWNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbi0tXG5pbml0L0tjb25maWctMTkwMy1cbmluaXQvS2NvbmZpZzoxOTA0OmNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXG5pbml0L0tjb25maWctMTkwNS1cdGRlZl9ib29sIEZVVEVYIFx1MDAyNlx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcdTAwMjZcdTAwMjYgUlNFUSBcdTAwMjZcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODA3CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDgxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX2Z1dGV4X3dhaXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBgRm9jdXNTeW1ib2xzYCBzdWdnZXN0cyB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiBgaW9fZnV0ZXhfd2FpdGAsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGhlcmUsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBpb19mdXRleF93YWl0X3ByZXBgLCBgaW9fZnV0ZXhfd2FrZWAsIGV0Yy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBgaW9fZnV0ZXhfd2FpdGAgaXMgc3BlY2lmaWMgdG8gYGlvX3VyaW5nYCYjMzk7cyBgSU9SSU5HX09QX0ZVVEVYX1dBSVRgLCBzbyBpdCBpc24mIzM5O3Qgc29tZSBnbG9iYWxseSB1YmlxdWl0b3VzIGZ1dGV4IGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgc2NvcGUuIEFmdGVyIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIHRoZSBwYXRjaCBkaWZmLCBpdCYjMzk7cyBjb25maXJtZWQgdGhhdCBgaW9fZnV0ZXhfd2FpdGAgaW4gYGlvX3VyaW5nL2Z1dGV4LmNgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIGhlcmUuCgpUaGUgZGlmZiBpdHNlbGYgcmV2ZWFscyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlOiBpdCYjMzk7cyBhbGwgYWJvdXQgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIFdlJiMzOTtyZSBsb29raW5nIGF0IHJldmlzZWQgY2xlYW51cCBsb2dpYyB3aXRoaW4gdGhlIGBpb19mdXRleF93YWl0YCBmdW5jdGlvbiBpdHNlbGYuIFRoZSBwYXRjaCBhaW1zIHRvIGltcHJvdmUgYXN5bmMgZGF0YSBjYWNoaW5nIGFuZCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIHdlIGFyZSByZXR1cm5pbmcgYWxsb2NhdGVkIHN0cnVjdHVyZXMgdG8gdGhlIGZ1dGV4IGNhY2hlIChgaW9fY2FjaGVfZnJlZWApIGFuZCBjbGVhcmluZyByZXF1ZXN0IGFzeW5jIGRhdGEgaW5zdGVhZCBvZiBpbnZva2luZyBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZWAuIFRoaXMgaXMgZXNzZW50aWFsIGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGNyaXRpY2FsIHBhdGggd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZ1dGV4IGltcGxlbWVudGF0aW9uIChgaW9fdXJpbmcvZnV0ZXguY2ApLiBUaGlzIHN1YnN5c3RlbSBpcywgb2YgY291cnNlLCBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGBpb191cmluZ2Agc3lzY2FsbHMgKGBJT1JJTkdfT1BfRlVURVhfV0FJVGApLgoKTG9va3Mgc29saWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19mdXRleF93YWl0JiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBpbiBpb19mdXRleF93YWl0IHdpdGhpbiBpb191cmluZy9mdXRleC5jLCBlbnN1cmluZyBwcm9wZXIgZnJlZWluZyBvZiBjYWNoZWQgYXN5bmMgZGF0YSB2aWEgaW9fY2FjaGVfZnJlZSBhbmQgY2xlYXJpbmcgcmVxdWVzdCBhc3luYyBzdGF0ZSBvbiBmdXRleCBzZXR1cCBmYWlsdXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9fdXJpbmcgc3lzY2FsbHMgd2l0aCBJT1JJTkdfT1BfRlVURVhfV0FJVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19mdXRleF93YWl0JiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXRfcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBpbiBpb19mdXRleF93YWl0IHdpdGhpbiBpb191cmluZy9mdXRleC5jLCBlbnN1cmluZyBwcm9wZXIgZnJlZWluZyBvZiBjYWNoZWQgYXN5bmMgZGF0YSB2aWEgaW9fY2FjaGVfZnJlZSBhbmQgY2xlYXJpbmcgcmVxdWVzdCBhc3luYyBzdGF0ZSBvbiBmdXRleCBzZXR1cCBmYWlsdXJlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9fdXJpbmcgc3lzY2FsbHMgd2l0aCBJT1JJTkdfT1BfRlVURVhfV0FJVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZyYjMzk7cyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3MzM0OTU0NTdlYjI0N2ZkYWM2M2JhMzNiZTc1YzM1YzdiN2ExZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjI5OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmMKaW5kZXggZWFlZTE0MjQyYTNhMy4uNjM4OWJkMmYwMzk5NCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvZnV0ZXguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jCkBAIC0zMjEsMjAgJiM0MzszMjEsMjIgQEAgaW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAogCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLSZndDt1YWRkciwgaW9mLSZndDtmdXRleF92YWwsIGlvZi0mZ3Q7ZnV0ZXhfZmxhZ3MsCiAJCQkgICAgICAgJmFtcDtpZmQtJmd0O3EsIE5VTEwsIE5VTEwpOwotCWlmICghcmV0KSB7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKLQkJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBmcmVlX2FzeW5jOwogCi0JCXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKLQl9CiYjNDM7CWhsaXN0X2FkZF9oZWFkKCZhbXA7cmVxLSZndDtoYXNoX25vZGUsICZhbXA7Y3R4LSZndDtmdXRleF9saXN0KTsKJiM0MzsJaW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpOwogCiYjNDM7CXJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTsKJiM0MzsKJiM0MztmcmVlX2FzeW5jOgomIzQzOwlpb19jYWNoZV9mcmVlKCZhbXA7Y3R4LSZndDtmdXRleF9jYWNoZSwgaWZkKTsKJiM0MzsJaW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTsKIGRvbmVfdW5sb2NrOgogCWlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTsKIGRvbmU6Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJlcV9zZXRfZmFpbChyZXEpOwomIzQzOwlyZXFfc2V0X2ZhaWwocmVxKTsKIAlpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7Ci0JaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpOwogCXJldHVybiBJT1VfQ09NUExFVEU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBpb191cmluZy9mdXRleC5jYCYjMzk7cyBEaWZmKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgZGlmZiBvZiBgaW9fdXJpbmcvZnV0ZXguY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgdGhlIGxpbmVzIHRoYXQgd2VyZSBhbHRlcmVkOyBJJiMzOTttIHRyeWluZyB0byBncmFzcCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBtb2RpZmljYXRpb24uIFdoYXQgcHJvYmxlbSBpcyB0aGlzIHBhdGNoIGFpbWluZyB0byBzb2x2ZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyB0aGF0IHRoZSBkaWZmIG1pZ2h0IGludHJvZHVjZS4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTttIG5vdCBqdXN0IGdvaW5nIHRvIHJlbHkgb24gdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCBsaW5lIDMyMSwgdXNpbmcgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgYW5kIGFuYWx5emUgdGhhdCBlbnRpcmUgc2VjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29kZSBibG9jayBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGhpcyBncmFudWxhciBpbnNwZWN0aW9uIGlzIGVzc2VudGlhbCB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgYnVncywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gSSYjMzk7bSB0aGlua2luZyBvZiBjaGVja2luZyBkYXRhIHN0cnVjdHVyZXMsIG11dGV4IGxvY2tzLCBhbmQgb3ZlcmFsbCBmdW5jdGlvbiBjYWxscywgd2hpY2ggY291bGQgYmUgdGhlIHNvdXJjZSBvZiBteSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvZnV0ZXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XHR9XG4gMjkxOlx0XG4gMjkyOlx0XHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gMjkzOlx0XHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XG4gMjk0Olx0fVxuIDI5NTpcdFxuIDI5NjpcdGludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gMjk3Olx0e1xuIDI5ODpcdFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuIDI5OTpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuIDMwMDpcdFx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IE5VTEw7XG4gMzAxOlx0XHRpbnQgcmV0O1xuIDMwMjpcdFxuIDMwMzpcdFx0aWYgKCFpb2YtXHUwMDNlZnV0ZXhfbWFzaykge1xuIDMwNDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDMwNTpcdFx0XHRnb3RvIGRvbmU7XG4gMzA2Olx0XHR9XG4gMzA3Olx0XG4gMzA4Olx0XHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDMwOTpcdFx0aWZkID0gaW9fY2FjaGVfYWxsb2MoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCBHRlBfTk9XQUlUKTtcbiAzMTA6XHRcdGlmICghaWZkKSB7XG4gMzExOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMzEyOlx0XHRcdGdvdG8gZG9uZV91bmxvY2s7XG4gMzEzOlx0XHR9XG4gMzE0Olx0XG4gMzE1Olx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTtcbiAzMTY6XHRcdHJlcS1cdTAwM2Vhc3luY19kYXRhID0gaWZkO1xuIDMxNzpcdFx0aWZkLVx1MDAzZXEgPSBmdXRleF9xX2luaXQ7XG4gMzE4Olx0XHRpZmQtXHUwMDNlcS5iaXRzZXQgPSBpb2YtXHUwMDNlZnV0ZXhfbWFzaztcbiAzMTk6XHRcdGlmZC1cdTAwM2VxLndha2UgPSBpb19mdXRleF93YWtlX2ZuO1xuIDMyMDpcdFx0aWZkLVx1MDAzZXJlcSA9IHJlcTtcbiAzMjE6XHRcbiAzMjI6XHRcdHJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLVx1MDAzZXVhZGRyLCBpb2YtXHUwMDNlZnV0ZXhfdmFsLCBpb2YtXHUwMDNlZnV0ZXhfZmxhZ3MsXG4gMzIzOlx0XHRcdFx0ICAgICAgIFx1MDAyNmlmZC1cdTAwM2VxLCBOVUxMLCBOVUxMKTtcbiAzMjQ6XHRcdGlmIChyZXQpXG4gMzI1Olx0XHRcdGdvdG8gZnJlZV9hc3luYztcbiAzMjY6XHRcbiAzMjc6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbiAzMjg6XHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzMjk6XHRcbiAzMzA6XHRcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcbiAzMzE6XHRcbiAzMzI6XHRmcmVlX2FzeW5jOlxuIDMzMzpcdFx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XG4gMzM0Olx0XHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuIDMzNTpcdGRvbmVfdW5sb2NrOlxuIDMzNjpcdFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDMzNzpcdGRvbmU6XG4gMzM4Olx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiAzMzk6XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiAzNDA6XHRcdHJldHVybiBJT1VfQ09NUExFVEU7XG4gMzQxOlx0fVxuIDM0MjpcdFxuIDM0MzpcdGludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xuIDM0NjpcdFx0aW50IHJldDtcbiAzNDc6XHRcbiAzNDg6XHRcdC8qXG4gMzQ5Olx0XHQgKiBTdHJpY3QgZmxhZ3MgLSBlbnN1cmUgdGhhdCB3YWtpbmcgMCBmdXRleGVzIHlpZWxkcyBhIDAgcmVzdWx0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjUxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fZnV0ZXhfd2FpdCBQYXRjaDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBpb19mdXRleF93YWl0YCBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgZGlmZi4gTG9va2luZyBhdCB0aGUgcHJlLXBhdGNoIGNvZGUgYmxvY2ssIHNwZWNpZmljYWxseSB3aXRoaW4gYGlvX2Z1dGV4X3dhaXRgLCBJIHNlZSB0aGUgY29yZSBsb2dpYzogYSBjYWxsIHRvIGBmdXRleF93YWl0X3NldHVwYCwgYW5kIHRoZW4gYSByZXR1cm4uIFRoZSBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBjb25kaXRpb25hbCBlcnJvciBoYW5kbGluZyBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpYC4KCk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgIGNhbGwuIEkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4gSSBrbm93IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGFzeW5jaHJvbm91cyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlcXVlc3QuIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyB0aGUgY2FsbCBpbiBtdWx0aXBsZSBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIGBpb19mdXRleF93YWl0YCBmYWlscyBlYXJseSwgbGlrZSB3aGVuIGVpdGhlciBgIWlvZi0mZ3Q7ZnV0ZXhfbWFza2Agb3IgYCFpZmRgIGV2YWx1YXRlIHRvIHRydWUuIEluIHRob3NlIGNhc2VzLCBgcmV0ID0gLUVJTlZBTGAgb3Igc2ltaWxhciBpcyBzZXQsIGFuZCB0aGUgY29kZSBqdW1wcyB0byBgZG9uZWAsIGNhbGxpbmcgYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAuCgpXYWl0IGEgbWludXRlLi4uIEl0JiMzOTtzIHBvc3NpYmxlIGZvciBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZWAgdG8gYmUgY2FsbGVkICpldmVuKiBpZiBgcmVxLSZndDthc3luY19kYXRhYCBoYXNuJiMzOTt0IGJlZW4gYWxsb2NhdGVkIG9yIGByZXEtJmd0O2ZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEFgIGhhc24mIzM5O3QgYmVlbiBzZXQuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSEgSSByZW1lbWJlciB0aGlzIGNvZGUgdXNlcyBgaW9fY2FjaGVfZnJlZWAsIGFuZCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGRhbmdlcm91cy4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBleGFjdGx5IGhvdyBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZWAgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgaGFzIHRoZSByaWdodCBjaGVja3MgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGFuZCBpZiBub3QsIHRoaXMgY291bGQgYmUgYSBzZXJpb3VzIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVxX2FzeW5jX2RhdGFfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2Z1dGV4LmM9NTQ9c3RhdGljIHZvaWQgaW9fZnV0ZXhfY29tcGxldGUoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy02MC1cdGlvX2NhY2hlX2ZyZWUoXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2NhY2hlLCByZXEtXHUwMDNlYXN5bmNfZGF0YSk7XG5pb191cmluZy9mdXRleC5jOjYxOlx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmMtNjItXHRfX2lvX2Z1dGV4X2NvbXBsZXRlKHR3X3JlcSwgdHcpO1xuLS1cbmlvX3VyaW5nL2Z1dGV4LmM9NjU9c3RhdGljIHZvaWQgaW9fZnV0ZXh2X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtODAtXG5pb191cmluZy9mdXRleC5jOjgxOlx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuaW9fdXJpbmcvZnV0ZXguYy04Mi1cdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XG4tLVxuaW9fdXJpbmcvZnV0ZXguYz0yNDM9aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yNjAtXHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbmlvX3VyaW5nL2Z1dGV4LmM6MjYxOlx0XHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XG5pb191cmluZy9mdXRleC5jLTI2Mi1cdFx0cmV0dXJuIElPVV9DT01QTEVURTtcbi0tXG5pb191cmluZy9mdXRleC5jPTI5Nj1pbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2Z1dGV4LmMtMzMzLVx0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XG5pb191cmluZy9mdXRleC5jOjMzNDpcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XG5pb191cmluZy9mdXRleC5jLTMzNS1kb25lX3VubG9jazpcbi0tXG5pb191cmluZy9pb191cmluZy5oPTM2OD1zdGF0aWMgaW5saW5lIGJvb2wgcmVxX2hhc19hc3luY19kYXRhKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzcyLVxuaW9fdXJpbmcvaW9fdXJpbmcuaDozNzM6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zNzQtXHRcdFx0XHRcdCAgIGlvX3JlcV9mbGFnc190IGV4dHJhX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzc5LVxuaW9fdXJpbmcvaW9fdXJpbmcuaDozODA6c3RhdGljIGlubGluZSB2b2lkIGlvX3JlcV9hc3luY19kYXRhX2ZyZWUoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy9pb191cmluZy5oLTM4MS17XG5pb191cmluZy9pb191cmluZy5oLTM4Mi1cdGtmcmVlKHJlcS1cdTAwM2Vhc3luY19kYXRhKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzgzOlx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzg0LX1cbi0tXG5pb191cmluZy9uZXQuYz0xNjc9c3RhdGljIHZvaWQgaW9fbmV0bXNnX3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xODItXHRpZiAoaW9fYWxsb2NfY2FjaGVfcHV0KFx1MDAyNnJlcS1cdTAwM2VjdHgtXHUwMDNlbmV0bXNnX2NhY2hlLCBoZHIpKVxuaW9fdXJpbmcvbmV0LmM6MTgzOlx0XHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIFJFUV9GX05FRURfQ0xFQU5VUCk7XG5pb191cmluZy9uZXQuYy0xODQtfVxuLS1cbmlvX3VyaW5nL3J3LmM9MTMzPXN0YXRpYyBib29sIGlvX3J3X3JlY3ljbGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9ydy5jLTE0NC1cdGlmIChpb19hbGxvY19jYWNoZV9wdXQoXHUwMDI2cmVxLVx1MDAzZWN0eC1cdTAwM2Vyd19jYWNoZSwgcncpKSB7XG5pb191cmluZy9ydy5jOjE0NTpcdFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcbmlvX3VyaW5nL3J3LmMtMTQ2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0yNj1zdGF0aWMgdm9pZCBpb19yZXFfdXJpbmdfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTM5LVx0XHRpb3VjbWQtXHUwMDNlc3FlID0gTlVMTDtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjQwOlx0XHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIFJFUV9GX05FRURfQ0xFQU5VUCk7XG5pb191cmluZy91cmluZ19jbWQuYy00MS1cdH0gZWxzZSB7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9MzU9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2ZyZWUoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMzktXHRwdXRfcGlkKGl3YS1cdTAwM2V3by53b19waWQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6NDA6XHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XG5pb191cmluZy93YWl0aWQuYy00MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzQKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogOTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBpb191cmluZyBmdXRleCBidWcgZml4KioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkgc2VlIHRoaXMgcGF0Y2guIEl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIGluY29ycmVjdGx5IGZyZWVpbmcgYSBwaWVjZSBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb20gdGhlIGBpb19jYWNoZWAgdXNpbmcgYGtmcmVlYCwgd2hpY2ggaXMgYSBjbGFzc2ljIGludmFsaWQgZnJlZSBhbmQgYSBwb3RlbnRpYWwgc291cmNlIG9mIHNsYWIgY29ycnVwdGlvbiBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBlcnJvcnMuIFNwZWNpZmljYWxseSwgYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAgd2FzIGJlaW5nIGNhbGxlZCBvbiBgcmVxLSZndDthc3luY19kYXRhYCwgd2hpY2ggc29tZXRpbWVzIHBvaW50ZWQgdG8gYW4gYGlmZGAgc3RydWN0dXJlIHRoYXQgd2FzIGFsbG9jYXRlZCB2aWEgYGlvX2NhY2hlX2FsbG9jYCBhbmQgdGh1cyBzaG91bGQgaGF2ZSBiZWVuIGZyZWVkIHZpYSBgaW9fY2FjaGVfZnJlZWAuCgpUaGUgZml4IGludHJvZHVjZXMgYSBgZnJlZV9hc3luY2AgbGFiZWwgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGguIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYGZ1dGV4X3dhaXRfc2V0dXBgIGZhaWxzLCB3ZSBqdW1wIHRvIGBmcmVlX2FzeW5jYC4gSW4gdGhpcyBibG9jaywgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBjYWxscyBgaW9fY2FjaGVfZnJlZWAgdG8gcmVsZWFzZSB0aGUgYGlmZGAgc3RydWN0dXJlIGFuZCBhbHNvIGNhbGxzIGBpb19yZXFfYXN5bmNfZGF0YV9jbGVhcmAgdG8gY2xlYXIgdGhlIHJlcXVlc3QmIzM5O3MgYXN5bmMgZGF0YSwgd2hpY2ggbG9va3MgbGlrZSBnb29kIHByYWN0aWNlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYXJlYXMgZm9yIEtNU0FOIGNvbmNlcm5zLiBJJiMzOTt2ZSBjb25zaWRlcmVkOgoKMS4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgc2VudCB0byB1c2VyIHNwYWNlKio6IFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBzb2xlbHkgY29uY2VybmVkIHdpdGggZXJyb3IgY2xlYW51cCB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBpc24mIzM5O3QgYSBjb25jZXJuLgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYyoqOiBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gdGhpcyBwYXRjaC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMqKjogSSBkb24mIzM5O3Qgc2VlIGFueSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuCjQuICAqKkJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzKio6IFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVjYXVzZSB0aGUgcGF0Y2ggaXMgY29uY2VybmVkIHdpdGggZXJyb3IgcGF0aHMsIGFuZCBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuCgpUaGlzIHBhdGNoIGlzIHB1cmVseSBhYm91dCBmaXhpbmcgYSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoYXQgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBhIGNhY2hlIGFyZSBmcmVlZCB1c2luZyB0aGUgY2FjaGUmIzM5O3MgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLiBBbnkgbWVtb3J5IGVycm9ycyB3aWxsIGJlIGRldGVjdGVkIGJ5IEtBU0FOIC8gU0xVQiBkZWJ1Z2dlcnMsIHNvIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoYXQuIEkgc2VlIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KClRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZyYjMzk7cyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZyYjMzk7cyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6Mjk6NDMuODI3NjUyODE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNTc0ODM0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBidWcgaW4gaW9fdXJpbmcncyBmdXRleCB3YWl0IGltcGxlbWVudGF0aW9uIChpb19mdXRleF93YWl0KSwgd2hlcmUgYSBmYWlsdXJlIGluIGZ1dGV4X3dhaXRfc2V0dXAgaW5jb3JyZWN0bHkgaW52b2tlZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKCkgKHdoaWNoIGNhbGxzIGtmcmVlKSBpbnN0ZWFkIG9mIHJlbGVhc2luZyB0aGUgY2FjaGUtYWxsb2NhdGVkIGlmZCBvYmplY3QgdmlhIGlvX2NhY2hlX2ZyZWUoKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgZXJyb3IgY2xlYW51cCBhbmQgbWVtb3J5IGRlYWxsb2NhdGlvbiBwYXRod2F5cyAocHJldmVudGluZyBpbnZhbGlkIGZyZWVzIG9yIHNsYWIgY29ycnVwdGlvbikuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBhbnkgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5IG9wZXJhdGlvbnMgdG8gdXNlcnNwYWNlLiBNZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgc3VjaCBhcyBpbnZhbGlkIGZyZWVzIG9yIHVzZS1hZnRlci1mcmVlIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHBhdGhzIGluIGlvX2Z1dGV4X3dhaXQgd2l0aGluIGlvX3VyaW5nL2Z1dGV4LmMsIGVuc3VyaW5nIHByb3BlciBmcmVlaW5nIG9mIGNhY2hlZCBhc3luYyBkYXRhIHZpYSBpb19jYWNoZV9mcmVlIGFuZCBjbGVhcmluZyByZXF1ZXN0IGFzeW5jIHN0YXRlIG9uIGZ1dGV4IHNldHVwIGZhaWx1cmVzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb191cmluZyBzeXNjYWxscyB3aXRoIElPUklOR19PUF9GVVRFWF9XQUlULlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyOTo0My44Mjc2ODk2NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTA5NzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3MzM0OTU0NTdlYjI0N2ZkYWM2M2JhMzNiZTc1YzM1YzdiN2ExZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxNDoyOTo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0ZXguY1xcbmluZGV4IGVhZWUxNDI0MmEzYTMuLjYzODliZDJmMDM5OTQgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xcbisrKyBiL2lvX3VyaW5nL2Z1dGV4LmNcXG5AQCAtMzIxLDIwICszMjEsMjIgQEAgaW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gXFxuIFxcdHJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLVxcdTAwM2V1YWRkciwgaW9mLVxcdTAwM2VmdXRleF92YWwsIGlvZi1cXHUwMDNlZnV0ZXhfZmxhZ3MsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aWZkLVxcdTAwM2VxLCBOVUxMLCBOVUxMKTtcXG4tXFx0aWYgKCFyZXQpIHtcXG4tXFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnJlcS1cXHUwMDNlaGFzaF9ub2RlLCBcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9saXN0KTtcXG4tXFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGZyZWVfYXN5bmM7XFxuIFxcbi1cXHRcXHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XFxuLVxcdH1cXG4rXFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNnJlcS1cXHUwMDNlaGFzaF9ub2RlLCBcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9saXN0KTtcXG4rXFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiBcXG4rXFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xcbitcXG4rZnJlZV9hc3luYzpcXG4rXFx0aW9fY2FjaGVfZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcXG4rXFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcXG4gZG9uZV91bmxvY2s6XFxuIFxcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4gZG9uZTpcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbitcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4gXFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbi1cXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XFxuIFxcdHJldHVybiBJT1VfQ09NUExFVEU7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjI5OjQ0LjMxOTczNTc5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUyMjQ2Mzc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgcGF0aHMgaW4gaW9fZnV0ZXhfd2FpdCB3aXRoaW4gaW9fdXJpbmcvZnV0ZXguYywgZW5zdXJpbmcgcHJvcGVyIGZyZWVpbmcgb2YgY2FjaGVkIGFzeW5jIGRhdGEgdmlhIGlvX2NhY2hlX2ZyZWUgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgc3RhdGUgb24gZnV0ZXggc2V0dXAgZmFpbHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvX3VyaW5nIHN5c2NhbGxzIHdpdGggSU9SSU5HX09QX0ZVVEVYX1dBSVQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTczMzQ5NTQ1N2ViMjQ3ZmRhYzYzYmEzM2JlNzVjMzVjN2I3YTFlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6Mjk6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0ZXguY1xuaW5kZXggZWFlZTE0MjQyYTNhMy4uNjM4OWJkMmYwMzk5NCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2Z1dGV4LmNcbisrKyBiL2lvX3VyaW5nL2Z1dGV4LmNcbkBAIC0zMjEsMjAgKzMyMSwyMiBAQCBpbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFxuIFx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXHUwMDNldWFkZHIsIGlvZi1cdTAwM2VmdXRleF92YWwsIGlvZi1cdTAwM2VmdXRleF9mbGFncyxcbiBcdFx0XHQgICAgICAgXHUwMDI2aWZkLVx1MDAzZXEsIE5VTEwsIE5VTEwpO1xuLVx0aWYgKCFyZXQpIHtcbi1cdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cmVxLVx1MDAzZWhhc2hfbm9kZSwgXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuLVx0XHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGZyZWVfYXN5bmM7XG4gXG4tXHRcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcbi1cdH1cbitcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUsIFx1MDAyNmN0eC1cdTAwM2VmdXRleF9saXN0KTtcbitcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiBcbitcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcbitcbitmcmVlX2FzeW5jOlxuK1x0aW9fY2FjaGVfZnJlZShcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XG4rXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xuIGRvbmVfdW5sb2NrOlxuIFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIGRvbmU6XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbitcdHJlcV9zZXRfZmFpbChyZXEpO1xuIFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xuLVx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xuIFx0cmV0dXJuIElPVV9DT01QTEVURTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoyOTo0NC4zMTk3MzgxOTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjE1MDkxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcvZnV0ZXguYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgaW9fdXJpbmcvZnV0ZXguY2AgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRzIGBpb19mdXRleF93YWl0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSdtIGFzc3VtaW5nIHRoZXJlIGFyZSBzb21lIGRlcGVuZGVuY2llcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW9fdXJpbmcvZnV0ZXggc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5MZXQncyB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiBgaW9fdXJpbmcvZnV0ZXguY2AsIGFuZCBJJ2xsIGp1bXAgdG8gYXJvdW5kIGxpbmUgMzIxLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byBzZWUgdGhlIGBpb19mdXRleF93YWl0YCBmdW5jdGlvbiBpbiBjb250ZXh0LiBJdCdzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgc29tZXRoaW5nIHVzZWZ1bCB0aGVyZSB0byBndWlkZSBteSB1bmRlcnN0YW5kaW5nLiBJIHdpbGwgYWxzbyBjaGVjayBLY29uZmlnIGFnYWluLCB3aGlsZSBJIGFtIGhlcmUsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6Mjk6NTEuOTM0ODM0NDA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2Z1dGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcdH1cXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAyOTM6XFx0XFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xcbiAyOTQ6XFx0fVxcbiAyOTU6XFx0XFxuIDI5NjpcXHRpbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAyOTc6XFx0e1xcbiAyOTg6XFx0XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbiAyOTk6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXFx1MDAzZWN0eDtcXG4gMzAwOlxcdFxcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSBOVUxMO1xcbiAzMDE6XFx0XFx0aW50IHJldDtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0aWYgKCFpb2YtXFx1MDAzZWZ1dGV4X21hc2spIHtcXG4gMzA0OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDMwNTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDMwNjpcXHRcXHR9XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGlvX3Jpbmdfc3VibWl0X2xvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDMwOTpcXHRcXHRpZmQgPSBpb19jYWNoZV9hbGxvYyhcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgR0ZQX05PV0FJVCk7XFxuIDMxMDpcXHRcXHRpZiAoIWlmZCkge1xcbiAzMTE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMzEyOlxcdFxcdFxcdGdvdG8gZG9uZV91bmxvY2s7XFxuIDMxMzpcXHRcXHR9XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQTtcXG4gMzE2OlxcdFxcdHJlcS1cXHUwMDNlYXN5bmNfZGF0YSA9IGlmZDtcXG4gMzE3OlxcdFxcdGlmZC1cXHUwMDNlcSA9IGZ1dGV4X3FfaW5pdDtcXG4gMzE4OlxcdFxcdGlmZC1cXHUwMDNlcS5iaXRzZXQgPSBpb2YtXFx1MDAzZWZ1dGV4X21hc2s7XFxuIDMxOTpcXHRcXHRpZmQtXFx1MDAzZXEud2FrZSA9IGlvX2Z1dGV4X3dha2VfZm47XFxuIDMyMDpcXHRcXHRpZmQtXFx1MDAzZXJlcSA9IHJlcTtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXFx1MDAzZXVhZGRyLCBpb2YtXFx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVxcdTAwM2VmdXRleF9mbGFncyxcXG4gMzIzOlxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2aWZkLVxcdTAwM2VxLCBOVUxMLCBOVUxMKTtcXG4gMzI0OlxcdFxcdGlmIChyZXQpXFxuIDMyNTpcXHRcXHRcXHRnb3RvIGZyZWVfYXN5bmM7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZyZXEtXFx1MDAzZWhhc2hfbm9kZSwgXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfbGlzdCk7XFxuIDMyODpcXHRcXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0ZnJlZV9hc3luYzpcXG4gMzMzOlxcdFxcdGlvX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIGlmZCk7XFxuIDMzNDpcXHRcXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbiAzMzU6XFx0ZG9uZV91bmxvY2s6XFxuIDMzNjpcXHRcXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDMzNzpcXHRkb25lOlxcbiAzMzg6XFx0XFx0cmVxX3NldF9mYWlsKHJlcSk7XFxuIDMzOTpcXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuIDM0MDpcXHRcXHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xcbiAzNDE6XFx0fVxcbiAzNDI6XFx0XFxuIDM0MzpcXHRpbnQgaW9fZnV0ZXhfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbiAzNDY6XFx0XFx0aW50IHJldDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0LypcXG4gMzQ5OlxcdFxcdCAqIFN0cmljdCBmbGFncyAtIGVuc3VyZSB0aGF0IHdha2luZyAwIGZ1dGV4ZXMgeWllbGRzIGEgMCByZXN1bHQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjI5OjUxLjkzNDk0MzUyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDM2NTk3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBmdXRleC5jYCB3aXRoaW4gdGhlIGlvX3VyaW5nIFN1YnN5c3RlbSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgYGZ1dGV4LmNgIGNvZGUgaXRzZWxmLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBmcmFtZXdvcmsuIEdpdmVuIHRoYXQgSSdtIHdvcmtpbmcgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgZW52aXJvbm1lbnQsIEkgaW1tZWRpYXRlbHkgcmVhY2ggZm9yIHRoZSBzdGFuZGFyZCBidWlsZCBzeXN0ZW0gZmlsZXMuIE15IHByaW1hcnkgdGFyZ2V0cyBhcmUgZ29pbmcgdG8gYmUgYGlvX3VyaW5nL01ha2VmaWxlYCBhbmQgYGlvX3VyaW5nL0tjb25maWdgLiBUaGUgYE1ha2VmaWxlYCB3aWxsLCBvZiBjb3Vyc2UsIHRlbGwgbWUgdGhlIGRpcmVjdCBidWlsZCBjb21tYW5kcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGVyIGZsYWdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBgaW9fdXJpbmdgIG1vZHVsZS4gVGhlIGBLY29uZmlnYCBmaWxlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBhbnkgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgZnV0ZXguY2AuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBwZXJoYXBzIGNvbnRyb2xsZWQgYnkgYSBzcGVjaWZpYyBmZWF0dXJlIGZsYWcuIEknbSBleHBlY3RpbmcgdGhpcyBpbmZvcm1hdGlvbiB0byBiZSByZWFkaWx5IGF2YWlsYWJsZSBpbiB0aGVzZSBjb3JlIGZpbGVzOyBpdOKAmXMgdGhlIHN0YW5kYXJkIHByYWN0aWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbmFsIGNvbnRleHQgbmVlZGVkIHRvIGFuYWx5emUgYGZ1dGV4LmNgIHdpdGhpbiB0aGUgb3ZlcmFsbCBgaW9fdXJpbmdgIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6Mjk6NTQuNDM4NjA2MzQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE1NjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbmlvX3VyaW5nL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19GVVRFWClcXHRcXHQrPSBmdXRleC5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX0VQT0xMKVxcdFxcdCs9IGVwb2xsLm9cXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jLTE5LSNpbmNsdWRlIFxcXCJ3YWl0aWQuaFxcXCJcXG5pb191cmluZy9jYW5jZWwuYzoyMDojaW5jbHVkZSBcXFwiZnV0ZXguaFxcXCJcXG5pb191cmluZy9jYW5jZWwuYy0yMS0jaW5jbHVkZSBcXFwiY2FuY2VsLmhcXFwiXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYz0xMDU9aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy0xMjgtXFxuaW9fdXJpbmcvY2FuY2VsLmM6MTI5OlxcdHJldCA9IGlvX2Z1dGV4X2NhbmNlbChjdHgsIGNkLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtMTMwLVxcdGlmIChyZXQgIT0gLUVOT0VOVClcXG4tLVxcbmlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNTYxLVxcdHJldCB8PSBpb193YWl0aWRfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jOjU2MjpcXHRyZXQgfD0gaW9fZnV0ZXhfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIGNhbmNlbF9hbGwpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTU2My1cXHRyZXQgfD0gaW9fdXJpbmdfdHJ5X2NhbmNlbF91cmluZ19jbWQoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtOS1cXG5pb191cmluZy9mdXRleC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9rZXJuZWwvZnV0ZXgvZnV0ZXguaFxcXCJcXG5pb191cmluZy9mdXRleC5jLTExLSNpbmNsdWRlIFxcXCJpb191cmluZy5oXFxcIlxcbmlvX3VyaW5nL2Z1dGV4LmMtMTItI2luY2x1ZGUgXFxcImFsbG9jX2NhY2hlLmhcXFwiXFxuaW9fdXJpbmcvZnV0ZXguYzoxMzojaW5jbHVkZSBcXFwiZnV0ZXguaFxcXCJcXG5pb191cmluZy9mdXRleC5jLTE0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTU6c3RydWN0IGlvX2Z1dGV4IHtcXG5pb191cmluZy9mdXRleC5jLTE2LVxcdHN0cnVjdCBmaWxlXFx0KmZpbGU7XFxuaW9fdXJpbmcvZnV0ZXguYy0xNy1cXHR2b2lkIF9fdXNlclxcdCp1YWRkcjtcXG5pb191cmluZy9mdXRleC5jOjE4OlxcdHVuc2lnbmVkIGxvbmdcXHRmdXRleF92YWw7XFxuaW9fdXJpbmcvZnV0ZXguYzoxOTpcXHR1bnNpZ25lZCBsb25nXFx0ZnV0ZXhfbWFzaztcXG5pb191cmluZy9mdXRleC5jOjIwOlxcdHUzMlxcdFxcdGZ1dGV4X2ZsYWdzO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjE6XFx0dW5zaWduZWQgaW50XFx0ZnV0ZXhfbnI7XFxuaW9fdXJpbmcvZnV0ZXguYzoyMjpcXHRib29sXFx0XFx0ZnV0ZXh2X3VucXVldWVkO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjMtfTtcXG5pb191cmluZy9mdXRleC5jLTI0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MjU6c3RydWN0IGlvX2Z1dGV4X2RhdGEge1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjY6XFx0c3RydWN0IGZ1dGV4X3FcXHRxO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjctXFx0c3RydWN0IGlvX2tpb2NiXFx0KnJlcTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjktXFxuaW9fdXJpbmcvZnV0ZXguYzozMDpzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEge1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzEtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG93bmVkO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MzI6XFx0c3RydWN0IGZ1dGV4X3ZlY3RvclxcdGZ1dGV4dltdO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzMtfTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMzYtXFxuaW9fdXJpbmcvZnV0ZXguYzozNzpib29sIGlvX2Z1dGV4X2NhY2hlX2luaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuaW9fdXJpbmcvZnV0ZXguYy0zOC17XFxuaW9fdXJpbmcvZnV0ZXguYzozOTpcXHRyZXR1cm4gaW9fYWxsb2NfY2FjaGVfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgSU9fRlVURVhfQUxMT0NfQ0FDSEVfTUFYLFxcbmlvX3VyaW5nL2Z1dGV4LmM6NDA6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpb19mdXRleF9kYXRhKSwgMCk7XFxuaW9fdXJpbmcvZnV0ZXguYy00MS19XFxuaW9fdXJpbmcvZnV0ZXguYy00Mi1cXG5pb191cmluZy9mdXRleC5jOjQzOnZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9mdXRleC5jLTQ0LXtcXG5pb191cmluZy9mdXRleC5jOjQ1OlxcdGlvX2FsbG9jX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIGtmcmVlKTtcXG5pb191cmluZy9mdXRleC5jLTQ2LX1cXG5pb191cmluZy9mdXRleC5jLTQ3LVxcbmlvX3VyaW5nL2Z1dGV4LmM6NDg6c3RhdGljIHZvaWQgX19pb19mdXRleF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5pb191cmluZy9mdXRleC5jLTQ5LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtNTMtXFxuaW9fdXJpbmcvZnV0ZXguYzo1NDpzdGF0aWMgdm9pZCBpb19mdXRleF9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5pb191cmluZy9mdXRleC5jLTU1LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtNTktXFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcXG5pb191cmluZy9mdXRleC5jOjYwOlxcdGlvX2NhY2hlX2ZyZWUoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIHJlcS1cXHUwMDNlYXN5bmNfZGF0YSk7XFxuaW9fdXJpbmcvZnV0ZXguYy02MS1cXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbmlvX3VyaW5nL2Z1dGV4LmM6NjI6XFx0X19pb19mdXRleF9jb21wbGV0ZSh0d19yZXEsIHR3KTtcXG5pb191cmluZy9mdXRleC5jLTYzLX1cXG5pb191cmluZy9mdXRleC5jLTY0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6NjU6c3RhdGljIHZvaWQgaW9fZnV0ZXh2X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbmlvX3VyaW5nL2Z1dGV4LmMtNjYte1xcbmlvX3VyaW5nL2Z1dGV4LmMtNjctXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSB0d19yZXEucmVxO1xcbmlvX3VyaW5nL2Z1dGV4LmM6Njg6XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbmlvX3VyaW5nL2Z1dGV4LmM6Njk6XFx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYy03MC1cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtNzItXFxuaW9fdXJpbmcvZnV0ZXguYzo3MzpcXHRpZiAoIWlvZi1cXHUwMDNlZnV0ZXh2X3VucXVldWVkKSB7XFxuaW9fdXJpbmcvZnV0ZXguYy03NC1cXHRcXHRpbnQgcmVzO1xcbmlvX3VyaW5nL2Z1dGV4LmMtNzUtXFxuaW9fdXJpbmcvZnV0ZXguYzo3NjpcXHRcXHRyZXMgPSBmdXRleF91bnF1ZXVlX211bHRpcGxlKGlmZC1cXHUwMDNlZnV0ZXh2LCBpb2YtXFx1MDAzZWZ1dGV4X25yKTtcXG5pb191cmluZy9mdXRleC5jLTc3LVxcdFxcdGlmIChyZXMgIT0gLTEpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTgxLVxcdGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKTtcXG5pb191cmluZy9mdXRleC5jOjgyOlxcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XFxuaW9fdXJpbmcvZnV0ZXguYy04My19XFxuaW9fdXJpbmcvZnV0ZXguYy04NC1cXG5pb191cmluZy9mdXRleC5jOjg1OnN0YXRpYyBib29sIGlvX2Z1dGV4dl9jbGFpbShzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZClcXG5pb191cmluZy9mdXRleC5jLTg2LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtOTEtXFxuaW9fdXJpbmcvZnV0ZXguYzo5MjpzdGF0aWMgYm9vbCBfX2lvX2Z1dGV4X2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9mdXRleC5jLTkzLXtcXG5pb191cmluZy9mdXRleC5jOjk0OlxcdC8qIGZ1dGV4IHdha2UgYWxyZWFkeSBkb25lIG9yIGluIHByb2dyZXNzICovXFxuaW9fdXJpbmcvZnV0ZXguYy05NS1cXHRpZiAocmVxLVxcdTAwM2VvcGNvZGUgPT0gSU9SSU5HX09QX0ZVVEVYX1dBSVQpIHtcXG5pb191cmluZy9mdXRleC5jOjk2OlxcdFxcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYy05Ny1cXG5pb191cmluZy9mdXRleC5jOjk4OlxcdFxcdGlmICghZnV0ZXhfdW5xdWV1ZShcXHUwMDI2aWZkLVxcdTAwM2VxKSlcXG5pb191cmluZy9mdXRleC5jLTk5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5pb191cmluZy9mdXRleC5jOjEwMDpcXHRcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXhfY29tcGxldGU7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMDEtXFx0fSBlbHNlIHtcXG5pb191cmluZy9mdXRleC5jOjEwMjpcXHRcXHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cXHUwMDNlYXN5bmNfZGF0YTtcXG5pb191cmluZy9mdXRleC5jLTEwMy1cXG5pb191cmluZy9mdXRleC5jOjEwNDpcXHRcXHRpZiAoIWlvX2Z1dGV4dl9jbGFpbShpZmQpKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTA1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5pb191cmluZy9mdXRleC5jOjEwNjpcXHRcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTA3LVxcdH1cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTE0LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTE1OmludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuaW9fdXJpbmcvZnV0ZXguYy0xMTYtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTExNy17XFxuaW9fdXJpbmcvZnV0ZXguYzoxMTg6XFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QsIF9faW9fZnV0ZXhfY2FuY2VsKTtcXG5pb191cmluZy9mdXRleC5jLTExOS19XFxuaW9fdXJpbmcvZnV0ZXguYy0xMjAtXFxuaW9fdXJpbmcvZnV0ZXguYzoxMjE6Ym9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcXG5pb191cmluZy9mdXRleC5jLTEyMi1cXHRcXHRcXHQgYm9vbCBjYW5jZWxfYWxsKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTIzLXtcXG5pb191cmluZy9mdXRleC5jOjEyNDpcXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9saXN0LCBjYW5jZWxfYWxsLCBfX2lvX2Z1dGV4X2NhbmNlbCk7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMjUtfVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTI2LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTI3OmludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvZnV0ZXguYy0xMjgte1xcbmlvX3VyaW5nL2Z1dGV4LmM6MTI5OlxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG5pb191cmluZy9mdXRleC5jLTEzMC1cXHR1MzIgZmxhZ3M7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMzEtXFxuaW9fdXJpbmcvZnV0ZXguYzoxMzI6XFx0aWYgKHVubGlrZWx5KHNxZS1cXHUwMDNlbGVuIHx8IHNxZS1cXHUwMDNlZnV0ZXhfZmxhZ3MgfHwgc3FlLVxcdTAwM2VidWZfaW5kZXggfHxcXG5pb191cmluZy9mdXRleC5jLTEzMy1cXHRcXHQgICAgIHNxZS1cXHUwMDNlZmlsZV9pbmRleCkpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTEzNi1cXHRpb2YtXFx1MDAzZXVhZGRyID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXFx1MDAzZWFkZHIpKTtcXG5pb191cmluZy9mdXRleC5jOjEzNzpcXHRpb2YtXFx1MDAzZWZ1dGV4X3ZhbCA9IFJFQURfT05DRShzcWUtXFx1MDAzZWFkZHIyKTtcXG5pb191cmluZy9mdXRleC5jOjEzODpcXHRpb2YtXFx1MDAzZWZ1dGV4X21hc2sgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VhZGRyMyk7XFxuaW9fdXJpbmcvZnV0ZXguYy0xMzktXFx0ZmxhZ3MgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VmZCk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTE0My1cXG5pb191cmluZy9mdXRleC5jOjE0NDpcXHRpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzID0gZnV0ZXgyX3RvX2ZsYWdzKGZsYWdzKTtcXG5pb191cmluZy9mdXRleC5jOjE0NTpcXHRpZiAoIWZ1dGV4X2ZsYWdzX3ZhbGlkKGlvZi1cXHUwMDNlZnV0ZXhfZmxhZ3MpKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTQ3LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTQ4OlxcdGlmICghZnV0ZXhfdmFsaWRhdGVfaW5wdXQoaW9mLVxcdTAwM2VmdXRleF9mbGFncywgaW9mLVxcdTAwM2VmdXRleF92YWwpIHx8XFxuaW9fdXJpbmcvZnV0ZXguYzoxNDk6XFx0ICAgICFmdXRleF92YWxpZGF0ZV9pbnB1dChpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzLCBpb2YtXFx1MDAzZWZ1dGV4X21hc2spKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTUwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xNTQtXFxuaW9fdXJpbmcvZnV0ZXguYzoxNTU6aW50IGlvX2Z1dGV4X3dhaXRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTU2LXtcXG5pb191cmluZy9mdXRleC5jOjE1NzpcXHRzdHJ1Y3QgaW9fZnV0ZXggKmlvZiA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19mdXRleCk7XFxuaW9fdXJpbmcvZnV0ZXguYy0xNTgtXFx0aW50IHJldDtcXG5pb191cmluZy9mdXRleC5jLTE1OS1cXG5pb191cmluZy9mdXRleC5jOjE2MDpcXHRyZXQgPSBpb19mdXRleF9wcmVwKHJlcSwgc3FlKTtcXG5pb191cmluZy9mdXRleC5jLTE2MS1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTY0LVxcdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cXG5pb191cmluZy9mdXRleC5jOjE2NTpcXHRpZiAoIShpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzIFxcdTAwMjYgRkxBR1NfU0hBUkVEKSlcXG5pb191cmluZy9mdXRleC5jLTE2Ni1cXHRcXHRpb19yZXFfdHJhY2tfaW5mbGlnaHQocmVxKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTY5LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MTcwOnN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2V2X2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG5pb191cmluZy9mdXRleC5jLTE3MS17XFxuaW9fdXJpbmcvZnV0ZXguYy0xNzItXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBxLVxcdTAwM2V3YWtlX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYzoxNzM6XFx0c3RydWN0IGlvX2Z1dGV4dl9kYXRhICppZmQgPSByZXEtXFx1MDAzZWFzeW5jX2RhdGE7XFxuaW9fdXJpbmcvZnV0ZXguYy0xNzQtXFxuaW9fdXJpbmcvZnV0ZXguYzoxNzU6XFx0aWYgKCFpb19mdXRleHZfY2xhaW0oaWZkKSkge1xcbmlvX3VyaW5nL2Z1dGV4LmM6MTc2OlxcdFxcdF9fZnV0ZXhfd2FrZV9tYXJrKHEpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTc3LVxcdFxcdHJldHVybjtcXG5pb191cmluZy9mdXRleC5jLTE3OC1cXHR9XFxuaW9fdXJpbmcvZnV0ZXguYzoxNzk6XFx0aWYgKHVubGlrZWx5KCFfX2Z1dGV4X3dha2VfbWFyayhxKSkpXFxuaW9fdXJpbmcvZnV0ZXguYy0xODAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xODItXFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcXG5pb191cmluZy9mdXRleC5jOjE4MzpcXHRyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTg0LVxcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTE4Ni1cXG5pb191cmluZy9mdXRleC5jOjE4NzppbnQgaW9fZnV0ZXh2X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9mdXRleC5jLTE4OC17XFxuaW9fdXJpbmcvZnV0ZXguYzoxODk6XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MTkwOlxcdHN0cnVjdCBpb19mdXRleHZfZGF0YSAqaWZkO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMTkxLVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xOTUtXFx0aWYgKHVubGlrZWx5KHNxZS1cXHUwMDNlZmQgfHwgc3FlLVxcdTAwM2VidWZfaW5kZXggfHwgc3FlLVxcdTAwM2VmaWxlX2luZGV4IHx8XFxuaW9fdXJpbmcvZnV0ZXguYzoxOTY6XFx0XFx0ICAgICBzcWUtXFx1MDAzZWFkZHIyIHx8IHNxZS1cXHUwMDNlZnV0ZXhfZmxhZ3MgfHwgc3FlLVxcdTAwM2VhZGRyMykpXFxuaW9fdXJpbmcvZnV0ZXguYy0xOTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTE5OS1cXHRpb2YtXFx1MDAzZXVhZGRyID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXFx1MDAzZWFkZHIpKTtcXG5pb191cmluZy9mdXRleC5jOjIwMDpcXHRpb2YtXFx1MDAzZWZ1dGV4X25yID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlbGVuKTtcXG5pb191cmluZy9mdXRleC5jOjIwMTpcXHRpZiAoIWlvZi1cXHUwMDNlZnV0ZXhfbnIgfHwgaW9mLVxcdTAwM2VmdXRleF9uciBcXHUwMDNlIEZVVEVYX1dBSVRWX01BWClcXG5pb191cmluZy9mdXRleC5jLTIwMi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy9mdXRleC5jLTIwMy1cXG5pb191cmluZy9mdXRleC5jOjIwNDpcXHRpZmQgPSBremFsbG9jX2ZsZXgoc3RydWN0IGlvX2Z1dGV4dl9kYXRhLCBmdXRleHYsIGlvZi1cXHUwMDNlZnV0ZXhfbnIsXFxuaW9fdXJpbmcvZnV0ZXguYy0yMDUtXFx0XFx0XFx0ICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjA4LVxcbmlvX3VyaW5nL2Z1dGV4LmM6MjA5OlxcdHJldCA9IGZ1dGV4X3BhcnNlX3dhaXR2KGlmZC1cXHUwMDNlZnV0ZXh2LCBpb2YtXFx1MDAzZXVhZGRyLCBpb2YtXFx1MDAzZWZ1dGV4X25yLFxcbmlvX3VyaW5nL2Z1dGV4LmM6MjEwOlxcdFxcdFxcdFxcdGlvX2Z1dGV4X3dha2V2X2ZuLCByZXEpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjE2LVxcdC8qIGluZmxpZ2h0IHRyYWNraW5nIG9ubHkgbmVlZGVkIGZvciBtbSBwcml2YXRlIGhhc2ggKi9cXG5pb191cmluZy9mdXRleC5jOjIxNzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW9mLVxcdTAwM2VmdXRleF9ucjsgaSsrKSB7XFxuaW9fdXJpbmcvZnV0ZXguYzoyMTg6XFx0XFx0aWYgKCEoaWZkLVxcdTAwM2VmdXRleHZbaV0udy5mbGFncyBcXHUwMDI2IEZMQUdTX1NIQVJFRCkpIHtcXG5pb191cmluZy9mdXRleC5jLTIxOS1cXHRcXHRcXHRpb19yZXFfdHJhY2tfaW5mbGlnaHQocmVxKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjIzLVxcbmlvX3VyaW5nL2Z1dGV4LmM6MjI0OlxcdGlvZi1cXHUwMDNlZnV0ZXh2X3VucXVldWVkID0gMDtcXG5pb191cmluZy9mdXRleC5jLTIyNS1cXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEE7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTIyOS1cXG5pb191cmluZy9mdXRleC5jOjIzMDpzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG5pb191cmluZy9mdXRleC5jLTIzMS17XFxuaW9fdXJpbmcvZnV0ZXguYzoyMzI6XFx0c3RydWN0IGlvX2Z1dGV4X2RhdGEgKmlmZCA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSwgcSk7XFxuaW9fdXJpbmcvZnV0ZXguYy0yMzMtXFx0c3RydWN0IGlvX2tpb2NiICpyZXEgPSBpZmQtXFx1MDAzZXJlcTtcXG5pb191cmluZy9mdXRleC5jLTIzNC1cXG5pb191cmluZy9mdXRleC5jOjIzNTpcXHRpZiAodW5saWtlbHkoIV9fZnV0ZXhfd2FrZV9tYXJrKHEpKSlcXG5pb191cmluZy9mdXRleC5jLTIzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTIzOC1cXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjM5OlxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcXG5pb191cmluZy9mdXRleC5jLTI0MC1cXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yNDItXFxuaW9fdXJpbmcvZnV0ZXguYzoyNDM6aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvZnV0ZXguYy0yNDQte1xcbmlvX3VyaW5nL2Z1dGV4LmM6MjQ1OlxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG5pb191cmluZy9mdXRleC5jOjI0NjpcXHRzdHJ1Y3QgaW9fZnV0ZXh2X2RhdGEgKmlmZCA9IHJlcS1cXHUwMDNlYXN5bmNfZGF0YTtcXG5pb191cmluZy9mdXRleC5jLTI0Ny1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yNTEtXFxuaW9fdXJpbmcvZnV0ZXguYzoyNTI6XFx0cmV0ID0gZnV0ZXhfd2FpdF9tdWx0aXBsZV9zZXR1cChpZmQtXFx1MDAzZWZ1dGV4diwgaW9mLVxcdTAwM2VmdXRleF9uciwgXFx1MDAyNndva2VuKTtcXG5pb191cmluZy9mdXRleC5jLTI1My1cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjcwLVxcdCAqIGxldCB0aGF0IHNpZGUgZG8gdGhlIGNvbXBsZXRpb24uIE5vdGUgdGhhdFxcbmlvX3VyaW5nL2Z1dGV4LmM6MjcxOlxcdCAqIGZ1dGV4X3dhaXRfbXVsdGlwbGVfc2V0dXAoKSB3aWxsIGhhdmUgdW5xdWV1ZWQgYWxsIHRoZSBmdXRleGVzIGluXFxuaW9fdXJpbmcvZnV0ZXguYy0yNzItXFx0ICogdGhpcyBjYXNlLiBNYXJrIHVzIGFzIGhhdmluZyBkb25lIHRoYXQgYWxyZWFkeSwgc2luY2UgdGhpcyBpc1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yNzYtXFx0XFx0LypcXG5pb191cmluZy9mdXRleC5jOjI3NzpcXHRcXHQgKiBJZiBmdXRleF93YWl0X211bHRpcGxlX3NldHVwKCkgcmV0dXJucyAwIGZvciBhXFxuaW9fdXJpbmcvZnV0ZXguYy0yNzgtXFx0XFx0ICogc3VjY2Vzc2Z1bCBzZXR1cCwgdGhlbiB0aGUgdGFzayBzdGF0ZSB3aWxsIG5vdCBiZVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yODAtXFx0XFx0ICogaXQnbGwgYmUgYmxvY2tpbmcgdW5sZXNzIHdlIGFscmVhZHkgZ290IG9uZSBvZiB0aGVcXG5pb191cmluZy9mdXRleC5jOjI4MTpcXHRcXHQgKiBmdXRleGVzIHdva2VuLCBidXQgaXQgb2J2aW91c2x5IHdvbid0IHdvcmsgZm9yIGFuXFxuaW9fdXJpbmcvZnV0ZXguYy0yODItXFx0XFx0ICogYXN5bmMgaW52b2NhdGlvbi4gTWFyayB1cyBydW5uYWJsZSBhZ2Fpbi5cXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjg0LVxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG5pb191cmluZy9mdXRleC5jOjI4NTpcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cmVxLVxcdTAwM2VoYXNoX25vZGUsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjg2LVxcdH0gZWxzZSB7XFxuaW9fdXJpbmcvZnV0ZXguYzoyODc6XFx0XFx0aW9mLVxcdTAwM2VmdXRleHZfdW5xdWV1ZWQgPSAxO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjg4LVxcdFxcdGlmICh3b2tlbiAhPSAtMSlcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMjk1LVxcbmlvX3VyaW5nL2Z1dGV4LmM6Mjk2OmludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvZnV0ZXguYy0yOTcte1xcbmlvX3VyaW5nL2Z1dGV4LmM6Mjk4OlxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG5pb191cmluZy9mdXRleC5jLTI5OS1cXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbmlvX3VyaW5nL2Z1dGV4LmM6MzAwOlxcdHN0cnVjdCBpb19mdXRleF9kYXRhICppZmQgPSBOVUxMO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzAxLVxcdGludCByZXQ7XFxuaW9fdXJpbmcvZnV0ZXguYy0zMDItXFxuaW9fdXJpbmcvZnV0ZXguYzozMDM6XFx0aWYgKCFpb2YtXFx1MDAzZWZ1dGV4X21hc2spIHtcXG5pb191cmluZy9mdXRleC5jLTMwNC1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0zMDgtXFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9mdXRleC5jOjMwOTpcXHRpZmQgPSBpb19jYWNoZV9hbGxvYyhcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgR0ZQX05PV0FJVCk7XFxuaW9fdXJpbmcvZnV0ZXguYy0zMTAtXFx0aWYgKCFpZmQpIHtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMzE2LVxcdHJlcS1cXHUwMDNlYXN5bmNfZGF0YSA9IGlmZDtcXG5pb191cmluZy9mdXRleC5jOjMxNzpcXHRpZmQtXFx1MDAzZXEgPSBmdXRleF9xX2luaXQ7XFxuaW9fdXJpbmcvZnV0ZXguYzozMTg6XFx0aWZkLVxcdTAwM2VxLmJpdHNldCA9IGlvZi1cXHUwMDNlZnV0ZXhfbWFzaztcXG5pb191cmluZy9mdXRleC5jOjMxOTpcXHRpZmQtXFx1MDAzZXEud2FrZSA9IGlvX2Z1dGV4X3dha2VfZm47XFxuaW9fdXJpbmcvZnV0ZXguYy0zMjAtXFx0aWZkLVxcdTAwM2VyZXEgPSByZXE7XFxuaW9fdXJpbmcvZnV0ZXguYy0zMjEtXFxuaW9fdXJpbmcvZnV0ZXguYzozMjI6XFx0cmV0ID0gZnV0ZXhfd2FpdF9zZXR1cChpb2YtXFx1MDAzZXVhZGRyLCBpb2YtXFx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVxcdTAwM2VmdXRleF9mbGFncyxcXG5pb191cmluZy9mdXRleC5jLTMyMy1cXHRcXHRcXHQgICAgICAgXFx1MDAyNmlmZC1cXHUwMDNlcSwgTlVMTCwgTlVMTCk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTMyNi1cXG5pb191cmluZy9mdXRleC5jOjMyNzpcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cmVxLVxcdTAwM2VoYXNoX25vZGUsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzI4LVxcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtMzMyLWZyZWVfYXN5bmM6XFxuaW9fdXJpbmcvZnV0ZXguYzozMzM6XFx0aW9fY2FjaGVfZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcXG5pb191cmluZy9mdXRleC5jLTMzNC1cXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0zNDItXFxuaW9fdXJpbmcvZnV0ZXguYzozNDM6aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTM0NC17XFxuaW9fdXJpbmcvZnV0ZXguYzozNDU6XFx0c3RydWN0IGlvX2Z1dGV4ICppb2YgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fZnV0ZXgpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzQ2LVxcdGludCByZXQ7XFxuLS1cXG5pb191cmluZy9mdXRleC5jLTM0OC1cXHQvKlxcbmlvX3VyaW5nL2Z1dGV4LmM6MzQ5OlxcdCAqIFN0cmljdCBmbGFncyAtIGVuc3VyZSB0aGF0IHdha2luZyAwIGZ1dGV4ZXMgeWllbGRzIGEgMCByZXN1bHQuXFxuaW9fdXJpbmcvZnV0ZXguYzozNTA6XFx0ICogU2VlIGNvbW1pdCA0M2FkZjg0NDk1MTAgKFxcXCJmdXRleDogRkxBR1NfU1RSSUNUXFxcIikgZm9yIGRldGFpbHMuXFxuaW9fdXJpbmcvZnV0ZXguYy0zNTEtXFx0ICovXFxuaW9fdXJpbmcvZnV0ZXguYzozNTI6XFx0cmV0ID0gZnV0ZXhfd2FrZShpb2YtXFx1MDAzZXVhZGRyLCBGTEFHU19TVFJJQ1QgfCBpb2YtXFx1MDAzZWZ1dGV4X2ZsYWdzLCBOVUxMLFxcbmlvX3VyaW5nL2Z1dGV4LmM6MzUzOlxcdFxcdFxcdCBpb2YtXFx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVxcdTAwM2VmdXRleF9tYXNrKTtcXG5pb191cmluZy9mdXRleC5jLTM1NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmgtNC1cXG5pb191cmluZy9mdXRleC5oOjU6aW50IGlvX2Z1dGV4X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaDo2OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaDo3OmludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy9mdXRleC5oOjg6aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaDo5OmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9mdXRleC5oOjEwOmludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2Z1dGV4LmgtMTEtXFxuaW9fdXJpbmcvZnV0ZXguaC0xMi0jaWYgZGVmaW5lZChDT05GSUdfRlVURVgpXFxuaW9fdXJpbmcvZnV0ZXguaDoxMzppbnQgaW9fZnV0ZXhfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL2Z1dGV4LmgtMTQtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaDoxNTpib29sIGlvX2Z1dGV4X3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbmlvX3VyaW5nL2Z1dGV4LmgtMTYtXFx0XFx0XFx0IGJvb2wgY2FuY2VsX2FsbCk7XFxuaW9fdXJpbmcvZnV0ZXguaDoxNzpib29sIGlvX2Z1dGV4X2NhY2hlX2luaXQoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbmlvX3VyaW5nL2Z1dGV4Lmg6MTg6dm9pZCBpb19mdXRleF9jYWNoZV9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcXG5pb191cmluZy9mdXRleC5oLTE5LSNlbHNlXFxuaW9fdXJpbmcvZnV0ZXguaDoyMDpzdGF0aWMgaW5saW5lIGludCBpb19mdXRleF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuaW9fdXJpbmcvZnV0ZXguaC0yMS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy9mdXRleC5oLTI1LX1cXG5pb191cmluZy9mdXRleC5oOjI2OnN0YXRpYyBpbmxpbmUgYm9vbCBpb19mdXRleF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbmlvX3VyaW5nL2Z1dGV4LmgtMjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBib29sIGNhbmNlbF9hbGwpXFxuLS1cXG5pb191cmluZy9mdXRleC5oLTMwLX1cXG5pb191cmluZy9mdXRleC5oOjMxOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19mdXRleF9jYWNoZV9pbml0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmlvX3VyaW5nL2Z1dGV4LmgtMzIte1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguaC0zNC19XFxuaW9fdXJpbmcvZnV0ZXguaDozNTpzdGF0aWMgaW5saW5lIHZvaWQgaW9fZnV0ZXhfY2FjaGVfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9mdXRleC5oLTM2LXtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtODQtI2luY2x1ZGUgXFxcIndhaXRpZC5oXFxcIlxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6ODU6I2luY2x1ZGUgXFxcImZ1dGV4LmhcXFwiXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy04Ni0jaW5jbHVkZSBcXFwibmFwaS5oXFxcIlxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTY9c3RhdGljIHZvaWQgaW9fZnJlZV9hbGxvY19jYWNoZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTIyMS1cXHRpb19hbGxvY19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZWNtZF9jYWNoZSwgaW9fY21kX2NhY2hlX2ZyZWUpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjIyOlxcdGlvX2Z1dGV4X2NhY2hlX2ZyZWUoY3R4KTtcXG5pb191cmluZy9pb191cmluZy5jLTIyMy1cXHRpb19yc3JjX2NhY2hlX2ZyZWUoY3R4KTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjI2PXN0YXRpYyBfX2NvbGQgc3RydWN0IGlvX3JpbmdfY3R4ICppb19yaW5nX2N0eF9hbGxvYyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNjgtXFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfY21kKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNjk6XFx0cmV0IHw9IGlvX2Z1dGV4X2NhY2hlX2luaXQoY3R4KTtcXG5pb191cmluZy9pb191cmluZy5jLTI3MC1cXHRyZXQgfD0gaW9fcnNyY19jYWNoZV9pbml0KGN0eCk7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI5MC0jaWZkZWYgQ09ORklHX0ZVVEVYXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTE6XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjkyLSNlbmRpZlxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0zNy0jaW5jbHVkZSBcXFwid2FpdGlkLmhcXFwiXFxuaW9fdXJpbmcvb3BkZWYuYzozODojaW5jbHVkZSBcXFwiZnV0ZXguaFxcXCJcXG5pb191cmluZy9vcGRlZi5jLTM5LSNpbmNsdWRlIFxcXCJ0cnVuY2F0ZS5oXFxcIlxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNDY5LSNpZiBkZWZpbmVkKENPTkZJR19GVVRFWClcXG5pb191cmluZy9vcGRlZi5jOjQ3MDpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fZnV0ZXhfd2FpdF9wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6NDcxOlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fZnV0ZXhfd2FpdCxcXG5pb191cmluZy9vcGRlZi5jLTQ3Mi0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00NzctI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxcbmlvX3VyaW5nL29wZGVmLmM6NDc4OlxcdFxcdC5wcmVwXFx0XFx0XFx0PSBpb19mdXRleF9wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6NDc5OlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fZnV0ZXhfd2FrZSxcXG5pb191cmluZy9vcGRlZi5jLTQ4MC0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00ODUtI2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYKVxcbmlvX3VyaW5nL29wZGVmLmM6NDg2OlxcdFxcdC5wcmVwXFx0XFx0XFx0PSBpb19mdXRleHZfcHJlcCxcXG5pb191cmluZy9vcGRlZi5jOjQ4NzpcXHRcXHQuaXNzdWVcXHRcXHRcXHQ9IGlvX2Z1dGV4dl93YWl0LFxcbmlvX3VyaW5nL29wZGVmLmMtNDg4LSNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjI5OjU0LjU1NTc2NzU5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3OTU1OTEzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBmdXRleCBXYWl0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgaW9fdXJpbmcvZnV0ZXguY2AsIHNwZWNpZmljYWxseSB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgY29ycmVjdGlvbiBoZXJlLlxuXG5CZWZvcmUsIGlmIGBmdXRleF93YWl0X3NldHVwYCBmYWlsZWQgZm9yIHdoYXRldmVyIHJlYXNvbiDigJMgd2hpY2ggY291bGQgYmUgYSBiYWQgZnV0ZXggYWRkcmVzcywgYSBmYWlsZWQgbWFzayBjaGVjayAoYGlvZi1cdTAwM2VmdXRleF9tYXNrID09IDBgKSwgb3IgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIHZpYSBgaW9fY2FjaGVfYWxsb2NgIOKAkyB0aGUgY29kZSB3b3VsZCBqdW1wIGRvd24gdG8gYGRvbmVgIG9yIGBkb25lX3VubG9ja2AuIEl0IHdvdWxkIHRoZW4gY2FsbCBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpYC4gVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgIHdpbGwgZnJlZSB1cCAqYWxsKiBgYXN5bmNfZGF0YWAuIFRoaXMgY2F1c2VkIGEgcHJvYmxlbS4gSWYgdGhlIGFsbG9jYXRpb24gdmlhIGBpb19jYWNoZV9hbGxvYyhcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfY2FjaGUsIC4uLilgIGZhaWxlZCwgaXQgd291bGRuJ3QgZnJlZSB0aGUgY2FjaGVkIG9iamVjdCBiYWNrIHRvIHRoZSBgZnV0ZXhfY2FjaGVgLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdGhlcmUncyBhIGNydWNpYWwgY2hhbmdlLiBJZiBgZnV0ZXhfd2FpdF9zZXR1cGAgcmV0dXJucyBhbiBlcnJvciAoYHJldCAhPSAwYCksIGl0J2xsIGp1bXAgdG8gYGZyZWVfYXN5bmNgLiAgVGhlIGNhY2hlZCBvYmplY3Qgd2lsbCBiZSBmcmVlZCBiYWNrIGludG8gdGhlIGBjdHgtXHUwMDNlZnV0ZXhfY2FjaGVgIGFuZCBgcmVxLVx1MDAzZWFzeW5jX2RhdGFgIGlzIGNsZWFyZWQuIElmIHRoZSBmYWlsdXJlIGhhcHBlbnMgKmJlZm9yZSogYWxsb2NhdGlvbiwgd2UganVzdCBqdW1wIHRvIGBkb25lYCBzaW5jZSB0aGVyZSdzIG5vdGhpbmcgdG8gZnJlZS4gIFRoaXMgbG9va3MgbXVjaCBjbGVhbmVyLiBJdCBoYW5kbGVzIHRoZSB2YXJpb3VzIGZhaWx1cmUgY2FzZXMgbW9yZSBwcmVjaXNlbHkgYW5kIGF2b2lkcyBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB0aGUgcHJpb3IgY29kZSB3YXMgZnJlZWluZyBhbGwgYXN5bmMgZGF0YSB3aGVuLCBpbiBzb21lIGNhc2VzLCBpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuLlxuXG5HaXZlbiB0aGF0IHRoaXMgdG91Y2hlcyBzdWNoIGEgY3JpdGljYWwgcGFydCBvZiB0aGUga2VybmVsIChpb191cmluZyBhbmQgZnV0ZXgpLCBhY2Nlc3NpYmxlIHZpYSBgaW9fdXJpbmdfZW50ZXJgIHdpdGggdGhlIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAgb3Bjb2RlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBhbiBhcmVhIHRvIHRhcmdldCB3aXRoIGZ1enppbmcuIFdlIGhhdmUgYSBwb3RlbnRpYWxseSBuZXcgY29kZSBwYXRoIHRvIHRlc3QuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UncmUgbG9va2luZyBmb3IgYENPTkZJR19JT19VUklOR2AgKG9yIGp1c3QgYElPX1VSSU5HYCkgYW5kIGBDT05GSUdfRlVURVhgIChvciBgRlVURVhgKS4gSSdsbCBkb3VibGUtY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYGlvX3VyaW5nL0tjb25maWdgIHRvIHZlcmlmeSB0aGUgZXhhY3QgbmFtZXMsIGJ1dCB0aG9zZSBhcmUgdGhlIGxpa2VseSBzdXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MDAuMzUxMzYxMDc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzU2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTk1OS1cXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk2MS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTk2OT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTk4MS1cXG5pbml0L0tjb25maWc6MTk4Mjpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5ODMtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MDAuNDQyMTIzNTAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NjQ5NzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfRlVURVhgKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgYENPTkZJR19GVVRFWGAgc3RhbmRzIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgaXQgaGFzIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoaXMgcHJvcGVybHkgZm9yIFtpbnNlcnQgdXNlcidzIGZpZWxkIG9mIGV4cGVydGlzZSwgZS5nLiwgXCJteSBwZXJmb3JtYW5jZSBhbmFseXNpcyB3b3JrXCIsIG9yIFwidGhpcyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnRcIl0uIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGRpc2N1c3Npb25zIHJlZ2FyZGluZyBgRlVURVhgIGNvbmZpZ3VyYXRpb24gY291bGQgaW1wYWN0IG15IGN1cnJlbnQgY29uY2VybnMuIE15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCdzIHRoZSBkZWZhdWx0IHN0YXRlLCBpcyBpdCBtb2R1bGUtYWJsZSwgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBkb2VzIGl0IGltcGFjdC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCBhbmQgaGVscHMgbWUgZGVjaWRlIGhvdyB0byBwcm9jZWVkIHdpdGggW2luc2VydCB1c2VyJ3MgdGFza10uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MDIuNjI4NjI0MDY5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMzE5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODY5PWNvbmZpZyBCQVNFX1NNQUxMXFxuLS1cXG5pbml0L0tjb25maWctMTg3NS1cXG5pbml0L0tjb25maWc6MTg3Njpjb25maWcgRlVURVhcXG5pbml0L0tjb25maWctMTg3Ny1cXHRib29sIFxcXCJFbmFibGUgZnV0ZXggc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWctMTg4NS1cXG5pbml0L0tjb25maWc6MTg4Njpjb25maWcgRlVURVhfUElcXG5pbml0L0tjb25maWctMTg4Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTg5MC1cXG5pbml0L0tjb25maWc6MTg5MTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4OTItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4OTUtXFxuaW5pdC9LY29uZmlnOjE4OTY6Y29uZmlnIEZVVEVYX01QT0xcXG5pbml0L0tjb25maWctMTg5Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWc9MTkwMT1jb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuLS1cXG5pbml0L0tjb25maWctMTkwMy1cXG5pbml0L0tjb25maWc6MTkwNDpjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xcbmluaXQvS2NvbmZpZy0xOTA1LVxcdGRlZl9ib29sIEZVVEVYIFxcdTAwMjZcXHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFxcdTAwMjZcXHUwMDI2IFJTRVEgXFx1MDAyNlxcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjAyLjc0MDc2MTMxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjU1MzMyOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fZnV0ZXhfd2FpdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBgRm9jdXNTeW1ib2xzYCBzdWdnZXN0cyB3ZSdyZSB6ZXJvaW5nIGluIG9uIGBpb19mdXRleF93YWl0YCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgaGVyZSwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGlvX2Z1dGV4X3dhaXRfcHJlcGAsIGBpb19mdXRleF93YWtlYCwgZXRjLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gYGlvX2Z1dGV4X3dhaXRgIGlzIHNwZWNpZmljIHRvIGBpb191cmluZ2AncyBgSU9SSU5HX09QX0ZVVEVYX1dBSVRgLCBzbyBpdCBpc24ndCBzb21lIGdsb2JhbGx5IHViaXF1aXRvdXMgZnV0ZXggZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgc2NvcGUuIEFmdGVyIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIHRoZSBwYXRjaCBkaWZmLCBpdCdzIGNvbmZpcm1lZCB0aGF0IGBpb19mdXRleF93YWl0YCBpbiBgaW9fdXJpbmcvZnV0ZXguY2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgaGVyZS5cblxuVGhlIGRpZmYgaXRzZWxmIHJldmVhbHMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogaXQncyBhbGwgYWJvdXQgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIFdlJ3JlIGxvb2tpbmcgYXQgcmV2aXNlZCBjbGVhbnVwIGxvZ2ljIHdpdGhpbiB0aGUgYGlvX2Z1dGV4X3dhaXRgIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIHBhdGNoIGFpbXMgdG8gaW1wcm92ZSBhc3luYyBkYXRhIGNhY2hpbmcgYW5kIGNsZWFudXAuIFNwZWNpZmljYWxseSwgd2UgYXJlIHJldHVybmluZyBhbGxvY2F0ZWQgc3RydWN0dXJlcyB0byB0aGUgZnV0ZXggY2FjaGUgKGBpb19jYWNoZV9mcmVlYCkgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgZGF0YSBpbnN0ZWFkIG9mIGludm9raW5nIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlYC4gVGhpcyBpcyBlc3NlbnRpYWwgYmVjYXVzZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgY3JpdGljYWwgcGF0aCB3aXRoaW4gdGhlIGBpb191cmluZ2AgZnV0ZXggaW1wbGVtZW50YXRpb24gKGBpb191cmluZy9mdXRleC5jYCkuIFRoaXMgc3Vic3lzdGVtIGlzLCBvZiBjb3Vyc2UsIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgYGlvX3VyaW5nYCBzeXNjYWxscyAoYElPUklOR19PUF9GVVRFWF9XQUlUYCkuXG5cbkxvb2tzIHNvbGlkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MDcsIk91dHB1dFRva2VucyI6MTM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjA5LjM5NjA5NzcyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI3MTc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgcGF0aHMgaW4gaW9fZnV0ZXhfd2FpdCB3aXRoaW4gaW9fdXJpbmcvZnV0ZXguYywgZW5zdXJpbmcgcHJvcGVyIGZyZWVpbmcgb2YgY2FjaGVkIGFzeW5jIGRhdGEgdmlhIGlvX2NhY2hlX2ZyZWUgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgc3RhdGUgb24gZnV0ZXggc2V0dXAgZmFpbHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvX3VyaW5nIHN5c2NhbGxzIHdpdGggSU9SSU5HX09QX0ZVVEVYX1dBSVQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fZnV0ZXhfd2FpdFwiLFxuICAgIFwiaW9fZnV0ZXhfd2FpdF9wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgcGF0aHMgaW4gaW9fZnV0ZXhfd2FpdCB3aXRoaW4gaW9fdXJpbmcvZnV0ZXguYywgZW5zdXJpbmcgcHJvcGVyIGZyZWVpbmcgb2YgY2FjaGVkIGFzeW5jIGRhdGEgdmlhIGlvX2NhY2hlX2ZyZWUgYW5kIGNsZWFyaW5nIHJlcXVlc3QgYXN5bmMgc3RhdGUgb24gZnV0ZXggc2V0dXAgZmFpbHVyZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvX3VyaW5nIHN5c2NhbGxzIHdpdGggSU9SSU5HX09QX0ZVVEVYX1dBSVQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjA5LjU0NDM3ODEzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNDA3MzM4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDowOS41NDQ4OTAxMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjM0MDIxNTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGlvX3VyaW5nJ3MgZnV0ZXggd2FpdCBpbXBsZW1lbnRhdGlvbiAoaW9fZnV0ZXhfd2FpdCksIHdoZXJlIGEgZmFpbHVyZSBpbiBmdXRleF93YWl0X3NldHVwIGluY29ycmVjdGx5IGludm9rZWQgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZSgpICh3aGljaCBjYWxscyBrZnJlZSkgaW5zdGVhZCBvZiByZWxlYXNpbmcgdGhlIGNhY2hlLWFsbG9jYXRlZCBpZmQgb2JqZWN0IHZpYSBpb19jYWNoZV9mcmVlKCkuIFxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzMzNDk1NDU3ZWIyNDdmZGFjNjNiYTMzYmU3NWMzNWM3YjdhMWUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNDoyOTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXG5pbmRleCBlYWVlMTQyNDJhM2EzLi42Mzg5YmQyZjAzOTk0IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xuQEAgLTMyMSwyMCArMzIxLDIyIEBAIGludCBpb19mdXRleF93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXG4gXHRyZXQgPSBmdXRleF93YWl0X3NldHVwKGlvZi1cdTAwM2V1YWRkciwgaW9mLVx1MDAzZWZ1dGV4X3ZhbCwgaW9mLVx1MDAzZWZ1dGV4X2ZsYWdzLFxuIFx0XHRcdCAgICAgICBcdTAwMjZpZmQtXHUwMDNlcSwgTlVMTCwgTlVMTCk7XG4tXHRpZiAoIXJldCkge1xuLVx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZyZXEtXHUwMDNlaGFzaF9ub2RlLCBcdTAwMjZjdHgtXHUwMDNlZnV0ZXhfbGlzdCk7XG4tXHRcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9hc3luYztcbiBcbi1cdFx0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xuLVx0fVxuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cmVxLVx1MDAzZWhhc2hfbm9kZSwgXHUwMDI2Y3R4LVx1MDAzZWZ1dGV4X2xpc3QpO1xuK1x0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIFxuK1x0cmV0dXJuIElPVV9JU1NVRV9TS0lQX0NPTVBMRVRFO1xuK1xuK2ZyZWVfYXN5bmM6XG4rXHRpb19jYWNoZV9mcmVlKFx1MDAyNmN0eC1cdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcbitcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XG4gZG9uZV91bmxvY2s6XG4gXHRpb19yaW5nX3N1Ym1pdF91bmxvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gZG9uZTpcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuK1x0cmVxX3NldF9mYWlsKHJlcSk7XG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4tXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XG4gXHRyZXR1cm4gSU9VX0NPTVBMRVRFO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjA5LjU0NDg5MzA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxODIxODQxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGlvX3VyaW5nL2Z1dGV4LmNgJ3MgRGlmZioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgZGlmZiBvZiBgaW9fdXJpbmcvZnV0ZXguY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEknbSBub3QganVzdCBsb29raW5nIGZvciB0aGUgbGluZXMgdGhhdCB3ZXJlIGFsdGVyZWQ7IEknbSB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBXaGF0IHByb2JsZW0gaXMgdGhpcyBwYXRjaCBhaW1pbmcgdG8gc29sdmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyB0aGF0IHRoZSBkaWZmIG1pZ2h0IGludHJvZHVjZS5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbSBub3QganVzdCBnb2luZyB0byByZWx5IG9uIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCBsaW5lIDMyMSwgdXNpbmcgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgYW5kIGFuYWx5emUgdGhhdCBlbnRpcmUgc2VjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHksIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBjb2RlIGJsb2NrIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuIFRoaXMgZ3JhbnVsYXIgaW5zcGVjdGlvbiBpcyBlc3NlbnRpYWwgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJ1Z3MsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIEknbSB0aGlua2luZyBvZiBjaGVja2luZyBkYXRhIHN0cnVjdHVyZXMsIG11dGV4IGxvY2tzLCBhbmQgb3ZlcmFsbCBmdW5jdGlvbiBjYWxscywgd2hpY2ggY291bGQgYmUgdGhlIHNvdXJjZSBvZiBteSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjMwOjE2LjcyNzA4MTkxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9mdXRleC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHR9XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdGlvX3Jpbmdfc3VibWl0X3VubG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4gMjkzOlxcdFxcdHJldHVybiBJT1VfSVNTVUVfU0tJUF9DT01QTEVURTtcXG4gMjk0OlxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gMjk3OlxcdHtcXG4gMjk4OlxcdFxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG4gMjk5OlxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVxcdTAwM2VjdHg7XFxuIDMwMDpcXHRcXHRzdHJ1Y3QgaW9fZnV0ZXhfZGF0YSAqaWZkID0gTlVMTDtcXG4gMzAxOlxcdFxcdGludCByZXQ7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdGlmICghaW9mLVxcdTAwM2VmdXRleF9tYXNrKSB7XFxuIDMwNDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAzMDU6XFx0XFx0XFx0Z290byBkb25lO1xcbiAzMDY6XFx0XFx0fVxcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzMDk6XFx0XFx0aWZkID0gaW9fY2FjaGVfYWxsb2MoXFx1MDAyNmN0eC1cXHUwMDNlZnV0ZXhfY2FjaGUsIEdGUF9OT1dBSVQpO1xcbiAzMTA6XFx0XFx0aWYgKCFpZmQpIHtcXG4gMzExOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDMxMjpcXHRcXHRcXHRnb3RvIGRvbmVfdW5sb2NrO1xcbiAzMTM6XFx0XFx0fVxcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0FTWU5DX0RBVEE7XFxuIDMxNjpcXHRcXHRyZXEtXFx1MDAzZWFzeW5jX2RhdGEgPSBpZmQ7XFxuIDMxNzpcXHRcXHRpZmQtXFx1MDAzZXEgPSBmdXRleF9xX2luaXQ7XFxuIDMxODpcXHRcXHRpZmQtXFx1MDAzZXEuYml0c2V0ID0gaW9mLVxcdTAwM2VmdXRleF9tYXNrO1xcbiAzMTk6XFx0XFx0aWZkLVxcdTAwM2VxLndha2UgPSBpb19mdXRleF93YWtlX2ZuO1xcbiAzMjA6XFx0XFx0aWZkLVxcdTAwM2VyZXEgPSByZXE7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdHJldCA9IGZ1dGV4X3dhaXRfc2V0dXAoaW9mLVxcdTAwM2V1YWRkciwgaW9mLVxcdTAwM2VmdXRleF92YWwsIGlvZi1cXHUwMDNlZnV0ZXhfZmxhZ3MsXFxuIDMyMzpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlmZC1cXHUwMDNlcSwgTlVMTCwgTlVMTCk7XFxuIDMyNDpcXHRcXHRpZiAocmV0KVxcbiAzMjU6XFx0XFx0XFx0Z290byBmcmVlX2FzeW5jO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cmVxLVxcdTAwM2VoYXNoX25vZGUsIFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2xpc3QpO1xcbiAzMjg6XFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRyZXR1cm4gSU9VX0lTU1VFX1NLSVBfQ09NUExFVEU7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdGZyZWVfYXN5bmM6XFxuIDMzMzpcXHRcXHRpb19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2NhY2hlLCBpZmQpO1xcbiAzMzQ6XFx0XFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcXG4gMzM1OlxcdGRvbmVfdW5sb2NrOlxcbiAzMzY6XFx0XFx0aW9fcmluZ19zdWJtaXRfdW5sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzMzc6XFx0ZG9uZTpcXG4gMzM4OlxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbiAzMzk6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbiAzNDA6XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4gMzQxOlxcdH1cXG4gMzQyOlxcdFxcbiAzNDM6XFx0aW50IGlvX2Z1dGV4X3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdHN0cnVjdCBpb19mdXRleCAqaW9mID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX2Z1dGV4KTtcXG4gMzQ2OlxcdFxcdGludCByZXQ7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qXFxuIDM0OTpcXHRcXHQgKiBTdHJpY3QgZmxhZ3MgLSBlbnN1cmUgdGhhdCB3YWtpbmcgMCBmdXRleGVzIHlpZWxkcyBhIDAgcmVzdWx0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDoxNi43MjcyMTg5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTc3MTE5NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fZnV0ZXhfd2FpdCBQYXRjaDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgaW9fZnV0ZXhfd2FpdGAgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgcGF0Y2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGRpZmYuIExvb2tpbmcgYXQgdGhlIHByZS1wYXRjaCBjb2RlIGJsb2NrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpb19mdXRleF93YWl0YCwgSSBzZWUgdGhlIGNvcmUgbG9naWM6IGEgY2FsbCB0byBgZnV0ZXhfd2FpdF9zZXR1cGAsIGFuZCB0aGVuIGEgcmV0dXJuLiBUaGUgaW50ZXJlc3RpbmcgcGFydCwgdGhvdWdoLCBpcyB0aGUgY29uZGl0aW9uYWwgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGlvX3JlcV9hc3luY19kYXRhX2ZyZWUocmVxKWAuXG5cbk15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgIGNhbGwuIEkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4gSSBrbm93IGl0J3MgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGUgYXN5bmNocm9ub3VzIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHRoZSBjYWxsIGluIG11bHRpcGxlIHNjZW5hcmlvcywgc3BlY2lmaWNhbGx5IHdoZW4gYGlvX2Z1dGV4X3dhaXRgIGZhaWxzIGVhcmx5LCBsaWtlIHdoZW4gZWl0aGVyIGAhaW9mLVx1MDAzZWZ1dGV4X21hc2tgIG9yIGAhaWZkYCBldmFsdWF0ZSB0byB0cnVlLiBJbiB0aG9zZSBjYXNlcywgYHJldCA9IC1FSU5WQUxgIG9yIHNpbWlsYXIgaXMgc2V0LCBhbmQgdGhlIGNvZGUganVtcHMgdG8gYGRvbmVgLCBjYWxsaW5nIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSlgLlxuXG5XYWl0IGEgbWludXRlLi4uIEl0J3MgcG9zc2libGUgZm9yIGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlYCB0byBiZSBjYWxsZWQgKmV2ZW4qIGlmIGByZXEtXHUwMDNlYXN5bmNfZGF0YWAgaGFzbid0IGJlZW4gYWxsb2NhdGVkIG9yIGByZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQVNZTkNfREFUQWAgaGFzbid0IGJlZW4gc2V0LiBUaGF0J3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSEgSSByZW1lbWJlciB0aGlzIGNvZGUgdXNlcyBgaW9fY2FjaGVfZnJlZWAsIGFuZCB0aGF0J3MgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLiBUaGlzIGRlZmluaXRlbHkgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGV4YWN0bHkgaG93IGBpb19yZXFfYXN5bmNfZGF0YV9mcmVlYCBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCBoYXMgdGhlIHJpZ2h0IGNoZWNrcyB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYW5kIGlmIG5vdCwgdGhpcyBjb3VsZCBiZSBhIHNlcmlvdXMgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjUxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MzA6MjAuNzA0MzQyMzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU2MDAzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlcV9hc3luY19kYXRhX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9mdXRleC5jPTU0PXN0YXRpYyB2b2lkIGlvX2Z1dGV4X2NvbXBsZXRlKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy02MC1cXHRpb19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZWZ1dGV4X2NhY2hlLCByZXEtXFx1MDAzZWFzeW5jX2RhdGEpO1xcbmlvX3VyaW5nL2Z1dGV4LmM6NjE6XFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCAwKTtcXG5pb191cmluZy9mdXRleC5jLTYyLVxcdF9faW9fZnV0ZXhfY29tcGxldGUodHdfcmVxLCB0dyk7XFxuLS1cXG5pb191cmluZy9mdXRleC5jPTY1PXN0YXRpYyB2b2lkIGlvX2Z1dGV4dl9jb21wbGV0ZShzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmMtODAtXFxuaW9fdXJpbmcvZnV0ZXguYzo4MTpcXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XFxuaW9fdXJpbmcvZnV0ZXguYy04Mi1cXHRfX2lvX2Z1dGV4X2NvbXBsZXRlKHR3X3JlcSwgdHcpO1xcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYz0yNDM9aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTI2MC1cXHRcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuaW9fdXJpbmcvZnV0ZXguYzoyNjE6XFx0XFx0aW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMjYyLVxcdFxcdHJldHVybiBJT1VfQ09NUExFVEU7XFxuLS1cXG5pb191cmluZy9mdXRleC5jPTI5Nj1pbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0zMzMtXFx0aW9fY2FjaGVfZnJlZShcXHUwMDI2Y3R4LVxcdTAwM2VmdXRleF9jYWNoZSwgaWZkKTtcXG5pb191cmluZy9mdXRleC5jOjMzNDpcXHRpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihyZXEsIDApO1xcbmlvX3VyaW5nL2Z1dGV4LmMtMzM1LWRvbmVfdW5sb2NrOlxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zNjg9c3RhdGljIGlubGluZSBib29sIHJlcV9oYXNfYXN5bmNfZGF0YShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzcyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzczOnN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfYXN5bmNfZGF0YV9jbGVhcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9pb191cmluZy5oLTM3NC1cXHRcXHRcXHRcXHRcXHQgICBpb19yZXFfZmxhZ3NfdCBleHRyYV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzc5LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzgwOnN0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzgxLXtcXG5pb191cmluZy9pb191cmluZy5oLTM4Mi1cXHRrZnJlZShyZXEtXFx1MDAzZWFzeW5jX2RhdGEpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzgzOlxcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zODQtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9MTY3PXN0YXRpYyB2b2lkIGlvX25ldG1zZ19yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xODItXFx0aWYgKGlvX2FsbG9jX2NhY2hlX3B1dChcXHUwMDI2cmVxLVxcdTAwM2VjdHgtXFx1MDAzZW5ldG1zZ19jYWNoZSwgaGRyKSlcXG5pb191cmluZy9uZXQuYzoxODM6XFx0XFx0aW9fcmVxX2FzeW5jX2RhdGFfY2xlYXIocmVxLCBSRVFfRl9ORUVEX0NMRUFOVVApO1xcbmlvX3VyaW5nL25ldC5jLTE4NC19XFxuLS1cXG5pb191cmluZy9ydy5jPTEzMz1zdGF0aWMgYm9vbCBpb19yd19yZWN5Y2xlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9ydy5jLTE0NC1cXHRpZiAoaW9fYWxsb2NfY2FjaGVfcHV0KFxcdTAwMjZyZXEtXFx1MDAzZWN0eC1cXHUwMDNlcndfY2FjaGUsIHJ3KSkge1xcbmlvX3VyaW5nL3J3LmM6MTQ1OlxcdFxcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgMCk7XFxuaW9fdXJpbmcvcncuYy0xNDYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0yNj1zdGF0aWMgdm9pZCBpb19yZXFfdXJpbmdfY2xlYW51cChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzktXFx0XFx0aW91Y21kLVxcdTAwM2VzcWUgPSBOVUxMO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjQwOlxcdFxcdGlvX3JlcV9hc3luY19kYXRhX2NsZWFyKHJlcSwgUkVRX0ZfTkVFRF9DTEVBTlVQKTtcXG5pb191cmluZy91cmluZ19jbWQuYy00MS1cXHR9IGVsc2Uge1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmM9MzU9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2ZyZWUoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0zOS1cXHRwdXRfcGlkKGl3YS1cXHUwMDNld28ud29fcGlkKTtcXG5pb191cmluZy93YWl0aWQuYzo0MDpcXHRpb19yZXFfYXN5bmNfZGF0YV9mcmVlKHJlcSk7XFxuaW9fdXJpbmcvd2FpdGlkLmMtNDEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDoyMy4wNjAzNTUyNDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgyNDcyMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgaW9fdXJpbmcgZnV0ZXggYnVnIGZpeCoqXG5cbk9rYXksIGhlcmUncyBob3cgSSBzZWUgdGhpcyBwYXRjaC4gSXQgYWRkcmVzc2VzIGEgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIHRoZSBgaW9fZnV0ZXhfd2FpdGAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgaW5jb3JyZWN0bHkgZnJlZWluZyBhIHBpZWNlIG9mIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGUgYGlvX2NhY2hlYCB1c2luZyBga2ZyZWVgLCB3aGljaCBpcyBhIGNsYXNzaWMgaW52YWxpZCBmcmVlIGFuZCBhIHBvdGVudGlhbCBzb3VyY2Ugb2Ygc2xhYiBjb3JydXB0aW9uIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycy4gU3BlY2lmaWNhbGx5LCBgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZShyZXEpYCB3YXMgYmVpbmcgY2FsbGVkIG9uIGByZXEtXHUwMDNlYXN5bmNfZGF0YWAsIHdoaWNoIHNvbWV0aW1lcyBwb2ludGVkIHRvIGFuIGBpZmRgIHN0cnVjdHVyZSB0aGF0IHdhcyBhbGxvY2F0ZWQgdmlhIGBpb19jYWNoZV9hbGxvY2AgYW5kIHRodXMgc2hvdWxkIGhhdmUgYmVlbiBmcmVlZCB2aWEgYGlvX2NhY2hlX2ZyZWVgLlxuXG5UaGUgZml4IGludHJvZHVjZXMgYSBgZnJlZV9hc3luY2AgbGFiZWwgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGguIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYGZ1dGV4X3dhaXRfc2V0dXBgIGZhaWxzLCB3ZSBqdW1wIHRvIGBmcmVlX2FzeW5jYC4gSW4gdGhpcyBibG9jaywgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBjYWxscyBgaW9fY2FjaGVfZnJlZWAgdG8gcmVsZWFzZSB0aGUgYGlmZGAgc3RydWN0dXJlIGFuZCBhbHNvIGNhbGxzIGBpb19yZXFfYXN5bmNfZGF0YV9jbGVhcmAgdG8gY2xlYXIgdGhlIHJlcXVlc3QncyBhc3luYyBkYXRhLCB3aGljaCBsb29rcyBsaWtlIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYXJlYXMgZm9yIEtNU0FOIGNvbmNlcm5zLiBJJ3ZlIGNvbnNpZGVyZWQ6XG5cbjEuICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNlbnQgdG8gdXNlciBzcGFjZSoqOiBUaGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCdzIHNvbGVseSBjb25jZXJuZWQgd2l0aCBlcnJvciBjbGVhbnVwIHdpdGhpbiB0aGUga2VybmVsLCBzbyB0aGlzIGlzbid0IGEgY29uY2Vybi5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljKio6IFRoZXJlJ3Mgbm8gYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIHRoaXMgcGF0Y2guXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyoqOiBJIGRvbid0IHNlZSBhbnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMqKjogVGhlcmUncyBubyByaXNrIG9mIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzIGJlY2F1c2UgdGhlIHBhdGNoIGlzIGNvbmNlcm5lZCB3aXRoIGVycm9yIHBhdGhzLCBhbmQgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkLlxuXG5UaGlzIHBhdGNoIGlzIHB1cmVseSBhYm91dCBmaXhpbmcgYSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoYXQgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBhIGNhY2hlIGFyZSBmcmVlZCB1c2luZyB0aGUgY2FjaGUncyBkZWFsbG9jYXRpb24gZnVuY3Rpb24uIEFueSBtZW1vcnkgZXJyb3JzIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gLyBTTFVCIGRlYnVnZ2Vycywgc28gSSdtIGNvbmZpZGVudCBhYm91dCB0aGF0LiBJIHNlZSBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuXG5cblRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzM0LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDozMDozMS44ODUwNzg3NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiBpb191cmluZydzIGZ1dGV4IHdhaXQgaW1wbGVtZW50YXRpb24gKGlvX2Z1dGV4X3dhaXQpLCB3aGVyZSBhIGZhaWx1cmUgaW4gZnV0ZXhfd2FpdF9zZXR1cCBpbmNvcnJlY3RseSBpbnZva2VkIGlvX3JlcV9hc3luY19kYXRhX2ZyZWUoKSAod2hpY2ggY2FsbHMga2ZyZWUpIGluc3RlYWQgb2YgcmVsZWFzaW5nIHRoZSBjYWNoZS1hbGxvY2F0ZWQgaWZkIG9iamVjdCB2aWEgaW9fY2FjaGVfZnJlZSgpLiBcXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBlcnJvciBjbGVhbnVwIGFuZCBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhdGh3YXlzIChwcmV2ZW50aW5nIGludmFsaWQgZnJlZXMgb3Igc2xhYiBjb3JydXB0aW9uKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHkgb3BlcmF0aW9ucyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIGludmFsaWQgZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgYnVnIGluIGlvX3VyaW5nJ3MgZnV0ZXggd2FpdCBpbXBsZW1lbnRhdGlvbiAoaW9fZnV0ZXhfd2FpdCksIHdoZXJlIGEgZmFpbHVyZSBpbiBmdXRleF93YWl0X3NldHVwIGluY29ycmVjdGx5IGludm9rZWQgaW9fcmVxX2FzeW5jX2RhdGFfZnJlZSgpICh3aGljaCBjYWxscyBrZnJlZSkgaW5zdGVhZCBvZiByZWxlYXNpbmcgdGhlIGNhY2hlLWFsbG9jYXRlZCBpZmQgb2JqZWN0IHZpYSBpb19jYWNoZV9mcmVlKCkuIFxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIGVycm9yIGNsZWFudXAgYW5kIG1lbW9yeSBkZWFsbG9jYXRpb24gcGF0aHdheXMgKHByZXZlbnRpbmcgaW52YWxpZCBmcmVlcyBvciBzbGFiIGNvcnJ1cHRpb24pLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weSBvcGVyYXRpb25zIHRvIHVzZXJzcGFjZS4gTWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgaW52YWxpZCBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4hxsg[1] Phase: Succeeded StartedAt: 2026-09-03 14:30:43 +0000 UTC FinishedAt: 2026-09-03 14:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 14:30:43 +0000 UTC FinishedAt: 2026-09-03 14:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2] Phase: Succeeded StartedAt: 2026-09-03 14:30:43 +0000 UTC FinishedAt: 2026-09-03 18:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 14:30:43 +0000 UTC FinishedAt: 2026-09-03 18:13:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 14:30:43 +0000 UTC FinishedAt: 2026-09-03 14:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 14:30:43 +0000 UTC FinishedAt: 2026-09-03 14:30:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4hxsg/series-workflow4hxsg-convert-artifact-2784154060/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 14:30:53 +0000 UTC FinishedAt: 2026-09-03 14:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 14:30:53 +0000 UTC FinishedAt: 2026-09-03 14:48: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:*e4fee6d3-a37f-41fd-a3e1-80aa1f3120a2,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-workflow4hxsg/series-workflow4hxsg-convert-artifact-2784154060/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": "c16222b9-999d-46f0-b6a3-d677013ff264", "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-workflow4hxsg/series-workflow4hxsg-build-action-2613104634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:30:53 +0000 UTC FinishedAt: 2026-09-03 14:48:49 +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:*e4fee6d3-a37f-41fd-a3e1-80aa1f3120a2,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-workflow4hxsg/series-workflow4hxsg-convert-artifact-2784154060/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": "c16222b9-999d-46f0-b6a3-d677013ff264", "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-workflow4hxsg/series-workflow4hxsg-build-action-2613104634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 14:48:59 +0000 UTC FinishedAt: 2026-09-03 14:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 14:48:59 +0000 UTC FinishedAt: 2026-09-03 14:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 14:48:59 +0000 UTC FinishedAt: 2026-09-03 14:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 14:48:59 +0000 UTC FinishedAt: 2026-09-03 14:49:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4hxsg/series-workflow4hxsg-convert-artifact-3972614155/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 14:49:09 +0000 UTC FinishedAt: 2026-09-03 14:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 14:49:09 +0000 UTC FinishedAt: 2026-09-03 14:51:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c16222b9-999d-46f0-b6a3-d677013ff264,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-workflow4hxsg/series-workflow4hxsg-build-action-2613104634/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-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 14:51:13 +0000 UTC FinishedAt: 2026-09-03 14:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:51:13 +0000 UTC FinishedAt: 2026-09-03 14:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 14:51:13 +0000 UTC FinishedAt: 2026-09-03 15:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 14:51:13 +0000 UTC FinishedAt: 2026-09-03 15:08:50 +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:*e4fee6d3-a37f-41fd-a3e1-80aa1f3120a2,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-workflow4hxsg/series-workflow4hxsg-convert-artifact-3972614155/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": "304fcb90-ddb5-4109-9e16-a05f600a528e", "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-workflow4hxsg/series-workflow4hxsg-build-action-2346968751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:51:13 +0000 UTC FinishedAt: 2026-09-03 15:08:40 +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:*e4fee6d3-a37f-41fd-a3e1-80aa1f3120a2,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-workflow4hxsg/series-workflow4hxsg-convert-artifact-3972614155/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": "304fcb90-ddb5-4109-9e16-a05f600a528e", "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-workflow4hxsg/series-workflow4hxsg-build-action-2346968751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 15:08:50 +0000 UTC FinishedAt: 2026-09-03 15:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 15:08:50 +0000 UTC FinishedAt: 2026-09-03 15:08:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 15:08:50 +0000 UTC FinishedAt: 2026-09-03 15:10:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 15:08:50 +0000 UTC FinishedAt: 2026-09-03 15:10:47 +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:*304fcb90-ddb5-4109-9e16-a05f600a528e,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-workflow4hxsg/series-workflow4hxsg-build-action-2346968751/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-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 18:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 18:13:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"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:*c16222b9-999d-46f0-b6a3-d677013ff264,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*304fcb90-ddb5-4109-9e16-a05f600a528e,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-workflow4hxsg/series-workflow4hxsg-build-action-2613104634/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-workflow4hxsg/series-workflow4hxsg-build-action-2346968751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 15:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 15:11:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"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-workflow4hxsg/series-workflow4hxsg-convert-artifact-3749021860/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 15:10:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 15:10:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 15:10:57 +0000 UTC FinishedAt: 2026-09-03 15:10:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 15:11:07 +0000 UTC FinishedAt: 2026-09-03 18:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hxsg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_futex_wait","io_futex_wait_prep"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","FUTEX"],"series_id":"e1db7980-1f8c-4d3d-8933-6ac66e97a625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 15:11:07 +0000 UTC FinishedAt: 2026-09-03 18:13:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c16222b9-999d-46f0-b6a3-d677013ff264,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*304fcb90-ddb5-4109-9e16-a05f600a528e,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-workflow4hxsg/series-workflow4hxsg-build-action-2613104634/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-workflow4hxsg/series-workflow4hxsg-build-action-2346968751/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-workflow4hxsg/series-workflow4hxsg-convert-artifact-3749021860/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,}