Name: series-workflowjmc4j Phase: Succeeded StartedAt: 2026-09-11 16:21:21 +0000 UTC FinishedAt: 2026-09-11 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[0] Phase: Succeeded StartedAt: 2026-09-11 16:21:21 +0000 UTC FinishedAt: 2026-09-11 16:28:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 16:21:21 +0000 UTC FinishedAt: 2026-09-11 16:28:12 +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": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "PROC_FS" ], "series_id": "e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "__io_uring_show_fdinfo", "io_uring_show_fdinfo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "50d05c7c76c96b90462f24debacca971d2e86713", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXHUwMDNlY3Flc1tdYC5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIENRRSBmb3JtYXR0aW5nIGxvZ2ljIGluIF9faW9fdXJpbmdfc2hvd19mZGluZm8oKSB3aXRoaW4gaW9fdXJpbmcvZmRpbmZvLmMsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSByZWFkaW5nIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjaW9fdXJpbmdfZmRcdTAwM2UuIFRoZSBjaGVjayBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spYCBmYWlscyB0byBtYXNrIGNxX2hlYWQgYWdhaW5zdCBjcV9tYXNrLCBtZWFuaW5nIHdoZW4gY3FfaGVhZCBhZHZhbmNlcyBwYXN0IGNxX21hc2ssIHRoZSBib3VuZGFyeSBjaGVjayBiZWNvbWVzIGZhbHNlIGFuZCBjYW4gYWxsb3cgb3V0LW9mLWJvdW5kcyByZWFkcyBpbnRvIGNxZS1cdTAwM2ViaWdfY3FlIG9uIHdyYXBwZWQgcmluZ3MuIEZ1enppbmcgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIHBhdGggYW5kIHZlcmlmeSBtZW1vcnkgc2FmZXR5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTIxMzExMDBjZTE2N2M0OGQzYjE0OWExY2Q4MzhiMmIwM2I0MGExZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE2OjIyOjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2ZkaW5mby5jIGIvaW9fdXJpbmcvZmRpbmZvLmNcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mZGluZm8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZmRpbmZvLmNcbkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbiYjNDM7XHRcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbiBcbiBcdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG4tXHRcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbiYjNDM7XHRcdGlmICgoY3FlLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleFwmIzM0OyxcbiBcdFx0XHQgICBjcV9oZWFkIFx1MDAyNiBjcV9tYXNrLCBjcWUtXHUwMDNldXNlcl9kYXRhLCBjcWUtXHUwMDNlcmVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2Npb191cmluZ19mZFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjEzMTEwMGNlMTY3YzQ4ZDNiMTQ5YTFjZDgzOGIyYjAzYjQwYTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTY6MjI6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jCmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2ZkaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2ZkaW5mby5jCkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNxX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpb191cmluZ19jcWUgKmNxZTsKIAkJYm9vbCBjcWUzMiA9IGZhbHNlOwomIzQzOwkJYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spOwogCiAJCWNxZSA9ICZhbXA7ci0mZ3Q7Y3Flc1soY3FfaGVhZCAmYW1wOyBjcV9tYXNrKV07Ci0JCWlmIChjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMiB8fCBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMikKJiM0MzsJCWlmICgoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpCiAJCQljcWUzMiA9IHRydWU7CiAJCXNlcV9wcmludGYobSwgJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4JiMzNDssCiAJCQkgICBjcV9oZWFkICZhbXA7IGNxX21hc2ssIGNxZS0mZ3Q7dXNlcl9kYXRhLCBjcWUtJmd0O3JlcywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSU9fVVJJTkcgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBoYXMgdG91Y2hlZCBgaW9fdXJpbmcvZmRpbmZvLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdDsgYW55dGhpbmcgdGhhdCBkZWFscyB3aXRoIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGBpb191cmluZ2AgY29udGV4dCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGFzc29jaWF0ZWQgZ2l0IGNvbW1pdCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHNvbWUgaW1tZWRpYXRlIGNvbnRleHQuIExldCYjMzk7cyB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiBhIHNuaXBwZXQgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYCBhcm91bmQgbGluZSAxNTUg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhbmQgc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbXBhY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0XHR1NjQgKnNxZWIgPSAodm9pZCAqKSAoc3FlICYjNDM7IDEpO1xuIDE0MTpcdFx0XHRcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XG4gMTQyOlx0XHRcdFx0aW50IGo7XG4gMTQzOlx0XG4gMTQ0Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2Mgc2l6ZTsgaiYjNDM7JiM0MzspIHtcbiAxNDU6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LCBlJWQ6MHglbGx4XCYjMzQ7LCBqLFxuIDE0NjpcdFx0XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcbiAxNDc6XHRcdFx0XHRcdHNxZWImIzQzOyYjNDM7O1xuIDE0ODpcdFx0XHRcdH1cbiAxNDk6XHRcdFx0fVxuIDE1MDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1xcblwmIzM0Oyk7XG4gMTUxOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtDUUVzOlxcdCV1XFxuXCYjMzQ7LCBjcV90YWlsIC0gY3FfaGVhZCk7XG4gMTU0Olx0XHRjcV9lbnRyaWVzID0gbWluKGNxX3RhaWwgLSBjcV9oZWFkLCBjdHgtXHUwMDNlY3FfZW50cmllcyk7XG4gMTU1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDE1NjpcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gMTU3Olx0XHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbiAxNTg6XHRcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIDE1OTpcdFxuIDE2MDpcdFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbiAxNjE6XHRcdFx0aWYgKChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXHUwMDI2XHUwMDI2XG4gMTYyOlx0XHRcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXG4gMTYzOlx0XHRcdFx0Y3FlMzIgPSB0cnVlO1xuIDE2NDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU1dTogdXNlcl9kYXRhOiVsbHUsIHJlczolZCwgZmxhZ3M6JXhcJiMzNDssXG4gMTY1Olx0XHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiAxNjY6XHRcdFx0XHQgICBjcWUtXHUwMDNlZmxhZ3MpO1xuIDE2NzpcdFx0XHRpZiAoY3FlMzIpXG4gMTY4Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdVwmIzM0OyxcbiAxNjk6XHRcdFx0XHRcdFx0Y3FlLVx1MDAzZWJpZ19jcWVbMF0sIGNxZS1cdTAwM2ViaWdfY3FlWzFdKTtcbiAxNzA6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtcXG5cJiMzNDspO1xuIDE3MTpcdFx0XHRjcV9oZWFkJiM0MzsmIzQzOztcbiAxNzI6XHRcdFx0aWYgKGNxZTMyKSB7XG4gMTczOlx0XHRcdFx0Y3FfaGVhZCYjNDM7JiM0Mzs7XG4gMTc0Olx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4gMTc1Olx0XHRcdH1cbiAxNzY6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FQT0xMKSB7XG4gMTgwOlx0XHRcdHN0cnVjdCBpb19zcV9kYXRhICpzcSA9IGN0eC1cdTAwM2VzcV9kYXRhO1xuIDE4MTpcdFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiAxODI6XHRcbiAxODM6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDE4NDpcdFx0XHR0c2sgPSByY3VfZGVyZWZlcmVuY2Uoc3EtXHUwMDNldGhyZWFkKTtcbiAxODU6XHRcdFx0LypcbiAxODY6XHRcdFx0ICogc3EtXHUwMDNldGhyZWFkIG1pZ2h0IGJlIE5VTEwgaWYgd2UgcmFjZWQgd2l0aCB0aGUgc3Fwb2xsXG4gMTg3Olx0XHRcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cbiAxODg6XHRcdFx0ICovXG4gMTg5Olx0XHRcdGlmICh0c2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvZGUmIzM5O3MgRmxvdyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgY29uY2x1c2lvbiwgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byB6b29tIGluIG9uIGxpbmUgMTQwIGFuZCB1bmRlcnN0YW5kIGl0cyBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbGVhZGluZyB1cCB0byB0aGF0IHBvaW50LiBXaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBjb250ZXh0PyBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgc3RydWN0dXJlIGFuZCBwdXJwb3NlIGlzIGNyaXRpY2FsLiBJcyB0aGlzIHBhcnQgb2YgYSBjb3JlIGFsZ29yaXRobSwgYSB1dGlsaXR5IGZ1bmN0aW9uLCBvciBlcnJvciBoYW5kbGluZz8gS25vd2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgcmVzcG9uc2liaWxpdHkgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgZnJhbWV3b3JrIHdpdGhpbiB3aGljaCB0byBpbnRlcnByZXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBzcGVjaWZpYyBsaW5lLiBUaGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvZmRpbmZvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7TkFQSTpcXHR1bmtub3duIG1vZGUgKCV1KVxcblwmIzM0OywgbW9kZSk7XG4gIDUxOlx0XHR9XG4gIDUyOlx0fVxuICA1MzpcdCNlbHNlXG4gIDU0Olx0c3RhdGljIGlubGluZSB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gIDU1Olx0XHRcdFx0XHQgICAgc3RydWN0IHNlcV9maWxlICptKVxuICA1NjpcdHtcbiAgNTc6XHR9XG4gIDU4Olx0I2VuZGlmXG4gIDU5Olx0XG4gIDYwOlx0c3RhdGljIHZvaWQgX19pb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHNlcV9maWxlICptKVxuICA2MTpcdHtcbiAgNjI6XHRcdHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKm9jcWU7XG4gIDYzOlx0XHRzdHJ1Y3QgaW9fcmluZ3MgKnIgPSBjdHgtXHUwMDNlcmluZ3M7XG4gIDY0Olx0XHR1bnNpZ25lZCBpbnQgc3FfbWFzayA9IGN0eC1cdTAwM2VzcV9lbnRyaWVzIC0gMSwgY3FfbWFzayA9IGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gMTtcbiAgNjU6XHRcdHVuc2lnbmVkIGludCBzcV9oZWFkID0gUkVBRF9PTkNFKHItXHUwMDNlc3EuaGVhZCk7XG4gIDY2Olx0XHR1bnNpZ25lZCBpbnQgc3FfdGFpbCA9IFJFQURfT05DRShyLVx1MDAzZXNxLnRhaWwpO1xuICA2NzpcdFx0dW5zaWduZWQgaW50IGNxX2hlYWQgPSBSRUFEX09OQ0Uoci1cdTAwM2VjcS5oZWFkKTtcbiAgNjg6XHRcdHVuc2lnbmVkIGludCBjcV90YWlsID0gUkVBRF9PTkNFKHItXHUwMDNlY3EudGFpbCk7XG4gIDY5Olx0XHR1bnNpZ25lZCBpbnQgc3Ffc2hpZnQgPSAwO1xuICA3MDpcdFx0dW5zaWduZWQgaW50IGNxX2VudHJpZXMsIHNxX2VudHJpZXM7XG4gIDcxOlx0XHRpbnQgc3FfcGlkID0gLTEsIHNxX2NwdSA9IC0xO1xuICA3MjpcdFx0dTY0IHNxX3RvdGFsX3RpbWUgPSAwLCBzcV93b3JrX3RpbWUgPSAwO1xuICA3MzpcdFx0dW5zaWduZWQgaW50IGk7XG4gIDc0Olx0XG4gIDc1Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFMTI4KVxuICA3NjpcdFx0XHRzcV9zaGlmdCA9IDE7XG4gIDc3Olx0XG4gIDc4Olx0XHQvKlxuICA3OTpcdFx0ICogd2UgbWF5IGdldCBpbXByZWNpc2Ugc3FlIGFuZCBjcWUgaW5mbyBpZiB1cmluZyBpcyBhY3RpdmVseSBydW5uaW5nXG4gIDgwOlx0XHQgKiBzaW5jZSB3ZSBnZXQgY2FjaGVkX3NxX2hlYWQgYW5kIGNhY2hlZF9jcV90YWlsIHdpdGhvdXQgdXJpbmdfbG9ja1xuICA4MTpcdFx0ICogYW5kIHNxX3RhaWwgYW5kIGNxX2hlYWQgYXJlIGNoYW5nZWQgYnkgdXNlcnNwYWNlLiBCdXQgaXQmIzM5O3Mgb2sgc2luY2VcbiAgODI6XHRcdCAqIHdlIHVzdWFsbHkgdXNlIHRoZXNlIGluZm8gd2hlbiBpdCBpcyBzdHVjay5cbiAgODM6XHRcdCAqL1xuICA4NDpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtTcU1hc2s6XFx0MHgleFxcblwmIzM0Oywgc3FfbWFzayk7XG4gIDg1Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1NxSGVhZDpcXHQldVxcblwmIzM0Oywgc3FfaGVhZCk7XG4gIDg2Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1NxVGFpbDpcXHQldVxcblwmIzM0Oywgc3FfdGFpbCk7XG4gIDg3Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NhY2hlZFNxSGVhZDpcXHQldVxcblwmIzM0OywgZGF0YV9yYWNlKGN0eC1cdTAwM2VjYWNoZWRfc3FfaGVhZCkpO1xuICA4ODpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtDcU1hc2s6XFx0MHgleFxcblwmIzM0OywgY3FfbWFzayk7XG4gIDg5Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NxSGVhZDpcXHQldVxcblwmIzM0OywgY3FfaGVhZCk7XG4gIDkwOlx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NxVGFpbDpcXHQldVxcblwmIzM0OywgY3FfdGFpbCk7XG4gIDkxOlx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NhY2hlZENxVGFpbDpcXHQldVxcblwmIzM0OywgZGF0YV9yYWNlKGN0eC1cdTAwM2VjYWNoZWRfY3FfdGFpbCkpO1xuICA5MjpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtTUUVzOlxcdCV1XFxuXCYjMzQ7LCBzcV90YWlsIC0gc3FfaGVhZCk7XG4gIDkzOlx0XHRzcV9lbnRyaWVzID0gbWluKHNxX3RhaWwgLSBzcV9oZWFkLCBjdHgtXHUwMDNlc3FfZW50cmllcyk7XG4gIDk0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuICA5NTpcdFx0XHR1bnNpZ25lZCBpbnQgZW50cnkgPSBpICYjNDM7IHNxX2hlYWQ7XG4gIDk2Olx0XHRcdHN0cnVjdCBpb191cmluZ19zcWUgKnNxZTtcbiAgOTc6XHRcdFx0dW5zaWduZWQgaW50IHNxX2lkeDtcbiAgOTg6XHRcdFx0Ym9vbCBzcWUxMjggPSBmYWxzZTtcbiAgOTk6XHRcdFx0dTggb3Bjb2RlO1xuIDEwMDpcdFxuIDEwMTpcdFx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWSlcbiAxMDI6XHRcdFx0XHRzcV9pZHggPSBlbnRyeSBcdTAwMjYgc3FfbWFzaztcbiAxMDM6XHRcdFx0ZWxzZVxuIDEwNDpcdFx0XHRcdHNxX2lkeCA9IFJFQURfT05DRShjdHgtXHUwMDNlc3FfYXJyYXlbZW50cnkgXHUwMDI2IHNxX21hc2tdKTtcbiAxMDU6XHRcdFx0aWYgKHNxX2lkeCBcdTAwM2Ugc3FfbWFzaylcbiAxMDY6XHRcdFx0XHRjb250aW51ZTtcbiAxMDc6XHRcbiAxMDg6XHRcdFx0c3FlID0gXHUwMDI2Y3R4LVx1MDAzZXNxX3NxZXNbc3FfaWR4IFx1MDAzY1x1MDAzYyBzcV9zaGlmdF07XG4gMTA5Olx0XHRcdG9wY29kZSA9IFJFQURfT05DRShzcWUtXHUwMDNlb3Bjb2RlKTtcbiAxMTA6XHRcdFx0aWYgKG9wY29kZSBcdTAwM2U9IElPUklOR19PUF9MQVNUKVxuIDExMTpcdFx0XHRcdGNvbnRpbnVlO1xuIDExMjpcdFx0XHRvcGNvZGUgPSBhcnJheV9pbmRleF9ub3NwZWMob3Bjb2RlLCBJT1JJTkdfT1BfTEFTVCk7XG4gMTEzOlx0XHRcdGlmIChzcV9zaGlmdCkge1xuIDExNDpcdFx0XHRcdHNxZTEyOCA9IHRydWU7XG4gMTE1Olx0XHRcdH0gZWxzZSBpZiAoaW9faXNzdWVfZGVmc1tvcGNvZGVdLmlzXzEyOCkge1xuIDExNjpcdFx0XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRCkpIHtcbiAxMTc6XHRcdFx0XHRcdHNlcV9wcmludGYobSxcbiAxMTg6XHRcdFx0XHRcdFx0XCYjMzQ7JTV1OiBpbnZhbGlkIHNxZSwgMTI4QiBlbnRyeSBvbiBub24tbWl4ZWQgc3FcXG5cJiMzNDssXG4gMTE5Olx0XHRcdFx0XHRcdHNxX2lkeCk7XG4gMTIwOlx0XHRcdFx0XHRicmVhaztcbiAxMjE6XHRcdFx0XHR9XG4gMTIyOlx0XHRcdFx0aWYgKHNxX2lkeCA9PSBzcV9tYXNrKSB7XG4gMTIzOlx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sXG4gMTI0Olx0XHRcdFx0XHRcdFwmIzM0OyU1dTogY29ycnVwdGVkIHNxZSwgd3JhcHBpbmcgMTI4QiBlbnRyeVxcblwmIzM0OyxcbiAxMjU6XHRcdFx0XHRcdFx0c3FfaWR4KTtcbiAxMjY6XHRcdFx0XHRcdGJyZWFrO1xuIDEyNzpcdFx0XHRcdH1cbiAxMjg6XHRcdFx0XHRzcV9oZWFkJiM0MzsmIzQzOztcbiAxMjk6XHRcdFx0XHRpJiM0MzsmIzQzOztcbiAxMzA6XHRcdFx0XHRzcWUxMjggPSB0cnVlO1xuIDEzMTpcdFx0XHR9XG4gMTMyOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTV1OiBvcGNvZGU6JXMsIGZkOiVkLCBmbGFnczoleCwgb2ZmOiVsbHUsIFwmIzM0O1xuIDEzMzpcdFx0XHRcdCAgICAgIFwmIzM0O2FkZHI6MHglbGx4LCByd19mbGFnczoweCV4LCBidWZfaW5kZXg6JWQgXCYjMzQ7XG4gMTM0Olx0XHRcdFx0ICAgICAgXCYjMzQ7dXNlcl9kYXRhOiVsbHVcJiMzNDssXG4gMTM1Olx0XHRcdFx0ICAgc3FfaWR4LCBpb191cmluZ19nZXRfb3Bjb2RlKG9wY29kZSksIHNxZS1cdTAwM2VmZCxcbiAxMzY6XHRcdFx0XHQgICBzcWUtXHUwMDNlZmxhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNxZS1cdTAwM2VvZmYsXG4gMTM3Olx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3FlLVx1MDAzZWFkZHIsIHNxZS1cdTAwM2Vyd19mbGFncyxcbiAxMzg6XHRcdFx0XHQgICBzcWUtXHUwMDNlYnVmX2luZGV4LCBzcWUtXHUwMDNldXNlcl9kYXRhKTtcbiAxMzk6XHRcdFx0aWYgKHNxZTEyOCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBDYWxsZXJzKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgYmVpbmcgdXNlZC4gRmlyc3Qgc3RlcCwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyByZWx5IG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgZ2l2ZXMgbWUgYSBtYXAgb2YgaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgYWN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAxODAgdG8gMjQwIG9mIGBpb191cmluZy9mZGluZm8uY2AuIFRoYXQgcmFuZ2UgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIG9yIHJlbGV2YW50IGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IHJlYWQgdGhyb3VnaCB0aGlzIHNlY3Rpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdmFyaWFibGUgYXNzaWdubWVudHMsIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHdpbGwgaGVscCBtZSBkZWNpcGhlciB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSB3aXRoaW4gaXRzIGxvY2FsIGVjb3N5c3RlbS4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgJiMzOTttZWF0JiMzOTsgb2YgdGhlIG1hdHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdFx0c3RydWN0IGlvX3NxX2RhdGEgKnNxID0gY3R4LVx1MDAzZXNxX2RhdGE7XG4gMTgxOlx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xuIDE4MjpcdFxuIDE4MzpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTg0Olx0XHRcdHRzayA9IHJjdV9kZXJlZmVyZW5jZShzcS1cdTAwM2V0aHJlYWQpO1xuIDE4NTpcdFx0XHQvKlxuIDE4NjpcdFx0XHQgKiBzcS1cdTAwM2V0aHJlYWQgbWlnaHQgYmUgTlVMTCBpZiB3ZSByYWNlZCB3aXRoIHRoZSBzcXBvbGxcbiAxODc6XHRcdFx0ICogdGhyZWFkIHRlcm1pbmF0aW9uLlxuIDE4ODpcdFx0XHQgKi9cbiAxODk6XHRcdFx0aWYgKHRzaykge1xuIDE5MDpcdFx0XHRcdHU2NCB1c2VjO1xuIDE5MTpcdFxuIDE5MjpcdFx0XHRcdGdldF90YXNrX3N0cnVjdCh0c2spO1xuIDE5MzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDE5NDpcdFx0XHRcdHVzZWMgPSBpb19zcV9jcHVfdXNlYyh0c2spO1xuIDE5NTpcdFx0XHRcdHNxX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzayxcbiAxOTY6XHRcdFx0XHRcdFx0XHRwcm9jX3BpZF9ucyhmaWxlX2lub2RlKG0tXHUwMDNlZmlsZSktXHUwMDNlaV9zYikpO1xuIDE5NzpcdFx0XHRcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xuIDE5ODpcdFx0XHRcdHNxX2NwdSA9IHNxLVx1MDAzZXNxX2NwdTtcbiAxOTk6XHRcdFx0XHRzcV90b3RhbF90aW1lID0gdXNlYztcbiAyMDA6XHRcdFx0XHRzcV93b3JrX3RpbWUgPSBzcS1cdTAwM2V3b3JrX3RpbWU7XG4gMjAxOlx0XHRcdH0gZWxzZSB7XG4gMjAyOlx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMjAzOlx0XHRcdH1cbiAyMDQ6XHRcdH1cbiAyMDU6XHRcbiAyMDY6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7U3FUaHJlYWQ6XFx0JWRcXG5cJiMzNDssIHNxX3BpZCk7XG4gMjA3Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1NxVGhyZWFkQ3B1OlxcdCVkXFxuXCYjMzQ7LCBzcV9jcHUpO1xuIDIwODpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtTcVRvdGFsVGltZTpcXHQlbGx1XFxuXCYjMzQ7LCBzcV90b3RhbF90aW1lKTtcbiAyMDk6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7U3FXb3JrVGltZTpcXHQlbGx1XFxuXCYjMzQ7LCBzcV93b3JrX3RpbWUpO1xuIDIxMDpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtVc2VyRmlsZXM6XFx0JXVcXG5cJiMzNDssIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xuIDIxMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjsgaSYjNDM7JiM0MzspIHtcbiAyMTI6XHRcdFx0c3RydWN0IGZpbGUgKmYgPSBOVUxMO1xuIDIxMzpcdFxuIDIxNDpcdFx0XHRpZiAoY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ub2Rlc1tpXSlcbiAyMTU6XHRcdFx0XHRmID0gaW9fc2xvdF9maWxlKGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubm9kZXNbaV0pO1xuIDIxNjpcdFx0XHRpZiAoZikge1xuIDIxNzpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTV1OiBcJiMzNDssIGkpO1xuIDIxODpcdFx0XHRcdHNlcV9maWxlX3BhdGgobSwgZiwgXCYjMzQ7IFxcdFxcblxcXFxcJiMzNDspO1xuIDIxOTpcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0O1xcblwmIzM0Oyk7XG4gMjIwOlx0XHRcdH1cbiAyMjE6XHRcdH1cbiAyMjI6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7VXNlckJ1ZnM6XFx0JXVcXG5cJiMzNDssIGN0eC1cdTAwM2VidWZfdGFibGUubnIpO1xuIDIyMzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3R4LVx1MDAzZWJ1Zl90YWJsZS5ucjsgaSYjNDM7JiM0MzspIHtcbiAyMjQ6XHRcdFx0c3RydWN0IGlvX21hcHBlZF91YnVmICpidWYgPSBOVUxMO1xuIDIyNTpcdFxuIDIyNjpcdFx0XHRpZiAoY3R4LVx1MDAzZWJ1Zl90YWJsZS5ub2Rlc1tpXSlcbiAyMjc6XHRcdFx0XHRidWYgPSBjdHgtXHUwMDNlYnVmX3RhYmxlLm5vZGVzW2ldLVx1MDAzZWJ1ZjtcbiAyMjg6XHRcdFx0aWYgKGJ1ZilcbiAyMjk6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU1dTogMHglbGx4LyV6dVxcblwmIzM0OywgaSwgYnVmLVx1MDAzZXVidWYsIGJ1Zi1cdTAwM2VsZW4pO1xuIDIzMDpcdFx0XHRlbHNlXG4gMjMxOlx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNXU6IFx1MDAzY25vbmVcdTAwM2VcXG5cJiMzNDssIGkpO1xuIDIzMjpcdFx0fVxuIDIzMzpcdFxuIDIzNDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7UG9sbExpc3Q6XFxuXCYjMzQ7KTtcbiAyMzU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjICgxVSBcdTAwM2NcdTAwM2MgY3R4LVx1MDAzZWNhbmNlbF90YWJsZS5oYXNoX2JpdHMpOyBpJiM0MzsmIzQzOykge1xuIDIzNjpcdFx0XHRzdHJ1Y3QgaW9faGFzaF9idWNrZXQgKmhiID0gXHUwMDI2Y3R4LVx1MDAzZWNhbmNlbF90YWJsZS5oYnNbaV07XG4gMjM3Olx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxO1xuIDIzODpcdFxuIDIzOTpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsIFx1MDAyNmhiLVx1MDAzZWxpc3QsIGhhc2hfbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBpb191cmluZyBjb250ZXh0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBhc3NvY2lhdGluZyBmaWxlIGRlc2NyaXB0b3JzIHdpdGggdGhlIGNvbXBsZXRpb24gcXVldWVzIGxpa2VseSByZXNpZGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGFzc29jaWF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBlcnJvcnMgb3IgcmVzb3VyY2UgY2xlYW51cCByZWxhdGVkIHRvIGZpbGUgZGVzY3JpcHRvcnMuIEkgd2FudCB0byBzZWUgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGhlcmUgdG9vLiBUaGUgcGVyZm9ybWFuY2Ugd2lsbCBpbmZsdWVuY2UgbGF0ZW5jeSBpbiBwYXJ0aWN1bGFyLCBzbyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHdlbGwgdGhlIGtlcm5lbCBjYW4ga2VlcCB1cCB3aXRoIHRoZSBsb2FkLiBBbnkgb3B0aW1pemF0aW9ucyBmb3IgaGlnaC10aHJvdWdocHV0IG9yIGNvbmN1cnJlbnQgSS9PIHdpbGwgYmUgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvZmRpbmZvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICBvcD0lZCwgdGFza193b3Jrcz0lZFxcblwmIzM0OywgcmVxLVx1MDAzZW9wY29kZSxcbiAyNDE6XHRcdFx0XHRcdFx0dGFza193b3JrX3BlbmRpbmcocmVxLVx1MDAzZXRjdHgtXHUwMDNldGFzaykpO1xuIDI0MjpcdFx0fVxuIDI0MzpcdFxuIDI0NDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7Q3FPdmVyZmxvd0xpc3Q6XFxuXCYjMzQ7KTtcbiAyNDU6XHRcdHNwaW5fbG9jayhcdTAwMjZjdHgtXHUwMDNlY29tcGxldGlvbl9sb2NrKTtcbiAyNDY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob2NxZSwgXHUwMDI2Y3R4LVx1MDAzZWNxX292ZXJmbG93X2xpc3QsIGxpc3QpIHtcbiAyNDc6XHRcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlID0gXHUwMDI2b2NxZS1cdTAwM2VjcWU7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICB1c2VyX2RhdGE9JWxsdSwgcmVzPSVkLCBmbGFncz0leFxcblwmIzM0OyxcbiAyNTA6XHRcdFx0XHQgICBjcWUtXHUwMDNldXNlcl9kYXRhLCBjcWUtXHUwMDNlcmVzLCBjcWUtXHUwMDNlZmxhZ3MpO1xuIDI1MTpcdFxuIDI1MjpcdFx0fVxuIDI1MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG4gMjU0Olx0XHRuYXBpX3Nob3dfZmRpbmZvKGN0eCwgbSk7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdC8qXG4gMjU4Olx0ICogQ2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGFscmVhZHksIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvXG4gMjU5Olx0ICogYW55dGhpbmcgZWxzZSB0byBnZXQgYW4gZXh0cmEgcmVmZXJlbmNlLlxuIDI2MDpcdCAqL1xuIDI2MTpcdF9fY29sZCB2b2lkIGlvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gMjYyOlx0e1xuIDI2MzpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyNjQ6XHRcbiAyNjU6XHRcdC8qXG4gMjY2Olx0XHQgKiBBdm9pZCBBQkJBIGRlYWRsb2NrIGJldHdlZW4gdGhlIHNlcSBsb2NrIGFuZCB0aGUgaW9fdXJpbmcgbXV0ZXgsXG4gMjY3Olx0XHQgKiBzaW5jZSBmZGluZm8gY2FzZSBncmFicyBpdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIG5vcm1hbCB1c2VcbiAyNjg6XHRcdCAqIGNhc2VzLlxuIDI2OTpcdFx0ICovXG4gMjcwOlx0XHRpZiAobXV0ZXhfdHJ5bG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jaykpIHtcbiAyNzE6XHRcdFx0X19pb191cmluZ19zaG93X2ZkaW5mbyhjdHgsIG0pO1xuIDI3MjpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuIDI3MzpcdFx0fVxuIDI3NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGZkaW5mbyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21lb25lIHJlYWRzIHRoZSBgL3Byb2MvW3BpZF0vZmRpbmZvL1tmZF1gIGZpbGUgZm9yIGFuIGlvX3VyaW5nIGZpbGUgZGVzY3JpcHRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGZpbGUgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkLiBJIHNlZSB0aGlzIGJpdCBoZXJlOgoKYGBgYwpib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7CmBgYAoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHkuIFdlJiMzOTtyZSBjaGVja2luZyBpZiBgY3FfaGVhZGAgZXF1YWxzIGBjcV9tYXNrYC4gIGBjcV9oZWFkYCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQgcmVwcmVzZW50cyB0aGUgaGVhZCBwb2ludGVyLCBhbmQgaXQmIzM5O3MgYSBwb2ludGVyLCBzby4uLkRvZXMgaXQgbWVhbiBgY3FfaGVhZGAgZXF1YWxzIGBjcV9tYXNrYCwgb3Igc2hvdWxkIGl0IGJlIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKSA9PSBjcV9tYXNrYD8gU29tZXRoaW5nIGZlZWxzIG9mZi4gQWxzbywgYGNxX2hlYWRgIHdyYXBzIGFmdGVyIDJeMzIsIGJ1dCBgY3FfbWFza2AgaXMgYGN0eC0mZ3Q7Y3FfZW50cmllcyAtIDFgIQoKSXMgdGhpcyBhIGJ1ZyBmaXg/IE9yIGRvZXMgaXQgaW50cm9kdWNlIGEgYnVnIG9yIGZpeCBhbiBPT0IgYWNjZXNzPyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY3EgYXJyYXkuIEJ1dCB0aGUgbG9naWMgaXMgY29uZnVzaW5nLiBJdCYjMzk7cyBjaGVja2luZyBpZiB0aGUgaGVhZCBvZiB0aGUgQ1EgaXMgZXF1YWwgdG8gdGhlIG1hc2suIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBDUUUzMiBsb2dpYy4KCkFsc28sIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzJgPyBJZiB0aGF0IGZsYWcgaXMgc2V0LCBob3cgZG9lcyBDUUUzMiBpbmRleGluZyB3b3JrIHdpdGhpbiBpb191cmluZz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBDUUUzMiBpcyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFuZCBzZWFyY2ggZm9yIGBJT1JJTkdfU0VUVVBfQ1FFMzJgIGluIHRoZSBpb191cmluZyBzb3VyY2UgdG8gZmlndXJlIG91dCBob3cgdGhlIENRRTMyIGZsYWcgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPUklOR19TRVRVUF9DUUUzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jPTYwPXN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5pb191cmluZy9mZGluZm8uYy0xNjAtXHRcdGNxZSA9IFx1MDAyNnItXHUwMDNlY3Flc1soY3FfaGVhZCBcdTAwMjYgY3FfbWFzayldO1xuaW9fdXJpbmcvZmRpbmZvLmM6MTYxOlx0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL2ZkaW5mby5jLTE2Mi1cdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbi0tXG5pb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzMi1cdFx0aWYgKG9jcWUtXHUwMDNlY3FlLmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NTMzOlx0XHQgICAgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVx0XHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzNi1cdFx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1Mzc6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM4LVx0XHRcdGlzX2NxZTMyID0gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NTktXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTcxOD1ib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXG5pb191cmluZy9pb191cmluZy5jOjc0ODpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDktXHRcdG9mZiBcdTAwM2NcdTAwM2M9IDE7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjItXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDc4PXN0YXRpYyBpbnQgcmluZ3Nfc2l6ZSh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzcV9lbnRyaWVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cdG9mZiA9IHN0cnVjdF9zaXplKHJpbmdzLCBjcWVzLCBjcV9lbnRyaWVzKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEwNTpcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA2LVx0XHRvZmYgPSBzaXplX211bChvZmYsIDIpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM2Olx0aWYgKChmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNzpcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9pb191cmluZy5oPTMwPXN0cnVjdCBpb19jdHhfY29uZmlnIHtcbi0tXG5pb191cmluZy9pb191cmluZy5oLTY1LVx0XHRcdElPUklOR19TRVRVUF9TUUUxMjggfFxcXG5pb191cmluZy9pb191cmluZy5oOjY2Olx0XHRcdElPUklOR19TRVRVUF9DUUUzMiB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjctXHRcdFx0SU9SSU5HX1NFVFVQX1NJTkdMRV9JU1NVRVIgfFxcXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzEtXHRjdHgtXHUwMDNlY3FlX2NhY2hlZCYjNDM7JiM0Mzs7XG5pb191cmluZy9pb191cmluZy5oOjI3MjpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzMtXHRcdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI5Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaW9fZmlsbF9jcWVfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzEwLVx0bWVtY3B5KGNxZSwgXHUwMDI2cmVxLVx1MDAzZWNxZSwgc2l6ZW9mKCpjcWUpKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzExOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyIHx8IGlzX2NxZTMyKSB7XG5pb191cmluZy9pb191cmluZy5oLTMxMi1cdFx0bWVtY3B5KGNxZS1cdTAwM2ViaWdfY3FlLCBcdTAwMjZyZXEtXHUwMDNlYmlnX2NxZSwgc2l6ZW9mKCpjcWUpKTtcbi0tXG5pb191cmluZy9tc2dfcmluZy5jPTk2PXN0YXRpYyBpbnQgaW9fbXNnX3JpbmdfY3FlX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqdGFyZ2V0X2N0eCxcbi0tXG5pb191cmluZy9tc2dfcmluZy5jLTEwNS1cdGlmICgoKmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIpIFx1MDAyNlx1MDAyNlxuaW9fdXJpbmcvbXNnX3JpbmcuYzoxMDY6XHQgICAgISh0YXJnZXRfY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA3LVx0XHRcdFx0ICAgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuLS1cbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25vcC5jLTQ5LVxuaW9fdXJpbmcvbm9wLmM6NTA6XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy9ub3AuYy01MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk0LSNkZWZpbmUgQ09QWV9GTEFHU1x0KElPUklOR19TRVRVUF9OT19TUUFSUkFZIHwgSU9SSU5HX1NFVFVQX1NRRTEyOCB8IFxcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5NTpcdFx0XHQgSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX05PX01NQVAgfCBcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTYtXHRcdFx0IElPUklOR19TRVRVUF9DUUVfTUlYRUQgfCBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjQ5LVx0XHRkc3RfbWFzayA9IHAtXHUwMDNlY3FfZW50cmllcyAtIDE7XG5pb191cmluZy9yZWdpc3Rlci5jOjY1MDpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9yZWdpc3Rlci5jLTY1MS1cdFx0XHRpbmRleCBcdTAwM2NcdTAwM2M9IDE7XG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MjQzPWludCBpb191cmluZ19jbWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0yNTktXHRcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfU1FFMTI4O1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6MjYwOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjYxLVx0XHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX0NRRTMyO1xuLS1cbmlvX3VyaW5nL3pjcnguYz04MzE9c3RhdGljIGludCBpbXBvcnRfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy96Y3J4LmMtODQxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL3pjcnguYzo4NDI6XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvemNyeC5jLTg0My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTk2MT1pbnQgaW9fcmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy96Y3J4LmMtOTgxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL3pjcnguYzo5ODI6XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvemNyeC5jLTk4My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBpb191cmluZyBDUUUgSGFuZGxpbmcgaW4gZmRpbmZvLmMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBpb191cmluZy9mZGluZm8uY2AsIHNwZWNpZmljYWxseSBob3cgdGhlIENRRXMgKENvbXBsZXRpb24gUXVldWUgRW50cmllcykgYXJlIGhhbmRsZWQuIEkgc2VlIHRoaXMgY2hlY2s6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gVGhhdCBmbGFncyB0aGUgbGFzdCBzbG90IG9mIHRoZSBjaXJjdWxhciBhcnJheS4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgZnVuY3Rpb24uCgpJIHNlZSBpbiBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgdGhhdCB3aGVuIFNRRXMgKFN1Ym1pc3Npb24gUXVldWUgRW50cmllcykgYXJlIGJlaW5nIHBhcnNlZCwgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYElPUklOR19TRVRVUF9TUUVfTUlYRURgLiBJZiB0aGF0IGZsYWcgaXNuJiMzOTt0IHNldCwgYW5kIGEgMTI4QiBTUUUgaXMgZW5jb3VudGVyZWQsIGl0JiMzOTtzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIFRoZXJlJiMzOTtzIGFsc28gYSBjaGVjayB0byBlbnN1cmUgdGhhdCBhIDEyOEIgZW50cnkgZG9lc24mIzM5O3Qgd3JhcCBhcm91bmQgdGhlIGFycmF5LgoKTm93LCBsb29raW5nIGF0IHRoZSBDUUUgcHJvY2Vzc2luZywgSSBzZWUgdGhpcyBsb29wIHdoZXJlIGBjcWVgIGlzIHB1bGxlZCBmcm9tIHRoZSByaW5nOiBgY3FlID0gJmFtcDtyLSZndDtjcWVzWyhjcV9oZWFkICZhbXA7IGNxX21hc2spXTtgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgYGNxZTMyYCBmbGFnIGFuZCB0aGUgY29uZGl0aW9uYWwgcHJpbnRpbmcgb2YgYGNxZS0mZ3Q7YmlnX2NxZVswXWAgYW5kIGBjcWUtJmd0O2JpZ19jcWVbMV1gIHdoZW4gaXQmIzM5O3Mgc2V0LiBUaGlzIGluZGljYXRlcyBhIDMyLWJpdCBDUUUgKGxhcmdlciB0aGFuIG5vcm1hbCksIHV0aWxpemluZyB0aGUgYGJpZ19jcWVgIGZpZWxkcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIHVzZWQgdG8gc2tpcCB0aGUgYGJpZ19jcWVgIGZpZWxkcyBpZiBpdCYjMzk7cyB0aGUgbGFzdCBzbG90LgoKSG93ZXZlciwgdGhlIGxpbmU6IGBpZiAoY3FlMzIpIHNlcV9wcmludGYobSwgJiMzNDssIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdSYjMzQ7LCBjcWUtJmd0O2JpZ19jcWVbMF0sIGNxZS0mZ3Q7YmlnX2NxZVsxXSk7YCBjb25jZXJucyBtZSBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgdGhvc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBldmVuIGlmIHRoZSBDUUUgaXMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5LiBUaGlzIGlzIHJlYWxseSBpbnRlcmVzdGluZyBhbmQgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgYSByZWFkIG91dCBvZiBib3VuZHMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJpZ19jcWVgICphY3R1YWxseSBpcyouIEl0JiMzOTtzIGxpa2VseSBhIHVuaW9uIG9mIHNvbWUga2luZCwgYW5kIEkgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gTGV0JiMzOTtzIGdyZXAgZm9yIHRoYXQgdG8gY29uZmlybSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWVzLCBwb3RlbnRpYWxseS4gSXQgZmVlbHMgbGlrZSBhIHN1YnRsZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlnX2NxZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTUwMD1zdHJ1Y3QgaW9fdXJpbmdfY3FlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC01MDgtXHQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjUwOTpcdF9fdTY0IGJpZ19jcWVbXTtcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTUxMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEwMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqaW9fdXJpbmcgQ1FFIE91dC1vZi1Cb3VuZHMgQWNjZXNzIC0gV29ydGh5IG9mIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYGlvX3VyaW5nX2NxZWAgc3RydWN0dXJlIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBUaGUgZmxleGlibGUgYXJyYXkgbWVtYmVyLCBgYmlnX2NxZWAsIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gSWYgYGNxZTMyYCBpcyB0cnVlLCBpdCYjMzk7cyBhIDMyLWJ5dGUgQ1FFLCBhbmQgYWNjZXNzaW5nIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYCBlZmZlY3RpdmVseSAqb3ZlcmxheXMqIHRoZSBuZXh0IENRRSBzbG90LCBgY3FlICYjNDM7IDFgLCB3aXRoaW4gdGhlIGByLSZndDtjcWVzW11gIGFycmF5LiBOb3csIHRoZSBjb2RlJiMzOTtzIGxvZ2ljIGhhcyBhIGNvbmRpdGlvbjogSWYgYGNxX2hlYWQgJmFtcDsgY3FfbWFzayA9PSBjcV9tYXNrYCwgdGhlbiBgY3FlYCBwb2ludHMgdG8gdGhlIGxhc3QgZWxlbWVudC4gQ29uc2VxdWVudGx5LCBhY2Nlc3NpbmcgYGNxZS0mZ3Q7YmlnX2NxZVswXWAgd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCkhhbmcgb24uLi4gSSBzZWUgYSBwYXRjaCB0b3VjaGluZyB0aGlzIGNvZGUhIEl0IGludHJvZHVjZXMgYSBjaGVjazogYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKWAuIEhvbGQgb24uLi4gVGhlIG9yaWdpbmFsIGNvbXBhcmlzb24gd2FzIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKSA9PSBjcV9tYXNrYC4gVGhlIGNyaXRpY2FsIGRpZmZlcmVuY2UgaXMgdGhlIGNoYW5nZSBmcm9tIGVxdWFsaXR5IHRvIGAoY3FfaGVhZCA9PSBjcV9tYXNrKWAhICBgY3FfaGVhZGAgc3RhcnRzIGF0IHplcm8gYW5kIGluY3JlbWVudHMuIFRoaXMgYChjcV9oZWFkID09IGNxX21hc2spYCB3aWxsIGJlIGZhbHNlIGV2ZW4gaWYgdGhlIG9yaWdpbmFsIGNvbmRpdGlvbiBpcyB0cnVlLiBJcyB0aGlzIGEgYnVnPyBJdCBpcyBhIGNoYW5nZSB0byBjb3JlIGNvZGU6IGBpb191cmluZy9mZGluZm8uY2AuCgpOb3csIGFjY29yZGluZyB0byB0aGUgZnV6emluZyBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcuJiMzNDsgTGV0JiMzOTtzIGFwcGx5IHRoZSBjcml0ZXJpYS4KClRoZSB0cmlhZ2UgcGhpbG9zb3BoeSBjbGVhcmx5IHN0YXRlcyB0aGF0OgoKMS4gIFJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiBUaGUgY29kZSBuZWVkcyB0byBiZSBleGVjdXRhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCjIuICBJIHNob3VsZCBuZXZlciBibGluZGx5IHRydXN0ICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvcmUuCjMuICBOZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBNVVNUIGJlIGZ1enplZC4KCkFuZCBzcGVjaWZpY2FsbHk6IEkmIzM5O20gbG9va2luZyBmb3IgKkNvcmUgU3Vic3lzdGVtcyosICpSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHMqLCAqUnVudGltZSBBc3NlcnRpb25zKiwgb3IgKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMqLiBBbnl0aGluZyB0aGF0IHRvdWNoZXMgdGhlICpjb3JlKiAobW0sIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZykgaXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlLiBUaGlzIHRvdWNoZXMgc3lzY2FsbCBoYW5kbGluZyAtIGFuZCBhc3luYyBJL08uCgpPa2F5LCBgaW9fdXJpbmdgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbS4gYGlvX3VyaW5nL2ZkaW5mby5jYCBpcyByZWFjaGFibGUgdmlhIGAvcHJvYy9bcGlkXS9mZGluZm8vW2lvX3VyaW5nX2ZkXWAuIFN5emthbGxlciAqZXh0ZW5zaXZlbHkqIHRlc3RzIGlvX3VyaW5nLCBhbmQgdGhpcyBgL3Byb2Mvc2VsZi9mZGluZm9gIHRoaW5nIGlzIGEgc3RhbmRhcmQsIHJlYWNoYWJsZSBvcGVyYXRpb24uIEkga25vdyBzeXprYWxsZXIgY2FuIHJlYWQgdGhlc2UgZmRpbmZvIGZpbGVzIC0gaXQgZ2VuZXJhdGVzIGNhbGxzIGxpa2UgYHJlYWQob3BlbigmIzM0Oy9wcm9jL3NlbGYvZmRpbmZvLy4uLiYjMzQ7KSlgLiBgaW9fdXJpbmdgICppcyogcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiAgT3BlbmluZyBgL3Byb2Mvc2VsZi9mZGluZm8vJmx0O2ZkJmd0O2Agd2hlcmUgYCZsdDtmZCZndDtgIGlzIGFuIGlvX3VyaW5nIGZkLCBhbmQgcmVhZGluZyBmcm9tIGl0LCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSwgdG8gY29uZmlybSBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIGNvbXBpbGVkIGluLiBZZXAuICBgaW9fdXJpbmcvZmRpbmZvLmNgIGlzIHJpZ2h0IHRoZXJlIGluIGBpb191cmluZy9NYWtlZmlsZWAuCgpUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIGFuZCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBjb2RlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoaXMgcGF0Y2ggKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbmlvX3VyaW5nL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9cbmlvX3VyaW5nL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICYjNDM7PSBtb2NrX2ZpbGUub1xuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTE0LSNpbmNsdWRlIFwmIzM0O3NxcG9sbC5oXCYjMzQ7XG5pb191cmluZy9mZGluZm8uYzoxNTojaW5jbHVkZSBcJiMzNDtmZGluZm8uaFwmIzM0O1xuaW9fdXJpbmcvZmRpbmZvLmMtMTYtI2luY2x1ZGUgXCYjMzQ7Y2FuY2VsLmhcJiMzNDtcbi0tXG5pb191cmluZy9mZGluZm8uYy0yMC0jaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbmlvX3VyaW5nL2ZkaW5mby5jOjIxOnN0YXRpYyBfX2NvbGQgdm9pZCBjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG5pb191cmluZy9mZGluZm8uYy0yMi1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzZXFfZmlsZSAqbSxcbi0tXG5pb191cmluZy9mZGluZm8uYy0zMy1cbmlvX3VyaW5nL2ZkaW5mby5jOjM0OnN0YXRpYyBfX2NvbGQgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvZmRpbmZvLmMtMzUtXHRcdFx0XHQgICAgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTQzLVx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX0RZTkFNSUM6XG5pb191cmluZy9mZGluZm8uYzo0NDpcdFx0Y29tbW9uX3RyYWNraW5nX3Nob3dfZmRpbmZvKGN0eCwgbSwgXCYjMzQ7ZHluYW1pY1wmIzM0Oyk7XG5pb191cmluZy9mZGluZm8uYy00NS1cdFx0YnJlYWs7XG5pb191cmluZy9mZGluZm8uYy00Ni1cdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUM6XG5pb191cmluZy9mZGluZm8uYzo0NzpcdFx0Y29tbW9uX3RyYWNraW5nX3Nob3dfZmRpbmZvKGN0eCwgbSwgXCYjMzQ7c3RhdGljXCYjMzQ7KTtcbmlvX3VyaW5nL2ZkaW5mby5jLTQ4LVx0XHRicmVhaztcbi0tXG5pb191cmluZy9mZGluZm8uYy01My0jZWxzZVxuaW9fdXJpbmcvZmRpbmZvLmM6NTQ6c3RhdGljIGlubGluZSB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG5pb191cmluZy9mZGluZm8uYy01NS1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuaW9fdXJpbmcvZmRpbmZvLmMtNTktXG5pb191cmluZy9mZGluZm8uYzo2MDpzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG5pb191cmluZy9mZGluZm8uYy02MS17XG4tLVxuaW9fdXJpbmcvZmRpbmZvLmMtMjUzLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG5pb191cmluZy9mZGluZm8uYzoyNTQ6XHRuYXBpX3Nob3dfZmRpbmZvKGN0eCwgbSk7XG5pb191cmluZy9mZGluZm8uYy0yNTUtfVxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTI2MC0gKi9cbmlvX3VyaW5nL2ZkaW5mby5jOjI2MTpfX2NvbGQgdm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxlKVxuaW9fdXJpbmcvZmRpbmZvLmMtMjYyLXtcbi0tXG5pb191cmluZy9mZGluZm8uYy0yNjYtXHQgKiBBdm9pZCBBQkJBIGRlYWRsb2NrIGJldHdlZW4gdGhlIHNlcSBsb2NrIGFuZCB0aGUgaW9fdXJpbmcgbXV0ZXgsXG5pb191cmluZy9mZGluZm8uYzoyNjc6XHQgKiBzaW5jZSBmZGluZm8gY2FzZSBncmFicyBpdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIG5vcm1hbCB1c2VcbmlvX3VyaW5nL2ZkaW5mby5jLTI2OC1cdCAqIGNhc2VzLlxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTI3MC1cdGlmIChtdXRleF90cnlsb2NrKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKSkge1xuaW9fdXJpbmcvZmRpbmZvLmM6MjcxOlx0XHRfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKGN0eCwgbSk7XG5pb191cmluZy9mZGluZm8uYy0yNzItXHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4tLVxuaW9fdXJpbmcvZmRpbmZvLmgtMi1cbmlvX3VyaW5nL2ZkaW5mby5oOjM6dm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc3LSNpbmNsdWRlIFwmIzM0O3NxcG9sbC5oXCYjMzQ7XG5pb191cmluZy9pb191cmluZy5jOjc4OiNpbmNsdWRlIFwmIzM0O2ZkaW5mby5oXCYjMzQ7XG5pb191cmluZy9pb191cmluZy5jLTc5LSNpbmNsdWRlIFwmIzM0O2tidWYuaFwmIzM0O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpb191cmluZ19mb3BzID0ge1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwNy0jaWZkZWYgQ09ORklHX1BST0NfRlNcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcwODpcdC5zaG93X2ZkaW5mb1x0PSBpb191cmluZ19zaG93X2ZkaW5mbyxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwOS0jZW5kaWZcbi0tXG5pb191cmluZy9vcGRlZi5jLTE2LSNpbmNsdWRlIFwmIzM0O3NxcG9sbC5oXCYjMzQ7XG5pb191cmluZy9vcGRlZi5jOjE3OiNpbmNsdWRlIFwmIzM0O2ZkaW5mby5oXCYjMzQ7XG5pb191cmluZy9vcGRlZi5jLTE4LSNpbmNsdWRlIFwmIzM0O2tidWYuaFwmIzM0O1xuLS1cbmlvX3VyaW5nL3NxcG9sbC5jPTI4NT1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL3NxcG9sbC5jLTMwNC1cbmlvX3VyaW5nL3NxcG9sbC5jOjMwNTpcdC8qIHJlc2V0IHRvIG91ciBwaWQgYWZ0ZXIgd2UmIzM5O3ZlIHNldCB0YXNrX2NvbW0sIGZvciBmZGluZm8gKi9cbmlvX3VyaW5nL3NxcG9sbC5jLTMwNi1cdHNxZC1cdTAwM2V0YXNrX3BpZCA9IGN1cnJlbnQtXHUwMDNlcGlkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA0NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhpcywgY29uc2lkZXJpbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6CgoqKklPX1VSSU5HIE1vZHVsZSBCdWlsZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9gIGluIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBtZWFuaW5nIHRoYXQgdGhlIGBmZGluZm8ub2Agb2JqZWN0IGZpbGUgd2l0aGluIGBpb191cmluZ2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19QUk9DX0ZTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uICBJdCBtYWtlcyBzZW5zZTsgYGZkaW5mb2AgbGlrZWx5IGludGVyYWN0cyB3aXRoIHRoZSBwcm9jIGZpbGVzeXN0ZW0gdG8gcHJvdmlkZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGRlcGVuZGVuY3kuCgpOb3csIGlmIEkgd2FudCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYENPTkZJR19QUk9DX0ZTYCBpcyBkZWZpbmVkIGZvciBgaW9fdXJpbmdgLCBJJiMzOTtsbCBjaGVjayBpbiB0aGUgYEtjb25maWdgIGZpbGVzLiBQcm9iYWJseSBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gdHJhY2UgdXBzdHJlYW0gdG8gYGluaXQvS2NvbmZpZ2AgaWYgaXQmIzM5O3MgaW5oZXJpdGVkIG9yIGRlZmluZWQgZ2VuZXJhbGx5LiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdGhlcmUuLi4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9yIGlmIGl0IGlzIGJlaW5nIGRlZmluZWQgYXMgYSBidWlsZCB0YXJnZXQgaW4gYW55IGBLY29uZmlnYCBmaWxlcy4gVGhhdCB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGBpb191cmluZ2AgbW9kdWxlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5NTktXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYxLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTk2OT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5ODEtXG5pbml0L0tjb25maWc6MTk4Mjpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk4My1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSU9fVVJJTkdgIGlzIHByb3Blcmx5IGVuYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoYXQgaW4gYGluaXQvS2NvbmZpZ2AuIEl0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgYW55IGZlYXR1cmUgZW5hYmxlZCBvciBkaXNhYmxlZCB0aGF0IGlzIGluaXRpYWxpemVkIGVhcmx5LiBOb3csIGxldCYjMzk7cyBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDE5NjAuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgdW5kZXIgdGhlIHNlY3Rpb24gcmVsYXRpbmcgdG8gYmxvY2sgZGV2aWNlcyBvciBzdG9yYWdlIGRyaXZlcnMgaWYgbWVtb3J5IHNlcnZlcy4gSSBqdXN0IG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHN0YXR1cy4gVGhlbiwgSSBjYW4gbW92ZSBvbiB0byBvdGhlciBhcmVhcyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgSU9fVVJJTkcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTU1Olx0XHRoZWxwXG4xOTU2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZFxuMTk1NzpcdFx0ICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmdcbjE5NTg6XHRcdCAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suXG4xOTU5Olx0XG4xOTYwOlx0Y29uZmlnIElPX1VSSU5HXG4xOTYxOlx0XHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuMTk2MjpcdFx0c2VsZWN0IElPX1dRXG4xOTYzOlx0XHRkZWZhdWx0IHlcbjE5NjQ6XHRcdGhlbHBcbjE5NjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgaW9fdXJpbmcgaW50ZXJmYWNlLCBlbmFibGluZ1xuMTk2NjpcdFx0ICBhcHBsaWNhdGlvbnMgdG8gc3VibWl0IGFuZCBjb21wbGV0ZSBJTyB0aHJvdWdoIHN1Ym1pc3Npb24gYW5kXG4xOTY3Olx0XHQgIGNvbXBsZXRpb24gcmluZ3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgYXBwbGljYXRpb24uXG4xOTY4Olx0XG4xOTY5Olx0Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuMTk3MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuMTk3MTpcdFx0ZGVwZW5kcyBvbiBJT19VUklORyBcdTAwMjZcdTAwMjYgR0NPVl9LRVJORUxcbjE5NzI6XHRcdGhlbHBcbjE5NzM6XHRcdCAgRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHRvIGZhY2lsaXRhdGVcbjE5NzQ6XHRcdCAgY29kZSBjb3ZlcmFnZSB0ZXN0aW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgUHJvYyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYENPTkZJR19QUk9DX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggSSBrbm93IGlzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIGxpc3RlZCBpbiBgZnMvcHJvYy9LY29uZmlnYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGF0IGBLY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW55IHJlbGV2YW50IGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBgQ09ORklHX1BST0NfRlNgIHRvIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gb3IgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJIHdhbnQgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBiZWZvcmUgdGhpcyBvcHRpb24gaXMgZXZlbiBwcmVzZW50ZWQgYW5kIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFBST0NfRlNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1c1xuICAgNzpcdFx0ICBvZiB0aGUgc3lzdGVtLiBcJiMzNDtWaXJ0dWFsXCYjMzQ7IG1lYW5zIHRoYXQgaXQgZG9lc24mIzM5O3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cbiAgIDg6XHRcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxuICAgOTpcdFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcbiAgMTA6XHRcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0JiMzOTtzIHRvdGFsbHkgY29vbDsgZm9yIGV4YW1wbGUsIFwmIzM0O2NhdCAvcHJvYy9pbnRlcnJ1cHRzXCYjMzQ7IGdpdmVzXG4gIDEzOlx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XG4gIDE0Olx0XHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXG4gIDE1Olx0XHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJiMzOTtzIGF0dGVudGlvbiAtLVxuICAxNjpcdFx0ICBvZnRlbiBhIHNvdXJjZSBvZiB0cm91YmxlIGlmIHR3byBkZXZpY2VzIGFyZSBtaXN0YWtlbmx5IGNvbmZpZ3VyZWRcbiAgMTc6XHRcdCAgdG8gdXNlIHRoZSBzYW1lIElSUSkuIFRoZSBwcm9ncmFtIHByb2NpbmZvIHRvIGRpc3BsYXkgc29tZVxuICAxODpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBnYXRoZXJlZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSAvcHJvYyBmaWxlIHN5c3RlbSwgaXQgaGFzIHRvIGJlIG1vdW50ZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIENRRSBBcnJheSBPdXQtb2YtQm91bmRzIGluIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgSU9fVVJJTkdgIHBhdGNoLCBhbmQgZmlyc3QgdGhpbmdzIGZpcnN0LCBgSU9fVVJJTkdgIGFuZCBgUFJPQ19GU2AgYXJlIHN0YW5kYXJkIGNvbmZpZ3MsIHNvIHRoYXQgcGFydCBsb29rcyBnb29kLiBOb3csIGxldCYjMzk7cyBzZWUsIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgaW9fdXJpbmdfc2hvd19mZGluZm9gLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEkgbmVlZCB0byBmb2N1cyBvbiBrZXkgc3ltYm9scyBoZXJlLiBJIHNlZSB0aGF0IGBpb191cmluZ19zaG93X2ZkaW5mb2AgaXMgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQvY2FsbGVkIGZyb20gYGlvX3VyaW5nX2ZvcHMuc2hvd19mZGluZm9gLiBBbmQgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gICppcyogc3RhdGljLiBUaGUgcXVlc3Rpb24gaXMgY2FuIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBiZSBpbmxpbmVkPwoKSXQgb25seSBoYXMgb25lIGNhbGxlciwgc28gaW5saW5pbmcgaXQgbG9va3MgZmVhc2libGUuIExpc3RpbmcgYm90aCBmdW5jdGlvbnMsIG9yIGp1c3QgdGhlIG5vbi1zdGF0aWMgb25lLCBpcyBpZGVhbC4gV2FpdCwgYWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBgaW9fdXJpbmdfc2hvd19mZGluZm9gICppcyogdGhlIEFQSSBlbnRyeXBvaW50IGFuZCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLgoKT2theSwgbm93IGxldCYjMzk7cyBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgcGF0Y2ggaXRzZWxmLCBiZWNhdXNlIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBIZXJlJiMzOTtzIHRoZSByZWxldmFudCBjb2RlOgoKYGBgYwpAQCAtMTU1LDkgJiM0MzsxNTUsMTEgQEAgc3RhdGljIHZvaWQgX19pb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHNlcV9maWxlICptKQogCWZvciAoaSA9IDA7IGkgJmx0OyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7CiAJCWJvb2wgY3FlMzIgPSBmYWxzZTsKJiM0MzsJCWJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTsKIAogCQljcWUgPSAmYW1wO3ItJmd0O2NxZXNbKGNxX2hlYWQgJmFtcDsgY3FfbWFzayldOwotCQlpZiAoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpCiYjNDM7CQlpZiAoKGNxZS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0NRRTMyKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KQogCQkJY3FlMzIgPSB0cnVlOwogCQlzZXFfcHJpbnRmKG0sICYjMzQ7JTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleCYjMzQ7LAogCQkJICAgY3FfaGVhZCAmYW1wOyBjcV9tYXNrLCBjcWUtJmd0O3VzZXJfZGF0YSwgY3FlLSZndDtyZXMsCmBgYAoKSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgY2hlY2s6IGBjcV9oZWFkID09IGNxX21hc2tgLiBSZW1lbWJlciwgYGNxX21hc2tgIGlzIGBjdHgtJmd0O2NxX2VudHJpZXMgLSAxYCwgYW5kIGBjcV9oZWFkYCBpcyBhIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIHJpbmcgYnVmZmVyIGhlYWQuIFNvLCB3aGVuIGBjcV9oZWFkYCBoaXRzIHRoZSBsYXN0IHNsb3QgKGBjcV9tYXNrYCksIHRoZSBjb25kaXRpb24gYGNxX2hlYWQgPT0gY3FfbWFza2AgaXMgKnRydWUqLiBCdXQgd2hlbiBgY3FfaGVhZGAgd3JhcHMgYXJvdW5kIHRvIHRoZSBiZWdpbm5pbmcsIGl0JiMzOTtzICpmYWxzZSogZXZlbiB0aG91Z2ggdGhlIGluZGV4IGlzIHRoZSBzYW1lLiBOb3csICppZiogYGlzX2xhc3RfY3FhcnJheV9zbG90YCBpcyBmYWxzZSAqYW5kKiBgY3FlMzJgIGlzIHRydWUgYXQgdGhlIGxhc3Qgc2xvdC4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIGJhZCEKCklmIGBjcWUzMmAgaXMgdHJ1ZSwgYW5kIHdlIGFyZSBub3QgaW4gdGhlIGxhc3Qgc2xvdCwgdGhlIGNvZGUgdGhlbiByZWZlcmVuY2VzIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYC4uLiB0aGF0JiMzOTtzICpiZXlvbmQqIHRoZSBib3VuZHMgb2YgYHItJmd0O2NxZXNgISBJdCBzZWVtcyB0byBoYXZlIGJlZW4gYWRkZWQgdG8gaGFuZGxlIDMyIGJ5dGUgQ1FFcy4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBDUUUgZW50cmllcyBjYW4gd3JhcCBpbiBhIHJpbmcsIHNvIGlmIHRoZSBmbGFnIGlzIHNldCBhbmQgd2UgYXJlIGF0IHRoZSBsYXN0IGFycmF5IHNsb3QsIHdlIGFyZSAqbm90KiBnb2luZyB0byBzZXQgY3FlMzIgdG8gdHJ1ZSwgc28gd2UgYXJlIG9rLCBidXQgaWYgd2UgYXJlICpub3QqIGF0IHRoZSBsYXN0IGFycmF5IHNsb3QsIGFuZCBpdCBpcyAzMiBieXRlcy4uLgoKTm93IHdhaXQgYSBtaW51dGUhIElmIGBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMmAsIHRoZSBDUUUgV0FTIDMyIGJ5dGVzLCByaWdodD8gQnV0IGhvbGQgb24sIGNhbiBpb191cmluZyBDUUUzMiBlbnRyaWVzICp3cmFwKiBpbiB0aGUgcmluZz8gQW5kIGlmIHNvLCBob3cgaXMgaXQgaGFuZGxlZCBvbiBDUUUgYWxsb2NhdGlvbiBpbiBgaW9fY3FlX2NhY2hlX3JlZmlsbGAgb3IgZWxzZXdoZXJlPyBJIG5lZWQgdG8gY2hlY2sgaG93IENRRTMyIGlzIGhhbmRsZWQgd2hlbiBhbGxvY2F0aW5nIGVudHJpZXMsIHRoYXQmIzM5O3Mga2V5LiBXZSYjMzk7dmUgZ290IGEgbGlrZWx5IGFycmF5IG91dC1vZi1ib3VuZHMgc2l0dWF0aW9uIGhlcmUsIGFuZCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGludG8gdGhlIENRRSBhbGxvY2F0aW9uIGFuZCByaW5nIGJ1ZmZlciBtZWNoYW5pY3MgaW4gYGlvX3VyaW5nLmNgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9SSU5HX1NFVFVQX0NRRTMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzMi1cdFx0aWYgKG9jcWUtXHUwMDNlY3FlLmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NTMzOlx0XHQgICAgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVx0XHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzNi1cdFx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1Mzc6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM4LVx0XHRcdGlzX2NxZTMyID0gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NTktXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTcxOD1ib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXG5pb191cmluZy9pb191cmluZy5jOjc0ODpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDktXHRcdG9mZiBcdTAwM2NcdTAwM2M9IDE7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjItXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDc4PXN0YXRpYyBpbnQgcmluZ3Nfc2l6ZSh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzcV9lbnRyaWVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cdG9mZiA9IHN0cnVjdF9zaXplKHJpbmdzLCBjcWVzLCBjcV9lbnRyaWVzKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEwNTpcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA2LVx0XHRvZmYgPSBzaXplX211bChvZmYsIDIpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM2Olx0aWYgKChmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNzpcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJpbmcgQnVmZmVyIE1lbW9yeSBBbGxvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcmluZyBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYy4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYHJpbmdzX3NpemVgIGlzIGNhbGN1bGF0ZWQuIFNwZWNpZmljYWxseSwgaWYgYElPUklOR19TRVRVUF9DUUUzMmAgaXMgc2V0LCB0aGUgYHJpbmdzYCBidWZmZXIgZWZmZWN0aXZlbHkgZG91YmxlcyBpdHMgc2l6ZSBmb3IgdGhlIGBjcWVzYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBoYWRuJiMzOTt0IGV4cGxpY2l0bHkgdGhvdWdodCBhYm91dCB0aGF0LCBidXQgaXQgbWFrZXMgc2Vuc2Ug4oCTIGl0JiMzOTtzIGFsbG9jYXRpbmcgc3BhY2UgZm9yIDMyLWJpdCBDUUVzIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCA2NC1iaXQgb25lcywgd2hpY2ggbWVhbnMgbW9yZSBlbnRyaWVzIGluIHRoZSBDUSByaW5nIGNhbiBiZSB0cmFja2VkLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGA/IFRoYXQgc2V0dXAgb3B0aW9uIGluZGljYXRlcyBDUUVzIGFyZSBvZiBtaXhlZCBzaXplcy4gVGhhdCBtZWFucyB0aGUgZG91YmxpbmcgaXMgY29udGluZ2VudCBvbiB0aGUgZmxhZyAqbm90KiBiZWluZyBtaXhlZCBzaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB3b3JrcyBpbiB0aGF0IHNjZW5hcmlvLCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3Igb2NjdXJyZW5jZXMgb2YgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gaXMgbW9kaWZpZWQgd2hlbiBtaXhlZCBDUUUgc2l6ZXMgYXJlIGVuYWJsZWQgc28gSSBkb24mIzM5O3QgaW50cm9kdWNlIGVycm9ycyBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJT1JJTkdfU0VUVVBfQ1FFX01JWEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjItXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDc4PXN0YXRpYyBpbnQgcmluZ3Nfc2l6ZSh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzcV9lbnRyaWVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4NC1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjA4NTpcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDg2LVx0XHRpZiAoY3FfZW50cmllcyBcdTAwM2MgMilcbi0tXG5pb191cmluZy9pb191cmluZy5jPTI3ODg9c3RhdGljIGludCBpb191cmluZ19zYW5pdGlzZV9wYXJhbXMoc3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTI4MzUtXHQgKi9cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNjpcdGlmICgoZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpID09XG5pb191cmluZy9pb191cmluZy5jOjI4Mzc6XHQgICAgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC03Mi1cdFx0XHRJT1JJTkdfU0VUVVBfSFlCUklEX0lPUE9MTCB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NzM6XHRcdFx0SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzQtXHRcdFx0SU9SSU5HX1NFVFVQX1NRRV9NSVhFRCB8XFxcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZV9vdmVyZmxvdyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI3My1cdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzQ6XHR9IGVsc2UgaWYgKGNxZTMyIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjc1LVx0XHRjdHgtXHUwMDNlY3FlX2NhY2hlZCYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yODg9c3RhdGljIGlubGluZSBib29sIGlvX2RlZmVyX2dldF91bmNvbW1pdGVkX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI5My1cdGN0eC1cdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDoyOTQ6XHRyZXR1cm4gaW9fZ2V0X2NxZShjdHgsIGNxZV9yZXQsIGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCk7XG5pb191cmluZy9pb191cmluZy5oLTI5NS19XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMzY9c3RhdGljIGlubGluZSB1MzIgY3R4X2NxZTMyX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzcte1xuaW9fdXJpbmcvaW9fdXJpbmcuaDozMzg6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzktXHRcdHJldHVybiBJT1JJTkdfQ1FFX0ZfMzI7XG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYy0xMDYtXHQgICAgISh0YXJnZXRfY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHxcbmlvX3VyaW5nL21zZ19yaW5nLmM6MTA3Olx0XHRcdFx0ICAgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvbXNnX3JpbmcuYy0xMDgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25vcC5jLTQ5LVxuaW9fdXJpbmcvbm9wLmM6NTA6XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy9ub3AuYy01MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk1LVx0XHRcdCBJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfTk9fTU1BUCB8IFxcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5NjpcdFx0XHQgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8IElPUklOR19TRVRVUF9TUUVfTUlYRUQpXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ny1cbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0xNTI9dm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY2LVx0aWYgKGlzX2NxZTMyKSB7XG5pb191cmluZy91cmluZ19jbWQuYzoxNjc6XHRcdGlmIChyZXEtXHUwMDNlY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY4LVx0XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTI0Mz1pbnQgaW9fdXJpbmdfY21kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjU5LVx0XHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX1NRRTEyODtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjI2MDpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI2MS1cdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9DUUUzMjtcbi0tXG5pb191cmluZy96Y3J4LmM9ODMxPXN0YXRpYyBpbnQgaW1wb3J0X3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTg0MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy96Y3J4LmM6ODQyOlx0aWYgKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL3pjcnguYy04NDMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL3pjcnguYz05NjE9aW50IGlvX3JlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTk4MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy96Y3J4LmM6OTgyOlx0aWYgKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL3pjcnguYy05ODMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL3pjcnguYz0xNjI4PXN0YXRpYyBib29sIGlvX3pjcnhfcXVldWVfY3FlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdixcbi0tXG5pb191cmluZy96Y3J4LmMtMTY0Mi1cdGNxZS1cdTAwM2VmbGFncyA9IElPUklOR19DUUVfRl9NT1JFO1xuaW9fdXJpbmcvemNyeC5jOjE2NDM6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvemNyeC5jLTE2NDQtXHRcdGNxZS1cdTAwM2VmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBpb19jcWVfY2FjaGVfcmVmaWxsIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgY2xvc2VyIGxvb2sgYXQgYGlvX2NxZV9jYWNoZV9yZWZpbGxgLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBjb2RlYmFzZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW5zaWRlIGFuZCBvdXQuIExldCYjMzk7cyBwdWxsIHVwIGBpb191cmluZy9pb191cmluZy5jYCDigJMgc3BlY2lmaWNhbGx5IGxpbmVzIDcxNSB0aHJvdWdoIDc1NS4gVGhhdCBzaG91bGQgYmUgdGhlIHJlbGV2YW50IGJsb2NrIG9mIGNvZGUgSSYjMzk7bSBhZnRlci4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGNhY2hlIGlzIG1hbmFnZWQgYW5kIHJlcGxlbmlzaGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCBwb3RlbnRpYWxseSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBoZXJlLiBIb3BlZnVsbHksIEkmIzM5O2xsIGJlIGFibGUgdG8gc3BvdCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgYnkgZm9jdXNpbmcgb24gdGhpcyBzZWN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdCAqIGNvbnRyb2wgZGVwZW5kZW5jeSBpcyBlbm91Z2ggYXMgd2UmIzM5O3JlIHVzaW5nIFdSSVRFX09OQ0UgdG9cbiA3MTY6XHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxuIDcxNzpcdCAqL1xuIDcxODpcdGJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbiA3MTk6XHR7XG4gNzIwOlx0XHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzID0gY3R4LVx1MDAzZXJpbmdzO1xuIDcyMTpcdFx0dW5zaWduZWQgaW50IG9mZiA9IGN0eC1cdTAwM2VjYWNoZWRfY3FfdGFpbCBcdTAwMjYgKGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gMSk7XG4gNzIyOlx0XHR1bnNpZ25lZCBpbnQgZnJlZSwgbGVuO1xuIDcyMzpcdFxuIDcyNDpcdFx0LypcbiA3MjU6XHRcdCAqIFBvc3RpbmcgaW50byB0aGUgQ1Egd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBvdmVyZmxvd2VkIENRRXMgbWF5IGJyZWFrXG4gNzI2Olx0XHQgKiBvcmRlcmluZyBndWFyYW50ZWVzLCB3aGljaCB3aWxsIGFmZmVjdCBsaW5rcywgRl9NT1JFIHVzZXJzIGFuZCBtb3JlLlxuIDcyNzpcdFx0ICogRm9yY2Ugb3ZlcmZsb3cgdGhlIGNvbXBsZXRpb24uXG4gNzI4Olx0XHQgKi9cbiA3Mjk6XHRcdGlmICghb3ZlcmZsb3cgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlY2hlY2tfY3EgXHUwMDI2IEJJVChJT19DSEVDS19DUV9PVkVSRkxPV19CSVQpKSlcbiA3MzA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczMTpcdFxuIDczMjpcdFx0LypcbiA3MzM6XHRcdCAqIFBvc3QgZHVtbXkgQ1FFIGlmIGEgMzJiIENRRSBpcyBuZWVkZWQgYW5kIHRoZXJlJiMzOTtzIG9ubHkgcm9vbSBmb3IgYVxuIDczNDpcdFx0ICogMTZiIENRRSBiZWZvcmUgdGhlIHJpbmcgd3JhcHMuXG4gNzM1Olx0XHQgKi9cbiA3MzY6XHRcdGlmIChjcWUzMiBcdTAwMjZcdTAwMjYgb2ZmICYjNDM7IDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXMpIHtcbiA3Mzc6XHRcdFx0aWYgKCFpb19maWxsX25vcF9jcWUoY3R4LCBvZmYpKVxuIDczODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3Mzk6XHRcdFx0b2ZmID0gMDtcbiA3NDA6XHRcdH1cbiA3NDE6XHRcbiA3NDI6XHRcdGZyZWUgPSBjdHgtXHUwMDNlY3FfZW50cmllcyAtIGlvX2NxcmluZ19xdWV1ZWQoY3R4KTtcbiA3NDM6XHRcdC8qIHdlIG5lZWQgYSBjb250aWd1b3VzIHJhbmdlLCBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBhcnJheSBvZmZzZXQgKi9cbiA3NDQ6XHRcdGxlbiA9IG1pbihmcmVlLCBjdHgtXHUwMDNlY3FfZW50cmllcyAtIG9mZik7XG4gNzQ1Olx0XHRpZiAobGVuIFx1MDAzYyAoY3FlMzIgJiM0MzsgMSkpXG4gNzQ2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA3NDc6XHRcbiA3NDg6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuIDc0OTpcdFx0XHRvZmYgXHUwMDNjXHUwMDNjPSAxO1xuIDc1MDpcdFx0XHRsZW4gXHUwMDNjXHUwMDNjPSAxO1xuIDc1MTpcdFx0fVxuIDc1MjpcdFxuIDc1MzpcdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQgPSBcdTAwMjZyaW5ncy1cdTAwM2VjcWVzW29mZl07XG4gNzU0Olx0XHRjdHgtXHUwMDNlY3FlX3NlbnRpbmVsID0gY3R4LVx1MDAzZWNxZV9jYWNoZWQgJiM0MzsgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBEZWVwIERpdmUgaW50byBhIFBvdGVudGlhbCBpb191cmluZyBPdXQtb2YtQm91bmRzIFJlYWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCBJIG5vdGljZWQgc29tZXRoaW5nIGFib3V0IGhvdyB0aGUgQ29tcGxldGlvbiBRdWV1ZSBFbnRyaWVzIChDUUVzKSBhcmUgaGFuZGxlZCB3aGVuIGBJT1JJTkdfU0VUVVBfQ1FFMzJgIGlzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHJpbmcgc2l6ZSBkb3VibGVzIGJlY2F1c2UgdGhlIGluZGV4IG1hdGggYG9mZiA9IHNpemVfbXVsKG9mZiwgMik7YCBzdWdnZXN0cyBgcmluZ3MtJmd0O2NxZXNgIGhhcyB0d2ljZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXMgYGNxX2VudHJpZXNgLiBUaGVuLCB0aGUgaW5kZXhpbmcgdXNlcyBgY3FfaGVhZCAmbHQ7Jmx0OyAxYC4gQnV0IHRoZW4gSSBub3RpY2VkIGEgcG90ZW50aWFsIHByb2JsZW0gd2hlbiBsb29raW5nIGF0IGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYC4gSXQgZG9lc24mIzM5O3QgdXNlIHRoZSBgJmx0OyZsdDsgMWAgc2hpZnQsIHVzaW5nIGAmYW1wOyBjcV9tYXNrYCBmb3IgaW5kZXhpbmcuIFRoYXQgc3Rvb2Qgb3V0LgoKVGhlbiBJIHJlY2FsbGVkIHRoYXQgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIHVzZXMgYGNxX2VudHJpZXNgIG5vdCBgMiAqIGNxX2VudHJpZXNgLiBPa2F5LCBzbyBhIDMyLWJpdCBDUUUsIGluZGljYXRlZCBieSBgY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzJgLCBvY2N1cGllcyB0d28gc2xvdHMuIE5vdywgbGluZSA3MzYgaW4gdGhlIGNvZGUgc2hvd3MgYSBjaGVjayB0aGF0IGlzIGNydWNpYWwuIElmIGEgMzJiIENRRSBpcyBuZWVkZWQsIGFuZCBgb2ZmICYjNDM7IDEgPT0gY3R4LSZndDtjcV9lbnRyaWVzYCAoaS5lLiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgcmluZyksIHRoZSBjb2RlIGZpbGxzIGEgTk9QIENRRSBhbmQgd3JhcHMgYXJvdW5kLiBUaGlzIG1lYW5zLCBhIDMyYiBDUUUgKnNob3VsZCogbmV2ZXIgYmUgYXQgdGhlIHZlcnkgbGFzdCBzbG90LiBBIE5PUCBDUUUgc2hvdWxkIGJlIHRoZXJlIGluc3RlYWQuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBpZiBzb21laG93IGEgdXNlciBvciBjb3JydXB0aW9uLCBvciBhIHJhY2UsIG9yIGlmIGAvcHJvYy8mbHQ7cGlkJmd0Oy9mZGluZm8vJmx0O2lvX3VyaW5nX2ZkJmd0O2AgcmVhZHMgdGhlIHdyb25nIHZhbHVlLCBwdXRzIGEgMzJiIENRRSBhdCBgY3FfbWFza2AsIHRoZW4gdGhlIGNvZGUgdHJpZXMgdG8gcmVhZCBgY3FlLSZndDtiaWdfY3FlWzBdYCBhbmQgYGNxZS0mZ3Q7YmlnX2NxZVsxXWAuLi4gd2hpY2ggaXMgKm91dC1vZi1ib3VuZHMqIGJlY2F1c2UgaXQmIzM5O3MgcmVhZGluZyBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgYHItJmd0O2NxZXNgIGFycmF5LgoKQW5kIHRoZW4gSSBzYXcgdGhlIGF1dGhvciYjMzk7cyBjb2RlOiBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO2AuIEhvbGQgb24uIGBjcV9oZWFkYCBpc24mIzM5O3QgbWFza2VkISBgY3FfaGVhZGAgY2FuIGJlIDE2LCAzMiwgNDguLi4gYW5kIGBjcV9tYXNrYCBpcyAxNSBpbiB0aGlzIGNhc2UuIFRoZSBhdXRob3Igc2hvdWxkIGhhdmUgd3JpdHRlbiBgKGNxX2hlYWQgJmFtcDsgY3FfbWFzaykgPT0gY3FfbWFza2AhIEJlY2F1c2UgdGhleSBkaWRuJiMzOTt0LCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIGZhbHNlIG9uIHN1YnNlcXVlbnQgd3JhcHMuIFNvIG9uIHN1YnNlcXVlbnQgd3JhcHMsIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgaXMgZmFsc2UsIGBjcWUzMmAgaXMgdHJ1ZSwgYW5kIGBjcWUtJmd0O2JpZ19jcWVbMF1gIHJlYWRzIG91dCBvZiBib3VuZHMgYmV5b25kIGByLSZndDtjcWVzYCEgSXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZyBpbnRyb2R1Y2VkIGJ5IGEgcGF0Y2gsIGFuZCBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIhCgpOb3cgbGV0JiMzOTtzIHZlcmlmeS4gQ2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoaXMgY29kZT8gWWVzLCBgL3Byb2MvJmx0O3BpZCZndDsvZmRpbmZvLyZsdDtpb191cmluZ19mZCZndDtgIGlzIHJlYWNoYWJsZS4gRG9lcyBpdCB0b3VjaCBhIGNvcmUgc3Vic3lzdGVtPyBZZXMsIGBpb191cmluZ2AuIERvZXMgaXQgd2FycmFudCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCYjMzk7cyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBjb25maWdzIHJlcXVpcmVkIGZvciBmdXp6aW5nLiBXZSBuZWVkIGBJT19VUklOR2AgKGxpa2VseSBhbHJlYWR5IGVuYWJsZWQpLCBhbmQgYFBST0NfRlNgIHRvIHJlYWQgYGZkaW5mb2AuIExvb2tpbmcgYXQgYGlvX3VyaW5nL01ha2VmaWxlYCwgYGZkaW5mby5vYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfUFJPQ19GU2AuIFNvLCBgUFJPQ19GU2AgaXMgYSByZXF1aXJlbWVudC4gQWxzbyBgQ09ORklHX0lPX1VSSU5HYCBjb21waWxlcyB0aGUgZW50aXJlIGBpb191cmluZy9gIGRpcmVjdG9yeS4KCldlIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bGwgYGlvX3VyaW5nL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBpb191cmluZ1xuICAgNDpcdFxuICAgNTpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfVVJJTkdcbiAgIDY6XHRHQ09WX1BST0ZJTEUgOj0geVxuICAgNzpcdGVuZGlmXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0XHQmIzQzOz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxuICAxMDpcdFx0XHRcdFx0XHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcbiAgMTE6XHRcdFx0XHRcdFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXG4gIDEyOlx0XHRcdFx0XHRcdG9wZW5jbG9zZS5vIHNxcG9sbC5vIHhhdHRyLm8gbm9wLm8gXFxcbiAgMTM6XHRcdFx0XHRcdFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxuICAxNDpcdFx0XHRcdFx0XHRhZHZpc2UubyBvcGVuY2xvc2UubyBzdGF0eC5vIHRpbWVvdXQubyBcXFxuICAxNTpcdFx0XHRcdFx0XHRjYW5jZWwubyB3YWl0aWQubyByZWdpc3Rlci5vIFxcXG4gIDE2Olx0XHRcdFx0XHRcdHRydW5jYXRlLm8gbWVtbWFwLm8gYWxsb2NfY2FjaGUubyBcXFxuICAxNzpcdFx0XHRcdFx0XHRxdWVyeS5vIGxvb3Aub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVx0JiM0Mzs9IHpjcngub1xuICAyMDpcdG9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbiAgMjE6XHRvYmotJChDT05GSUdfRlVURVgpXHRcdCYjNDM7PSBmdXRleC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0VQT0xMKVx0XHQmIzQzOz0gZXBvbGwub1xuICAyMzpcdG9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVx0JiM0Mzs9IG5hcGkub1xuICAyNDpcdG9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbiAgMjU6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgJiM0Mzs9IG1vY2tfZmlsZS5vXG4gIDI3Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuICAyODpcdG9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSAmIzQzOz0gYnBmLW9wcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTQzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgQnVpbGQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBjb25kaXRpb25zIGZvciB0aGUgYGlvX3VyaW5nL2AgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgaWYgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5lZCwgdGhlIGFzc29jaWF0ZWQgY29kZSAqYWx3YXlzKiBnZXRzIGJ1aWx0LiBObyBzbmVha3kgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gSSYjMzk7bSBtaXNzaW5nLgoKRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgYHJvb3QgTWFrZWZpbGVgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSB0b3AtbGV2ZWwgYnVpbGQgcnVsZXMgdXN1YWxseSByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgaXQsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBpb191cmluZy9gLiBJJiMzOTtsbCBiZSBzY2FubmluZyBmb3IgZXhwbGljaXQgbWVudGlvbnMsIG9mIGNvdXJzZSwgYnV0IGFsc28gYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBvciBpbmNsdWRlIHN0YXRlbWVudHMuCgpUaGVuLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2guIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gaHVudCBkb3duICphbnkqIGluc3RhbmNlcyBvZiBgaW9fdXJpbmcvYCB3aXRoaW4gdGhlIGBNYWtlZmlsZWAgYW5kIGFueSBgS2J1aWxkYCBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgdGhlIGBpb191cmluZy9gIGRpcmVjdG9yeSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgaW5mbHVlbmNlIGl0cyBpbmNsdXNpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtNYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTAwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogS2J1aWxkKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBLYnVpbGRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBsaWVzLCB0aGUgbWFrZWZpbGVzIGFuZCBzY3JpcHRzIHRoYXQgZGljdGF0ZSBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBwYWNrYWdlZC4gVW5kZXJzdGFuZGluZyBgS2J1aWxkYCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsLiBJdOKAmXMgdGhlIG9yY2hlc3RyYXRvci4gSWYgSSYjMzk7bSBnb2luZyB0byB1bmRlcnN0YW5kIG9yIGRlYnVnIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJ1aWxkLCBgS2J1aWxkYCBoYXMgdG8gYmUgdGhlIGZpcnN0IHN0b3AuIExldCYjMzk7cyBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb191cmluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O0tidWlsZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtLYnVpbGQ9MTA3PW9iai0kKENPTkZJR19CTE9DSylcdCYjNDM7PSBibG9jay9cbktidWlsZDoxMDg6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0JiM0Mzs9IGlvX3VyaW5nL1xuS2J1aWxkLTEwOS1vYmotJChDT05GSUdfUlVTVClcdCYjNDM7PSBydXN0L1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE0NQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBmZGluZm8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYEtidWlsZGAgZmlsZSBpbmNsdWRlcyBgaW9fdXJpbmcvYCBhbmQgd2l0aGluIHRoYXQsIHRoZSBgTWFrZWZpbGVgIGNvbmRpdGlvbmFsbHkgaW5jbHVkZXMgYGZkaW5mby5vYCBiYXNlZCBvbiBgUFJPQ19GU2AuIFNvLCBgSU9fVVJJTkdgIGFuZCBgUFJPQ19GU2AgYXJlIGJvdGggcHJlcmVxdWlzaXRlcyBoZXJlLgoKTXkgZm9jdXMgaXMgdGhlIGBpb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgdXNlZCB3aXRoIGAvcHJvYy8mbHQ7cGlkJmd0Oy9mZGluZm8vJmx0O2ZkJmd0O2AuIFRoZSBjb2RlIHBhdGggaXM6IHByb2NmcyBjYWxscyBgc2hvd19mZGluZm9gIChsaWtlbHkgdmlhIGBzZXFfcmVhZGAgYW5kIGBzZXFfc2hvd2AsIHNvbWV0aGluZyBsaWtlIGBwcm9jX2ZkaW5mb19zaG93YCkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzOiBgaW9fdXJpbmdfc2hvd19mZGluZm9gIOKAkyB0aGUgZmlsZSBvcGVyYXRpb25zIGVudHJ5IHBvaW50IOKAkyBhbmQgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIOKAkyB3aGljaCAqY29udGFpbnMqIHRoZSBhY3R1YWwgbG9naWMgY2hhbmdlLiBUaGF0IHNlZW1zIHJpZ2h0LCBJIGV2ZW4gdmVyaWZpZWQgdGhhdCB0aGUgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCBpcyBkZWZpbmVkIGluIGBpb191cmluZy9mZGluZm8uaGAgYW5kIHVzZWQgaW4gYGlvX3VyaW5nL2lvX3VyaW5nLmNgLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLCB3aGljaCwgaW1wb3J0YW50bHksIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgdGhlIGAvcHJvYy9bcGlkXS9mZGluZm8vW2ZkXWAgb2YgYW4gaW9fdXJpbmcgZmlsZSBkZXNjcmlwdG9yLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIGBjcWUtJmd0O2JpZ19jcWVgIHdoZW4gZGlzcGxheWluZyAzMi1ieXRlIENRRXMgYXQgdGhlIGVuZCBvZiB0aGUgQ1EgcmluZyBhcnJheS4gSG93ZXZlciwgdGhlIGNvbmRpdGlvbiBpbnRyb2R1Y2VkIHRvIHByZXZlbnQgdGhhdCBvdXQtb2YtYm91bmRzIHJlYWQgYXBwZWFycyB0byBiZSBmbGF3ZWQsIGxpa2VseSBmYWlsaW5nIHRvIHRyaWdnZXIgd2hlbiBgY3FfaGVhZGAgd3JhcHMgYmV5b25kIGBjcV9tYXNrYC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgaW5jb3JyZWN0IGZkaW5mbyBvdXRwdXQgdW5kZXIgdmFsaWQgcmluZyB3cmFwcGluZyBzY2VuYXJpb3MsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHJlcXVpcmVtZW50czogYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kOyB0aGUgcHJvYmxlbSBpcyB3ZWxsLWV4cGxhaW5lZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYElPX1VSSU5HYCBhbmQgYFBST0NfRlNgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGFuZCBgaW9fdXJpbmdfc2hvd19mZGluZm9gLgoKSSYjMzk7dmUgY29uZmlybWVkOiB0aGUgY2hhbmdlcyBhcmUgYWxyZWFkeSBhcHBsaWVkLiBSZWFjaGFiaWxpdHkgaXMgdmlhIHN0YW5kYXJkIC9wcm9jIHJlYWRzLCB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbmQgdGhlIEZvY3VzU3ltYm9scyBhcmUgdmVyeSBzcGVjaWZpYyB0byB0aGUgYWx0ZXJlZCBmZWF0dXJlIGxvZ2ljLiBUaGUgRW5hYmxlQ29uZmlncyBhcmUgdGhlIGV4cGVjdGVkIG9uZXMuCgpUaGlzIGFsbCBjaGVja3Mgb3V0LiBUaGUgYW5hbHlzaXMgaXMgc29saWQsIGFuZCBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2Npb191cmluZ19mZFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2Npb191cmluZ19mZFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19pb191cmluZ19zaG93X2ZkaW5mbygpYCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgIHRvIHByZXZlbnQgdHJlYXRpbmcgdGhlIGxhc3Qgc2xvdCBvZiB0aGUgQ1EgcmluZyBhcnJheSBhcyBhIDMyLWJ5dGUgQ1FFIChgY3FlMzJgKS4gV2l0aG91dCBwcm9wZXIgYm91bmRhcnkgaGFuZGxpbmcsIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAgb24gdGhlIGxhc3QgZW50cnkgb2YgdGhlIHJpbmcgYXJyYXkgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiBgci1cdTAwM2VjcWVzW11gLlxuXG5UaGlzIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4uIFRoZSB1bmRlcmx5aW5nIENRIHJpbmcgcGFnZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgX19HRlBfWkVST2AgLyBgbWVtc2V0YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGBjcWUzMmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjEzMTEwMGNlMTY3YzQ4ZDNiMTQ5YTFjZDgzOGIyYjAzYjQwYTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTY6MjI6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jCmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2ZkaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2ZkaW5mby5jCkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNxX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpb191cmluZ19jcWUgKmNxZTsKIAkJYm9vbCBjcWUzMiA9IGZhbHNlOwomIzQzOwkJYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spOwogCiAJCWNxZSA9ICZhbXA7ci0mZ3Q7Y3Flc1soY3FfaGVhZCAmYW1wOyBjcV9tYXNrKV07Ci0JCWlmIChjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMiB8fCBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMikKJiM0MzsJCWlmICgoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpCiAJCQljcWUzMiA9IHRydWU7CiAJCXNlcV9wcmludGYobSwgJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4JiMzNDssCiAJCQkgICBjcV9oZWFkICZhbXA7IGNxX21hc2ssIGNxZS0mZ3Q7dXNlcl9kYXRhLCBjcWUtJmd0O3JlcywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBpb191cmluZy9mZGluZm8uYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgc3BlY2lmaWMgcGF0Y2ggaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gd2l0aGluIHN5emthbGxlci4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyB3ZSBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBlYXJseS4gRXNzZW50aWFsbHksIEkmIzM5O20gcGVyZm9ybWluZyBhIHJpc2sgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBoaWdoZXIgcmlzayBwcm9maWxlIGZvciBtZW1vcnkgZXJyb3JzIHRoYXQgS0FTQU4gbWlnaHQgbWlzcy4gSXQmIzM5O3MgYSBiZW5pZ24gYWN0aW9uOyBhIHN0YW5kYXJkIHBhcnQgb2YgbXkgd29ya2Zsb3cgZm9yIHJldmlld2luZyBjaGFuZ2VzLiBJJiMzOTttIG9wZXJhdGluZyBhcyBhIHNvcnQgb2YgZGVmZW5zaXZlIG1lY2hhbmlzbSwgYSBkZXZlbG9wZXIgUUEgdG9vbCwgZm9yIHN5emthbGxlciB0cmlhZ2UuCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgcGF0Y2ggYWN0dWFsbHkgZG9lcy4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBkaWZmLCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE1NSwgd2hpY2ggSSYjMzk7dmUgYnJvdWdodCBpbnRvIHZpZXcgd2l0aCBgcmVhZC1maWxlYC4gCgpgYGBkaWZmCmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jCmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2ZkaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2ZkaW5mby5jCkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNxX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpb191cmluZ19jcWUgKmNxZTsKIAkJYm9vbCBjcWUzMiA9IGZhbHNlOwomIzQzOwkJYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spOwogCiAJCWNxZSA9ICZhbXA7ci0mZ3Q7Y3Flc1soY3FfaGVhZCAmYW1wOyBjcV9tYXNrKV07Ci0JCWlmIChjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMiB8fCBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMikKJiM0MzsJCWlmICgoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpCiAJCQljcWUzMiA9IHRydWU7CiAJCXNlcV9wcmludGYobSwgJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4JiMzNDssCiAJCQkgICBjcV9oZWFkICZhbXA7IGNxX21hc2ssIGNxZS0mZ3Q7dXNlcl9kYXRhLCBjcWUtJmd0O3JlcywKYGBgCgpJdCBzZWVtcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLiBUaGlzIGlzIGxpa2VseSBhIGJvdW5kYXJ5IGNvbmRpdGlvbiByZWxhdGVkIHRvIGBJT1JJTkdfQ1FFX0ZfMzJgIGhhbmRsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGlzIG5ldyBjb25kaXRpb25hbC4gQXJlIHRoZXJlIHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycz8gSXMgdGhlcmUgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gdGhhdCBLTVNBTiBtaWdodCBjYXRjaCB0aGF0IEtBU0FOIHdvdWxkbiYjMzk7dD8gVGhlIGFkZGl0aW9uIG9mIGAhaXNfbGFzdF9jcWFycmF5X3Nsb3RgIHN1Z2dlc3RzIGEgcG9zc2libGUgY29ycmVjdGlvbiB0byBhIHByZXZpb3VzIGlzc3VlLCBwb3NzaWJseSBhIG1lbW9yeSBhY2Nlc3MgdGhhdCBnb2VzIGJleW9uZCB0aGUgYm91bmRzIG9mIGEgYnVmZmVyIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsb2dpYyBoZXJlIGludHJvZHVjZXMgbW9yZSBjb21wbGV4IGNvbmRpdGlvbnMsIGFuZCB3aGV0aGVyIEtNU0FOJiMzOTtzIHN0cmljdGVyIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24gd291bGQgcHJvdmlkZSBhZGRpdGlvbmFsIHZhbHVlLiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciBhY2Nlc3NlcyB0byBmcmVlZCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBjb3VsZCBhcmlzZSBiZWNhdXNlIG9mIHRoaXMgY2hlY2suIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0XHR1NjQgKnNxZWIgPSAodm9pZCAqKSAoc3FlICYjNDM7IDEpO1xuIDE0MTpcdFx0XHRcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XG4gMTQyOlx0XHRcdFx0aW50IGo7XG4gMTQzOlx0XG4gMTQ0Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2Mgc2l6ZTsgaiYjNDM7JiM0MzspIHtcbiAxNDU6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LCBlJWQ6MHglbGx4XCYjMzQ7LCBqLFxuIDE0NjpcdFx0XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcbiAxNDc6XHRcdFx0XHRcdHNxZWImIzQzOyYjNDM7O1xuIDE0ODpcdFx0XHRcdH1cbiAxNDk6XHRcdFx0fVxuIDE1MDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1xcblwmIzM0Oyk7XG4gMTUxOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtDUUVzOlxcdCV1XFxuXCYjMzQ7LCBjcV90YWlsIC0gY3FfaGVhZCk7XG4gMTU0Olx0XHRjcV9lbnRyaWVzID0gbWluKGNxX3RhaWwgLSBjcV9oZWFkLCBjdHgtXHUwMDNlY3FfZW50cmllcyk7XG4gMTU1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDE1NjpcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gMTU3Olx0XHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbiAxNTg6XHRcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIDE1OTpcdFxuIDE2MDpcdFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbiAxNjE6XHRcdFx0aWYgKChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXHUwMDI2XHUwMDI2XG4gMTYyOlx0XHRcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXG4gMTYzOlx0XHRcdFx0Y3FlMzIgPSB0cnVlO1xuIDE2NDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU1dTogdXNlcl9kYXRhOiVsbHUsIHJlczolZCwgZmxhZ3M6JXhcJiMzNDssXG4gMTY1Olx0XHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiAxNjY6XHRcdFx0XHQgICBjcWUtXHUwMDNlZmxhZ3MpO1xuIDE2NzpcdFx0XHRpZiAoY3FlMzIpXG4gMTY4Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdVwmIzM0OyxcbiAxNjk6XHRcdFx0XHRcdFx0Y3FlLVx1MDAzZWJpZ19jcWVbMF0sIGNxZS1cdTAwM2ViaWdfY3FlWzFdKTtcbiAxNzA6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtcXG5cJiMzNDspO1xuIDE3MTpcdFx0XHRjcV9oZWFkJiM0MzsmIzQzOztcbiAxNzI6XHRcdFx0aWYgKGNxZTMyKSB7XG4gMTczOlx0XHRcdFx0Y3FfaGVhZCYjNDM7JiM0Mzs7XG4gMTc0Olx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4gMTc1Olx0XHRcdH1cbiAxNzY6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FQT0xMKSB7XG4gMTgwOlx0XHRcdHN0cnVjdCBpb19zcV9kYXRhICpzcSA9IGN0eC1cdTAwM2VzcV9kYXRhO1xuIDE4MTpcdFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiAxODI6XHRcbiAxODM6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDE4NDpcdFx0XHR0c2sgPSByY3VfZGVyZWZlcmVuY2Uoc3EtXHUwMDNldGhyZWFkKTtcbiAxODU6XHRcdFx0LypcbiAxODY6XHRcdFx0ICogc3EtXHUwMDNldGhyZWFkIG1pZ2h0IGJlIE5VTEwgaWYgd2UgcmFjZWQgd2l0aCB0aGUgc3Fwb2xsXG4gMTg3Olx0XHRcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cbiAxODg6XHRcdFx0ICovXG4gMTg5Olx0XHRcdGlmICh0c2spIHtcbiAxOTA6XHRcdFx0XHR1NjQgdXNlYztcbiAxOTE6XHRcbiAxOTI6XHRcdFx0XHRnZXRfdGFza19zdHJ1Y3QodHNrKTtcbiAxOTM6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxOTQ6XHRcdFx0XHR1c2VjID0gaW9fc3FfY3B1X3VzZWModHNrKTtcbiAxOTU6XHRcdFx0XHRzcV9waWQgPSB0YXNrX3BpZF9ucl9ucyh0c2ssXG4gMTk2Olx0XHRcdFx0XHRcdFx0cHJvY19waWRfbnMoZmlsZV9pbm9kZShtLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2IpKTtcbiAxOTc6XHRcdFx0XHRwdXRfdGFza19zdHJ1Y3QodHNrKTtcbiAxOTg6XHRcdFx0XHRzcV9jcHUgPSBzcS1cdTAwM2VzcV9jcHU7XG4gMTk5Olx0XHRcdFx0c3FfdG90YWxfdGltZSA9IHVzZWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlzc2VjdGluZyB0aGUgaW9fdXJpbmcgQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSAoQ1FFKSBEaXNwbGF5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24uIFNlZW1zIGxpa2UgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGlvX3VyaW5nIGNvbXBsZXRpb24gcXVldWUgZW50cmllcy4gSSBjYW4gc2VlIGl0JiMzOTtzIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBDUUUgcmluZyBidWZmZXIsIGV4dHJhY3RpbmcgZGF0YSBmcm9tIGVhY2ggZW50cnkgYW5kIHByaW50aW5nIGl0IG91dC4gVGhlIGxvb3AmIzM5O3MgbGltaXQgaXMgZGVmaW5lZCBieSB0aGUgYGNxX3RhaWxgIGFuZCBgY3FfaGVhZGAgdmFyaWFibGVzLCBhbmQgaW1wb3J0YW50bHkgaXQmIzM5O3MgY2FwcGVkIGJ5IGBjdHgtJmd0O2NxX2VudHJpZXNgLiBUaGlzIGlzIGEgY2xhc3NpYyByaW5nIGJ1ZmZlciB0cmF2ZXJzYWwuCgpOb3csIEkgc3BvdCBhIGNvbmRpdGlvbmFsIGJsb2NrIGludm9sdmluZyBgSU9SSU5HX0NRRV9GXzMyYCBhbmQgYGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0NRRTMyYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBjdXJyZW50IENRRSBpcyB1c2luZyBhIDMyLWJpdCBsYXlvdXQuIElmIHRoaXMgaXMgdGhlIGNhc2UsIGl0IHNldHMgYGNxZTMyYCB0byB0cnVlLiBJbnNpZGUgdGhlIGxvb3AsIEkgc2VlIHRoZSB0eXBpY2FsIGB1c2VyX2RhdGFgLCBgcmVzYCwgYW5kIGBmbGFnc2AgYmVpbmcgcHJpbnRlZCB1c2luZyBgc2VxX3ByaW50ZmAuIFRoZW4sIGlmIGBjcWUzMmAgaXMgdHJ1ZSwgaXQgYWxzbyBwcmludHMgYGV4dHJhMWAgYW5kIGBleHRyYTJgLCB3aGljaCBpbiB0aGlzIGNvbnRleHQgbWVhbnMgYGNxZS0mZ3Q7YmlnX2NxZVswXWAgYW5kIGBjcWUtJmd0O2JpZ19jcWVbMV1gLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgY3FlLSZndDtiaWdfY3FlWzBdYCBhbmQgYGNxZS0mZ3Q7YmlnX2NxZVsxXWA/IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgdGhvc2UgbWVtYmVycyBleHBsaWNpdGx5IGluIHRoZSBzdGFuZGFyZCBDUUUgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpb191cmluZ19jcWVgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dHJhIGZpZWxkcyBhcmUgYmVpbmcgdXNlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXkmIzM5O3JlIHByZXNlbnQuIFRpbWUgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcyBmb3IgdGhlIGlvX3VyaW5nIGRlZmluaXRpb25zLCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBrZXJuZWwmIzM5O3MgYWN0dWFsbHkgZG9pbmcuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIHN0cnVjdCYjMzk7cyBkZWZpbml0aW9uIHRvIGZpbmQgb3V0IHdoYXQgdGhlc2UgYGJpZ19jcWVgIGZpZWxkcyBhY3R1YWxseSByZXByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpb191cmluZ19jcWUgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTQ2Mz1lbnVtIGlvX3VyaW5nX21zZ19yaW5nX2ZsYWdzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC00OTktICovXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo1MDA6c3RydWN0IGlvX3VyaW5nX2NxZSB7XG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC01MDEtXHRfX3U2NFx0dXNlcl9kYXRhO1x0Lyogc3FlLVx1MDAzZXVzZXJfZGF0YSB2YWx1ZSBwYXNzZWQgYmFjayAqL1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTM3ND1lbnVtIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC0zOTEtICovXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDozOTI6c3RydWN0IGlvX3VyaW5nX2NxZSB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC0zOTMtXHRfX3U2NFx0dXNlcl9kYXRhO1x0Lyogc3FlLVx1MDAzZWRhdGEgc3VibWlzc2lvbiBwYXNzZWQgYmFjayAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjUzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpb191cmluZy5oOiBBcm91bmQgTGluZSA1MDAqKgoKT2theSwgdGltZSB0byBnZXQgYSBiaXQgbW9yZSBncmFudWxhci4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaGAgcmlnaHQgYXJvdW5kIGxpbmUgNTAwLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgcHJvYmFibHkgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSByaW5nIGJ1ZmZlcnMgb3IgdGhlIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzLiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciBzcGVjaWZpY3Mgb24gZGF0YSBsYXlvdXRzLCBmbGFncywgb3IgZmllbGQgbWVhbmluZ3MuIE1heWJlIEkmIzM5O20gdHJ5aW5nIHRvIGNyb3NzLXJlZmVyZW5jZSBzb21lIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIHdpdGggc29tZSB0cmFjZSBvdXRwdXQsIGFuZCBuZWVkIHRvIHBpbnBvaW50IGEgc3BlY2lmaWMgYml0ZmllbGQgb3Igc3RydWN0IG1lbWJlciByZXNwb25zaWJsZS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHN1YnRsZSBnb3RjaGFzIGluIHRoZSBtZW1vcnkgb3JkZXJpbmcgb3IgcGFkZGluZy4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSBJJiMzOTttIGludmVzdGlnYXRpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpYywgbGlrZSBhIHBhcnRpY3VsYXIgbGF0ZW5jeSBhbm9tYWx5LCBhbmQgSSB0aGluayB0aGF0IGxpbmUgNTAwIHdpbGwgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyBhIGtleSBkZXNpZ24gZGVjaXNpb24gbWF5IGJlIHdvcmtpbmcuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHVzdWFsbHkgcHJldHR5IGdvb2QsIGJ1dCBJIGFsc28gZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgZGVncmVlIG9mIGltcGxpY2l0IGtub3dsZWRnZSBlbWJlZGRlZCBpbiB0aG9zZSBoZWFkZXJzLiBJIHdhbnQgdG8gYnVpbGQgYSBiZXR0ZXIgbW9kZWwgZm9yIHdoYXQgdGhlIGRldmVsb3BlcnMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5ODpcdCAqIElPIGNvbXBsZXRpb24gZGF0YSBzdHJ1Y3R1cmUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpXG4gNDk5Olx0ICovXG4gNTAwOlx0c3RydWN0IGlvX3VyaW5nX2NxZSB7XG4gNTAxOlx0XHRfX3U2NFx0dXNlcl9kYXRhO1x0Lyogc3FlLVx1MDAzZXVzZXJfZGF0YSB2YWx1ZSBwYXNzZWQgYmFjayAqL1xuIDUwMjpcdFx0X19zMzJcdHJlcztcdFx0LyogcmVzdWx0IGNvZGUgZm9yIHRoaXMgZXZlbnQgKi9cbiA1MDM6XHRcdF9fdTMyXHRmbGFncztcbiA1MDQ6XHRcbiA1MDU6XHRcdC8qXG4gNTA2Olx0XHQgKiBJZiB0aGUgcmluZyBpcyBpbml0aWFsaXplZCB3aXRoIElPUklOR19TRVRVUF9DUUUzMiwgdGhlbiB0aGlzIGZpZWxkXG4gNTA3Olx0XHQgKiBjb250YWlucyAxNi1ieXRlcyBvZiBwYWRkaW5nLCBkb3VibGluZyB0aGUgc2l6ZSBvZiB0aGUgQ1FFLlxuIDUwODpcdFx0ICovXG4gNTA5Olx0XHRfX3U2NCBiaWdfY3FlW107XG4gNTEwOlx0fTtcbiA1MTE6XHRcbiA1MTI6XHQvKlxuIDUxMzpcdCAqIGNxZS1cdTAwM2VmbGFnc1xuIDUxNDpcdCAqXG4gNTE1Olx0ICogSU9SSU5HX0NRRV9GX0JVRkZFUlx0SWYgc2V0LCB0aGUgdXBwZXIgMTYgYml0cyBhcmUgdGhlIGJ1ZmZlciBJRFxuIDUxNjpcdCAqIElPUklOR19DUUVfRl9NT1JFXHRJZiBzZXQsIHBhcmVudCBTUUUgd2lsbCBnZW5lcmF0ZSBtb3JlIENRRSBlbnRyaWVzXG4gNTE3Olx0ICogSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFlcdElmIHNldCwgbW9yZSBkYXRhIHRvIHJlYWQgYWZ0ZXIgc29ja2V0IHJlY3ZcbiA1MTg6XHQgKiBJT1JJTkdfQ1FFX0ZfTk9USUZcdFNldCBmb3Igbm90aWZpY2F0aW9uIENRRXMuIENhbiBiZSB1c2VkIHRvIGRpc3RpbmN0XG4gNTE5Olx0ICogXHRcdFx0dGhlbSBmcm9tIHNlbmRzLlxuIDUyMDpcdCAqIElPUklOR19DUUVfRl9CVUZfTU9SRSBJZiBzZXQsIHRoZSBidWZmZXIgSUQgc2V0IGluIHRoZSBjb21wbGV0aW9uIHdpbGwgZ2V0XG4gNTIxOlx0ICpcdFx0XHRtb3JlIGNvbXBsZXRpb25zLiBJbiBvdGhlciB3b3JkcywgdGhlIGJ1ZmZlciBpcyBiZWluZ1xuIDUyMjpcdCAqXHRcdFx0cGFydGlhbGx5IGNvbnN1bWVkLCBhbmQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwgZm9yXG4gNTIzOlx0ICpcdFx0XHRtb3JlIGNvbXBsZXRpb25zLiBUaGlzIGlzIG9ubHkgc2V0IGZvciBidWZmZXJzIHVzZWQgdmlhXG4gNTI0Olx0ICpcdFx0XHR0aGUgaW5jcmVtZW50YWwgYnVmZmVyIGNvbnN1bXB0aW9uLCBhcyBwcm92aWRlZCBieVxuIDUyNTpcdCAqXHRcdFx0YSByaW5nIGJ1ZmZlciBzZXR1cCB3aXRoIElPVV9QQlVGX1JJTkdfSU5DLiBGb3IgYW55XG4gNTI2Olx0ICpcdFx0XHRvdGhlciBwcm92aWRlZCBidWZmZXIgdHlwZSwgYWxsIGNvbXBsZXRpb25zIHdpdGggYVxuIDUyNzpcdCAqXHRcdFx0YnVmZmVyIHBhc3NlZCBiYWNrIGlzIGF1dG9tYXRpY2FsbHkgcmV0dXJuZWQgdG8gdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGlvX3VyaW5nIENRRSBNZW1vcnkgTGF5b3V0IGluIENRRTMyIE1vZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgaW9fdXJpbmdfY3FlYCBzdHJ1Y3R1cmUuIEEgc3RhbmRhcmQgb25lIGlzIDE2IGJ5dGVzOiB1c2VyIGRhdGEsIHJlc3VsdCwgZmxhZ3MsIGFuZCB0aGVuIHRoYXQgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBiaWdfY3FlW11gLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB3aGVuIENRRTMyIG1vZGUgaXMgZW5hYmxlZDsgaXQgYmVjb21lcyAzMiBieXRlcywgZWZmZWN0aXZlbHkgdGFraW5nIHVwIHR3byBzbG90cyBpbiB0aGUgYHItJmd0O2NxZXNbXWAgYXJyYXkuCgpOb3csIHRoZSBjb2RlIGFjY2Vzc2VzIHRoZSBDUUUgbGlrZSB0aGlzOiBgY3FlID0gJmFtcDtyLSZndDtjcWVzWyhjcV9oZWFkICZhbXA7IGNxX21hc2spXTtgIGFuZCBpbiBDUUUzMiBpdCB1c2VzIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYC4gU2luY2UgdGhlICpvcmlnaW5hbCogYHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfY3FlKWAgaXMgMTYgYnl0ZXMsIGBiaWdfY3FlWzBdYCAqc2hvdWxkKiBiZSBhdCBvZmZzZXQgMTYgd2l0aGluIHRoYXQgc3RydWN0dXJlLCBtYWtpbmcgaXRzIG1lbW9yeSBsb2NhdGlvbiBlcXVpdmFsZW50IHRvIGAmYW1wO3ItJmd0O2NxZXNbKGNxX2hlYWQgJmFtcDsgY3FfbWFzaykgJiM0MzsgMV1gLgoKSGVyZSYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGFyaXNlczogaWYgYChjcV9oZWFkICZhbXA7IGNxX21hc2spYCBwb2ludHMgdG8gdGhlICpsYXN0KiBlbGVtZW50IG9mIHRoZSBgci0mZ3Q7Y3Flc2AgYXJyYXkgKGkuZS4sIGBjcV9tYXNrYCksIHRoZW4gYCZhbXA7ci0mZ3Q7Y3Flc1tjcV9tYXNrICYjNDM7IDFdYCBpcyBkZWZpbml0ZWx5IG91dCBvZiBib3VuZHMuIEFjY2Vzc2luZyBtZW1vcnkgKmFmdGVyKiB0aGUgYXJyYXkgYm91bmRzIGlzIGFsd2F5cyBhIHByb2JsZW0uCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIFdoeSB3YXMgdGhhdCBhZGRlZD8gSXQgc2VlbXMgcmVsYXRlZCB0byB0aGlzIG91dC1vZi1ib3VuZHMgaXNzdWUuIFRoaXMgaXMgbGlrZWx5IHRoZSBjcnVjaWFsIHBpZWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayBpcyBpbiBwbGFjZS4KClRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBnaXQgaGlzdG9yeS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb21taXQgbWVzc2FnZXMgc2F5LiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgb3IgYElPUklOR19TRVRVUF9DUUUzMmAgdG8gZmluZCBvdXQgdGhlIHJlYXNvbiB0aGlzIHdhcyBjaGFuZ2VkLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4IG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBkb3VibGVkIHNpemUgb2YgQ1FFcyBpbiBDUUUzMiBtb2RlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRvIGJlIDEwMCUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9SSU5HX1NFVFVQX0NRRTMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvZmRpbmZvLmM9NjA9c3RhdGljIHZvaWQgX19pb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTE2MC1cdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG5pb191cmluZy9mZGluZm8uYzoxNjE6XHRcdGlmICgoY3FlLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFx1MDAyNlx1MDAyNlxuaW9fdXJpbmcvZmRpbmZvLmMtMTYyLVx0XHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NTE1PXN0YXRpYyB2b2lkIF9faW9fY3FyaW5nX292ZXJmbG93X2ZsdXNoKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGR5aW5nKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTMyLVx0XHRpZiAob2NxZS1cdTAwM2VjcWUuZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1MzM6XHRcdCAgICBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzQtXHRcdFx0aXNfY3FlMzIgPSB0cnVlO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM2LVx0XHR9XG5pb191cmluZy9pb191cmluZy5jOjUzNzpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzgtXHRcdFx0aXNfY3FlMzIgPSBmYWxzZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTY1Mj1zdGF0aWMgc3RydWN0IGlvX292ZXJmbG93X2NxZSAqaW9fYWxsb2Nfb2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTY1OS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6NjYwOlx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9pb191cmluZy5jLTY2MS1cdFx0aXNfY3FlMzIgPSB0cnVlO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc0Ny1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzQ4Olx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9pb191cmluZy5jLTc0OS1cdFx0b2ZmIFx1MDAzY1x1MDAzYz0gMTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc2Mi1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlx0aWYgKFdBUk5fT05fT05DRSghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA0LVx0b2ZmID0gc3RydWN0X3NpemUocmluZ3MsIGNxZXMsIGNxX2VudHJpZXMpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTA1Olx0aWYgKGZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXG5pb191cmluZy9pb191cmluZy5jLTIxMDYtXHRcdG9mZiA9IHNpemVfbXVsKG9mZiwgMik7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzg4PXN0YXRpYyBpbnQgaW9fdXJpbmdfc2FuaXRpc2VfcGFyYW1zKHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnApXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVx0ICovXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XHRpZiAoKGZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSA9PVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3Olx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy9pb191cmluZy5jLTI4MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjUtXHRcdFx0SU9SSU5HX1NFVFVQX1NRRTEyOCB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NjY6XHRcdFx0SU9SSU5HX1NFVFVQX0NRRTMyIHxcXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC02Ny1cdFx0XHRJT1JJTkdfU0VUVVBfU0lOR0xFX0lTU1VFUiB8XFxcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZV9vdmVyZmxvdyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI3MS1cdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MjcyOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9pb191cmluZy5oLTI3My1cdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMTAtXHRtZW1jcHkoY3FlLCBcdTAwMjZyZXEtXHUwMDNlY3FlLCBzaXplb2YoKmNxZSkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDozMTE6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIgfHwgaXNfY3FlMzIpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzEyLVx0XHRtZW1jcHkoY3FlLVx1MDAzZWJpZ19jcWUsIFx1MDAyNnJlcS1cdTAwM2ViaWdfY3FlLCBzaXplb2YoKmNxZSkpO1xuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmM9OTY9c3RhdGljIGludCBpb19tc2dfcmluZ19jcWVfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICp0YXJnZXRfY3R4LFxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA1LVx0aWYgKCgqZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMikgXHUwMDI2XHUwMDI2XG5pb191cmluZy9tc2dfcmluZy5jOjEwNjpcdCAgICAhKHRhcmdldF9jdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxuaW9fdXJpbmcvbXNnX3JpbmcuYy0xMDctXHRcdFx0XHQgICBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG4tLVxuaW9fdXJpbmcvbm9wLmM9Mjc9aW50IGlvX25vcF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4tLVxuaW9fdXJpbmcvbm9wLmMtNDktXG5pb191cmluZy9ub3AuYzo1MDpcdFx0aWYgKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL25vcC5jLTUxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDgwPXN0YXRpYyB2b2lkIGlvX3JlZ2lzdGVyX2ZyZWVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTQtI2RlZmluZSBDT1BZX0ZMQUdTXHQoSU9SSU5HX1NFVFVQX05PX1NRQVJSQVkgfCBJT1JJTkdfU0VUVVBfU1FFMTI4IHwgXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDk1Olx0XHRcdCBJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfTk9fTU1BUCB8IFxcXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ni1cdFx0XHQgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8IElPUklOR19TRVRVUF9TUUVfTUlYRUQpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy02NDktXHRcdGRzdF9tYXNrID0gcC1cdTAwM2VjcV9lbnRyaWVzIC0gMTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NjUwOlx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjUxLVx0XHRcdGluZGV4IFx1MDAzY1x1MDAzYz0gMTtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0yNDM9aW50IGlvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9TUUUxMjg7XG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy91cmluZ19jbWQuYy0yNjEtXHRcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTgzMT1zdGF0aWMgaW50IGltcG9ydF96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy04NDEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjg0MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtODQzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy05ODEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjk4MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtOTgzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGlvX3VyaW5nIENRRSBNaXhlZCBNb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGFuZCBgaW9fdXJpbmcvaW9fdXJpbmcuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSBoYW5kbGUgYElPUklOR19TRVRVUF9DUUVfTUlYRURgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGZsYWcgYWN0dWFsbHkgZG9lcy4gU28sIEkmIzM5O2xsIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBjb2RlYmFzZSBmb3IgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGFuZCBzZWUgaG93IGl0JiMzOTtzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9NzU4PXN0YXRpYyBib29sIGlvX2ZpbGxfY3FlX2F1eDMyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NjM6XHRpZiAoV0FSTl9PTl9PTkNFKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSkpXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIwODQtXG5pb191cmluZy9pb191cmluZy5jOjIwODU6XHRpZiAoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4Ni1cdFx0aWYgKGNxX2VudHJpZXMgXHUwMDNjIDIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzg4PXN0YXRpYyBpbnQgaW9fdXJpbmdfc2FuaXRpc2VfcGFyYW1zKHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnApXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVx0ICovXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XHRpZiAoKGZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSA9PVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3Olx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy9pb191cmluZy5jLTI4MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzItXHRcdFx0SU9SSU5HX1NFVFVQX0hZQlJJRF9JT1BPTEwgfFxcXG5pb191cmluZy9pb191cmluZy5oOjczOlx0XHRcdElPUklOR19TRVRVUF9DUUVfTUlYRUQgfFxcXG5pb191cmluZy9pb191cmluZy5oLTc0LVx0XHRcdElPUklOR19TRVRVUF9TUUVfTUlYRUQgfFxcXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzMtXHRcdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjc0Olx0fSBlbHNlIGlmIChjcWUzMiBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSB7XG5pb191cmluZy9pb191cmluZy5oLTI3NS1cdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjg4PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19kZWZlcl9nZXRfdW5jb21taXRlZF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTMtXHRjdHgtXHUwMDNlc3VibWl0X3N0YXRlLmNxX2ZsdXNoID0gdHJ1ZTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjk0Olx0cmV0dXJuIGlvX2dldF9jcWUoY3R4LCBjcWVfcmV0LCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTUtfVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzM2PXN0YXRpYyBpbmxpbmUgdTMyIGN0eF9jcWUzMl9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM3LXtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzM4Olx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM5LVx0XHRyZXR1cm4gSU9SSU5HX0NRRV9GXzMyO1xuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmM9OTY9c3RhdGljIGludCBpb19tc2dfcmluZ19jcWVfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICp0YXJnZXRfY3R4LFxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA2LVx0ICAgICEodGFyZ2V0X2N0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8XG5pb191cmluZy9tc2dfcmluZy5jOjEwNzpcdFx0XHRcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9ub3AuYz0yNz1pbnQgaW9fbm9wX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9ub3AuYy00OS1cbmlvX3VyaW5nL25vcC5jOjUwOlx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvbm9wLmMtNTEtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5NS1cdFx0XHQgSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX05PX01NQVAgfCBcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTY6XHRcdFx0IElPUklOR19TRVRVUF9DUUVfTUlYRUQgfCBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTctXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUyPXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2Ni1cdGlmIChpc19jcWUzMikge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY3Olx0XHRpZiAocmVxLVx1MDAzZWN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2OC1cdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0yNDM9aW50IGlvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9TUUUxMjg7XG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy91cmluZ19jbWQuYy0yNjEtXHRcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTgzMT1zdGF0aWMgaW50IGltcG9ydF96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy04NDEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjg0MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtODQzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy05ODEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjk4MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtOTgzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy96Y3J4LmM9MTYyOD1zdGF0aWMgYm9vbCBpb196Y3J4X3F1ZXVlX2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IG5ldF9pb3YgKm5pb3YsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTE2NDItXHRjcWUtXHUwMDNlZmxhZ3MgPSBJT1JJTkdfQ1FFX0ZfTU9SRTtcbmlvX3VyaW5nL3pjcnguYzoxNjQzOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbmlvX3VyaW5nL3pjcnguYy0xNjQ0LVx0XHRjcWUtXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENRRSBNaXhlZCBNb2RlKioKCk9rYXksIHNvIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBpcyB0aGUga2V5LCBsZXR0aW5nIHVzIHdvcmsgd2l0aCBib3RoIDE2LSBhbmQgMzItYnl0ZSBDb21wbGV0aW9uIFF1ZXVlIEVudHJpZXMgKENRRXMpLiBHb3QgaXQuIE5vdywgaW4gdGhpcyAmIzM0O21peGVkIG1vZGUsJiMzNDsgdGhlIGBjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMmAgYml0IGlzIHRoZSBjcnVjaWFsIGluZGljYXRvciDigJMgaXQgdGVsbHMgbWUgd2hldGhlciBJJiMzOTttIGxvb2tpbmcgYXQgYSAzMi1ieXRlIENRRSwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgaXQmIzM5O3MgdGFraW5nIHVwIHR3byBjb25zZWN1dGl2ZSBzbG90cyBpbiB0aGUgcmluZy4KCkhtbSwgdGhhdCBpbW1lZGlhdGVseSBicmluZ3MgdXAgYSBjb3JuZXIgY2FzZSB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gSWYgSSBoYXZlIGEgMzItYnl0ZSBDUUUgc2l0dGluZyBhdCB0aGUgKnZlcnkqIGVuZCBvZiB0aGUgcmluZyBidWZmZXIsIGhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIHRoYXQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBpb19nZXRfY3FlYCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGF0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2dldF9jcWVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cdFx0cmV0dXJuIGZhbHNlO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NjU6XHRpZiAodW5saWtlbHkoIWlvX2dldF9jcWUoY3R4LCBcdTAwMjZjcWUsIHRydWUpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NzM9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1NjQgdXNlcl9kYXRhLCBzMzIgcmVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzc4LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3Nzk6XHRpZiAobGlrZWx5KGlvX2dldF9jcWUoY3R4LCBcdTAwMjZjcWUsIGNxZTMyKSkpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzgwLVx0XHRXUklURV9PTkNFKGNxZS1cdTAwM2V1c2VyX2RhdGEsIHVzZXJfZGF0YSk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yODEtXG5pb191cmluZy9pb191cmluZy5oOjI4MjpzdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX2NxZSAqKnJldCxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjgzLVx0XHRcdFx0Ym9vbCBjcWUzMilcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI4OD1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZGVmZXJfZ2V0X3VuY29tbWl0ZWRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjkzLVx0Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jcV9mbHVzaCA9IHRydWU7XG5pb191cmluZy9pb191cmluZy5oOjI5NDpcdHJldHVybiBpb19nZXRfY3FlKGN0eCwgY3FlX3JldCwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjk1LX1cbi0tXG5pb191cmluZy9pb191cmluZy5oPTI5Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaW9fZmlsbF9jcWVfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzA2LVx0ICovXG5pb191cmluZy9pb191cmluZy5oOjMwNzpcdGlmICh1bmxpa2VseSghaW9fZ2V0X2NxZShjdHgsIFx1MDAyNmNxZSwgaXNfY3FlMzIpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzA4LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gYGlvX3VyaW5nLmhgIGF0IExpbmUgMjgyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBgaW9fdXJpbmdgLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlLCBgaW9fdXJpbmcuaGAuIEkmIzM5O3ZlIGhvbmVkIGluIG9uIGxpbmUgMjgyLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIG9yIHBlcnRpbmVudCB0byBteSBjdXJyZW50IHByb2JsZW0gZGVmaW5lZCBvciByZWZlcmVuY2VkIGFyb3VuZCB0aGF0IGFyZWEuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxpbmUgcmV2ZWFscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3RydWN0cywgZW51bXMsIG1hY3Jvcywgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IG1pZ2h0IGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgW3RoZSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IC0gdGhpcyBwYXJ0IGlzIHVwIHRvIHRoZSB1c2VyJiMzOTtzIGV4cGVydGlzZSBhbmQgY29udGV4dC4gRXhhbXBsZTogcXVldWluZyBiZWhhdmlvciwgY29tcGxldGlvbiBoYW5kbGluZywgc3VibWlzc2lvbiBmbGFncywgbGlua2VkIHJlcXVlc3RzLCBldGNdLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBsaW5lIDI4MiBpcyBndWFyZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRcdFx0XHRcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqKnJldCxcbiAyNjE6XHRcdFx0XHRcdFx0Ym9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbiAyNjI6XHR7XG4gMjYzOlx0XHRpb19sb2NrZGVwX2Fzc2VydF9jcV9sb2NrZWQoY3R4KTtcbiAyNjQ6XHRcbiAyNjU6XHRcdGlmICh1bmxpa2VseShjdHgtXHUwMDNlY3FlX3NlbnRpbmVsIC0gY3R4LVx1MDAzZWNxZV9jYWNoZWQgXHUwMDNjIChjcWUzMiAmIzQzOyAxKSkpIHtcbiAyNjY6XHRcdFx0aWYgKHVubGlrZWx5KCFpb19jcWVfY2FjaGVfcmVmaWxsKGN0eCwgb3ZlcmZsb3csIGNxZTMyKSkpXG4gMjY3Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI2ODpcdFx0fVxuIDI2OTpcdFx0KnJldCA9IGN0eC1cdTAwM2VjcWVfY2FjaGVkO1xuIDI3MDpcdFx0Y3R4LVx1MDAzZWNhY2hlZF9jcV90YWlsJiM0MzsmIzQzOztcbiAyNzE6XHRcdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbiAyNzI6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuIDI3MzpcdFx0XHRjdHgtXHUwMDNlY3FlX2NhY2hlZCYjNDM7JiM0Mzs7XG4gMjc0Olx0XHR9IGVsc2UgaWYgKGNxZTMyIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcbiAyNzU6XHRcdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuIDI3NjpcdFx0XHRjdHgtXHUwMDNlY2FjaGVkX2NxX3RhaWwmIzQzOyYjNDM7O1xuIDI3NzpcdFx0fVxuIDI3ODpcdFx0V0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VjcWVfY2FjaGVkIFx1MDAzZSBjdHgtXHUwMDNlY3FlX3NlbnRpbmVsKTtcbiAyNzk6XHRcdHJldHVybiB0cnVlO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX2NxZSAqKnJldCxcbiAyODM6XHRcdFx0XHRcdGJvb2wgY3FlMzIpXG4gMjg0Olx0e1xuIDI4NTpcdFx0cmV0dXJuIGlvX2dldF9jcWVfb3ZlcmZsb3coY3R4LCByZXQsIGZhbHNlLCBjcWUzMik7XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19kZWZlcl9nZXRfdW5jb21taXRlZF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gMjg5Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfY3FlICoqY3FlX3JldClcbiAyOTA6XHR7XG4gMjkxOlx0XHRpb19sb2NrZGVwX2Fzc2VydF9jcV9sb2NrZWQoY3R4KTtcbiAyOTI6XHRcbiAyOTM6XHRcdGN0eC1cdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xuIDI5NDpcdFx0cmV0dXJuIGlvX2dldF9jcWUoY3R4LCBjcWVfcmV0LCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xuIDI5NTpcdH1cbiAyOTY6XHRcbiAyOTc6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaW9fZmlsbF9jcWVfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIDI5ODpcdFx0XHRcdFx0XHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gMjk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBzZWVpbmc6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIENRRSBPdmVyZmxvdyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgaW9fZ2V0X2NxZV9vdmVyZmxvd2AsIHNwZWNpZmljYWxseSwgdGhlIGNvbmRpdGlvbiB3aGVyZSB0aGUgQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSAoQ1FFKSBjYWNoZSBuZWVkcyByZWZpbGxpbmcuICBJIHNlZSB0aGF0IGl0IHRyaWdnZXJzIGBpb19jcWVfY2FjaGVfcmVmaWxsYCB3aGVuIGBjdHgtJmd0O2NxZV9zZW50aW5lbCAtIGN0eC0mZ3Q7Y3FlX2NhY2hlZGAgaXMgbGVzcyB0aGFuIGAoY3FlMzIgJiM0MzsgMSlgLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHRocmVzaG9sZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpbmVxdWFsaXR5IHNpZ25hbHMgYW4gb3ZlcmZsb3cgY29uZGl0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgbWFuYWdlZCBhbmQgcmVsYXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2VudGluZWwgYW5kIHRoZSBjYWNoZWQgZW50cnkgaXMgcHJvYmFibHkgaW5kaWNhdGluZyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IGluIHRoZSBjYWNoZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29kZSBhbnRpY2lwYXRlcyBhbiBpc3N1ZS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYGlvX2NxZV9jYWNoZV9yZWZpbGxgIGZ1bmN0aW9uIGluIGBpb191cmluZy9pb191cmluZy5jYCB0byBzZWUgaG93IGl0IHdvcmtzIGFuZCB3aGF0IHRyaWdnZXJzIGl0IHRvIGJlIG5lZWRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGxvZ2ljIHdpdGhpbiB0aGF0IHJlZmlsbCBmdW5jdGlvbiwgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIGNvcmUgQ1FFIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE1Olx0ICogY29udHJvbCBkZXBlbmRlbmN5IGlzIGVub3VnaCBhcyB3ZSYjMzk7cmUgdXNpbmcgV1JJVEVfT05DRSB0b1xuIDcxNjpcdCAqIGZpbGwgdGhlIGNxIGVudHJ5XG4gNzE3Olx0ICovXG4gNzE4Olx0Ym9vbCBpb19jcWVfY2FjaGVfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxuIDcxOTpcdHtcbiA3MjA6XHRcdHN0cnVjdCBpb19yaW5ncyAqcmluZ3MgPSBjdHgtXHUwMDNlcmluZ3M7XG4gNzIxOlx0XHR1bnNpZ25lZCBpbnQgb2ZmID0gY3R4LVx1MDAzZWNhY2hlZF9jcV90YWlsIFx1MDAyNiAoY3R4LVx1MDAzZWNxX2VudHJpZXMgLSAxKTtcbiA3MjI6XHRcdHVuc2lnbmVkIGludCBmcmVlLCBsZW47XG4gNzIzOlx0XG4gNzI0Olx0XHQvKlxuIDcyNTpcdFx0ICogUG9zdGluZyBpbnRvIHRoZSBDUSB3aGVuIHRoZXJlIGFyZSBwZW5kaW5nIG92ZXJmbG93ZWQgQ1FFcyBtYXkgYnJlYWtcbiA3MjY6XHRcdCAqIG9yZGVyaW5nIGd1YXJhbnRlZXMsIHdoaWNoIHdpbGwgYWZmZWN0IGxpbmtzLCBGX01PUkUgdXNlcnMgYW5kIG1vcmUuXG4gNzI3Olx0XHQgKiBGb3JjZSBvdmVyZmxvdyB0aGUgY29tcGxldGlvbi5cbiA3Mjg6XHRcdCAqL1xuIDcyOTpcdFx0aWYgKCFvdmVyZmxvdyBcdTAwMjZcdTAwMjYgKGN0eC1cdTAwM2VjaGVja19jcSBcdTAwMjYgQklUKElPX0NIRUNLX0NRX09WRVJGTE9XX0JJVCkpKVxuIDczMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzMxOlx0XG4gNzMyOlx0XHQvKlxuIDczMzpcdFx0ICogUG9zdCBkdW1teSBDUUUgaWYgYSAzMmIgQ1FFIGlzIG5lZWRlZCBhbmQgdGhlcmUmIzM5O3Mgb25seSByb29tIGZvciBhXG4gNzM0Olx0XHQgKiAxNmIgQ1FFIGJlZm9yZSB0aGUgcmluZyB3cmFwcy5cbiA3MzU6XHRcdCAqL1xuIDczNjpcdFx0aWYgKGNxZTMyIFx1MDAyNlx1MDAyNiBvZmYgJiM0MzsgMSA9PSBjdHgtXHUwMDNlY3FfZW50cmllcykge1xuIDczNzpcdFx0XHRpZiAoIWlvX2ZpbGxfbm9wX2NxZShjdHgsIG9mZikpXG4gNzM4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczOTpcdFx0XHRvZmYgPSAwO1xuIDc0MDpcdFx0fVxuIDc0MTpcdFxuIDc0MjpcdFx0ZnJlZSA9IGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gaW9fY3FyaW5nX3F1ZXVlZChjdHgpO1xuIDc0MzpcdFx0Lyogd2UgbmVlZCBhIGNvbnRpZ3VvdXMgcmFuZ2UsIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGFycmF5IG9mZnNldCAqL1xuIDc0NDpcdFx0bGVuID0gbWluKGZyZWUsIGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gb2ZmKTtcbiA3NDU6XHRcdGlmIChsZW4gXHUwMDNjIChjcWUzMiAmIzQzOyAxKSlcbiA3NDY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc0NzpcdFxuIDc0ODpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG4gNzQ5Olx0XHRcdG9mZiBcdTAwM2NcdTAwM2M9IDE7XG4gNzUwOlx0XHRcdGxlbiBcdTAwM2NcdTAwM2M9IDE7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XG4gNzUzOlx0XHRjdHgtXHUwMDNlY3FlX2NhY2hlZCA9IFx1MDAyNnJpbmdzLVx1MDAzZWNxZXNbb2ZmXTtcbiA3NTQ6XHRcdGN0eC1cdTAwM2VjcWVfc2VudGluZWwgPSBjdHgtXHUwMDNlY3FlX2NhY2hlZCAmIzQzOyBsZW47XG4gNzU1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA3NTY6XHR9XG4gNzU3Olx0XG4gNzU4Olx0c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gNzU5Olx0XHRcdFx0ICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSBzcmNfY3FlWzJdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ1FFIFJpbmcgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgNzMyLTc0MCBvZiB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgZm9yIENRRSAoQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSkgcmluZyBidWZmZXIgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzICYjMzQ7ZHVtbXkgQ1FFJiMzNDsgaW5zZXJ0aW9uLiBUaGUgY29tbWVudCBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIGhhbmRsaW5nIDMyLWJpdCBDUUVzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIG5lYXJpbmcgaXRzIHdyYXAtYXJvdW5kIHBvaW50LCBidXQgb25seSBlbm91Z2ggc3BhY2UgZXhpc3RzIGZvciBhIDE2LWJpdCBDUUUuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGlvX2ZpbGxfbm9wX2NxZWAgZnVuY3Rpb24gb3BlcmF0ZXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzICYjMzQ7ZHVtbXkmIzM0OyBlbnRyeSBpcyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBpbnRvIHRoZSBidWZmZXIuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSByaW5nIGJ1ZmZlciBkb2VzbiYjMzk7dCBjb3JydXB0IGRhdGEgb3IgdHJpZ2dlciBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgQ1FFIHByb2Nlc3NpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZWl0aGVyIGluc2VydCBhIHNwZWNpYWwgJiMzOTtOT1AmIzM5OyAobm8gb3BlcmF0aW9uKSBDUUUsIHRvIHNpZ25hbCB0byBkb3duc3RyZWFtIGNvbnN1bWVycyB0aGF0IG5vdGhpbmcgaXMgYWN0dWFsbHkgcmVhZHksIG9yIG1heWJlIGV2ZW4gcGVyZm9ybSBhIGJ1ZmZlciByZXNldCwgZGVwZW5kaW5nIG9uIGNvbnRleHQuIEkgbmVlZCB0byBjaGVjayBleGFjdGx5IHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fZmlsbF9ub3BfY3FlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz02ODQ9c3RhdGljIHVuc2lnbmVkIGludCBpb19jcXJpbmdfcXVldWVkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNjk4LSAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo2OTk6c3RhdGljIGJvb2wgaW9fZmlsbF9ub3BfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgb2ZmKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03MDAte1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbi0tXG5pb191cmluZy9pb191cmluZy5jLTczNi1cdGlmIChjcWUzMiBcdTAwMjZcdTAwMjYgb2ZmICYjNDM7IDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXMpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzM3Olx0XHRpZiAoIWlvX2ZpbGxfbm9wX2NxZShjdHgsIG9mZikpXG5pb191cmluZy9pb191cmluZy5jLTczOC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgaW9fdXJpbmcuYzogQSBTcGVjaWZpYyBDb2RlIEJsb2NrKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBpb191cmluZy9pb191cmluZy5jYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgNjk4IHRocm91Z2ggNzE1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24uIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBjb3JlIGFzcGVjdCBvZiB0aGUgc3VibWlzc2lvbiBvciBjb21wbGV0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBJL08gb3BlcmF0aW9ucy4gR2l2ZW4gdGhlIGZpbGUgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBgaW9fdXJpbmdgLCBJJiMzOTtkIGJldCBpdCYjMzk7cyBpbnZvbHZlZCBpbiBkaXNwYXRjaGluZyB3b3JrIHRvIHRoZSBrZXJuZWwgb3IgcmV0cmlldmluZyBjb21wbGV0ZWQgcmVxdWVzdHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBhc3NpZ25tZW50cyByZWxhdGVkIHRvIHJpbmcgYnVmZmVycywgY29tcGxldGlvbiBxdWV1ZXMsIGFuZCB0aGUgc3VibWlzc2lvbiBxdWV1ZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIGBpb191cmluZ19zdWJtaXQoKWAsIGBpb191cmluZ19jcV9lbnRlcigpYCwgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIG1lbW9yeSBiYXJyaWVyIGluc3RydWN0aW9ucyB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgY2hlY2tzIG9uIGZsYWdzIG9yIGVycm9yIGNvZGVzLiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBzb3VyY2UgY29kZS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgaG93IGlvX3VyaW5nIGVmZmljaWVudGx5IGhhbmRsZXMgSS9PLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5ODpcdCAqL1xuIDY5OTpcdHN0YXRpYyBib29sIGlvX2ZpbGxfbm9wX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG9mZilcbiA3MDA6XHR7XG4gNzAxOlx0XHRpZiAoaW9fY3FyaW5nX3F1ZXVlZChjdHgpIFx1MDAzYyBjdHgtXHUwMDNlY3FfZW50cmllcykge1xuIDcwMjpcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWUgPSBcdTAwMjZjdHgtXHUwMDNlcmluZ3MtXHUwMDNlY3Flc1tvZmZdO1xuIDcwMzpcdFxuIDcwNDpcdFx0XHRjcWUtXHUwMDNldXNlcl9kYXRhID0gMDtcbiA3MDU6XHRcdFx0Y3FlLVx1MDAzZXJlcyA9IDA7XG4gNzA2Olx0XHRcdGNxZS1cdTAwM2VmbGFncyA9IElPUklOR19DUUVfRl9TS0lQO1xuIDcwNzpcdFx0XHRjdHgtXHUwMDNlY2FjaGVkX2NxX3RhaWwmIzQzOyYjNDM7O1xuIDcwODpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA3MDk6XHRcdH1cbiA3MTA6XHRcdHJldHVybiBmYWxzZTtcbiA3MTE6XHR9XG4gNzEyOlx0XG4gNzEzOlx0LypcbiA3MTQ6XHQgKiB3cml0ZXMgdG8gdGhlIGNxIGVudHJ5IG5lZWQgdG8gY29tZSBhZnRlciByZWFkaW5nIGhlYWQ7IHRoZVxuIDcxNTpcdCAqIGNvbnRyb2wgZGVwZW5kZW5jeSBpcyBlbm91Z2ggYXMgd2UmIzM5O3JlIHVzaW5nIFdSSVRFX09OQ0UgdG9cbiA3MTY6XHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxuIDcxNzpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIGlvX3VyaW5nIENRRSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBtaXhlZCBtb2RlLCB3aXRoIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCwgdGhlIGNvZGUgc2VlbXMgdG8gaGF2ZSBhIHNwZWNpZmljIGhhbmRsaW5nIGZvciB0aGUgbGFzdCBzbG90IGJlZm9yZSB0aGUgQ1EgcmluZyB3cmFwcyBhcm91bmQuIFNwZWNpZmljYWxseSwgd2hlbiBgb2ZmICYjNDM7IDEgPT0gY3R4LSZndDtjcV9lbnRyaWVzYCwgaXQgbG9va3MgbGlrZSBhIGR1bW15IENRRSB3aXRoIGBJT1JJTkdfQ1FFX0ZfU0tJUGAgaXMgaW5zZXJ0ZWQuIFRoZW4sIGEgMzItYnl0ZSBDUUUgaXMgcGxhY2VkIHN0YXJ0aW5nIGF0IHRoZSBiZWdpbm5pbmcgKGBvZmYgPSAwYCkuIEJ1dCBoYW5nIG9uLi4uIHVzZXJzcGFjZSBoYXMgYWNjZXNzIHRvIHRoaXMgc2hhcmVkIG1lbW9yeSAobW1hcCEpLCBhbmQgdGhleSAqY291bGQqIHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgQ1FFIGVudHJpZXMgaW4gdGhlIHNoYXJlZCByaW5nLgoKSSBzZWUgdGhhdCBgci0mZ3Q7Y3Flc2AgaXMgbWFwcGVkIGludG8gdXNlcnNwYWNlOyBhbmQgSSBoYXZlIGEgYmFkIGZlZWxpbmcgYWJvdXQgdGhpcywgdGhpcyBjb3VsZCBoYXZlIG1ham9yIGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIGxvb2sgYXQgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gLiBUaGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBDUSBlbnRyaWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjaGVjayBhbmQgdGhlIGNvbmRpdGlvbiB0aGF0IHNldHMgdGhlIGBjcWUzMmAgYm9vbGVhbi4KClRoZSBsaW5lIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoaXM6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gTm93LCBgY3FfaGVhZGAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGluY3JlbWVudHMuIFRoZSBpbmRleCB0byBhY2Nlc3MgYHItJmd0O2NxZXNgIGlzIGBjcV9oZWFkICZhbXA7IGNxX21hc2tgLiBXYWl0LCB3aGF0IGlzIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgZG9pbmc/IFdoeSBpcyB0aGVyZSBhIGRpcmVjdCBjb21wYXJpc29uIGJldHdlZW4gYGNxX2hlYWRgIGFuZCBgY3FfbWFza2AsIHJhdGhlciB0aGFuIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKSA9PSBjcV9tYXNrYD8KCk9rYXksIEkgdGhpbmsgSSYjMzk7bSBzdGFydGluZyB0byBzZWUgdGhlIGlzc3VlLiBXaGVuIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKWAgcG9pbnRzIHRvIHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgKmFuZCogYGNxZS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX0NRRV9GXzMyYCBpcyBzZXQgKHdoaWNoIGNvdWxkIGJlIG1hbGljaW91c2x5IHNldCBieSB1c2Vyc3BhY2UpLCB0aGUgY29kZSB3aWxsIHByb2NlZWQgdG8gYWNjZXNzIHRoZSBgY3FlLSZndDtiaWdfY3FlYCBhcnJheS4gIElmIHRoZSBsYXN0IGVsZW1lbnQgaXMgYWNjZXNzZWQsIGl0IG1heSBhdHRlbXB0IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBgci0mZ3Q7Y3Flc2AgYXJyYXkuIFRoaXMgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkIQoKSWYgdGhpcyBvY2N1cnMsIGNvdWxkIHRoaXMgYmUgZGV0ZWN0ZWQ/IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoaXMgc29ydCBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggbWVhbnMgYSBrZXJuZWwgcGFuaWMuIFdhaXQsIHdoYXQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IElzIHRoaXMgbWVtb3J5IGFmdGVyIGByLSZndDtjcWVzYCBhbGxvY2F0ZWQgb3Igbm90PyBJIG5lZWQgdG8gY2hlY2sgaG93IGByLSZndDtjcWVzYCBpcyBhbGxvY2F0ZWQgYW5kIHNpemVkIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gc2VhcmNoIGZvciBgcmluZ3Nfc2l6ZWAgYW5kIHdoZXJlIGByLSZndDtjcWVzYCBsaXZlcyEgSSBhbSBwcmV0dHkgc3VyZSB0aGlzIGlzIGEgcmVhbCB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBhIG1pc2NhbGN1bGF0aW9uIG9mIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JpbmdzX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTIwNjk9c3RhdGljIHZvaWQgaW9fcmluZ3NfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIwNzctXG5pb191cmluZy9pb191cmluZy5jOjIwNzg6c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXG5pb191cmluZy9pb191cmluZy5jLTIwNzktXHRcdCAgICAgIHVuc2lnbmVkIGludCBjcV9lbnRyaWVzLCBzdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0ICpybClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIxMjYtXG5pb191cmluZy9pb191cmluZy5jOjIxMjc6XHRybC1cdTAwM2VyaW5nc19zaXplID0gb2ZmO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTI4LVx0cmV0dXJuIDA7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzE3PXN0YXRpYyBfX2NvbGQgaW50IGlvX2FsbG9jYXRlX3NjcV91cmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzMwLVx0bWVtc2V0KFx1MDAyNnJkLCAwLCBzaXplb2YocmQpKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjczMTpcdHJkLnNpemUgPSBQQUdFX0FMSUdOKHJsLVx1MDAzZXJpbmdzX3NpemUpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzMyLVx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX05PX01NQVApIHtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTI4OTQ9aW50IGlvX3ByZXBhcmVfY29uZmlnKHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTA2LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTA3Olx0cmV0ID0gcmluZ3Nfc2l6ZShwLVx1MDAzZWZsYWdzLCBwLVx1MDAzZXNxX2VudHJpZXMsIHAtXHUwMDNlY3FfZW50cmllcyxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjkwOC1cdFx0XHQgXHUwMDI2Y29uZmlnLVx1MDAzZWxheW91dCk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yMj1zdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0IHtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjMtXHQvKiBzaXplIG9mIENRICYjNDM7IGhlYWRlcnMgJiM0MzsgU1Egb2Zmc2V0IGFycmF5ICovXG5pb191cmluZy9pb191cmluZy5oOjI0Olx0c2l6ZV90IHJpbmdzX3NpemU7XG5pb191cmluZy9pb191cmluZy5oLTI1LVx0c2l6ZV90IHNxX3NpemU7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MjYtXHRtZW1zZXQoXHUwMDI2cmQsIDAsIHNpemVvZihyZCkpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1Mjc6XHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cdTAwM2VyaW5nc19zaXplKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTI4LVx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQ0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgcmluZ3Nfc2l6ZWAgaW4gYGlvX3VyaW5nLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgYHJpbmdzX3NpemVgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJpbmcgYnVmZmVyIHNpemUgaXMgZGV0ZXJtaW5lZCBhbmQgaG93IGl0IGltcGFjdHMgcGVyZm9ybWFuY2UuIEkmIzM5O20gYXNzdW1pbmcsIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgc3RydWN0dXJlcywgdGhhdCB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgY2VudHJhbCB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbGF5b3V0IGFuZCB0aGUgYmFsYW5jZSBiZXR3ZWVuIENQVSB1dGlsaXphdGlvbiBhbmQgSS9PIGxhdGVuY3kuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBpbmZsdWVuY2VzIGZyb20gYm90aCBoYXJkd2FyZSBsaW1pdGF0aW9ucyAoY2FjaGUgbGluZSBzaXplcywgcGFnZSBzaXplcykgYW5kIHBvdGVudGlhbCB0dW5pbmcgcGFyYW1ldGVycyBleHBvc2VkIHRvIHRoZSB1c2VyLiBJIGFsc28gYW50aWNpcGF0ZSBpdCB3aWxsIGFmZmVjdCB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBwcm9jZXNzaW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBkeW5hbWljIGFkanVzdG1lbnRzIGFyZSBtYWRlIGR1cmluZyBydW50aW1lIGJhc2VkIG9uIHN5c3RlbSBsb2FkIG9yIG90aGVyIGZhY3RvcnMuIFRoZSBjb2RlIGluIGBpb191cmluZy5jYCB3aWxsIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLCBhbmQgSSYjMzk7bSByZWFkeSB0byBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDc4Olx0c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXG4yMDc5Olx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcV9lbnRyaWVzLCBzdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0ICpybClcbjIwODA6XHR7XG4yMDgxOlx0XHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzO1xuMjA4MjpcdFx0c2l6ZV90IHNxZV9zaXplO1xuMjA4MzpcdFx0c2l6ZV90IG9mZjtcbjIwODQ6XHRcbjIwODU6XHRcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xuMjA4NjpcdFx0XHRpZiAoY3FfZW50cmllcyBcdTAwM2MgMilcbjIwODc6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjIwODg6XHRcdH1cbjIwODk6XHRcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRCkge1xuMjA5MDpcdFx0XHRpZiAoc3FfZW50cmllcyBcdTAwM2MgMilcbjIwOTE6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjIwOTI6XHRcdH1cbjIwOTM6XHRcbjIwOTQ6XHRcdHJsLVx1MDAzZXNxX2FycmF5X29mZnNldCA9IFNJWkVfTUFYO1xuMjA5NTpcdFxuMjA5NjpcdFx0c3FlX3NpemUgPSBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3NxZSk7XG4yMDk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpXG4yMDk4Olx0XHRcdHNxZV9zaXplICo9IDI7XG4yMDk5Olx0XG4yMTAwOlx0XHRybC1cdTAwM2VzcV9zaXplID0gYXJyYXlfc2l6ZShzcWVfc2l6ZSwgc3FfZW50cmllcyk7XG4yMTAxOlx0XHRpZiAocmwtXHUwMDNlc3Ffc2l6ZSA9PSBTSVpFX01BWClcbjIxMDI6XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4yMTAzOlx0XG4yMTA0Olx0XHRvZmYgPSBzdHJ1Y3Rfc2l6ZShyaW5ncywgY3FlcywgY3FfZW50cmllcyk7XG4yMTA1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbjIxMDY6XHRcdFx0b2ZmID0gc2l6ZV9tdWwob2ZmLCAyKTtcbjIxMDc6XHRcdGlmIChvZmYgPT0gU0laRV9NQVgpXG4yMTA4Olx0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuMjEwOTpcdFxuMjExMDpcdCNpZmRlZiBDT05GSUdfU01QXG4yMTExOlx0XHRvZmYgPSBBTElHTihvZmYsIFNNUF9DQUNIRV9CWVRFUyk7XG4yMTEyOlx0XHRpZiAob2ZmID09IDApXG4yMTEzOlx0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuMjExNDpcdCNlbmRpZlxuMjExNTpcdFxuMjExNjpcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSkge1xuMjExNzpcdFx0XHRzaXplX3Qgc3FfYXJyYXlfc2l6ZTtcbjIxMTg6XHRcbjIxMTk6XHRcdFx0cmwtXHUwMDNlc3FfYXJyYXlfb2Zmc2V0ID0gb2ZmO1xuMjEyMDpcdFxuMjEyMTpcdFx0XHRzcV9hcnJheV9zaXplID0gYXJyYXlfc2l6ZShzaXplb2YodTMyKSwgc3FfZW50cmllcyk7XG4yMTIyOlx0XHRcdG9mZiA9IHNpemVfYWRkKG9mZiwgc3FfYXJyYXlfc2l6ZSk7XG4yMTIzOlx0XHRcdGlmIChvZmYgPT0gU0laRV9NQVgpXG4yMTI0Olx0XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4yMTI1Olx0XHR9XG4yMTI2Olx0XG4yMTI3Olx0XHRybC1cdTAwM2VyaW5nc19zaXplID0gb2ZmO1xuMjEyODpcdFx0cmV0dXJuIDA7XG4yMTI5Olx0fVxuMjEzMDpcdFxuMjEzMTpcdHN0YXRpYyBfX2NvbGQgdm9pZCBfX2lvX3JlcV9jYWNoZXNfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbjIxMzI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEkvTyBSaW5nIENRRSBTaXppbmcgYW5kIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIEFjY2VzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBzaXplIG9mIHRoZSBJL08gcmluZyBpcyBjYWxjdWxhdGVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzIChDUUVzKS4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYHJpbmdzX3NpemVgIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIGByaW5nc2AsIGBjcWVzYCwgYW5kIGBjcV9lbnRyaWVzYC4gTm93LCBmb3IgdGhlIHN0YW5kYXJkIGNhc2UsIGV2ZXJ5dGhpbmcgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgb2JzZXJ2YXRpb24gaGVyZSBpcyBhYm91dCB0aGUgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGZsYWcuIFdpdGggdGhpcywgdGhlIGNvZGUgKmRvZXNuJiMzOTt0KiBkb3VibGUgYGNxX2VudHJpZXNgLCB3aGljaCBpcyB3aGF0IG9uZSBtaWdodCBpbml0aWFsbHkgZXhwZWN0LiBJbnN0ZWFkLCBgY3FfZW50cmllc2AgcmVmbGVjdHMgdGhlIG51bWJlciBvZiAxNi1ieXRlIENRRSBzbG90cyBhbGxvY2F0ZWQgaW4gYHJpbmdzLSZndDtjcWVzYC4KClRoZSBpbXBsaWNhdGlvbj8gV2hlbiBhIDMyLWJ5dGUgQ1FFIGlzIHV0aWxpemVkIGluIG1peGVkIG1vZGUsIGl0IGNvbnN1bWVzICp0d28qIG9mIHRoZXNlIDE2LWJ5dGUgc2xvdHMuIEl0JiMzOTtzIHRoaXMgZGV0YWlsIHRoYXQgYnJpbmdzIHVwIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgc2VlIGEgcHJvYmxlbSBpZiB0aGUgKmxhc3QqIHNsb3QgaW4gdGhlIHJpbmcgKGBjcV9oZWFkICZhbXA7IGNxX21hc2sgPT0gY3FfbWFza2ApIGhhcyBgSU9SSU5HX0NRRV9GXzMyYCBzZXQuIFRoaXMgbWVhbnMgYSAzMi1ieXRlIENRRSBpcyBpbXBsaWVkLCBidXQgc2luY2UgaXQmIzM5O3MgdGhlIGZpbmFsIHNsb3QsIGl0IGNhbm5vdCBhY3R1YWxseSBiZSBhIDMyLWJ5dGUgQ1FFOyBpdCBpcyBvbmx5IGEgMTYgYnl0ZSBzbG90LiBSZWFkaW5nIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYCB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyBiZXlvbmQgdGhlIGFsbG9jYXRlZCBgcmluZ3MtJmd0O2NxZXNbY3FfZW50cmllcyAtIDFdYCEKCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhhdCBsYXN0IGByaW5ncy0mZ3Q7Y3Flc2AgZWxlbWVudC4gQWgsIEkgc2VlOiB0aGVyZSYjMzk7cyBlaXRoZXIgcGFkZGluZyBmb3IgU01QIChpZiBgQ09ORklHX1NNUGAgaXMgZW5hYmxlZCkgb3IgcGFkZGluZyB0byBwYWdlIGFsaWdubWVudCBpZiBgSU9SSU5HX1NFVFVQX05PX1NRQVJSQVlgIGlzIHNldC4gU28sIGlmIHdlIHJlYWQgYmV5b25kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBDUUVzLCB3aWxsIHdlIGhpdCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igd2lsbCBpdCBiZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBoYXZlIHRvIGNoZWNrIGhvdyB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IGFsbG9jYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBnbyBsb29rIGF0IGhvdyBgaW9fYWxsb2NhdGVfc2NxX3VyaW5nc2Agd29ya3MuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3MTU6XHR9XG4yNzE2Olx0XG4yNzE3Olx0c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbjI3MTg6XHRcdFx0XHRcdFx0IHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXG4yNzE5Olx0e1xuMjcyMDpcdFx0c3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcCA9IFx1MDAyNmNvbmZpZy1cdTAwM2VwO1xuMjcyMTpcdFx0c3RydWN0IGlvX3JpbmdzX2xheW91dCAqcmwgPSBcdTAwMjZjb25maWctXHUwMDNlbGF5b3V0O1xuMjcyMjpcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjIHJkO1xuMjcyMzpcdFx0c3RydWN0IGlvX3JpbmdzICpyaW5ncztcbjI3MjQ6XHRcdGludCByZXQ7XG4yNzI1Olx0XG4yNzI2Olx0XHQvKiBtYWtlIHN1cmUgdGhlc2UgYXJlIHNhbmUsIGFzIHdlIGFscmVhZHkgYWNjb3VudGVkIHRoZW0gKi9cbjI3Mjc6XHRcdGN0eC1cdTAwM2VzcV9lbnRyaWVzID0gcC1cdTAwM2VzcV9lbnRyaWVzO1xuMjcyODpcdFx0Y3R4LVx1MDAzZWNxX2VudHJpZXMgPSBwLVx1MDAzZWNxX2VudHJpZXM7XG4yNzI5Olx0XG4yNzMwOlx0XHRtZW1zZXQoXHUwMDI2cmQsIDAsIHNpemVvZihyZCkpO1xuMjczMTpcdFx0cmQuc2l6ZSA9IFBBR0VfQUxJR04ocmwtXHUwMDNlcmluZ3Nfc2l6ZSk7XG4yNzMyOlx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfTk9fTU1BUCkge1xuMjczMzpcdFx0XHRyZC51c2VyX2FkZHIgPSBwLVx1MDAzZWNxX29mZi51c2VyX2FkZHI7XG4yNzM0Olx0XHRcdHJkLmZsYWdzIHw9IElPUklOR19NRU1fUkVHSU9OX1RZUEVfVVNFUjtcbjI3MzU6XHRcdH1cbjI3MzY6XHRcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlcmluZ19yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xuMjczNzpcdFx0aWYgKHJldClcbjI3Mzg6XHRcdFx0cmV0dXJuIHJldDtcbjI3Mzk6XHRcdGN0eC1cdTAwM2VyaW5ncyA9IHJpbmdzID0gaW9fcmVnaW9uX2dldF9wdHIoXHUwMDI2Y3R4LVx1MDAzZXJpbmdfcmVnaW9uKTtcbjI3NDA6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlcmluZ3NfcmN1LCByaW5ncyk7XG4yNzQxOlx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSlcbjI3NDI6XHRcdFx0Y3R4LVx1MDAzZXNxX2FycmF5ID0gKHUzMiAqKSgoY2hhciAqKXJpbmdzICYjNDM7IHJsLVx1MDAzZXNxX2FycmF5X29mZnNldCk7XG4yNzQzOlx0XG4yNzQ0Olx0XHRtZW1zZXQoXHUwMDI2cmQsIDAsIHNpemVvZihyZCkpO1xuMjc0NTpcdFx0cmQuc2l6ZSA9IFBBR0VfQUxJR04ocmwtXHUwMDNlc3Ffc2l6ZSk7XG4yNzQ2Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfTk9fTU1BUCkge1xuMjc0NzpcdFx0XHRyZC51c2VyX2FkZHIgPSBwLVx1MDAzZXNxX29mZi51c2VyX2FkZHI7XG4yNzQ4Olx0XHRcdHJkLmZsYWdzIHw9IElPUklOR19NRU1fUkVHSU9OX1RZUEVfVVNFUjtcbjI3NDk6XHRcdH1cbjI3NTA6XHRcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlc3FfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9TUUVTKTtcbjI3NTE6XHRcdGlmIChyZXQpIHtcbjI3NTI6XHRcdFx0aW9fcmluZ3NfZnJlZShjdHgpO1xuMjc1MzpcdFx0XHRyZXR1cm4gcmV0O1xuMjc1NDpcdFx0fVxuMjc1NTpcdFx0Y3R4LVx1MDAzZXNxX3NxZXMgPSBpb19yZWdpb25fZ2V0X3B0cihcdTAwMjZjdHgtXHUwMDNlc3FfcmVnaW9uKTtcbjI3NTY6XHRcbjI3NTc6XHRcdG1lbXNldChyaW5ncywgMCwgc2l6ZW9mKCpyaW5ncykpO1xuMjc1ODpcdFx0V1JJVEVfT05DRShyaW5ncy1cdTAwM2VzcV9yaW5nX21hc2ssIGN0eC1cdTAwM2VzcV9lbnRyaWVzIC0gMSk7XG4yNzU5Olx0XHRXUklURV9PTkNFKHJpbmdzLVx1MDAzZWNxX3JpbmdfbWFzaywgY3R4LVx1MDAzZWNxX2VudHJpZXMgLSAxKTtcbjI3NjA6XHRcdFdSSVRFX09OQ0UocmluZ3MtXHUwMDNlc3FfcmluZ19lbnRyaWVzLCBjdHgtXHUwMDNlc3FfZW50cmllcyk7XG4yNzYxOlx0XHRXUklURV9PTkNFKHJpbmdzLVx1MDAzZWNxX3JpbmdfZW50cmllcywgY3R4LVx1MDAzZWNxX2VudHJpZXMpO1xuMjc2MjpcdFx0cmV0dXJuIDA7XG4yNzYzOlx0fVxuMjc2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU3NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBpb19jcmVhdGVfcmVnaW9uYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgaW9fY3JlYXRlX3JlZ2lvbmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIHRoZXJlLiBJdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhpcyByZWdpb24gaXMgY29uc3RydWN0ZWQsIGFuZCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aWxsIGxpa2VseSByZXNpZGUgd2l0aGluIHRob3NlIGFsbG9jYXRpb24gcm91dGluZXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIGdvb2QsIGJ1dCBpdCYjMzk7cyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlIG9mIGBpb19jcmVhdGVfcmVnaW9uYCBpdHNlbGYgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgdGhpbmcgYWN0dWFsbHkgYnVpbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz0yNzE3PXN0YXRpYyBfX2NvbGQgaW50IGlvX2FsbG9jYXRlX3NjcV91cmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzM1LVx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzM2Olx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmN0eC1cdTAwM2VyaW5nX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XG5pb191cmluZy9pb191cmluZy5jLTI3MzctXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0OS1cdH1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mjc1MDpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlc3FfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9TUUVTKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc1MS1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9rYnVmLmM9NjMwPWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTY3OC1cdH1cbmlvX3VyaW5nL2tidWYuYzo2Nzk6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2YmwtXHUwMDNlcmVnaW9uLCBcdTAwMjZyZCwgbW1hcF9vZmZzZXQpO1xuaW9fdXJpbmcva2J1Zi5jLTY4MC1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0yMDYtXG5pb191cmluZy9tZW1tYXAuYzoyMDc6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbmlvX3VyaW5nL21lbW1hcC5jLTIwOC1cdFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcbi0tXG5pb191cmluZy9tZW1tYXAuaD0yMD12b2lkIGlvX2ZyZWVfcmVnaW9uKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yKTtcbmlvX3VyaW5nL21lbW1hcC5oOjIxOmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG5pb191cmluZy9tZW1tYXAuaC0yMi1cdFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTUzMS1cdH1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTMyOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNm4ucmluZ19yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzMtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYxLVx0fVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1NjI6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2bi5zcV9yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy01NjMtXHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03MDM9c3RhdGljIGludCBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqdWFyZylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTczMi1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzMzOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNnJlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19NQVBfT0ZGX1BBUkFNX1JFR0lPTik7XG5pb191cmluZy9yZWdpc3Rlci5jLTczNC1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvemNyeC5jPTQxND1zdGF0aWMgaW50IGlvX2FsbG9jYXRlX3JidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy96Y3J4LmMtNDMzLVxuaW9fdXJpbmcvemNyeC5jOjQzNDpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZpZnEtXHUwMDNlcnFfcmVnaW9uLCByZCwgbW1hcF9vZmZzZXQpO1xuaW9fdXJpbmcvemNyeC5jLTQzNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbWVtbWFwLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgYGlvX3VyaW5nL21lbW1hcC5jYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBtbWFwLXJlbGF0ZWQgYXNwZWN0cy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBtZW1vcnkgcmVnaW9ucyBoZXJlLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBzaGFyaW5nIG9mIG1lbW9yeSBidWZmZXJzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zIGFuZCBob3cgdGhhdCYjMzk7cyBoYW5kbGVkIHdpdGggbWVtb3J5IG1hcHBpbmcuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzIG9mIG1lbW9yeSBwcm90ZWN0aW9uLCBjYWNoaW5nLCBhbmQgc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSBlZmZpY2llbnQgYW5kIHNhZmUgZGF0YSB0cmFuc2ZlcnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IG9wdGltaXphdGlvbnMgdGhhdCBhcmUgdXNlZCBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhleSBjb3VsZCBiZSBpbXBsZW1lbnRlZCBvciBpbXByb3ZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NDpcdHN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiAxNzU6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcbiAxNzY6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG1tYXBfb2Zmc2V0LFxuIDE3NzpcdFx0XHRcdFx0ICAgIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbiAxNzg6XHR7XG4gMTc5Olx0XHRnZnBfdCBnZnAgPSBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOO1xuIDE4MDpcdFx0c2l6ZV90IHNpemUgPSBpb19yZWdpb25fc2l6ZShtcik7XG4gMTgxOlx0XHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZDtcbiAxODI6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gMTgzOlx0XG4gMTg0Olx0XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBtci1cdTAwM2Vucl9wYWdlcywgZ2ZwKTtcbiAxODU6XHRcdGlmICghcGFnZXMpXG4gMTg2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE4NzpcdFxuIDE4ODpcdFx0aWYgKGlvX21lbV9hbGxvY19jb21wb3VuZChwYWdlcywgbXItXHUwMDNlbnJfcGFnZXMsIHNpemUsIGdmcCwgdXNlcikpIHtcbiAxODk6XHRcdFx0bXItXHUwMDNlZmxhZ3MgfD0gSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRjtcbiAxOTA6XHRcdFx0Z290byBkb25lO1xuIDE5MTpcdFx0fVxuIDE5MjpcdFxuIDE5MzpcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuIDE5NDpcdFx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4gMTk1Olx0XHRpZiAobnJfYWxsb2NhdGVkICE9IG1yLVx1MDAzZW5yX3BhZ2VzKSB7XG4gMTk2Olx0XHRcdGlmIChucl9hbGxvY2F0ZWQpXG4gMTk3Olx0XHRcdFx0cmVsZWFzZV9wYWdlcyhwYWdlcywgbnJfYWxsb2NhdGVkKTtcbiAxOTg6XHRcdFx0a3ZmcmVlKHBhZ2VzKTtcbiAxOTk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjAwOlx0XHR9XG4gMjAxOlx0ZG9uZTpcbiAyMDI6XHRcdHJlZy1cdTAwM2VtbWFwX29mZnNldCA9IG1tYXBfb2Zmc2V0O1xuIDIwMzpcdFx0bXItXHUwMDNlcGFnZXMgPSBwYWdlcztcbiAyMDQ6XHRcdHJldHVybiAwO1xuIDIwNTpcdH1cbiAyMDY6XHRcbiAyMDc6XHRpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuIDIwODpcdFx0XHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxuIDIwOTpcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbW1hcF9vZmZzZXQpXG4gMjEwOlx0e1xuIDIxMTpcdFx0aW50IG5yX3BhZ2VzLCByZXQ7XG4gMjEyOlx0XHR1NjQgZW5kO1xuIDIxMzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIGlvX3VyaW5nIENRRSBDb3JydXB0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYC4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtZW1vcnkgZm9yIHRoZSBDUUUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpIHN0cnVjdHVyZXMgaXMgemVyb2VkIG91dCBvbiBhbGxvY2F0aW9uIOKAkyBJJiMzOTttIHNlZWluZyBgX19HRlBfWkVST2AgdXNlZCwgYW5kIGBtZW1zZXRgIGlzIGNhbGxlZCBvbiBgcmluZ3NgLiBUaGlzIHNob3VsZCBtZWFuIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSwgc28gYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGFyZSBhIHJlZCBmbGFnLgoKTm93LCBJJiMzOTttIHJlLWV4YW1pbmluZyB0aGlzIHBhdGNoIGRpZmYuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyBhcm91bmQgdGhlIHByaW50aW5nIG9mIENRRSBpbmZvcm1hdGlvbiBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGFuZCB1c2luZyBpdCB3aGVuIHByaW50aW5nIENRRXMuIAoKSXQgc2VlbXMgdGhlIGNvZGUgaXMgdHJ5aW5nIHRvIGhhbmRsZSB0aGUgYElPUklOR19DUUVfRl8zMmAgZmxhZyBhbmQgYElPUklOR19TRVRVUF9DUUUzMmAgb3B0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byAzMi1iaXQgQ1FFIGhhbmRsaW5nLiBUaGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGEgY29uZGl0aW9uOiBpdCYjMzk7cyBjaGVja2luZyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgMzItYml0IENRRSwgZWl0aGVyIGV4cGxpY2l0bHkgaW4gdGhlIENRRSYjMzk7cyBmbGFncyBvciBpbXBsaWNpdGx5IHZpYSB0aGUgcmluZyBzZXR1cCwgKmFuZCogaWYgd2UgYXJlICpub3QqIGF0IHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgd2UgZXhlY3V0ZSB0aGlzIGNvbmRpdGlvbi4gVGhlIGVhcmxpZXIgY29uZGl0aW9uIHByaW50ZWQgdGhlIENRRSBpbmZvIGlmIGVpdGhlciBmbGFnIHdhcyBzZXQuIAoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHJlYWxseSByZWFkIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAxMjAtMTgwIGluIGBpb191cmluZy9mZGluZm8uY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBDUUUgYXJyYXkgaXMgbWFuYWdlZCBhbmQgaG93IHRoaXMgYGlzX2xhc3RfY3FhcnJheV9zbG90YCB2YXJpYWJsZSBpcyBjYWxjdWxhdGVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2ggYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCBzZWVtcyBhcyB0aG91Z2ggdGhlIGlzc3VlIGhhcyB0byBkbyB3aXRoIHJlYWRpbmcgZnJvbSB0aGUgQ1FFIHdoZW4gd2UgYXJlIGF0IHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgYW5kIHdpdGggdGhlIGZsYWdzIGluZGljYXRpbmcgYSBgY3FlMzJgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgbW9yZSBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdFx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0XHRcdH1cbiAxMjI6XHRcdFx0XHRpZiAoc3FfaWR4ID09IHNxX21hc2spIHtcbiAxMjM6XHRcdFx0XHRcdHNlcV9wcmludGYobSxcbiAxMjQ6XHRcdFx0XHRcdFx0XCYjMzQ7JTV1OiBjb3JydXB0ZWQgc3FlLCB3cmFwcGluZyAxMjhCIGVudHJ5XFxuXCYjMzQ7LFxuIDEyNTpcdFx0XHRcdFx0XHRzcV9pZHgpO1xuIDEyNjpcdFx0XHRcdFx0YnJlYWs7XG4gMTI3Olx0XHRcdFx0fVxuIDEyODpcdFx0XHRcdHNxX2hlYWQmIzQzOyYjNDM7O1xuIDEyOTpcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIDEzMDpcdFx0XHRcdHNxZTEyOCA9IHRydWU7XG4gMTMxOlx0XHRcdH1cbiAxMzI6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNXU6IG9wY29kZTolcywgZmQ6JWQsIGZsYWdzOiV4LCBvZmY6JWxsdSwgXCYjMzQ7XG4gMTMzOlx0XHRcdFx0ICAgICAgXCYjMzQ7YWRkcjoweCVsbHgsIHJ3X2ZsYWdzOjB4JXgsIGJ1Zl9pbmRleDolZCBcJiMzNDtcbiAxMzQ6XHRcdFx0XHQgICAgICBcJiMzNDt1c2VyX2RhdGE6JWxsdVwmIzM0OyxcbiAxMzU6XHRcdFx0XHQgICBzcV9pZHgsIGlvX3VyaW5nX2dldF9vcGNvZGUob3Bjb2RlKSwgc3FlLVx1MDAzZWZkLFxuIDEzNjpcdFx0XHRcdCAgIHNxZS1cdTAwM2VmbGFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3FlLVx1MDAzZW9mZixcbiAxMzc6XHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKSBzcWUtXHUwMDNlYWRkciwgc3FlLVx1MDAzZXJ3X2ZsYWdzLFxuIDEzODpcdFx0XHRcdCAgIHNxZS1cdTAwM2VidWZfaW5kZXgsIHNxZS1cdTAwM2V1c2VyX2RhdGEpO1xuIDEzOTpcdFx0XHRpZiAoc3FlMTI4KSB7XG4gMTQwOlx0XHRcdFx0dTY0ICpzcWViID0gKHZvaWQgKikgKHNxZSAmIzQzOyAxKTtcbiAxNDE6XHRcdFx0XHRpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfc3FlKSAvIHNpemVvZih1NjQpO1xuIDE0MjpcdFx0XHRcdGludCBqO1xuIDE0MzpcdFxuIDE0NDpcdFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHNpemU7IGomIzQzOyYjNDM7KSB7XG4gMTQ1Olx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OywgZSVkOjB4JWxseFwmIzM0OywgaixcbiAxNDY6XHRcdFx0XHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKSAqc3FlYik7XG4gMTQ3Olx0XHRcdFx0XHRzcWViJiM0MzsmIzQzOztcbiAxNDg6XHRcdFx0XHR9XG4gMTQ5Olx0XHRcdH1cbiAxNTA6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtcXG5cJiMzNDspO1xuIDE1MTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7Q1FFczpcXHQldVxcblwmIzM0OywgY3FfdGFpbCAtIGNxX2hlYWQpO1xuIDE1NDpcdFx0Y3FfZW50cmllcyA9IG1pbihjcV90YWlsIC0gY3FfaGVhZCwgY3R4LVx1MDAzZWNxX2VudHJpZXMpO1xuIDE1NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3FfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiAxNTY6XHRcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlO1xuIDE1NzpcdFx0XHRib29sIGNxZTMyID0gZmFsc2U7XG4gMTU4Olx0XHRcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbiAxNTk6XHRcbiAxNjA6XHRcdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG4gMTYxOlx0XHRcdGlmICgoY3FlLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFx1MDAyNlx1MDAyNlxuIDE2MjpcdFx0XHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxuIDE2MzpcdFx0XHRcdGNxZTMyID0gdHJ1ZTtcbiAxNjQ6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCYjMzQ7LFxuIDE2NTpcdFx0XHRcdCAgIGNxX2hlYWQgXHUwMDI2IGNxX21hc2ssIGNxZS1cdTAwM2V1c2VyX2RhdGEsIGNxZS1cdTAwM2VyZXMsXG4gMTY2Olx0XHRcdFx0ICAgY3FlLVx1MDAzZWZsYWdzKTtcbiAxNjc6XHRcdFx0aWYgKGNxZTMyKVxuIDE2ODpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LCBleHRyYTE6JWxsdSwgZXh0cmEyOiVsbHVcJiMzNDssXG4gMTY5Olx0XHRcdFx0XHRcdGNxZS1cdTAwM2ViaWdfY3FlWzBdLCBjcWUtXHUwMDNlYmlnX2NxZVsxXSk7XG4gMTcwOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiAxNzE6XHRcdFx0Y3FfaGVhZCYjNDM7JiM0Mzs7XG4gMTcyOlx0XHRcdGlmIChjcWUzMikge1xuIDE3MzpcdFx0XHRcdGNxX2hlYWQmIzQzOyYjNDM7O1xuIDE3NDpcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIDE3NTpcdFx0XHR9XG4gMTc2Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDE3NzpcdFx0fVxuIDE3ODpcdFxuIDE3OTpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX1NRUE9MTCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTYxNwoJCQkJCQkJb3V0cHV0OiAyNjAKCQkJCQkJCXRob3VnaHRzOiAxNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBpb191cmluZyBwYXRjaCwgYW5kIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgc2NlbmFyaW8gaXMgdGhpczogd2hlbiBwcmludGluZyB0aGUgQ1FFIChDb21wbGV0aW9uIFF1ZXVlIEVudHJ5KSBpbmZvcm1hdGlvbiwgdGhlcmUmIzM5O3MgYSBwb3NzaWJpbGl0eSBvZiB0cnlpbmcgdG8gYWNjZXNzIGBjcWUtJmd0O2JpZ19jcWVgIHdoZW4gYGNxZWAgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgcmluZyBidWZmZXIgKGByLSZndDtjcWVzYCkuIFRoaXMgd291bGQgYmUgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgY29uZGl0aW9uOiBgY3FfaGVhZCAmYW1wOyBjcV9tYXNrID09IGNxX21hc2tgLCB3aGljaCBzaWduaWZpZXMgdGhhdCB3ZSYjMzk7cmUgYXQgdGhlIGVuZCBvZiB0aGUgQ1FFIGFycmF5LiBJZiwgdW5kZXIgdGhhdCBjb25kaXRpb24sIGBjcWUzMmAgaXMgdHJ1ZSwgdGhlbiB3ZSBoYXZlIGFuIE9PQi4KClRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcywgYWRkaW5nIGEgYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIGNoZWNrLiBUaG91Z2ggdGhlIGJpdG1hc2tpbmcgb3BlcmF0aW9uIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKWAgaW1wbGllcyB0aGF0IHRoZSBhY3R1YWwgaW1wbGVtZW50ZWQgY29uZGl0aW9uIGAoY3FfaGVhZCA9PSBjcV9tYXNrKWAgY2FuIGJlIGJ1Z2d5IChpdCBzaG91bGQgYmUgYChjcV9oZWFkICZhbXA7IGNxX21hc2spID09IGNxX21hc2tgKSBidXQgaW4gdGhpcyBhbmFseXNpcywgdGhhdCBpcyBub3QgaW1wb3J0YW50LgoKTm93LCBteSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIG5lY2Vzc2l0YXRlIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAuIExldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLgoKRmlyc3RseSwgSSBjaGVja2VkIGlmIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHVzZWQuIFRoZSBrZXkgdmFyaWFibGVzLCBgY3FfaGVhZGAsIGBjcV9tYXNrYCwgYW5kIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGFyZSBhbGwgaW5pdGlhbGl6ZWQuIFRoZSBgY3FlMzJgIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlLgoKU2Vjb25kbHksIEkgY29uc2lkZXJlZCBpZiB0aGUgcGF0Y2ggYWxsb3dzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFjdHVhbGx5LCB0aGlzIHBhdGNoICoqcHJldmVudHMqKiByZWFkaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5IHByZXZlbnRpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGludG8gd2hhdGV2ZXIgZm9sbG93cyB0aGUgcmluZyBhcnJheS4KClRoaXJkbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNlcV9wcmludGZgIG91dHB1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHZhbHVlcyBlaXRoZXIgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgb3IgdXNlcnNwYWNlLgoKRmluYWxseSwgZG9lcyB0aGUgcGF0Y2ggY2hhbmdlIHRoZSBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcz8gTm8uIEl0IG9ubHkgbW9kaWZpZXMgYHNob3dfZmRpbmZvYCYjMzk7cyBkaWFnbm9zdGljIG91dHB1dC4gVGhlIGNvcmUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyBzb21ldGhpbmcgS0FTQU4gY2F0Y2hlcy4KClRvIGJlIGV4dHJhIHN1cmUsIEkgbWV0aWN1bG91c2x5IHJlLWV2YWx1YXRlZCB0aGUgS01TQU4gY3JpdGVyaWE6CgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4KKiAgIE5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoqICAgTm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KKiAgIE5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgYWx0ZXJhdGlvbnMgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaXNzdWUgdGhhdCBLQVNBTiBkZXRlY3RzLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYm91bmRhcnkgY2hlY2tzIGFuZCBhcnJheSBpbmRleGluZywgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLgoKKipDb25jbHVzaW9uOiBOZWVkc0tNU0FOID0gZmFsc2UuKiogTm93IEkmIzM5O2xsIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXHUwMDNlY3Flc1tdYC5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXHUwMDNlY3Flc1tdYC5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjozMy44MTE4MjY0NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA3ODE2MDYxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvX3VyaW5nX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJpb191cmluZ19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVxcdTAwM2ViaWdfY3FlWzBdYCBhbmQgYGNxZS1cXHUwMDNlYmlnX2NxZVsxXWAgb24gdGhlIGxhc3QgZW50cnkgb2YgdGhlIHJpbmcgYXJyYXkgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiBgci1cXHUwMDNlY3Flc1tdYC5cXG5cXG5UaGlzIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4uIFRoZSB1bmRlcmx5aW5nIENRIHJpbmcgcGFnZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgX19HRlBfWkVST2AgLyBgbWVtc2V0YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGBjcWUzMmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBDUUUgZm9ybWF0dGluZyBsb2dpYyBpbiBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKCkgd2l0aGluIGlvX3VyaW5nL2ZkaW5mby5jLCB3aGljaCBpcyByZWFjaGFibGUgYnkgcmVhZGluZyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9mZGluZm8vXFx1MDAzY2lvX3VyaW5nX2ZkXFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVxcdTAwM2ViaWdfY3FlIG9uIHdyYXBwZWQgcmluZ3MuIEZ1enppbmcgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIHBhdGggYW5kIHZlcmlmeSBtZW1vcnkgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjozMy44MTE4MzI5MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTE2MDQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyMTMxMTAwY2UxNjdjNDhkM2IxNDlhMWNkODM4YjJiMDNiNDBhMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTY6MjI6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZmRpbmZvLmMgYi9pb191cmluZy9mZGluZm8uY1xcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvZmRpbmZvLmNcXG4rKysgYi9pb191cmluZy9mZGluZm8uY1xcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XFxuIFxcdFxcdGJvb2wgY3FlMzIgPSBmYWxzZTtcXG4rXFx0XFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xcbiBcXG4gXFx0XFx0Y3FlID0gXFx1MDAyNnItXFx1MDAzZWNxZXNbKGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrKV07XFxuLVxcdFxcdGlmIChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXFxuK1xcdFxcdGlmICgoY3FlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxcbiBcXHRcXHRcXHRjcWUzMiA9IHRydWU7XFxuIFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU1dTogdXNlcl9kYXRhOiVsbHUsIHJlczolZCwgZmxhZ3M6JXhcXFwiLFxcbiBcXHRcXHRcXHQgICBjcV9oZWFkIFxcdTAwMjYgY3FfbWFzaywgY3FlLVxcdTAwM2V1c2VyX2RhdGEsIGNxZS1cXHUwMDNlcmVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjozNC4zMjc2ODk1OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNzM1NjMxODA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9fdXJpbmdfc2hvd19mZGluZm9cIixcbiAgICBcImlvX3VyaW5nX3Nob3dfZmRpbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBDUUUgZm9ybWF0dGluZyBsb2dpYyBpbiBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKCkgd2l0aGluIGlvX3VyaW5nL2ZkaW5mby5jLCB3aGljaCBpcyByZWFjaGFibGUgYnkgcmVhZGluZyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9mZGluZm8vXFx1MDAzY2lvX3VyaW5nX2ZkXFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVxcdTAwM2ViaWdfY3FlIG9uIHdyYXBwZWQgcmluZ3MuIEZ1enppbmcgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIHBhdGggYW5kIHZlcmlmeSBtZW1vcnkgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMTMxMTAwY2UxNjdjNDhkM2IxNDlhMWNkODM4YjJiMDNiNDBhMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNjoyMjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2ZkaW5mby5jIGIvaW9fdXJpbmcvZmRpbmZvLmNcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mZGluZm8uY1xuKysrIGIvaW9fdXJpbmcvZmRpbmZvLmNcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbitcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIFxuIFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbi1cdFx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuK1x0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCIsXG4gXHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjM0LjMyNzY5MTQ5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNDQ1OTg0MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSU9fVVJJTkcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgaGFzIHRvdWNoZWQgYGlvX3VyaW5nL2ZkaW5mby5jYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Q7IGFueXRoaW5nIHRoYXQgZGVhbHMgd2l0aCBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhc3NvY2lhdGVkIGdpdCBjb21taXQgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBzb21lIGltbWVkaWF0ZSBjb250ZXh0LiBMZXQncyB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiBhIHNuaXBwZXQgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYCBhcm91bmQgbGluZSAxNTUg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhbmQgc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbXBhY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjI6NDUuNzczNjc4Mzc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvZmRpbmZvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdFxcdHU2NCAqc3FlYiA9ICh2b2lkICopIChzcWUgKyAxKTtcXG4gMTQxOlxcdFxcdFxcdFxcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XFxuIDE0MjpcXHRcXHRcXHRcXHRpbnQgajtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHNpemU7IGorKykge1xcbiAxNDU6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLCBlJWQ6MHglbGx4XFxcIiwgaixcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdHNxZWIrKztcXG4gMTQ4OlxcdFxcdFxcdFxcdH1cXG4gMTQ5OlxcdFxcdFxcdH1cXG4gMTUwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE1MTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIkNRRXM6XFxcXHQldVxcXFxuXFxcIiwgY3FfdGFpbCAtIGNxX2hlYWQpO1xcbiAxNTQ6XFx0XFx0Y3FfZW50cmllcyA9IG1pbihjcV90YWlsIC0gY3FfaGVhZCwgY3R4LVxcdTAwM2VjcV9lbnRyaWVzKTtcXG4gMTU1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjcV9lbnRyaWVzOyBpKyspIHtcXG4gMTU2OlxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcXG4gMTU3OlxcdFxcdFxcdGJvb2wgY3FlMzIgPSBmYWxzZTtcXG4gMTU4OlxcdFxcdFxcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0XFx0Y3FlID0gXFx1MDAyNnItXFx1MDAzZWNxZXNbKGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrKV07XFxuIDE2MTpcXHRcXHRcXHRpZiAoKGNxZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXFx1MDAyNlxcdTAwMjZcXG4gMTYyOlxcdFxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuIDE2MzpcXHRcXHRcXHRcXHRjcWUzMiA9IHRydWU7XFxuIDE2NDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XFxcIixcXG4gMTY1OlxcdFxcdFxcdFxcdCAgIGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrLCBjcWUtXFx1MDAzZXVzZXJfZGF0YSwgY3FlLVxcdTAwM2VyZXMsXFxuIDE2NjpcXHRcXHRcXHRcXHQgICBjcWUtXFx1MDAzZWZsYWdzKTtcXG4gMTY3OlxcdFxcdFxcdGlmIChjcWUzMilcXG4gMTY4OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiwgZXh0cmExOiVsbHUsIGV4dHJhMjolbGx1XFxcIixcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdGNxZS1cXHUwMDNlYmlnX2NxZVswXSwgY3FlLVxcdTAwM2ViaWdfY3FlWzFdKTtcXG4gMTcwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE3MTpcXHRcXHRcXHRjcV9oZWFkKys7XFxuIDE3MjpcXHRcXHRcXHRpZiAoY3FlMzIpIHtcXG4gMTczOlxcdFxcdFxcdFxcdGNxX2hlYWQrKztcXG4gMTc0OlxcdFxcdFxcdFxcdGkrKztcXG4gMTc1OlxcdFxcdFxcdH1cXG4gMTc2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUVBPTEwpIHtcXG4gMTgwOlxcdFxcdFxcdHN0cnVjdCBpb19zcV9kYXRhICpzcSA9IGN0eC1cXHUwMDNlc3FfZGF0YTtcXG4gMTgxOlxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDE4NDpcXHRcXHRcXHR0c2sgPSByY3VfZGVyZWZlcmVuY2Uoc3EtXFx1MDAzZXRocmVhZCk7XFxuIDE4NTpcXHRcXHRcXHQvKlxcbiAxODY6XFx0XFx0XFx0ICogc3EtXFx1MDAzZXRocmVhZCBtaWdodCBiZSBOVUxMIGlmIHdlIHJhY2VkIHdpdGggdGhlIHNxcG9sbFxcbiAxODc6XFx0XFx0XFx0ICogdGhyZWFkIHRlcm1pbmF0aW9uLlxcbiAxODg6XFx0XFx0XFx0ICovXFxuIDE4OTpcXHRcXHRcXHRpZiAodHNrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjQ1Ljc3Mzc2Mjg3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MjUyNzMyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb2RlJ3MgRmxvdyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBoZXJlLiBCZWZvcmUgSSBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvbmNsdXNpb24sIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gem9vbSBpbiBvbiBsaW5lIDE0MCBhbmQgdW5kZXJzdGFuZCBpdHMgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbGVhZGluZyB1cCB0byB0aGF0IHBvaW50LiBXaGF0J3MgdGhlIGZ1bmN0aW9uIGNvbnRleHQ/IFVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2UgaXMgY3JpdGljYWwuIElzIHRoaXMgcGFydCBvZiBhIGNvcmUgYWxnb3JpdGhtLCBhIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGVycm9yIGhhbmRsaW5nPyBLbm93aW5nIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGZyYW1ld29yayB3aXRoaW4gd2hpY2ggdG8gaW50ZXJwcmV0IHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBzcGVjaWZpYyBsaW5lLiBUaGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjo0OC40OTkwMzk2OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9mZGluZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJOQVBJOlxcXFx0dW5rbm93biBtb2RlICgldSlcXFxcblxcXCIsIG1vZGUpO1xcbiAgNTE6XFx0XFx0fVxcbiAgNTI6XFx0fVxcbiAgNTM6XFx0I2Vsc2VcXG4gIDU0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4gIDU2OlxcdHtcXG4gIDU3OlxcdH1cXG4gIDU4OlxcdCNlbmRpZlxcbiAgNTk6XFx0XFxuICA2MDpcXHRzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlICpvY3FlO1xcbiAgNjM6XFx0XFx0c3RydWN0IGlvX3JpbmdzICpyID0gY3R4LVxcdTAwM2VyaW5ncztcXG4gIDY0OlxcdFxcdHVuc2lnbmVkIGludCBzcV9tYXNrID0gY3R4LVxcdTAwM2VzcV9lbnRyaWVzIC0gMSwgY3FfbWFzayA9IGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIDE7XFxuICA2NTpcXHRcXHR1bnNpZ25lZCBpbnQgc3FfaGVhZCA9IFJFQURfT05DRShyLVxcdTAwM2VzcS5oZWFkKTtcXG4gIDY2OlxcdFxcdHVuc2lnbmVkIGludCBzcV90YWlsID0gUkVBRF9PTkNFKHItXFx1MDAzZXNxLnRhaWwpO1xcbiAgNjc6XFx0XFx0dW5zaWduZWQgaW50IGNxX2hlYWQgPSBSRUFEX09OQ0Uoci1cXHUwMDNlY3EuaGVhZCk7XFxuICA2ODpcXHRcXHR1bnNpZ25lZCBpbnQgY3FfdGFpbCA9IFJFQURfT05DRShyLVxcdTAwM2VjcS50YWlsKTtcXG4gIDY5OlxcdFxcdHVuc2lnbmVkIGludCBzcV9zaGlmdCA9IDA7XFxuICA3MDpcXHRcXHR1bnNpZ25lZCBpbnQgY3FfZW50cmllcywgc3FfZW50cmllcztcXG4gIDcxOlxcdFxcdGludCBzcV9waWQgPSAtMSwgc3FfY3B1ID0gLTE7XFxuICA3MjpcXHRcXHR1NjQgc3FfdG90YWxfdGltZSA9IDAsIHNxX3dvcmtfdGltZSA9IDA7XFxuICA3MzpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFMTI4KVxcbiAgNzY6XFx0XFx0XFx0c3Ffc2hpZnQgPSAxO1xcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHQvKlxcbiAgNzk6XFx0XFx0ICogd2UgbWF5IGdldCBpbXByZWNpc2Ugc3FlIGFuZCBjcWUgaW5mbyBpZiB1cmluZyBpcyBhY3RpdmVseSBydW5uaW5nXFxuICA4MDpcXHRcXHQgKiBzaW5jZSB3ZSBnZXQgY2FjaGVkX3NxX2hlYWQgYW5kIGNhY2hlZF9jcV90YWlsIHdpdGhvdXQgdXJpbmdfbG9ja1xcbiAgODE6XFx0XFx0ICogYW5kIHNxX3RhaWwgYW5kIGNxX2hlYWQgYXJlIGNoYW5nZWQgYnkgdXNlcnNwYWNlLiBCdXQgaXQncyBvayBzaW5jZVxcbiAgODI6XFx0XFx0ICogd2UgdXN1YWxseSB1c2UgdGhlc2UgaW5mbyB3aGVuIGl0IGlzIHN0dWNrLlxcbiAgODM6XFx0XFx0ICovXFxuICA4NDpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJTcU1hc2s6XFxcXHQweCV4XFxcXG5cXFwiLCBzcV9tYXNrKTtcXG4gIDg1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNxSGVhZDpcXFxcdCV1XFxcXG5cXFwiLCBzcV9oZWFkKTtcXG4gIDg2OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNxVGFpbDpcXFxcdCV1XFxcXG5cXFwiLCBzcV90YWlsKTtcXG4gIDg3OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIkNhY2hlZFNxSGVhZDpcXFxcdCV1XFxcXG5cXFwiLCBkYXRhX3JhY2UoY3R4LVxcdTAwM2VjYWNoZWRfc3FfaGVhZCkpO1xcbiAgODg6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiQ3FNYXNrOlxcXFx0MHgleFxcXFxuXFxcIiwgY3FfbWFzayk7XFxuICA4OTpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDcUhlYWQ6XFxcXHQldVxcXFxuXFxcIiwgY3FfaGVhZCk7XFxuICA5MDpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDcVRhaWw6XFxcXHQldVxcXFxuXFxcIiwgY3FfdGFpbCk7XFxuICA5MTpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDYWNoZWRDcVRhaWw6XFxcXHQldVxcXFxuXFxcIiwgZGF0YV9yYWNlKGN0eC1cXHUwMDNlY2FjaGVkX2NxX3RhaWwpKTtcXG4gIDkyOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNRRXM6XFxcXHQldVxcXFxuXFxcIiwgc3FfdGFpbCAtIHNxX2hlYWQpO1xcbiAgOTM6XFx0XFx0c3FfZW50cmllcyA9IG1pbihzcV90YWlsIC0gc3FfaGVhZCwgY3R4LVxcdTAwM2VzcV9lbnRyaWVzKTtcXG4gIDk0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzcV9lbnRyaWVzOyBpKyspIHtcXG4gIDk1OlxcdFxcdFxcdHVuc2lnbmVkIGludCBlbnRyeSA9IGkgKyBzcV9oZWFkO1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlO1xcbiAgOTc6XFx0XFx0XFx0dW5zaWduZWQgaW50IHNxX2lkeDtcXG4gIDk4OlxcdFxcdFxcdGJvb2wgc3FlMTI4ID0gZmFsc2U7XFxuICA5OTpcXHRcXHRcXHR1OCBvcGNvZGU7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX05PX1NRQVJSQVkpXFxuIDEwMjpcXHRcXHRcXHRcXHRzcV9pZHggPSBlbnRyeSBcXHUwMDI2IHNxX21hc2s7XFxuIDEwMzpcXHRcXHRcXHRlbHNlXFxuIDEwNDpcXHRcXHRcXHRcXHRzcV9pZHggPSBSRUFEX09OQ0UoY3R4LVxcdTAwM2VzcV9hcnJheVtlbnRyeSBcXHUwMDI2IHNxX21hc2tdKTtcXG4gMTA1OlxcdFxcdFxcdGlmIChzcV9pZHggXFx1MDAzZSBzcV9tYXNrKVxcbiAxMDY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdFxcdHNxZSA9IFxcdTAwMjZjdHgtXFx1MDAzZXNxX3NxZXNbc3FfaWR4IFxcdTAwM2NcXHUwMDNjIHNxX3NoaWZ0XTtcXG4gMTA5OlxcdFxcdFxcdG9wY29kZSA9IFJFQURfT05DRShzcWUtXFx1MDAzZW9wY29kZSk7XFxuIDExMDpcXHRcXHRcXHRpZiAob3Bjb2RlIFxcdTAwM2U9IElPUklOR19PUF9MQVNUKVxcbiAxMTE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDExMjpcXHRcXHRcXHRvcGNvZGUgPSBhcnJheV9pbmRleF9ub3NwZWMob3Bjb2RlLCBJT1JJTkdfT1BfTEFTVCk7XFxuIDExMzpcXHRcXHRcXHRpZiAoc3Ffc2hpZnQpIHtcXG4gMTE0OlxcdFxcdFxcdFxcdHNxZTEyOCA9IHRydWU7XFxuIDExNTpcXHRcXHRcXHR9IGVsc2UgaWYgKGlvX2lzc3VlX2RlZnNbb3Bjb2RlXS5pc18xMjgpIHtcXG4gMTE2OlxcdFxcdFxcdFxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKSkge1xcbiAxMTc6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLFxcbiAxMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFxcIiU1dTogaW52YWxpZCBzcWUsIDEyOEIgZW50cnkgb24gbm9uLW1peGVkIHNxXFxcXG5cXFwiLFxcbiAxMTk6XFx0XFx0XFx0XFx0XFx0XFx0c3FfaWR4KTtcXG4gMTIwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjE6XFx0XFx0XFx0XFx0fVxcbiAxMjI6XFx0XFx0XFx0XFx0aWYgKHNxX2lkeCA9PSBzcV9tYXNrKSB7XFxuIDEyMzpcXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sXFxuIDEyNDpcXHRcXHRcXHRcXHRcXHRcXHRcXFwiJTV1OiBjb3JydXB0ZWQgc3FlLCB3cmFwcGluZyAxMjhCIGVudHJ5XFxcXG5cXFwiLFxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0XFx0c3FfaWR4KTtcXG4gMTI2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjc6XFx0XFx0XFx0XFx0fVxcbiAxMjg6XFx0XFx0XFx0XFx0c3FfaGVhZCsrO1xcbiAxMjk6XFx0XFx0XFx0XFx0aSsrO1xcbiAxMzA6XFx0XFx0XFx0XFx0c3FlMTI4ID0gdHJ1ZTtcXG4gMTMxOlxcdFxcdFxcdH1cXG4gMTMyOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU1dTogb3Bjb2RlOiVzLCBmZDolZCwgZmxhZ3M6JXgsIG9mZjolbGx1LCBcXFwiXFxuIDEzMzpcXHRcXHRcXHRcXHQgICAgICBcXFwiYWRkcjoweCVsbHgsIHJ3X2ZsYWdzOjB4JXgsIGJ1Zl9pbmRleDolZCBcXFwiXFxuIDEzNDpcXHRcXHRcXHRcXHQgICAgICBcXFwidXNlcl9kYXRhOiVsbHVcXFwiLFxcbiAxMzU6XFx0XFx0XFx0XFx0ICAgc3FfaWR4LCBpb191cmluZ19nZXRfb3Bjb2RlKG9wY29kZSksIHNxZS1cXHUwMDNlZmQsXFxuIDEzNjpcXHRcXHRcXHRcXHQgICBzcWUtXFx1MDAzZWZsYWdzLCAodW5zaWduZWQgbG9uZyBsb25nKSBzcWUtXFx1MDAzZW9mZixcXG4gMTM3OlxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNxZS1cXHUwMDNlYWRkciwgc3FlLVxcdTAwM2Vyd19mbGFncyxcXG4gMTM4OlxcdFxcdFxcdFxcdCAgIHNxZS1cXHUwMDNlYnVmX2luZGV4LCBzcWUtXFx1MDAzZXVzZXJfZGF0YSk7XFxuIDEzOTpcXHRcXHRcXHRpZiAoc3FlMTI4KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjQ4LjQ5OTExNTQ1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5OTkzODkzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBDYWxsZXJzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpcyBiZWluZyB1c2VkLiBGaXJzdCBzdGVwLCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0J3MgY2FsbGVkIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyByZWx5IG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgZ2l2ZXMgbWUgYSBtYXAgb2YgaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIGFjdGlvbi4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAxODAgdG8gMjQwIG9mIGBpb191cmluZy9mZGluZm8uY2AuIFRoYXQgcmFuZ2UgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIG9yIHJlbGV2YW50IGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSdsbCBtZXRpY3Vsb3VzbHkgcmVhZCB0aHJvdWdoIHRoaXMgc2VjdGlvbi4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHZhcmlhYmxlIGFzc2lnbm1lbnRzLCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGRhdGEgc3RydWN0dXJlcy4gVGhpcyB3aWxsIGhlbHAgbWUgZGVjaXBoZXIgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSB3aXRoaW4gaXRzIGxvY2FsIGVjb3N5c3RlbS4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgJ21lYXQnIG9mIHRoZSBtYXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjU0LjQ5ODUwODQ5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2ZkaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRcXHRzdHJ1Y3QgaW9fc3FfZGF0YSAqc3EgPSBjdHgtXFx1MDAzZXNxX2RhdGE7XFxuIDE4MTpcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxODQ6XFx0XFx0XFx0dHNrID0gcmN1X2RlcmVmZXJlbmNlKHNxLVxcdTAwM2V0aHJlYWQpO1xcbiAxODU6XFx0XFx0XFx0LypcXG4gMTg2OlxcdFxcdFxcdCAqIHNxLVxcdTAwM2V0aHJlYWQgbWlnaHQgYmUgTlVMTCBpZiB3ZSByYWNlZCB3aXRoIHRoZSBzcXBvbGxcXG4gMTg3OlxcdFxcdFxcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cXG4gMTg4OlxcdFxcdFxcdCAqL1xcbiAxODk6XFx0XFx0XFx0aWYgKHRzaykge1xcbiAxOTA6XFx0XFx0XFx0XFx0dTY0IHVzZWM7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdFxcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTM6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE5NDpcXHRcXHRcXHRcXHR1c2VjID0gaW9fc3FfY3B1X3VzZWModHNrKTtcXG4gMTk1OlxcdFxcdFxcdFxcdHNxX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzayxcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHByb2NfcGlkX25zKGZpbGVfaW5vZGUobS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2IpKTtcXG4gMTk3OlxcdFxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTg6XFx0XFx0XFx0XFx0c3FfY3B1ID0gc3EtXFx1MDAzZXNxX2NwdTtcXG4gMTk5OlxcdFxcdFxcdFxcdHNxX3RvdGFsX3RpbWUgPSB1c2VjO1xcbiAyMDA6XFx0XFx0XFx0XFx0c3Ffd29ya190aW1lID0gc3EtXFx1MDAzZXdvcmtfdGltZTtcXG4gMjAxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIwMjpcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMjAzOlxcdFxcdFxcdH1cXG4gMjA0OlxcdFxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiU3FUaHJlYWQ6XFxcXHQlZFxcXFxuXFxcIiwgc3FfcGlkKTtcXG4gMjA3OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNxVGhyZWFkQ3B1OlxcXFx0JWRcXFxcblxcXCIsIHNxX2NwdSk7XFxuIDIwODpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJTcVRvdGFsVGltZTpcXFxcdCVsbHVcXFxcblxcXCIsIHNxX3RvdGFsX3RpbWUpO1xcbiAyMDk6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiU3FXb3JrVGltZTpcXFxcdCVsbHVcXFxcblxcXCIsIHNxX3dvcmtfdGltZSk7XFxuIDIxMDpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJVc2VyRmlsZXM6XFxcXHQldVxcXFxuXFxcIiwgY3R4LVxcdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xcbiAyMTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yOyBpKyspIHtcXG4gMjEyOlxcdFxcdFxcdHN0cnVjdCBmaWxlICpmID0gTlVMTDtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5vZGVzW2ldKVxcbiAyMTU6XFx0XFx0XFx0XFx0ZiA9IGlvX3Nsb3RfZmlsZShjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ub2Rlc1tpXSk7XFxuIDIxNjpcXHRcXHRcXHRpZiAoZikge1xcbiAyMTc6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiBcXFwiLCBpKTtcXG4gMjE4OlxcdFxcdFxcdFxcdHNlcV9maWxlX3BhdGgobSwgZiwgXFxcIiBcXFxcdFxcXFxuXFxcXFxcXFxcXFwiKTtcXG4gMjE5OlxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJcXFxcblxcXCIpO1xcbiAyMjA6XFx0XFx0XFx0fVxcbiAyMjE6XFx0XFx0fVxcbiAyMjI6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiVXNlckJ1ZnM6XFxcXHQldVxcXFxuXFxcIiwgY3R4LVxcdTAwM2VidWZfdGFibGUubnIpO1xcbiAyMjM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5yOyBpKyspIHtcXG4gMjI0OlxcdFxcdFxcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqYnVmID0gTlVMTDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5vZGVzW2ldKVxcbiAyMjc6XFx0XFx0XFx0XFx0YnVmID0gY3R4LVxcdTAwM2VidWZfdGFibGUubm9kZXNbaV0tXFx1MDAzZWJ1ZjtcXG4gMjI4OlxcdFxcdFxcdGlmIChidWYpXFxuIDIyOTpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNXU6IDB4JWxseC8lenVcXFxcblxcXCIsIGksIGJ1Zi1cXHUwMDNldWJ1ZiwgYnVmLVxcdTAwM2VsZW4pO1xcbiAyMzA6XFx0XFx0XFx0ZWxzZVxcbiAyMzE6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiBcXHUwMDNjbm9uZVxcdTAwM2VcXFxcblxcXCIsIGkpO1xcbiAyMzI6XFx0XFx0fVxcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRzZXFfcHV0cyhtLCBcXFwiUG9sbExpc3Q6XFxcXG5cXFwiKTtcXG4gMjM1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoMVUgXFx1MDAzY1xcdTAwM2MgY3R4LVxcdTAwM2VjYW5jZWxfdGFibGUuaGFzaF9iaXRzKTsgaSsrKSB7XFxuIDIzNjpcXHRcXHRcXHRzdHJ1Y3QgaW9faGFzaF9idWNrZXQgKmhiID0gXFx1MDAyNmN0eC1cXHUwMDNlY2FuY2VsX3RhYmxlLmhic1tpXTtcXG4gMjM3OlxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsIFxcdTAwMjZoYi1cXHUwMDNlbGlzdCwgaGFzaF9ub2RlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjo1NC40OTg1OTE4MDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjIzODU2Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGlvX3VyaW5nIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGFzc29jaWF0aW5nIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCB0aGUgY29tcGxldGlvbiBxdWV1ZXMgbGlrZWx5IHJlc2lkZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBhc3NvY2lhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBlcnJvcnMgb3IgcmVzb3VyY2UgY2xlYW51cCByZWxhdGVkIHRvIGZpbGUgZGVzY3JpcHRvcnMuIEkgd2FudCB0byBzZWUgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGhlcmUgdG9vLiBUaGUgcGVyZm9ybWFuY2Ugd2lsbCBpbmZsdWVuY2UgbGF0ZW5jeSBpbiBwYXJ0aWN1bGFyLCBzbyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgd2VsbCB0aGUga2VybmVsIGNhbiBrZWVwIHVwIHdpdGggdGhlIGxvYWQuIEFueSBvcHRpbWl6YXRpb25zIGZvciBoaWdoLXRocm91Z2hwdXQgb3IgY29uY3VycmVudCBJL08gd2lsbCBiZSBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjI6NTguMTIyNDUwNTg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2ZkaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgIG9wPSVkLCB0YXNrX3dvcmtzPSVkXFxcXG5cXFwiLCByZXEtXFx1MDAzZW9wY29kZSxcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdFxcdHRhc2tfd29ya19wZW5kaW5nKHJlcS1cXHUwMDNldGN0eC1cXHUwMDNldGFzaykpO1xcbiAyNDI6XFx0XFx0fVxcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRzZXFfcHV0cyhtLCBcXFwiQ3FPdmVyZmxvd0xpc3Q6XFxcXG5cXFwiKTtcXG4gMjQ1OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wbGV0aW9uX2xvY2spO1xcbiAyNDY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvY3FlLCBcXHUwMDI2Y3R4LVxcdTAwM2VjcV9vdmVyZmxvd19saXN0LCBsaXN0KSB7XFxuIDI0NzpcXHRcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWUgPSBcXHUwMDI2b2NxZS1cXHUwMDNlY3FlO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgIHVzZXJfZGF0YT0lbGx1LCByZXM9JWQsIGZsYWdzPSV4XFxcXG5cXFwiLFxcbiAyNTA6XFx0XFx0XFx0XFx0ICAgY3FlLVxcdTAwM2V1c2VyX2RhdGEsIGNxZS1cXHUwMDNlcmVzLCBjcWUtXFx1MDAzZWZsYWdzKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0fVxcbiAyNTM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlY29tcGxldGlvbl9sb2NrKTtcXG4gMjU0OlxcdFxcdG5hcGlfc2hvd19mZGluZm8oY3R4LCBtKTtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0LypcXG4gMjU4OlxcdCAqIENhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgZmlsZSBhbHJlYWR5LCB3ZSBkb24ndCBuZWVkIHRvIGRvXFxuIDI1OTpcXHQgKiBhbnl0aGluZyBlbHNlIHRvIGdldCBhbiBleHRyYSByZWZlcmVuY2UuXFxuIDI2MDpcXHQgKi9cXG4gMjYxOlxcdF9fY29sZCB2b2lkIGlvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDI2MjpcXHR7XFxuIDI2MzpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0LypcXG4gMjY2OlxcdFxcdCAqIEF2b2lkIEFCQkEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgc2VxIGxvY2sgYW5kIHRoZSBpb191cmluZyBtdXRleCxcXG4gMjY3OlxcdFxcdCAqIHNpbmNlIGZkaW5mbyBjYXNlIGdyYWJzIGl0IGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygbm9ybWFsIHVzZVxcbiAyNjg6XFx0XFx0ICogY2FzZXMuXFxuIDI2OTpcXHRcXHQgKi9cXG4gMjcwOlxcdFxcdGlmIChtdXRleF90cnlsb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spKSB7XFxuIDI3MTpcXHRcXHRcXHRfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKGN0eCwgbSk7XFxuIDI3MjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuIDI3MzpcXHRcXHR9XFxuIDI3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjU4LjEyMjUyMjQ3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDA0MDgxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgZmRpbmZvIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21lb25lIHJlYWRzIHRoZSBgL3Byb2MvW3BpZF0vZmRpbmZvL1tmZF1gIGZpbGUgZm9yIGFuIGlvX3VyaW5nIGZpbGUgZGVzY3JpcHRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gRXNzZW50aWFsbHksIGl0J3MgbW9kaWZ5aW5nIGhvdyB0aGUgZmlsZSBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQuIEkgc2VlIHRoaXMgYml0IGhlcmU6XG5cbmBgYGNcbmJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbmBgYFxuXG5XYWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseS4gV2UncmUgY2hlY2tpbmcgaWYgYGNxX2hlYWRgIGVxdWFscyBgY3FfbWFza2AuICBgY3FfaGVhZGAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IHJlcHJlc2VudHMgdGhlIGhlYWQgcG9pbnRlciwgYW5kIGl0J3MgYSBwb2ludGVyLCBzby4uLkRvZXMgaXQgbWVhbiBgY3FfaGVhZGAgZXF1YWxzIGBjcV9tYXNrYCwgb3Igc2hvdWxkIGl0IGJlIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgPT0gY3FfbWFza2A/IFNvbWV0aGluZyBmZWVscyBvZmYuIEFsc28sIGBjcV9oZWFkYCB3cmFwcyBhZnRlciAyXjMyLCBidXQgYGNxX21hc2tgIGlzIGBjdHgtXHUwMDNlY3FfZW50cmllcyAtIDFgIVxuXG5JcyB0aGlzIGEgYnVnIGZpeD8gT3IgZG9lcyBpdCBpbnRyb2R1Y2UgYSBidWcgb3IgZml4IGFuIE9PQiBhY2Nlc3M/IEl0IGxvb2tzIGxpa2UgaXQncyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY3EgYXJyYXkuIEJ1dCB0aGUgbG9naWMgaXMgY29uZnVzaW5nLiBJdCdzIGNoZWNraW5nIGlmIHRoZSBoZWFkIG9mIHRoZSBDUSBpcyBlcXVhbCB0byB0aGUgbWFzay4gSXQgc2VlbXMgbGlrZSBpdCdzIGd1YXJkaW5nIGFnYWluc3QgQ1FFMzIgbG9naWMuXG5cbkFsc28sIHdoYXQncyBnb2luZyBvbiB3aXRoIGBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMmA/IElmIHRoYXQgZmxhZyBpcyBzZXQsIGhvdyBkb2VzIENRRTMyIGluZGV4aW5nIHdvcmsgd2l0aGluIGlvX3VyaW5nPyBJIG5lZWQgdG8gY2hlY2sgaG93IENRRTMyIGlzIHVzZWQuIEknbGwgbmVlZCB0byBnbyBhbmQgc2VhcmNoIGZvciBgSU9SSU5HX1NFVFVQX0NRRTMyYCBpbiB0aGUgaW9fdXJpbmcgc291cmNlIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBDUUUzMiBmbGFnIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6MDQuMTI2NjA2NzY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc4MDAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2ZkaW5mby5jPTYwPXN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTE2MC1cXHRcXHRjcWUgPSBcXHUwMDI2ci1cXHUwMDNlY3Flc1soY3FfaGVhZCBcXHUwMDI2IGNxX21hc2spXTtcXG5pb191cmluZy9mZGluZm8uYzoxNjE6XFx0XFx0aWYgKChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvZmRpbmZvLmMtMTYyLVxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTMyLVxcdFxcdGlmIChvY3FlLVxcdTAwM2VjcWUuZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcXG5pb191cmluZy9pb191cmluZy5jOjUzMzpcXHRcXHQgICAgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVxcdFxcdFxcdGlzX2NxZTMyID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM2LVxcdFxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjUzNzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTUzOC1cXHRcXHRcXHRpc19jcWUzMiA9IGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTY1OS1cXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcXHRpZiAoY3FlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXFx0XFx0aXNfY3FlMzIgPSB0cnVlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03MTg9Ym9vbCBpb19jcWVfY2FjaGVfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NDg6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5jLTc0OS1cXHRcXHRvZmYgXFx1MDAzY1xcdTAwM2M9IDE7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlxcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cXHRvZmYgPSBzdHJ1Y3Rfc2l6ZShyaW5ncywgY3FlcywgY3FfZW50cmllcyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTA1OlxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTIxMDYtXFx0XFx0b2ZmID0gc2l6ZV9tdWwob2ZmLCAyKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVxcdCAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNjpcXHRpZiAoKGZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cXG5pb191cmluZy9pb191cmluZy5jOjI4Mzc6XFx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTY1LVxcdFxcdFxcdElPUklOR19TRVRVUF9TUUUxMjggfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oOjY2OlxcdFxcdFxcdElPUklOR19TRVRVUF9DUUUzMiB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjctXFx0XFx0XFx0SU9SSU5HX1NFVFVQX1NJTkdMRV9JU1NVRVIgfFxcXFxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlX292ZXJmbG93KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzEtXFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzI6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTI3My1cXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTMxMC1cXHRtZW1jcHkoY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2VjcWUsIHNpemVvZigqY3FlKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMTE6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIgfHwgaXNfY3FlMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTMxMi1cXHRcXHRtZW1jcHkoY3FlLVxcdTAwM2ViaWdfY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2ViaWdfY3FlLCBzaXplb2YoKmNxZSkpO1xcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jLTEwNS1cXHRpZiAoKCpmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMikgXFx1MDAyNlxcdTAwMjZcXG5pb191cmluZy9tc2dfcmluZy5jOjEwNjpcXHQgICAgISh0YXJnZXRfY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA3LVxcdFxcdFxcdFxcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG4tLVxcbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtNDktXFxuaW9fdXJpbmcvbm9wLmM6NTA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL25vcC5jLTUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk0LSNkZWZpbmUgQ09QWV9GTEFHU1xcdChJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWSB8IElPUklOR19TRVRVUF9TUUUxMjggfCBcXFxcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTU6XFx0XFx0XFx0IElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9OT19NTUFQIHwgXFxcXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk2LVxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEIHwgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRClcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy02NDktXFx0XFx0ZHN0X21hc2sgPSBwLVxcdTAwM2VjcV9lbnRyaWVzIC0gMTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjY1MDpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjUxLVxcdFxcdFxcdGluZGV4IFxcdTAwM2NcXHUwMDNjPSAxO1xcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MjQzPWludCBpb191cmluZ19jbWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cXHRcXHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX1NRRTEyODtcXG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjYxLVxcdFxcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9ODMxPXN0YXRpYyBpbnQgaW1wb3J0X3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtODQxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL3pjcnguYzo4NDI6XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL3pjcnguYy04NDMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTk4MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy96Y3J4LmM6OTgyOlxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy96Y3J4LmMtOTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMzowNC40NDQ0MTQwMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ1Mzk2MzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9fdXJpbmcgQ1FFIEhhbmRsaW5nIGluIGZkaW5mby5jKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgaW9fdXJpbmcvZmRpbmZvLmNgLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBDUUVzIChDb21wbGV0aW9uIFF1ZXVlIEVudHJpZXMpIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGlzIGNoZWNrOiBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO2AuIFRoYXQgZmxhZ3MgdGhlIGxhc3Qgc2xvdCBvZiB0aGUgY2lyY3VsYXIgYXJyYXkuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIGZ1bmN0aW9uLlxuXG5JIHNlZSBpbiBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgdGhhdCB3aGVuIFNRRXMgKFN1Ym1pc3Npb24gUXVldWUgRW50cmllcykgYXJlIGJlaW5nIHBhcnNlZCwgdGhlcmUncyBhIGNoZWNrIGZvciBgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRGAuIElmIHRoYXQgZmxhZyBpc24ndCBzZXQsIGFuZCBhIDEyOEIgU1FFIGlzIGVuY291bnRlcmVkLCBpdCdzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGEgMTI4QiBlbnRyeSBkb2Vzbid0IHdyYXAgYXJvdW5kIHRoZSBhcnJheS5cblxuTm93LCBsb29raW5nIGF0IHRoZSBDUUUgcHJvY2Vzc2luZywgSSBzZWUgdGhpcyBsb29wIHdoZXJlIGBjcWVgIGlzIHB1bGxlZCBmcm9tIHRoZSByaW5nOiBgY3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07YC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gSSBpbW1lZGlhdGVseSBub3RpY2UgdGhlIGBjcWUzMmAgZmxhZyBhbmQgdGhlIGNvbmRpdGlvbmFsIHByaW50aW5nIG9mIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAgd2hlbiBpdCdzIHNldC4gVGhpcyBpbmRpY2F0ZXMgYSAzMi1iaXQgQ1FFIChsYXJnZXIgdGhhbiBub3JtYWwpLCB1dGlsaXppbmcgdGhlIGBiaWdfY3FlYCBmaWVsZHMuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgYGlzX2xhc3RfY3FhcnJheV9zbG90YCBpcyB1c2VkIHRvIHNraXAgdGhlIGBiaWdfY3FlYCBmaWVsZHMgaWYgaXQncyB0aGUgbGFzdCBzbG90LlxuXG5Ib3dldmVyLCB0aGUgbGluZTogYGlmIChjcWUzMikgc2VxX3ByaW50ZihtLCBcIiwgZXh0cmExOiVsbHUsIGV4dHJhMjolbGx1XCIsIGNxZS1cdTAwM2ViaWdfY3FlWzBdLCBjcWUtXHUwMDNlYmlnX2NxZVsxXSk7YCBjb25jZXJucyBtZSBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgdGhvc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBldmVuIGlmIHRoZSBDUUUgaXMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5LiBUaGlzIGlzIHJlYWxseSBpbnRlcmVzdGluZyBhbmQgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgYSByZWFkIG91dCBvZiBib3VuZHMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYmlnX2NxZWAgKmFjdHVhbGx5IGlzKi4gSXQncyBsaWtlbHkgYSB1bmlvbiBvZiBzb21lIGtpbmQsIGFuZCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gTGV0J3MgZ3JlcCBmb3IgdGhhdCB0byBjb25maXJtIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbGx5LiBJdCBmZWVscyBsaWtlIGEgc3VidGxlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMzowOS44OTgzODA5NTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ2NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpZ19jcWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9NTAwPXN0cnVjdCBpb191cmluZ19jcWUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNTA4LVxcdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjUwOTpcXHRfX3U2NCBiaWdfY3FlW107XFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNTEwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIzOjA5Ljk0OTkzNTc5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTM0NzY5NjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKippb191cmluZyBDUUUgT3V0LW9mLUJvdW5kcyBBY2Nlc3MgLSBXb3J0aHkgb2YgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYGlvX3VyaW5nX2NxZWAgc3RydWN0dXJlIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBUaGUgZmxleGlibGUgYXJyYXkgbWVtYmVyLCBgYmlnX2NxZWAsIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gSWYgYGNxZTMyYCBpcyB0cnVlLCBpdCdzIGEgMzItYnl0ZSBDUUUsIGFuZCBhY2Nlc3NpbmcgYGNxZS1cdTAwM2ViaWdfY3FlWzBdYCBhbmQgYGNxZS1cdTAwM2ViaWdfY3FlWzFdYCBlZmZlY3RpdmVseSAqb3ZlcmxheXMqIHRoZSBuZXh0IENRRSBzbG90LCBgY3FlICsgMWAsIHdpdGhpbiB0aGUgYHItXHUwMDNlY3Flc1tdYCBhcnJheS4gTm93LCB0aGUgY29kZSdzIGxvZ2ljIGhhcyBhIGNvbmRpdGlvbjogSWYgYGNxX2hlYWQgXHUwMDI2IGNxX21hc2sgPT0gY3FfbWFza2AsIHRoZW4gYGNxZWAgcG9pbnRzIHRvIHRoZSBsYXN0IGVsZW1lbnQuIENvbnNlcXVlbnRseSwgYWNjZXNzaW5nIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuSGFuZyBvbi4uLiBJIHNlZSBhIHBhdGNoIHRvdWNoaW5nIHRoaXMgY29kZSEgSXQgaW50cm9kdWNlcyBhIGNoZWNrOiBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spYC4gSG9sZCBvbi4uLiBUaGUgb3JpZ2luYWwgY29tcGFyaXNvbiB3YXMgYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKSA9PSBjcV9tYXNrYC4gVGhlIGNyaXRpY2FsIGRpZmZlcmVuY2UgaXMgdGhlIGNoYW5nZSBmcm9tIGVxdWFsaXR5IHRvIGAoY3FfaGVhZCA9PSBjcV9tYXNrKWAhICBgY3FfaGVhZGAgc3RhcnRzIGF0IHplcm8gYW5kIGluY3JlbWVudHMuIFRoaXMgYChjcV9oZWFkID09IGNxX21hc2spYCB3aWxsIGJlIGZhbHNlIGV2ZW4gaWYgdGhlIG9yaWdpbmFsIGNvbmRpdGlvbiBpcyB0cnVlLiBJcyB0aGlzIGEgYnVnPyBJdCBpcyBhIGNoYW5nZSB0byBjb3JlIGNvZGU6IGBpb191cmluZy9mZGluZm8uY2AuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIFwiV29ydGhGdXp6aW5nLlwiIExldCdzIGFwcGx5IHRoZSBjcml0ZXJpYS5cblxuVGhlIHRyaWFnZSBwaGlsb3NvcGh5IGNsZWFybHkgc3RhdGVzIHRoYXQ6XG5cbjEuICBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gVGhlIGNvZGUgbmVlZHMgdG8gYmUgZXhlY3V0YWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuMi4gIEkgc2hvdWxkIG5ldmVyIGJsaW5kbHkgdHJ1c3QgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcywgZXNwZWNpYWxseSBpbiB0aGUgY29yZS5cbjMuICBOZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBNVVNUIGJlIGZ1enplZC5cblxuQW5kIHNwZWNpZmljYWxseTogSSdtIGxvb2tpbmcgZm9yICpDb3JlIFN1YnN5c3RlbXMqLCAqUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzKiwgKlJ1bnRpbWUgQXNzZXJ0aW9ucyosIG9yICpSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzKi4gQW55dGhpbmcgdGhhdCB0b3VjaGVzIHRoZSAqY29yZSogKG1tLCBsb2NraW5nLCBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcpIGlzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZS4gVGhpcyB0b3VjaGVzIHN5c2NhbGwgaGFuZGxpbmcgLSBhbmQgYXN5bmMgSS9PLlxuXG5Pa2F5LCBgaW9fdXJpbmdgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbS4gYGlvX3VyaW5nL2ZkaW5mby5jYCBpcyByZWFjaGFibGUgdmlhIGAvcHJvYy9bcGlkXS9mZGluZm8vW2lvX3VyaW5nX2ZkXWAuIFN5emthbGxlciAqZXh0ZW5zaXZlbHkqIHRlc3RzIGlvX3VyaW5nLCBhbmQgdGhpcyBgL3Byb2Mvc2VsZi9mZGluZm9gIHRoaW5nIGlzIGEgc3RhbmRhcmQsIHJlYWNoYWJsZSBvcGVyYXRpb24uIEkga25vdyBzeXprYWxsZXIgY2FuIHJlYWQgdGhlc2UgZmRpbmZvIGZpbGVzIC0gaXQgZ2VuZXJhdGVzIGNhbGxzIGxpa2UgYHJlYWQob3BlbihcIi9wcm9jL3NlbGYvZmRpbmZvLy4uLlwiKSlgLiBgaW9fdXJpbmdgICppcyogcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiAgT3BlbmluZyBgL3Byb2Mvc2VsZi9mZGluZm8vXHUwMDNjZmRcdTAwM2VgIHdoZXJlIGBcdTAwM2NmZFx1MDAzZWAgaXMgYW4gaW9fdXJpbmcgZmQsIGFuZCByZWFkaW5nIGZyb20gaXQsIHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uXG5cbkxldCdzIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSwgdG8gY29uZmlybSBhbmQgbWFrZSBzdXJlIGl0J3MgY29tcGlsZWQgaW4uIFllcC4gIGBpb191cmluZy9mZGluZm8uY2AgaXMgcmlnaHQgdGhlcmUgaW4gYGlvX3VyaW5nL01ha2VmaWxlYC5cblxuVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgZnV6emluZyBndWlkZWxpbmVzLCBhbmQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgY29kZSwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB0aGlzIHBhdGNoICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6MzkuMjk3NjM1MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzk3NzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVCkgKz0gbmV0Lm8gY21kX25ldC5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgKz0gbW9ja19maWxlLm9cXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTE0LSNpbmNsdWRlIFxcXCJzcXBvbGwuaFxcXCJcXG5pb191cmluZy9mZGluZm8uYzoxNTojaW5jbHVkZSBcXFwiZmRpbmZvLmhcXFwiXFxuaW9fdXJpbmcvZmRpbmZvLmMtMTYtI2luY2x1ZGUgXFxcImNhbmNlbC5oXFxcIlxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjAtI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuaW9fdXJpbmcvZmRpbmZvLmM6MjE6c3RhdGljIF9fY29sZCB2b2lkIGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9mZGluZm8uYy0yMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNlcV9maWxlICptLFxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMzMtXFxuaW9fdXJpbmcvZmRpbmZvLmM6MzQ6c3RhdGljIF9fY29sZCB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuaW9fdXJpbmcvZmRpbmZvLmMtMzUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTQzLVxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL2ZkaW5mby5jOjQ0OlxcdFxcdGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhjdHgsIG0sIFxcXCJkeW5hbWljXFxcIik7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDUtXFx0XFx0YnJlYWs7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDYtXFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcXG5pb191cmluZy9mZGluZm8uYzo0NzpcXHRcXHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcXFwic3RhdGljXFxcIik7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDgtXFx0XFx0YnJlYWs7XFxuLS1cXG5pb191cmluZy9mZGluZm8uYy01My0jZWxzZVxcbmlvX3VyaW5nL2ZkaW5mby5jOjU0OnN0YXRpYyBpbmxpbmUgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbmlvX3VyaW5nL2ZkaW5mby5jLTU1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5pb191cmluZy9mZGluZm8uYy01OS1cXG5pb191cmluZy9mZGluZm8uYzo2MDpzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuaW9fdXJpbmcvZmRpbmZvLmMtNjEte1xcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjUzLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNvbXBsZXRpb25fbG9jayk7XFxuaW9fdXJpbmcvZmRpbmZvLmM6MjU0OlxcdG5hcGlfc2hvd19mZGluZm8oY3R4LCBtKTtcXG5pb191cmluZy9mZGluZm8uYy0yNTUtfVxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjYwLSAqL1xcbmlvX3VyaW5nL2ZkaW5mby5jOjI2MTpfX2NvbGQgdm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxlKVxcbmlvX3VyaW5nL2ZkaW5mby5jLTI2Mi17XFxuLS1cXG5pb191cmluZy9mZGluZm8uYy0yNjYtXFx0ICogQXZvaWQgQUJCQSBkZWFkbG9jayBiZXR3ZWVuIHRoZSBzZXEgbG9jayBhbmQgdGhlIGlvX3VyaW5nIG11dGV4LFxcbmlvX3VyaW5nL2ZkaW5mby5jOjI2NzpcXHQgKiBzaW5jZSBmZGluZm8gY2FzZSBncmFicyBpdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIG5vcm1hbCB1c2VcXG5pb191cmluZy9mZGluZm8uYy0yNjgtXFx0ICogY2FzZXMuXFxuLS1cXG5pb191cmluZy9mZGluZm8uYy0yNzAtXFx0aWYgKG11dGV4X3RyeWxvY2soXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jaykpIHtcXG5pb191cmluZy9mZGluZm8uYzoyNzE6XFx0XFx0X19pb191cmluZ19zaG93X2ZkaW5mbyhjdHgsIG0pO1xcbmlvX3VyaW5nL2ZkaW5mby5jLTI3Mi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuLS1cXG5pb191cmluZy9mZGluZm8uaC0yLVxcbmlvX3VyaW5nL2ZkaW5mby5oOjM6dm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzctI2luY2x1ZGUgXFxcInNxcG9sbC5oXFxcIlxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6Nzg6I2luY2x1ZGUgXFxcImZkaW5mby5oXFxcIlxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzktI2luY2x1ZGUgXFxcImtidWYuaFxcXCJcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpb191cmluZ19mb3BzID0ge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzA3LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcwODpcXHQuc2hvd19mZGluZm9cXHQ9IGlvX3VyaW5nX3Nob3dfZmRpbmZvLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwOS0jZW5kaWZcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMTYtI2luY2x1ZGUgXFxcInNxcG9sbC5oXFxcIlxcbmlvX3VyaW5nL29wZGVmLmM6MTc6I2luY2x1ZGUgXFxcImZkaW5mby5oXFxcIlxcbmlvX3VyaW5nL29wZGVmLmMtMTgtI2luY2x1ZGUgXFxcImtidWYuaFxcXCJcXG4tLVxcbmlvX3VyaW5nL3NxcG9sbC5jPTI4NT1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmMtMzA0LVxcbmlvX3VyaW5nL3NxcG9sbC5jOjMwNTpcXHQvKiByZXNldCB0byBvdXIgcGlkIGFmdGVyIHdlJ3ZlIHNldCB0YXNrX2NvbW0sIGZvciBmZGluZm8gKi9cXG5pb191cmluZy9zcXBvbGwuYy0zMDYtXFx0c3FkLVxcdTAwM2V0YXNrX3BpZCA9IGN1cnJlbnQtXFx1MDAzZXBpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6MzkuNTQxNjI0MDI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNjg5NDM4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoaXMsIGNvbnNpZGVyaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqSU9fVVJJTkcgTW9kdWxlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gZmRpbmZvLm9gIGluIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIG1lYW5pbmcgdGhhdCB0aGUgYGZkaW5mby5vYCBvYmplY3QgZmlsZSB3aXRoaW4gYGlvX3VyaW5nYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1BST0NfRlNgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gIEl0IG1ha2VzIHNlbnNlOyBgZmRpbmZvYCBsaWtlbHkgaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbSB0byBwcm92aWRlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZGVwZW5kZW5jeS5cblxuTm93LCBpZiBJIHdhbnQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGBDT05GSUdfUFJPQ19GU2AgaXMgZGVmaW5lZCBmb3IgYGlvX3VyaW5nYCwgSSdsbCBjaGVjayBpbiB0aGUgYEtjb25maWdgIGZpbGVzLiBQcm9iYWJseSBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gdHJhY2UgdXBzdHJlYW0gdG8gYGluaXQvS2NvbmZpZ2AgaWYgaXQncyBpbmhlcml0ZWQgb3IgZGVmaW5lZCBnZW5lcmFsbHkuIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0aGVyZS4uLiBJIG5lZWQgdG8gc2VlIGlmIGl0J3MgYSBkaXJlY3QgZGVwZW5kZW5jeSBvciBpZiBpdCBpcyBiZWluZyBkZWZpbmVkIGFzIGEgYnVpbGQgdGFyZ2V0IGluIGFueSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQgd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBgaW9fdXJpbmdgIG1vZHVsZS4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6NDMuODEwNTcxMjEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIyMDg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTU5LVxcbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTYxLVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTY5PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTgxLVxcbmluaXQvS2NvbmZpZzoxOTgyOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk4My1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMzo0My44NTg3OTc5NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcxMjUxNjc4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSU9fVVJJTkdgIGlzIHByb3Blcmx5IGVuYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoYXQgaW4gYGluaXQvS2NvbmZpZ2AuIEl0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBhbnkgZmVhdHVyZSBlbmFibGVkIG9yIGRpc2FibGVkIHRoYXQgaXMgaW5pdGlhbGl6ZWQgZWFybHkuIE5vdywgbGV0J3MgZ2V0IHRoYXQgZmlsZSBvcGVuIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxOTYwLiBJdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgdW5kZXIgdGhlIHNlY3Rpb24gcmVsYXRpbmcgdG8gYmxvY2sgZGV2aWNlcyBvciBzdG9yYWdlIGRyaXZlcnMgaWYgbWVtb3J5IHNlcnZlcy4gSSBqdXN0IG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHN0YXR1cy4gVGhlbiwgSSBjYW4gbW92ZSBvbiB0byBvdGhlciBhcmVhcyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgSU9fVVJJTkcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MDAuOTgzOTY3OTMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk1NTpcXHRcXHRoZWxwXFxuMTk1NjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZFxcbjE5NTc6XFx0XFx0ICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmdcXG4xOTU4OlxcdFxcdCAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suXFxuMTk1OTpcXHRcXG4xOTYwOlxcdGNvbmZpZyBJT19VUklOR1xcbjE5NjE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5NjI6XFx0XFx0c2VsZWN0IElPX1dRXFxuMTk2MzpcXHRcXHRkZWZhdWx0IHlcXG4xOTY0OlxcdFxcdGhlbHBcXG4xOTY1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgaW9fdXJpbmcgaW50ZXJmYWNlLCBlbmFibGluZ1xcbjE5NjY6XFx0XFx0ICBhcHBsaWNhdGlvbnMgdG8gc3VibWl0IGFuZCBjb21wbGV0ZSBJTyB0aHJvdWdoIHN1Ym1pc3Npb24gYW5kXFxuMTk2NzpcXHRcXHQgIGNvbXBsZXRpb24gcmluZ3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgYXBwbGljYXRpb24uXFxuMTk2ODpcXHRcXG4xOTY5OlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4xOTcwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtXFxcIlxcbjE5NzE6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbjE5NzI6XFx0XFx0aGVscFxcbjE5NzM6XFx0XFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgdG8gZmFjaWxpdGF0ZVxcbjE5NzQ6XFx0XFx0ICBjb2RlIGNvdmVyYWdlIHRlc3RpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjAwLjk4NDExMDczM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDc5NzE4NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFByb2MgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgQ09ORklHX1BST0NfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB3aGljaCBJIGtub3cgaXMgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQncyBsaXN0ZWQgaW4gYGZzL3Byb2MvS2NvbmZpZ2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhhdCBgS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWUsIGFueSByZWxldmFudCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gYENPTkZJR19QUk9DX0ZTYCB0byBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIG9yIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgYmVmb3JlIHRoaXMgb3B0aW9uIGlzIGV2ZW4gcHJlc2VudGVkIGFuZCBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MDkuMDYzODMyMjIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFBST0NfRlNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXFxuICAgNzpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFxcXCJWaXJ0dWFsXFxcIiBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cXG4gICA4OlxcdFxcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxcbiAgIDk6XFx0XFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcXG4gIDEwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQncyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcXFwiY2F0IC9wcm9jL2ludGVycnVwdHNcXFwiIGdpdmVzXFxuICAxMzpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XFxuICAxNDpcXHRcXHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXFxuICAxNTpcXHRcXHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJ3MgYXR0ZW50aW9uIC0tXFxuICAxNjpcXHRcXHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxcbiAgMTc6XFx0XFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXFxuICAxODpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNDowOS4wNjM5MDkxOTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTYwNDg5NDI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBDUUUgQXJyYXkgT3V0LW9mLUJvdW5kcyBpbiBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBJT19VUklOR2AgcGF0Y2gsIGFuZCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBJT19VUklOR2AgYW5kIGBQUk9DX0ZTYCBhcmUgc3RhbmRhcmQgY29uZmlncywgc28gdGhhdCBwYXJ0IGxvb2tzIGdvb2QuIE5vdywgbGV0J3Mgc2VlLCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCwgd2hpY2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZm9jdXMgb24ga2V5IHN5bWJvbHMgaGVyZS4gSSBzZWUgdGhhdCBgaW9fdXJpbmdfc2hvd19mZGluZm9gIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkL2NhbGxlZCBmcm9tIGBpb191cmluZ19mb3BzLnNob3dfZmRpbmZvYC4gQW5kIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCAqaXMqIHN0YXRpYy4gVGhlIHF1ZXN0aW9uIGlzIGNhbiBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgYmUgaW5saW5lZD9cblxuSXQgb25seSBoYXMgb25lIGNhbGxlciwgc28gaW5saW5pbmcgaXQgbG9va3MgZmVhc2libGUuIExpc3RpbmcgYm90aCBmdW5jdGlvbnMsIG9yIGp1c3QgdGhlIG5vbi1zdGF0aWMgb25lLCBpcyBpZGVhbC4gV2FpdCwgYWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBgaW9fdXJpbmdfc2hvd19mZGluZm9gICppcyogdGhlIEFQSSBlbnRyeXBvaW50IGFuZCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLlxuXG5Pa2F5LCBub3cgbGV0J3MgY2FyZWZ1bGx5IGluc3BlY3QgdGhlIHBhdGNoIGl0c2VsZiwgYmVjYXVzZSBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBIZXJlJ3MgdGhlIHJlbGV2YW50IGNvZGU6XG5cbmBgYGNcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbitcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIFxuIFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbi1cdFx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuK1x0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCIsXG4gXHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbmBgYFxuXG5JJ20gZm9jdXNpbmcgb24gdGhhdCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGNoZWNrOiBgY3FfaGVhZCA9PSBjcV9tYXNrYC4gUmVtZW1iZXIsIGBjcV9tYXNrYCBpcyBgY3R4LVx1MDAzZWNxX2VudHJpZXMgLSAxYCwgYW5kIGBjcV9oZWFkYCBpcyBhIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIHJpbmcgYnVmZmVyIGhlYWQuIFNvLCB3aGVuIGBjcV9oZWFkYCBoaXRzIHRoZSBsYXN0IHNsb3QgKGBjcV9tYXNrYCksIHRoZSBjb25kaXRpb24gYGNxX2hlYWQgPT0gY3FfbWFza2AgaXMgKnRydWUqLiBCdXQgd2hlbiBgY3FfaGVhZGAgd3JhcHMgYXJvdW5kIHRvIHRoZSBiZWdpbm5pbmcsIGl0J3MgKmZhbHNlKiBldmVuIHRob3VnaCB0aGUgaW5kZXggaXMgdGhlIHNhbWUuIE5vdywgKmlmKiBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIGZhbHNlICphbmQqIGBjcWUzMmAgaXMgdHJ1ZSBhdCB0aGUgbGFzdCBzbG90Li4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCBiYWQhXG5cbklmIGBjcWUzMmAgaXMgdHJ1ZSwgYW5kIHdlIGFyZSBub3QgaW4gdGhlIGxhc3Qgc2xvdCwgdGhlIGNvZGUgdGhlbiByZWZlcmVuY2VzIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAuLi4gdGhhdCdzICpiZXlvbmQqIHRoZSBib3VuZHMgb2YgYHItXHUwMDNlY3Flc2AhIEl0IHNlZW1zIHRvIGhhdmUgYmVlbiBhZGRlZCB0byBoYW5kbGUgMzIgYnl0ZSBDUUVzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIENRRSBlbnRyaWVzIGNhbiB3cmFwIGluIGEgcmluZywgc28gaWYgdGhlIGZsYWcgaXMgc2V0IGFuZCB3ZSBhcmUgYXQgdGhlIGxhc3QgYXJyYXkgc2xvdCwgd2UgYXJlICpub3QqIGdvaW5nIHRvIHNldCBjcWUzMiB0byB0cnVlLCBzbyB3ZSBhcmUgb2ssIGJ1dCBpZiB3ZSBhcmUgKm5vdCogYXQgdGhlIGxhc3QgYXJyYXkgc2xvdCwgYW5kIGl0IGlzIDMyIGJ5dGVzLi4uXG5cbk5vdyB3YWl0IGEgbWludXRlISBJZiBgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzJgLCB0aGUgQ1FFIFdBUyAzMiBieXRlcywgcmlnaHQ/IEJ1dCBob2xkIG9uLCBjYW4gaW9fdXJpbmcgQ1FFMzIgZW50cmllcyAqd3JhcCogaW4gdGhlIHJpbmc/IEFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQgb24gQ1FFIGFsbG9jYXRpb24gaW4gYGlvX2NxZV9jYWNoZV9yZWZpbGxgIG9yIGVsc2V3aGVyZT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBDUUUzMiBpcyBoYW5kbGVkIHdoZW4gYWxsb2NhdGluZyBlbnRyaWVzLCB0aGF0J3Mga2V5LiBXZSd2ZSBnb3QgYSBsaWtlbHkgYXJyYXkgb3V0LW9mLWJvdW5kcyBzaXR1YXRpb24gaGVyZSwgYW5kIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBDUUUgYWxsb2NhdGlvbiBhbmQgcmluZyBidWZmZXIgbWVjaGFuaWNzIGluIGBpb191cmluZy5jYFxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MjUuMTEyODUzOTQxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU2ODI0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz01MTU9c3RhdGljIHZvaWQgX19pb19jcXJpbmdfb3ZlcmZsb3dfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZHlpbmcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTUzMi1cXHRcXHRpZiAob2NxZS1cXHUwMDNlY3FlLmZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1MzM6XFx0XFx0ICAgIGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5jLTUzNC1cXHRcXHRcXHRpc19jcWUzMiA9IHRydWU7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTUzNi1cXHRcXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1Mzc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzgtXFx0XFx0XFx0aXNfY3FlMzIgPSBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NjUyPXN0YXRpYyBzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlICppb19hbGxvY19vY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NTktXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo2NjA6XFx0aWYgKGNxZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNjYxLVxcdFxcdGlzX2NxZTMyID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzQ3LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzQ4OlxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDktXFx0XFx0b2ZmIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTc2Mi1cXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTIxMDQtXFx0b2ZmID0gc3RydWN0X3NpemUocmluZ3MsIGNxZXMsIGNxX2VudHJpZXMpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEwNTpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA2LVxcdFxcdG9mZiA9IHNpemVfbXVsKG9mZiwgMik7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI3ODg9c3RhdGljIGludCBpb191cmluZ19zYW5pdGlzZV9wYXJhbXMoc3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XFx0aWYgKChmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpID09XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3OlxcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MjUuNDI4NTQ4NDU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5ODQ1NDY0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJpbmcgQnVmZmVyIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHJpbmcgYnVmZmVyIGFsbG9jYXRpb24gbG9naWMuIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYHJpbmdzX3NpemVgIGlzIGNhbGN1bGF0ZWQuIFNwZWNpZmljYWxseSwgaWYgYElPUklOR19TRVRVUF9DUUUzMmAgaXMgc2V0LCB0aGUgYHJpbmdzYCBidWZmZXIgZWZmZWN0aXZlbHkgZG91YmxlcyBpdHMgc2l6ZSBmb3IgdGhlIGBjcWVzYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGhhZG4ndCBleHBsaWNpdGx5IHRob3VnaHQgYWJvdXQgdGhhdCwgYnV0IGl0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGFsbG9jYXRpbmcgc3BhY2UgZm9yIDMyLWJpdCBDUUVzIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCA2NC1iaXQgb25lcywgd2hpY2ggbWVhbnMgbW9yZSBlbnRyaWVzIGluIHRoZSBDUSByaW5nIGNhbiBiZSB0cmFja2VkLlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGFib3V0IGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYD8gVGhhdCBzZXR1cCBvcHRpb24gaW5kaWNhdGVzIENRRXMgYXJlIG9mIG1peGVkIHNpemVzLiBUaGF0IG1lYW5zIHRoZSBkb3VibGluZyBpcyBjb250aW5nZW50IG9uIHRoZSBmbGFnICpub3QqIGJlaW5nIG1peGVkIHNpemVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzIGluIHRoYXQgc2NlbmFyaW8sIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgZm9yIG9jY3VycmVuY2VzIG9mIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gaXMgbW9kaWZpZWQgd2hlbiBtaXhlZCBDUUUgc2l6ZXMgYXJlIGVuYWJsZWQgc28gSSBkb24ndCBpbnRyb2R1Y2UgZXJyb3JzIGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjI5LjQxMzA5NzEzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NTcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRV9NSVhFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlxcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4NC1cXG5pb191cmluZy9pb191cmluZy5jOjIwODU6XFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4Ni1cXHRcXHRpZiAoY3FfZW50cmllcyBcXHUwMDNjIDIpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI3ODg9c3RhdGljIGludCBpb191cmluZ19zYW5pdGlzZV9wYXJhbXMoc3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XFx0aWYgKChmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpID09XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3OlxcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC03Mi1cXHRcXHRcXHRJT1JJTkdfU0VUVVBfSFlCUklEX0lPUE9MTCB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NzM6XFx0XFx0XFx0SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzQtXFx0XFx0XFx0SU9SSU5HX1NFVFVQX1NRRV9NSVhFRCB8XFxcXFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTI3My1cXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG5pb191cmluZy9pb191cmluZy5oOjI3NDpcXHR9IGVsc2UgaWYgKGNxZTMyIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzUtXFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTI4OD1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZGVmZXJfZ2V0X3VuY29tbWl0ZWRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTMtXFx0Y3R4LVxcdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjk0OlxcdHJldHVybiBpb19nZXRfY3FlKGN0eCwgY3FlX3JldCwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjk1LX1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzM2PXN0YXRpYyBpbmxpbmUgdTMyIGN0eF9jcWUzMl9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9pb191cmluZy5oLTMzNy17XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMzg6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM5LVxcdFxcdHJldHVybiBJT1JJTkdfQ1FFX0ZfMzI7XFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jPTk2PXN0YXRpYyBpbnQgaW9fbXNnX3JpbmdfY3FlX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqdGFyZ2V0X2N0eCxcXG4tLVxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA2LVxcdCAgICAhKHRhcmdldF9jdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8XFxuaW9fdXJpbmcvbXNnX3JpbmcuYzoxMDc6XFx0XFx0XFx0XFx0ICAgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvbm9wLmM9Mjc9aW50IGlvX25vcF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9ub3AuYy00OS1cXG5pb191cmluZy9ub3AuYzo1MDpcXHRcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXFxuaW9fdXJpbmcvbm9wLmMtNTEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTUtXFx0XFx0XFx0IElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9OT19NTUFQIHwgXFxcXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDk2OlxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEIHwgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRClcXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ny1cXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTE1Mj12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2Ni1cXHRpZiAoaXNfY3FlMzIpIHtcXG5pb191cmluZy91cmluZ19jbWQuYzoxNjc6XFx0XFx0aWYgKHJlcS1cXHUwMDNlY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY4LVxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTI0Mz1pbnQgaW9fdXJpbmdfY21kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0yNTktXFx0XFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9TUUUxMjg7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MjYwOlxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI2MS1cXHRcXHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX0NRRTMyO1xcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTgzMT1zdGF0aWMgaW50IGltcG9ydF96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTg0MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy96Y3J4LmM6ODQyOlxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy96Y3J4LmMtODQzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTk2MT1pbnQgaW9fcmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy05ODEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvemNyeC5jOjk4MjpcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXFxuaW9fdXJpbmcvemNyeC5jLTk4My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0xNjI4PXN0YXRpYyBib29sIGlvX3pjcnhfcXVldWVfY3FlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdixcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xNjQyLVxcdGNxZS1cXHUwMDNlZmxhZ3MgPSBJT1JJTkdfQ1FFX0ZfTU9SRTtcXG5pb191cmluZy96Y3J4LmM6MTY0MzpcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXFxuaW9fdXJpbmcvemNyeC5jLTE2NDQtXFx0XFx0Y3FlLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjI5LjQ2MDc1OTc4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzI2OTY5NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgaW9fY3FlX2NhY2hlX3JlZmlsbCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgY2xvc2VyIGxvb2sgYXQgYGlvX2NxZV9jYWNoZV9yZWZpbGxgLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBjb2RlYmFzZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW5zaWRlIGFuZCBvdXQuIExldCdzIHB1bGwgdXAgYGlvX3VyaW5nL2lvX3VyaW5nLmNgIOKAkyBzcGVjaWZpY2FsbHkgbGluZXMgNzE1IHRocm91Z2ggNzU1LiBUaGF0IHNob3VsZCBiZSB0aGUgcmVsZXZhbnQgYmxvY2sgb2YgY29kZSBJJ20gYWZ0ZXIuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGNhY2hlIGlzIG1hbmFnZWQgYW5kIHJlcGxlbmlzaGVkLiBJJ20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIHBvdGVudGlhbGx5IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGhlcmUuIEhvcGVmdWxseSwgSSdsbCBiZSBhYmxlIHRvIHNwb3QgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGJ5IGZvY3VzaW5nIG9uIHRoaXMgc2VjdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjMzLjc4NzczMTk2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTU6XFx0ICogY29udHJvbCBkZXBlbmRlbmN5IGlzIGVub3VnaCBhcyB3ZSdyZSB1c2luZyBXUklURV9PTkNFIHRvXFxuIDcxNjpcXHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxcbiA3MTc6XFx0ICovXFxuIDcxODpcXHRib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXFxuIDcxOTpcXHR7XFxuIDcyMDpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzID0gY3R4LVxcdTAwM2VyaW5ncztcXG4gNzIxOlxcdFxcdHVuc2lnbmVkIGludCBvZmYgPSBjdHgtXFx1MDAzZWNhY2hlZF9jcV90YWlsIFxcdTAwMjYgKGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIDEpO1xcbiA3MjI6XFx0XFx0dW5zaWduZWQgaW50IGZyZWUsIGxlbjtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0LypcXG4gNzI1OlxcdFxcdCAqIFBvc3RpbmcgaW50byB0aGUgQ1Egd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBvdmVyZmxvd2VkIENRRXMgbWF5IGJyZWFrXFxuIDcyNjpcXHRcXHQgKiBvcmRlcmluZyBndWFyYW50ZWVzLCB3aGljaCB3aWxsIGFmZmVjdCBsaW5rcywgRl9NT1JFIHVzZXJzIGFuZCBtb3JlLlxcbiA3Mjc6XFx0XFx0ICogRm9yY2Ugb3ZlcmZsb3cgdGhlIGNvbXBsZXRpb24uXFxuIDcyODpcXHRcXHQgKi9cXG4gNzI5OlxcdFxcdGlmICghb3ZlcmZsb3cgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2hlY2tfY3EgXFx1MDAyNiBCSVQoSU9fQ0hFQ0tfQ1FfT1ZFUkZMT1dfQklUKSkpXFxuIDczMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdC8qXFxuIDczMzpcXHRcXHQgKiBQb3N0IGR1bW15IENRRSBpZiBhIDMyYiBDUUUgaXMgbmVlZGVkIGFuZCB0aGVyZSdzIG9ubHkgcm9vbSBmb3IgYVxcbiA3MzQ6XFx0XFx0ICogMTZiIENRRSBiZWZvcmUgdGhlIHJpbmcgd3JhcHMuXFxuIDczNTpcXHRcXHQgKi9cXG4gNzM2OlxcdFxcdGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBvZmYgKyAxID09IGN0eC1cXHUwMDNlY3FfZW50cmllcykge1xcbiA3Mzc6XFx0XFx0XFx0aWYgKCFpb19maWxsX25vcF9jcWUoY3R4LCBvZmYpKVxcbiA3Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3Mzk6XFx0XFx0XFx0b2ZmID0gMDtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0ZnJlZSA9IGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIGlvX2NxcmluZ19xdWV1ZWQoY3R4KTtcXG4gNzQzOlxcdFxcdC8qIHdlIG5lZWQgYSBjb250aWd1b3VzIHJhbmdlLCBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBhcnJheSBvZmZzZXQgKi9cXG4gNzQ0OlxcdFxcdGxlbiA9IG1pbihmcmVlLCBjdHgtXFx1MDAzZWNxX2VudHJpZXMgLSBvZmYpO1xcbiA3NDU6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIChjcWUzMiArIDEpKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbiA3NDk6XFx0XFx0XFx0b2ZmIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTA6XFx0XFx0XFx0bGVuIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQgPSBcXHUwMDI2cmluZ3MtXFx1MDAzZWNxZXNbb2ZmXTtcXG4gNzU0OlxcdFxcdGN0eC1cXHUwMDNlY3FlX3NlbnRpbmVsID0gY3R4LVxcdTAwM2VjcWVfY2FjaGVkICsgbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNDozMy43ODc4ODMxOTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE2MDI5MjU0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBEZWVwIERpdmUgaW50byBhIFBvdGVudGlhbCBpb191cmluZyBPdXQtb2YtQm91bmRzIFJlYWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgSSBub3RpY2VkIHNvbWV0aGluZyBhYm91dCBob3cgdGhlIENvbXBsZXRpb24gUXVldWUgRW50cmllcyAoQ1FFcykgYXJlIGhhbmRsZWQgd2hlbiBgSU9SSU5HX1NFVFVQX0NRRTMyYCBpcyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIHRoZSByaW5nIHNpemUgZG91YmxlcyBiZWNhdXNlIHRoZSBpbmRleCBtYXRoIGBvZmYgPSBzaXplX211bChvZmYsIDIpO2Agc3VnZ2VzdHMgYHJpbmdzLVx1MDAzZWNxZXNgIGhhcyB0d2ljZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXMgYGNxX2VudHJpZXNgLiBUaGVuLCB0aGUgaW5kZXhpbmcgdXNlcyBgY3FfaGVhZCBcdTAwM2NcdTAwM2MgMWAuIEJ1dCB0aGVuIEkgbm90aWNlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHdoZW4gbG9va2luZyBhdCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AuIEl0IGRvZXNuJ3QgdXNlIHRoZSBgXHUwMDNjXHUwMDNjIDFgIHNoaWZ0LCB1c2luZyBgXHUwMDI2IGNxX21hc2tgIGZvciBpbmRleGluZy4gVGhhdCBzdG9vZCBvdXQuXG5cblRoZW4gSSByZWNhbGxlZCB0aGF0IGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCB1c2VzIGBjcV9lbnRyaWVzYCBub3QgYDIgKiBjcV9lbnRyaWVzYC4gT2theSwgc28gYSAzMi1iaXQgQ1FFLCBpbmRpY2F0ZWQgYnkgYGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyYCwgb2NjdXBpZXMgdHdvIHNsb3RzLiBOb3csIGxpbmUgNzM2IGluIHRoZSBjb2RlIHNob3dzIGEgY2hlY2sgdGhhdCBpcyBjcnVjaWFsLiBJZiBhIDMyYiBDUUUgaXMgbmVlZGVkLCBhbmQgYG9mZiArIDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXNgIChpLmUuIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSByaW5nKSwgdGhlIGNvZGUgZmlsbHMgYSBOT1AgQ1FFIGFuZCB3cmFwcyBhcm91bmQuIFRoaXMgbWVhbnMsIGEgMzJiIENRRSAqc2hvdWxkKiBuZXZlciBiZSBhdCB0aGUgdmVyeSBsYXN0IHNsb3QuIEEgTk9QIENRRSBzaG91bGQgYmUgdGhlcmUgaW5zdGVhZC5cblxuQnV0IGhlcmUncyB0aGUga2lja2VyOiBpZiBzb21laG93IGEgdXNlciBvciBjb3JydXB0aW9uLCBvciBhIHJhY2UsIG9yIGlmIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2lvX3VyaW5nX2ZkXHUwMDNlYCByZWFkcyB0aGUgd3JvbmcgdmFsdWUsIHB1dHMgYSAzMmIgQ1FFIGF0IGBjcV9tYXNrYCwgdGhlbiB0aGUgY29kZSB0cmllcyB0byByZWFkIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAuLi4gd2hpY2ggaXMgKm91dC1vZi1ib3VuZHMqIGJlY2F1c2UgaXQncyByZWFkaW5nIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBgci1cdTAwM2VjcWVzYCBhcnJheS5cblxuQW5kIHRoZW4gSSBzYXcgdGhlIGF1dGhvcidzIGNvZGU6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gSG9sZCBvbi4gYGNxX2hlYWRgIGlzbid0IG1hc2tlZCEgYGNxX2hlYWRgIGNhbiBiZSAxNiwgMzIsIDQ4Li4uIGFuZCBgY3FfbWFza2AgaXMgMTUgaW4gdGhpcyBjYXNlLiBUaGUgYXV0aG9yIHNob3VsZCBoYXZlIHdyaXR0ZW4gYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKSA9PSBjcV9tYXNrYCEgQmVjYXVzZSB0aGV5IGRpZG4ndCwgYGlzX2xhc3RfY3FhcnJheV9zbG90YCBpcyBmYWxzZSBvbiBzdWJzZXF1ZW50IHdyYXBzLiBTbyBvbiBzdWJzZXF1ZW50IHdyYXBzLCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIGZhbHNlLCBgY3FlMzJgIGlzIHRydWUsIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIHJlYWRzIG91dCBvZiBib3VuZHMgYmV5b25kIGByLVx1MDAzZWNxZXNgISBJdCdzIGEgY2xhc3NpYyBidWcgaW50cm9kdWNlZCBieSBhIHBhdGNoLCBhbmQgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyIVxuXG5Ob3cgbGV0J3MgdmVyaWZ5LiBDYW4gd2UgYWN0dWFsbHkgcmVhY2ggdGhpcyBjb2RlPyBZZXMsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2lvX3VyaW5nX2ZkXHUwMDNlYCBpcyByZWFjaGFibGUuIERvZXMgaXQgdG91Y2ggYSBjb3JlIHN1YnN5c3RlbT8gWWVzLCBgaW9fdXJpbmdgLiBEb2VzIGl0IHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseSEgSXQncyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgY29uZmlncyByZXF1aXJlZCBmb3IgZnV6emluZy4gV2UgbmVlZCBgSU9fVVJJTkdgIChsaWtlbHkgYWxyZWFkeSBlbmFibGVkKSwgYW5kIGBQUk9DX0ZTYCB0byByZWFkIGBmZGluZm9gLiBMb29raW5nIGF0IGBpb191cmluZy9NYWtlZmlsZWAsIGBmZGluZm8ub2AgaXMgYnVpbHQgd2l0aCBgQ09ORklHX1BST0NfRlNgLiBTbywgYFBST0NfRlNgIGlzIGEgcmVxdWlyZW1lbnQuIEFsc28gYENPTkZJR19JT19VUklOR2AgY29tcGlsZXMgdGhlIGVudGlyZSBgaW9fdXJpbmcvYCBkaXJlY3RvcnkuXG5cbldlIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bGwgYGlvX3VyaW5nL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNDo1NS4zOTA4MTE3MjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBpb191cmluZ1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX1VSSU5HXFxuICAgNjpcXHRHQ09WX1BST0ZJTEUgOj0geVxcbiAgIDc6XFx0ZW5kaWZcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0XFx0XFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdFxcdHR3Lm8gd2FpdC5vIGV2ZW50ZmQubyB1cmluZ19jbWQubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHRcXHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdFxcdFxcdFxcdGZzLm8gc3BsaWNlLm8gc3luYy5vIG1zZ19yaW5nLm8gXFxcXFxcbiAgMTQ6XFx0XFx0XFx0XFx0XFx0XFx0YWR2aXNlLm8gb3BlbmNsb3NlLm8gc3RhdHgubyB0aW1lb3V0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0XFx0XFx0XFx0XFx0Y2FuY2VsLm8gd2FpdGlkLm8gcmVnaXN0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRcXHRcXHRcXHRcXHR0cnVuY2F0ZS5vIG1lbW1hcC5vIGFsbG9jX2NhY2hlLm8gXFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0XFx0cXVlcnkubyBsb29wLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX1pDUlgpXFx0Kz0gemNyeC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0ZVVEVYKVxcdFxcdCs9IGZ1dGV4Lm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19FUE9MTClcXHRcXHQrPSBlcG9sbC5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXHQrPSBuYXBpLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORVQpICs9IG5ldC5vIGNtZF9uZXQub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfTU9DS19GSUxFKSArPSBtb2NrX2ZpbGUub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgKz0gYnBmX2ZpbHRlci5vXFxuICAyODpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGX09QUykgKz0gYnBmLW9wcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjU1LjM5MDg3NDc0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODI5MTE0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgQnVpbGQgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZGl0aW9ucyBmb3IgdGhlIGBpb191cmluZy9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGlmIGBDT05GSUdfSU9fVVJJTkdgIGlzIGRlZmluZWQsIHRoZSBhc3NvY2lhdGVkIGNvZGUgKmFsd2F5cyogZ2V0cyBidWlsdC4gTm8gc25lYWt5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIEknbSBtaXNzaW5nLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IHRoZSBgcm9vdCBNYWtlZmlsZWAgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIFRoYXQncyB3aGVyZSB0aGUgdG9wLWxldmVsIGJ1aWxkIHJ1bGVzIHVzdWFsbHkgcmVzaWRlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgaXQsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBpb191cmluZy9gLiBJJ2xsIGJlIHNjYW5uaW5nIGZvciBleHBsaWNpdCBtZW50aW9ucywgb2YgY291cnNlLCBidXQgYWxzbyBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIG9yIGluY2x1ZGUgc3RhdGVtZW50cy5cblxuVGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBicm9hZGVuIHRoZSBzZWFyY2guIEknbGwgdXNlIGBncmVwYCB0byBodW50IGRvd24gKmFueSogaW5zdGFuY2VzIG9mIGBpb191cmluZy9gIHdpdGhpbiB0aGUgYE1ha2VmaWxlYCBhbmQgYW55IGBLYnVpbGRgIGZpbGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGUgYGlvX3VyaW5nL2AgZGlyZWN0b3J5IGlzIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBpdHMgaW5jbHVzaW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU0MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6NTkuMjE5OTkyODU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMTg1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjU5LjI2ODczMzU3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzc2MTY2Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBLYnVpbGQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgS2J1aWxkYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBsaWVzLCB0aGUgbWFrZWZpbGVzIGFuZCBzY3JpcHRzIHRoYXQgZGljdGF0ZSBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBwYWNrYWdlZC4gVW5kZXJzdGFuZGluZyBgS2J1aWxkYCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsLiBJdOKAmXMgdGhlIG9yY2hlc3RyYXRvci4gSWYgSSdtIGdvaW5nIHRvIHVuZGVyc3RhbmQgb3IgZGVidWcgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgYnVpbGQsIGBLYnVpbGRgIGhhcyB0byBiZSB0aGUgZmlyc3Qgc3RvcC4gTGV0J3Mgc2VlIHdoYXQgaXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5MDAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI1OjAxLjY0NDkwMjUzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxODUxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiS2J1aWxkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIktidWlsZD0xMDc9b2JqLSQoQ09ORklHX0JMT0NLKVxcdCs9IGJsb2NrL1xcbktidWlsZDoxMDg6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdCs9IGlvX3VyaW5nL1xcbktidWlsZC0xMDktb2JqLSQoQ09ORklHX1JVU1QpXFx0Kz0gcnVzdC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjU6MDEuNjkzMDk5NTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTk5MTMwOTA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBmZGluZm8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgdGhlIGBLYnVpbGRgIGZpbGUgaW5jbHVkZXMgYGlvX3VyaW5nL2AgYW5kIHdpdGhpbiB0aGF0LCB0aGUgYE1ha2VmaWxlYCBjb25kaXRpb25hbGx5IGluY2x1ZGVzIGBmZGluZm8ub2AgYmFzZWQgb24gYFBST0NfRlNgLiBTbywgYElPX1VSSU5HYCBhbmQgYFBST0NfRlNgIGFyZSBib3RoIHByZXJlcXVpc2l0ZXMgaGVyZS5cblxuTXkgZm9jdXMgaXMgdGhlIGBpb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQncyB1c2VkIHdpdGggYC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjZmRcdTAwM2VgLiBUaGUgY29kZSBwYXRoIGlzOiBwcm9jZnMgY2FsbHMgYHNob3dfZmRpbmZvYCAobGlrZWx5IHZpYSBgc2VxX3JlYWRgIGFuZCBgc2VxX3Nob3dgLCBzb21ldGhpbmcgbGlrZSBgcHJvY19mZGluZm9fc2hvd2ApLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCDigJMgdGhlIGZpbGUgb3BlcmF0aW9ucyBlbnRyeSBwb2ludCDigJMgYW5kIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCDigJMgd2hpY2ggKmNvbnRhaW5zKiB0aGUgYWN0dWFsIGxvZ2ljIGNoYW5nZS4gVGhhdCBzZWVtcyByaWdodCwgSSBldmVuIHZlcmlmaWVkIHRoYXQgdGhlIGBpb191cmluZ19zaG93X2ZkaW5mb2AgaXMgZGVmaW5lZCBpbiBgaW9fdXJpbmcvZmRpbmZvLmhgIGFuZCB1c2VkIGluIGBpb191cmluZy9pb191cmluZy5jYC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLCB3aGljaCwgaW1wb3J0YW50bHksIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgdGhlIGAvcHJvYy9bcGlkXS9mZGluZm8vW2ZkXWAgb2YgYW4gaW9fdXJpbmcgZmlsZSBkZXNjcmlwdG9yLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIGBjcWUtXHUwMDNlYmlnX2NxZWAgd2hlbiBkaXNwbGF5aW5nIDMyLWJ5dGUgQ1FFcyBhdCB0aGUgZW5kIG9mIHRoZSBDUSByaW5nIGFycmF5LiBIb3dldmVyLCB0aGUgY29uZGl0aW9uIGludHJvZHVjZWQgdG8gcHJldmVudCB0aGF0IG91dC1vZi1ib3VuZHMgcmVhZCBhcHBlYXJzIHRvIGJlIGZsYXdlZCwgbGlrZWx5IGZhaWxpbmcgdG8gdHJpZ2dlciB3aGVuIGBjcV9oZWFkYCB3cmFwcyBiZXlvbmQgYGNxX21hc2tgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBpbmNvcnJlY3QgZmRpbmZvIG91dHB1dCB1bmRlciB2YWxpZCByaW5nIHdyYXBwaW5nIHNjZW5hcmlvcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHJlcXVpcmVtZW50czogYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kOyB0aGUgcHJvYmxlbSBpcyB3ZWxsLWV4cGxhaW5lZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYElPX1VSSU5HYCBhbmQgYFBST0NfRlNgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGFuZCBgaW9fdXJpbmdfc2hvd19mZGluZm9gLlxuXG5JJ3ZlIGNvbmZpcm1lZDogdGhlIGNoYW5nZXMgYXJlIGFscmVhZHkgYXBwbGllZC4gUmVhY2hhYmlsaXR5IGlzIHZpYSBzdGFuZGFyZCAvcHJvYyByZWFkcywgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgYW5kIHRoZSBGb2N1c1N5bWJvbHMgYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIGFsdGVyZWQgZmVhdHVyZSBsb2dpYy4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIHRoZSBleHBlY3RlZCBvbmVzLlxuXG5UaGlzIGFsbCBjaGVja3Mgb3V0LiBUaGUgYW5hbHlzaXMgaXMgc29saWQsIGFuZCBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE0NSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6MDEuNjA2MTkzOTM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4MDY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb191cmluZ19zaG93X2ZkaW5mb1wiLFxuICAgIFwiaW9fdXJpbmdfc2hvd19mZGluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgdGhlIENRRSBmb3JtYXR0aW5nIGxvZ2ljIGluIF9faW9fdXJpbmdfc2hvd19mZGluZm8oKSB3aXRoaW4gaW9fdXJpbmcvZmRpbmZvLmMsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSByZWFkaW5nIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL2ZkaW5mby9cXHUwMDNjaW9fdXJpbmdfZmRcXHUwMDNlLiBUaGUgY2hlY2sgYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKWAgZmFpbHMgdG8gbWFzayBjcV9oZWFkIGFnYWluc3QgY3FfbWFzaywgbWVhbmluZyB3aGVuIGNxX2hlYWQgYWR2YW5jZXMgcGFzdCBjcV9tYXNrLCB0aGUgYm91bmRhcnkgY2hlY2sgYmVjb21lcyBmYWxzZSBhbmQgY2FuIGFsbG93IG91dC1vZi1ib3VuZHMgcmVhZHMgaW50byBjcWUtXFx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvX3VyaW5nX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJpb191cmluZ19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2Npb191cmluZ19mZFxcdTAwM2UuIFRoZSBjaGVjayBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spYCBmYWlscyB0byBtYXNrIGNxX2hlYWQgYWdhaW5zdCBjcV9tYXNrLCBtZWFuaW5nIHdoZW4gY3FfaGVhZCBhZHZhbmNlcyBwYXN0IGNxX21hc2ssIHRoZSBib3VuZGFyeSBjaGVjayBiZWNvbWVzIGZhbHNlIGFuZCBjYW4gYWxsb3cgb3V0LW9mLWJvdW5kcyByZWFkcyBpbnRvIGNxZS1cXHUwMDNlYmlnX2NxZSBvbiB3cmFwcGVkIHJpbmdzLiBGdXp6aW5nIGNhbiBlYXNpbHkgZXhlcmNpc2UgdGhpcyBwYXRoIGFuZCB2ZXJpZnkgbWVtb3J5IHNhZmV0eS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6MDEuNjg0MDEzMTg0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5MDk0MDg0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjowMS42ODQ3NTU2MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjI5MDg2NjEwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKClgIGluIGBpb191cmluZy9mZGluZm8uY2AgdG8gcHJldmVudCB0cmVhdGluZyB0aGUgbGFzdCBzbG90IG9mIHRoZSBDUSByaW5nIGFycmF5IGFzIGEgMzItYnl0ZSBDUUUgKGBjcWUzMmApLiBXaXRob3V0IHByb3BlciBib3VuZGFyeSBoYW5kbGluZywgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNxZS1cXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXFx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXFx1MDAzZWNxZXNbXWAuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMTMxMTAwY2UxNjdjNDhkM2IxNDlhMWNkODM4YjJiMDNiNDBhMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNjoyMjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2ZkaW5mby5jIGIvaW9fdXJpbmcvZmRpbmZvLmNcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mZGluZm8uY1xuKysrIGIvaW9fdXJpbmcvZmRpbmZvLmNcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbitcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIFxuIFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbi1cdFx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuK1x0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCIsXG4gXHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjAxLjY4NDc1NzEzNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzI2NjczNDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGlvX3VyaW5nL2ZkaW5mby5jKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgc3BlY2lmaWMgcGF0Y2ggaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gd2l0aGluIHN5emthbGxlci4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyB3ZSBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBlYXJseS4gRXNzZW50aWFsbHksIEknbSBwZXJmb3JtaW5nIGEgcmlzayBhbmFseXNpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIGhpZ2hlciByaXNrIHByb2ZpbGUgZm9yIG1lbW9yeSBlcnJvcnMgdGhhdCBLQVNBTiBtaWdodCBtaXNzLiBJdCdzIGEgYmVuaWduIGFjdGlvbjsgYSBzdGFuZGFyZCBwYXJ0IG9mIG15IHdvcmtmbG93IGZvciByZXZpZXdpbmcgY2hhbmdlcy4gSSdtIG9wZXJhdGluZyBhcyBhIHNvcnQgb2YgZGVmZW5zaXZlIG1lY2hhbmlzbSwgYSBkZXZlbG9wZXIgUUEgdG9vbCwgZm9yIHN5emthbGxlciB0cmlhZ2UuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSBkb2VzLiBJJ20gbG9va2luZyBhdCB0aGUgZGlmZiwgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZSAxNTUsIHdoaWNoIEkndmUgYnJvdWdodCBpbnRvIHZpZXcgd2l0aCBgcmVhZC1maWxlYC4gXG5cbmBgYGRpZmZcbmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jXG5pbmRleCAzYWU0ODA0NzY1Yjk0Li4wYjY1NmE2Yzg0MjhkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZmRpbmZvLmNcbisrKyBiL2lvX3VyaW5nL2ZkaW5mby5jXG5AQCAtMTU1LDkgKzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpKyspIHtcbiBcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlO1xuIFx0XHRib29sIGNxZTMyID0gZmFsc2U7XG4rXHRcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbiBcbiBcdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG4tXHRcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbitcdFx0aWYgKChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXG4gXHRcdFx0Y3FlMzIgPSB0cnVlO1xuIFx0XHRzZXFfcHJpbnRmKG0sIFwiJTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleFwiLFxuIFx0XHRcdCAgIGNxX2hlYWQgXHUwMDI2IGNxX21hc2ssIGNxZS1cdTAwM2V1c2VyX2RhdGEsIGNxZS1cdTAwM2VyZXMsXG5gYGBcblxuSXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGlzX2xhc3RfY3FhcnJheV9zbG90YC4gVGhpcyBpcyBsaWtlbHkgYSBib3VuZGFyeSBjb25kaXRpb24gcmVsYXRlZCB0byBgSU9SSU5HX0NRRV9GXzMyYCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhpcyBuZXcgY29uZGl0aW9uYWwuIEFyZSB0aGVyZSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnM/IElzIHRoZXJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2ggdGhhdCBLQVNBTiB3b3VsZG4ndD8gVGhlIGFkZGl0aW9uIG9mIGAhaXNfbGFzdF9jcWFycmF5X3Nsb3RgIHN1Z2dlc3RzIGEgcG9zc2libGUgY29ycmVjdGlvbiB0byBhIHByZXZpb3VzIGlzc3VlLCBwb3NzaWJseSBhIG1lbW9yeSBhY2Nlc3MgdGhhdCBnb2VzIGJleW9uZCB0aGUgYm91bmRzIG9mIGEgYnVmZmVyIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIGxvZ2ljIGhlcmUgaW50cm9kdWNlcyBtb3JlIGNvbXBsZXggY29uZGl0aW9ucywgYW5kIHdoZXRoZXIgS01TQU4ncyBzdHJpY3RlciBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIHdvdWxkIHByb3ZpZGUgYWRkaXRpb25hbCB2YWx1ZS4gSSdsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciBhY2Nlc3NlcyB0byBmcmVlZCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBjb3VsZCBhcmlzZSBiZWNhdXNlIG9mIHRoaXMgY2hlY2suIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6MTguOTUxNDk0NDkzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2ZkaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHRcXHRcXHR1NjQgKnNxZWIgPSAodm9pZCAqKSAoc3FlICsgMSk7XFxuIDE0MTpcXHRcXHRcXHRcXHRpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfc3FlKSAvIHNpemVvZih1NjQpO1xcbiAxNDI6XFx0XFx0XFx0XFx0aW50IGo7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBzaXplOyBqKyspIHtcXG4gMTQ1OlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiwgZSVkOjB4JWxseFxcXCIsIGosXFxuIDE0NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKSAqc3FlYik7XFxuIDE0NzpcXHRcXHRcXHRcXHRcXHRzcWViKys7XFxuIDE0ODpcXHRcXHRcXHRcXHR9XFxuIDE0OTpcXHRcXHRcXHR9XFxuIDE1MDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJcXFxcblxcXCIpO1xcbiAxNTE6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDE1MjpcXHRcXHR9XFxuIDE1MzpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDUUVzOlxcXFx0JXVcXFxcblxcXCIsIGNxX3RhaWwgLSBjcV9oZWFkKTtcXG4gMTU0OlxcdFxcdGNxX2VudHJpZXMgPSBtaW4oY3FfdGFpbCAtIGNxX2hlYWQsIGN0eC1cXHUwMDNlY3FfZW50cmllcyk7XFxuIDE1NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY3FfZW50cmllczsgaSsrKSB7XFxuIDE1NjpcXHRcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XFxuIDE1NzpcXHRcXHRcXHRib29sIGNxZTMyID0gZmFsc2U7XFxuIDE1ODpcXHRcXHRcXHRib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdFxcdGNxZSA9IFxcdTAwMjZyLVxcdTAwM2VjcWVzWyhjcV9oZWFkIFxcdTAwMjYgY3FfbWFzayldO1xcbiAxNjE6XFx0XFx0XFx0aWYgKChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFxcdTAwMjZcXHUwMDI2XFxuIDE2MjpcXHRcXHRcXHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxcbiAxNjM6XFx0XFx0XFx0XFx0Y3FlMzIgPSB0cnVlO1xcbiAxNjQ6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleFxcXCIsXFxuIDE2NTpcXHRcXHRcXHRcXHQgICBjcV9oZWFkIFxcdTAwMjYgY3FfbWFzaywgY3FlLVxcdTAwM2V1c2VyX2RhdGEsIGNxZS1cXHUwMDNlcmVzLFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgY3FlLVxcdTAwM2VmbGFncyk7XFxuIDE2NzpcXHRcXHRcXHRpZiAoY3FlMzIpXFxuIDE2ODpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIsIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdVxcXCIsXFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRcXHRjcWUtXFx1MDAzZWJpZ19jcWVbMF0sIGNxZS1cXHUwMDNlYmlnX2NxZVsxXSk7XFxuIDE3MDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJcXFxcblxcXCIpO1xcbiAxNzE6XFx0XFx0XFx0Y3FfaGVhZCsrO1xcbiAxNzI6XFx0XFx0XFx0aWYgKGNxZTMyKSB7XFxuIDE3MzpcXHRcXHRcXHRcXHRjcV9oZWFkKys7XFxuIDE3NDpcXHRcXHRcXHRcXHRpKys7XFxuIDE3NTpcXHRcXHRcXHR9XFxuIDE3NjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTc3OlxcdFxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FQT0xMKSB7XFxuIDE4MDpcXHRcXHRcXHRzdHJ1Y3QgaW9fc3FfZGF0YSAqc3EgPSBjdHgtXFx1MDAzZXNxX2RhdGE7XFxuIDE4MTpcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxODQ6XFx0XFx0XFx0dHNrID0gcmN1X2RlcmVmZXJlbmNlKHNxLVxcdTAwM2V0aHJlYWQpO1xcbiAxODU6XFx0XFx0XFx0LypcXG4gMTg2OlxcdFxcdFxcdCAqIHNxLVxcdTAwM2V0aHJlYWQgbWlnaHQgYmUgTlVMTCBpZiB3ZSByYWNlZCB3aXRoIHRoZSBzcXBvbGxcXG4gMTg3OlxcdFxcdFxcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cXG4gMTg4OlxcdFxcdFxcdCAqL1xcbiAxODk6XFx0XFx0XFx0aWYgKHRzaykge1xcbiAxOTA6XFx0XFx0XFx0XFx0dTY0IHVzZWM7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdFxcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTM6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE5NDpcXHRcXHRcXHRcXHR1c2VjID0gaW9fc3FfY3B1X3VzZWModHNrKTtcXG4gMTk1OlxcdFxcdFxcdFxcdHNxX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzayxcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHByb2NfcGlkX25zKGZpbGVfaW5vZGUobS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2IpKTtcXG4gMTk3OlxcdFxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTg6XFx0XFx0XFx0XFx0c3FfY3B1ID0gc3EtXFx1MDAzZXNxX2NwdTtcXG4gMTk5OlxcdFxcdFxcdFxcdHNxX3RvdGFsX3RpbWUgPSB1c2VjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjoxOC45NTE1NjczNjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM2MDM0MjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXNzZWN0aW5nIHRoZSBpb191cmluZyBDb21wbGV0aW9uIFF1ZXVlIEVudHJ5IChDUUUpIERpc3BsYXkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24uIFNlZW1zIGxpa2UgaXQncyByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW9fdXJpbmcgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzLiBJIGNhbiBzZWUgaXQncyBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgQ1FFIHJpbmcgYnVmZmVyLCBleHRyYWN0aW5nIGRhdGEgZnJvbSBlYWNoIGVudHJ5IGFuZCBwcmludGluZyBpdCBvdXQuIFRoZSBsb29wJ3MgbGltaXQgaXMgZGVmaW5lZCBieSB0aGUgYGNxX3RhaWxgIGFuZCBgY3FfaGVhZGAgdmFyaWFibGVzLCBhbmQgaW1wb3J0YW50bHkgaXQncyBjYXBwZWQgYnkgYGN0eC1cdTAwM2VjcV9lbnRyaWVzYC4gVGhpcyBpcyBhIGNsYXNzaWMgcmluZyBidWZmZXIgdHJhdmVyc2FsLlxuXG5Ob3csIEkgc3BvdCBhIGNvbmRpdGlvbmFsIGJsb2NrIGludm9sdmluZyBgSU9SSU5HX0NRRV9GXzMyYCBhbmQgYGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyYC4gSXQgbG9va3MgbGlrZSBpdCdzIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGN1cnJlbnQgQ1FFIGlzIHVzaW5nIGEgMzItYml0IGxheW91dC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgaXQgc2V0cyBgY3FlMzJgIHRvIHRydWUuIEluc2lkZSB0aGUgbG9vcCwgSSBzZWUgdGhlIHR5cGljYWwgYHVzZXJfZGF0YWAsIGByZXNgLCBhbmQgYGZsYWdzYCBiZWluZyBwcmludGVkIHVzaW5nIGBzZXFfcHJpbnRmYC4gVGhlbiwgaWYgYGNxZTMyYCBpcyB0cnVlLCBpdCBhbHNvIHByaW50cyBgZXh0cmExYCBhbmQgYGV4dHJhMmAsIHdoaWNoIGluIHRoaXMgY29udGV4dCBtZWFucyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWA/IEkgZG9uJ3QgcmVjYWxsIHNlZWluZyB0aG9zZSBtZW1iZXJzIGV4cGxpY2l0bHkgaW4gdGhlIHN0YW5kYXJkIENRRSBzdHJ1Y3R1cmUuIFRoYXQncyBhIGJpdCBvZGQuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpb191cmluZ19jcWVgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dHJhIGZpZWxkcyBhcmUgYmVpbmcgdXNlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXkncmUgcHJlc2VudC4gVGltZSB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGVzIGZvciB0aGUgaW9fdXJpbmcgZGVmaW5pdGlvbnMsIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGtlcm5lbCdzIGFjdHVhbGx5IGRvaW5nLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHN0cnVjdCdzIGRlZmluaXRpb24gdG8gZmluZCBvdXQgd2hhdCB0aGVzZSBgYmlnX2NxZWAgZmllbGRzIGFjdHVhbGx5IHJlcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjIzLjMxMTkxMjU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk2MDcxOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpb191cmluZ19jcWUgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9NDYzPWVudW0gaW9fdXJpbmdfbXNnX3JpbmdfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNDk5LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjUwMDpzdHJ1Y3QgaW9fdXJpbmdfY3FlIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC01MDEtXFx0X191NjRcXHR1c2VyX2RhdGE7XFx0Lyogc3FlLVxcdTAwM2V1c2VyX2RhdGEgdmFsdWUgcGFzc2VkIGJhY2sgKi9cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTM3ND1lbnVtIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTM5MS0gKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDozOTI6c3RydWN0IGlvX3VyaW5nX2NxZSB7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtMzkzLVxcdF9fdTY0XFx0dXNlcl9kYXRhO1xcdC8qIHNxZS1cXHUwMDNlZGF0YSBzdWJtaXNzaW9uIHBhc3NlZCBiYWNrICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjI1LjcwNzk5Mzc0NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDk0MjIyMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGlvX3VyaW5nLmg6IEFyb3VuZCBMaW5lIDUwMCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgYml0IG1vcmUgZ3JhbnVsYXIuIEknbSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaGAgcmlnaHQgYXJvdW5kIGxpbmUgNTAwLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgcHJvYmFibHkgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSByaW5nIGJ1ZmZlcnMgb3IgdGhlIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHNwZWNpZmljcyBvbiBkYXRhIGxheW91dHMsIGZsYWdzLCBvciBmaWVsZCBtZWFuaW5ncy4gTWF5YmUgSSdtIHRyeWluZyB0byBjcm9zcy1yZWZlcmVuY2Ugc29tZSBiZWhhdmlvciBJJ20gc2VlaW5nIHdpdGggc29tZSB0cmFjZSBvdXRwdXQsIGFuZCBuZWVkIHRvIHBpbnBvaW50IGEgc3BlY2lmaWMgYml0ZmllbGQgb3Igc3RydWN0IG1lbWJlciByZXNwb25zaWJsZS4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgc3VidGxlIGdvdGNoYXMgaW4gdGhlIG1lbW9yeSBvcmRlcmluZyBvciBwYWRkaW5nLiBJdCdzIGFsc28gcG9zc2libGUgSSdtIGludmVzdGlnYXRpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpYywgbGlrZSBhIHBhcnRpY3VsYXIgbGF0ZW5jeSBhbm9tYWx5LCBhbmQgSSB0aGluayB0aGF0IGxpbmUgNTAwIHdpbGwgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyBhIGtleSBkZXNpZ24gZGVjaXNpb24gbWF5IGJlIHdvcmtpbmcuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHVzdWFsbHkgcHJldHR5IGdvb2QsIGJ1dCBJIGFsc28gZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgZGVncmVlIG9mIGltcGxpY2l0IGtub3dsZWRnZSBlbWJlZGRlZCBpbiB0aG9zZSBoZWFkZXJzLiBJIHdhbnQgdG8gYnVpbGQgYSBiZXR0ZXIgbW9kZWwgZm9yIHdoYXQgdGhlIGRldmVsb3BlcnMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjoyOC44MDIyMTkyOThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDk4LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDk4OlxcdCAqIElPIGNvbXBsZXRpb24gZGF0YSBzdHJ1Y3R1cmUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpXFxuIDQ5OTpcXHQgKi9cXG4gNTAwOlxcdHN0cnVjdCBpb191cmluZ19jcWUge1xcbiA1MDE6XFx0XFx0X191NjRcXHR1c2VyX2RhdGE7XFx0Lyogc3FlLVxcdTAwM2V1c2VyX2RhdGEgdmFsdWUgcGFzc2VkIGJhY2sgKi9cXG4gNTAyOlxcdFxcdF9fczMyXFx0cmVzO1xcdFxcdC8qIHJlc3VsdCBjb2RlIGZvciB0aGlzIGV2ZW50ICovXFxuIDUwMzpcXHRcXHRfX3UzMlxcdGZsYWdzO1xcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHQvKlxcbiA1MDY6XFx0XFx0ICogSWYgdGhlIHJpbmcgaXMgaW5pdGlhbGl6ZWQgd2l0aCBJT1JJTkdfU0VUVVBfQ1FFMzIsIHRoZW4gdGhpcyBmaWVsZFxcbiA1MDc6XFx0XFx0ICogY29udGFpbnMgMTYtYnl0ZXMgb2YgcGFkZGluZywgZG91YmxpbmcgdGhlIHNpemUgb2YgdGhlIENRRS5cXG4gNTA4OlxcdFxcdCAqL1xcbiA1MDk6XFx0XFx0X191NjQgYmlnX2NxZVtdO1xcbiA1MTA6XFx0fTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0LypcXG4gNTEzOlxcdCAqIGNxZS1cXHUwMDNlZmxhZ3NcXG4gNTE0OlxcdCAqXFxuIDUxNTpcXHQgKiBJT1JJTkdfQ1FFX0ZfQlVGRkVSXFx0SWYgc2V0LCB0aGUgdXBwZXIgMTYgYml0cyBhcmUgdGhlIGJ1ZmZlciBJRFxcbiA1MTY6XFx0ICogSU9SSU5HX0NRRV9GX01PUkVcXHRJZiBzZXQsIHBhcmVudCBTUUUgd2lsbCBnZW5lcmF0ZSBtb3JlIENRRSBlbnRyaWVzXFxuIDUxNzpcXHQgKiBJT1JJTkdfQ1FFX0ZfU09DS19OT05FTVBUWVxcdElmIHNldCwgbW9yZSBkYXRhIHRvIHJlYWQgYWZ0ZXIgc29ja2V0IHJlY3ZcXG4gNTE4OlxcdCAqIElPUklOR19DUUVfRl9OT1RJRlxcdFNldCBmb3Igbm90aWZpY2F0aW9uIENRRXMuIENhbiBiZSB1c2VkIHRvIGRpc3RpbmN0XFxuIDUxOTpcXHQgKiBcXHRcXHRcXHR0aGVtIGZyb20gc2VuZHMuXFxuIDUyMDpcXHQgKiBJT1JJTkdfQ1FFX0ZfQlVGX01PUkUgSWYgc2V0LCB0aGUgYnVmZmVyIElEIHNldCBpbiB0aGUgY29tcGxldGlvbiB3aWxsIGdldFxcbiA1MjE6XFx0ICpcXHRcXHRcXHRtb3JlIGNvbXBsZXRpb25zLiBJbiBvdGhlciB3b3JkcywgdGhlIGJ1ZmZlciBpcyBiZWluZ1xcbiA1MjI6XFx0ICpcXHRcXHRcXHRwYXJ0aWFsbHkgY29uc3VtZWQsIGFuZCB3aWxsIGJlIHVzZWQgYnkgdGhlIGtlcm5lbCBmb3JcXG4gNTIzOlxcdCAqXFx0XFx0XFx0bW9yZSBjb21wbGV0aW9ucy4gVGhpcyBpcyBvbmx5IHNldCBmb3IgYnVmZmVycyB1c2VkIHZpYVxcbiA1MjQ6XFx0ICpcXHRcXHRcXHR0aGUgaW5jcmVtZW50YWwgYnVmZmVyIGNvbnN1bXB0aW9uLCBhcyBwcm92aWRlZCBieVxcbiA1MjU6XFx0ICpcXHRcXHRcXHRhIHJpbmcgYnVmZmVyIHNldHVwIHdpdGggSU9VX1BCVUZfUklOR19JTkMuIEZvciBhbnlcXG4gNTI2OlxcdCAqXFx0XFx0XFx0b3RoZXIgcHJvdmlkZWQgYnVmZmVyIHR5cGUsIGFsbCBjb21wbGV0aW9ucyB3aXRoIGFcXG4gNTI3OlxcdCAqXFx0XFx0XFx0YnVmZmVyIHBhc3NlZCBiYWNrIGlzIGF1dG9tYXRpY2FsbHkgcmV0dXJuZWQgdG8gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjI4LjgwMjMxMjc3OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk5Mjg0NjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9fdXJpbmcgQ1FFIE1lbW9yeSBMYXlvdXQgaW4gQ1FFMzIgTW9kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBpb191cmluZ19jcWVgIHN0cnVjdHVyZS4gQSBzdGFuZGFyZCBvbmUgaXMgMTYgYnl0ZXM6IHVzZXIgZGF0YSwgcmVzdWx0LCBmbGFncywgYW5kIHRoZW4gdGhhdCBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGJpZ19jcWVbXWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZW4gQ1FFMzIgbW9kZSBpcyBlbmFibGVkOyBpdCBiZWNvbWVzIDMyIGJ5dGVzLCBlZmZlY3RpdmVseSB0YWtpbmcgdXAgdHdvIHNsb3RzIGluIHRoZSBgci1cdTAwM2VjcWVzW11gIGFycmF5LlxuXG5Ob3csIHRoZSBjb2RlIGFjY2Vzc2VzIHRoZSBDUUUgbGlrZSB0aGlzOiBgY3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07YCBhbmQgaW4gQ1FFMzIgaXQgdXNlcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gLiBTaW5jZSB0aGUgKm9yaWdpbmFsKiBgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19jcWUpYCBpcyAxNiBieXRlcywgYGJpZ19jcWVbMF1gICpzaG91bGQqIGJlIGF0IG9mZnNldCAxNiB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUsIG1ha2luZyBpdHMgbWVtb3J5IGxvY2F0aW9uIGVxdWl2YWxlbnQgdG8gYFx1MDAyNnItXHUwMDNlY3Flc1soY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgKyAxXWAuXG5cbkhlcmUncyB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGFyaXNlczogaWYgYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKWAgcG9pbnRzIHRvIHRoZSAqbGFzdCogZWxlbWVudCBvZiB0aGUgYHItXHUwMDNlY3Flc2AgYXJyYXkgKGkuZS4sIGBjcV9tYXNrYCksIHRoZW4gYFx1MDAyNnItXHUwMDNlY3Flc1tjcV9tYXNrICsgMV1gIGlzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy4gQWNjZXNzaW5nIG1lbW9yeSAqYWZ0ZXIqIHRoZSBhcnJheSBib3VuZHMgaXMgYWx3YXlzIGEgcHJvYmxlbS5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUncyBgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIFdoeSB3YXMgdGhhdCBhZGRlZD8gSXQgc2VlbXMgcmVsYXRlZCB0byB0aGlzIG91dC1vZi1ib3VuZHMgaXNzdWUuIFRoaXMgaXMgbGlrZWx5IHRoZSBjcnVjaWFsIHBpZWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayBpcyBpbiBwbGFjZS5cblxuVGltZSB0byBkaXZlIGludG8gdGhlIGdpdCBoaXN0b3J5LiBMZXQncyBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2VzIHNheS4gSSdsbCBzZWFyY2ggZm9yIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgb3IgYElPUklOR19TRVRVUF9DUUUzMmAgdG8gZmluZCBvdXQgdGhlIHJlYXNvbiB0aGlzIHdhcyBjaGFuZ2VkLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4IG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBkb3VibGVkIHNpemUgb2YgQ1FFcyBpbiBDUUUzMiBtb2RlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRvIGJlIDEwMCUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjM5Ljc5NTE2MjAxN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDE4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2ZkaW5mby5jPTYwPXN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTE2MC1cXHRcXHRjcWUgPSBcXHUwMDI2ci1cXHUwMDNlY3Flc1soY3FfaGVhZCBcXHUwMDI2IGNxX21hc2spXTtcXG5pb191cmluZy9mZGluZm8uYzoxNjE6XFx0XFx0aWYgKChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvZmRpbmZvLmMtMTYyLVxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTMyLVxcdFxcdGlmIChvY3FlLVxcdTAwM2VjcWUuZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcXG5pb191cmluZy9pb191cmluZy5jOjUzMzpcXHRcXHQgICAgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVxcdFxcdFxcdGlzX2NxZTMyID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM2LVxcdFxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjUzNzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTUzOC1cXHRcXHRcXHRpc19jcWUzMiA9IGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTY1OS1cXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcXHRpZiAoY3FlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXFx0XFx0aXNfY3FlMzIgPSB0cnVlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03MTg9Ym9vbCBpb19jcWVfY2FjaGVfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NDg6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5jLTc0OS1cXHRcXHRvZmYgXFx1MDAzY1xcdTAwM2M9IDE7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlxcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cXHRvZmYgPSBzdHJ1Y3Rfc2l6ZShyaW5ncywgY3FlcywgY3FfZW50cmllcyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTA1OlxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTIxMDYtXFx0XFx0b2ZmID0gc2l6ZV9tdWwob2ZmLCAyKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVxcdCAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNjpcXHRpZiAoKGZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cXG5pb191cmluZy9pb191cmluZy5jOjI4Mzc6XFx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTY1LVxcdFxcdFxcdElPUklOR19TRVRVUF9TUUUxMjggfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oOjY2OlxcdFxcdFxcdElPUklOR19TRVRVUF9DUUUzMiB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjctXFx0XFx0XFx0SU9SSU5HX1NFVFVQX1NJTkdMRV9JU1NVRVIgfFxcXFxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlX292ZXJmbG93KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzEtXFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzI6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTI3My1cXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTMxMC1cXHRtZW1jcHkoY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2VjcWUsIHNpemVvZigqY3FlKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMTE6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIgfHwgaXNfY3FlMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTMxMi1cXHRcXHRtZW1jcHkoY3FlLVxcdTAwM2ViaWdfY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2ViaWdfY3FlLCBzaXplb2YoKmNxZSkpO1xcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jLTEwNS1cXHRpZiAoKCpmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMikgXFx1MDAyNlxcdTAwMjZcXG5pb191cmluZy9tc2dfcmluZy5jOjEwNjpcXHQgICAgISh0YXJnZXRfY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA3LVxcdFxcdFxcdFxcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG4tLVxcbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtNDktXFxuaW9fdXJpbmcvbm9wLmM6NTA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL25vcC5jLTUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk0LSNkZWZpbmUgQ09QWV9GTEFHU1xcdChJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWSB8IElPUklOR19TRVRVUF9TUUUxMjggfCBcXFxcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTU6XFx0XFx0XFx0IElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9OT19NTUFQIHwgXFxcXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk2LVxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEIHwgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRClcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy02NDktXFx0XFx0ZHN0X21hc2sgPSBwLVxcdTAwM2VjcV9lbnRyaWVzIC0gMTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjY1MDpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjUxLVxcdFxcdFxcdGluZGV4IFxcdTAwM2NcXHUwMDNjPSAxO1xcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MjQzPWludCBpb191cmluZ19jbWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cXHRcXHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX1NRRTEyODtcXG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjYxLVxcdFxcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9ODMxPXN0YXRpYyBpbnQgaW1wb3J0X3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtODQxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL3pjcnguYzo4NDI6XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL3pjcnguYy04NDMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTk4MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy96Y3J4LmM6OTgyOlxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy96Y3J4LmMtOTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjozOS44NDM1NzEwMDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTU3ODU4MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBpb191cmluZyBDUUUgTWl4ZWQgTW9kZSoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgYW5kIGBpb191cmluZy9pb191cmluZy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5IGhhbmRsZSBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZmxhZyBhY3R1YWxseSBkb2VzLiBTbywgSSdsbCBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBhbmQgc2VlIGhvdyBpdCdzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjQ1LjQyMjE1NjMyNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTI0NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPUklOR19TRVRVUF9DUUVfTUlYRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTc2Mi1cXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTIwODQtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDg1OlxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcXG5pb191cmluZy9pb191cmluZy5jLTIwODYtXFx0XFx0aWYgKGNxX2VudHJpZXMgXFx1MDAzYyAyKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzg4PXN0YXRpYyBpbnQgaW9fdXJpbmdfc2FuaXRpc2VfcGFyYW1zKHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnApXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI4MzUtXFx0ICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM2OlxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSA9PVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNzpcXHQgICAgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcXG5pb191cmluZy9pb191cmluZy5jLTI4MzgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTMwPXN0cnVjdCBpb19jdHhfY29uZmlnIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzItXFx0XFx0XFx0SU9SSU5HX1NFVFVQX0hZQlJJRF9JT1BPTEwgfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oOjczOlxcdFxcdFxcdElPUklOR19TRVRVUF9DUUVfTUlYRUQgfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oLTc0LVxcdFxcdFxcdElPUklOR19TRVRVUF9TUUVfTUlYRUQgfFxcXFxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlX292ZXJmbG93KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzMtXFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzQ6XFx0fSBlbHNlIGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjc1LVxcdFxcdGN0eC1cXHUwMDNlY3FlX2NhY2hlZCsrO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yODg9c3RhdGljIGlubGluZSBib29sIGlvX2RlZmVyX2dldF91bmNvbW1pdGVkX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjkzLVxcdGN0eC1cXHUwMDNlc3VibWl0X3N0YXRlLmNxX2ZsdXNoID0gdHJ1ZTtcXG5pb191cmluZy9pb191cmluZy5oOjI5NDpcXHRyZXR1cm4gaW9fZ2V0X2NxZShjdHgsIGNxZV9yZXQsIGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKTtcXG5pb191cmluZy9pb191cmluZy5oLTI5NS19XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTMzNj1zdGF0aWMgaW5saW5lIHUzMiBjdHhfY3FlMzJfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzcte1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzM4OlxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcXG5pb191cmluZy9pb191cmluZy5oLTMzOS1cXHRcXHRyZXR1cm4gSU9SSU5HX0NRRV9GXzMyO1xcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jLTEwNi1cXHQgICAgISh0YXJnZXRfY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxcbmlvX3VyaW5nL21zZ19yaW5nLmM6MTA3OlxcdFxcdFxcdFxcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy9tc2dfcmluZy5jLTEwOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtNDktXFxuaW9fdXJpbmcvbm9wLmM6NTA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL25vcC5jLTUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk1LVxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfTk9fTU1BUCB8IFxcXFxcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5NjpcXHRcXHRcXHQgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8IElPUklOR19TRVRVUF9TUUVfTUlYRUQpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTctXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0xNTI9dm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0xNjYtXFx0aWYgKGlzX2NxZTMyKSB7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY3OlxcdFxcdGlmIChyZXEtXFx1MDAzZWN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2OC1cXHRcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0yNDM9aW50IGlvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjU5LVxcdFxcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfU1FFMTI4O1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjI2MDpcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcXG5pb191cmluZy91cmluZ19jbWQuYy0yNjEtXFx0XFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9DUUUzMjtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz04MzE9c3RhdGljIGludCBpbXBvcnRfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy04NDEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvemNyeC5jOjg0MjpcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXFxuaW9fdXJpbmcvemNyeC5jLTg0My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz05NjE9aW50IGlvX3JlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtOTgxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL3pjcnguYzo5ODI6XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL3pjcnguYy05ODMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTYyOD1zdGF0aWMgYm9vbCBpb196Y3J4X3F1ZXVlX2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IG5ldF9pb3YgKm5pb3YsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtMTY0Mi1cXHRjcWUtXFx1MDAzZWZsYWdzID0gSU9SSU5HX0NRRV9GX01PUkU7XFxuaW9fdXJpbmcvemNyeC5jOjE2NDM6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbmlvX3VyaW5nL3pjcnguYy0xNjQ0LVxcdFxcdGNxZS1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo0NS44OTMwODgwNTlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUwNDkxODM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENRRSBNaXhlZCBNb2RlKipcblxuT2theSwgc28gYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGlzIHRoZSBrZXksIGxldHRpbmcgdXMgd29yayB3aXRoIGJvdGggMTYtIGFuZCAzMi1ieXRlIENvbXBsZXRpb24gUXVldWUgRW50cmllcyAoQ1FFcykuIEdvdCBpdC4gTm93LCBpbiB0aGlzIFwibWl4ZWQgbW9kZSxcIiB0aGUgYGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyYCBiaXQgaXMgdGhlIGNydWNpYWwgaW5kaWNhdG9yIOKAkyBpdCB0ZWxscyBtZSB3aGV0aGVyIEknbSBsb29raW5nIGF0IGEgMzItYnl0ZSBDUUUsIHdoaWNoLCBvZiBjb3Vyc2UsIG1lYW5zIGl0J3MgdGFraW5nIHVwIHR3byBjb25zZWN1dGl2ZSBzbG90cyBpbiB0aGUgcmluZy5cblxuSG1tLCB0aGF0IGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBhIGNvcm5lciBjYXNlIHRoYXQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJZiBJIGhhdmUgYSAzMi1ieXRlIENRRSBzaXR0aW5nIGF0IHRoZSAqdmVyeSogZW5kIG9mIHRoZSByaW5nIGJ1ZmZlciwgaG93IGRvZXMgdGhlIHN5c3RlbSBoYW5kbGUgdGhhdD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYGlvX2dldF9jcWVgIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgdGhhdCBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo0OC4zOTgwMDg5NTNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTQ1MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2dldF9jcWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG5pb191cmluZy9pb191cmluZy5jOjc2NTpcXHRpZiAodW5saWtlbHkoIWlvX2dldF9jcWUoY3R4LCBcXHUwMDI2Y3FlLCB0cnVlKSkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NzM9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1NjQgdXNlcl9kYXRhLCBzMzIgcmVzLFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NzgtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3Nzk6XFx0aWYgKGxpa2VseShpb19nZXRfY3FlKGN0eCwgXFx1MDAyNmNxZSwgY3FlMzIpKSkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzgwLVxcdFxcdFdSSVRFX09OQ0UoY3FlLVxcdTAwM2V1c2VyX2RhdGEsIHVzZXJfZGF0YSk7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZV9vdmVyZmxvdyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjgxLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MjgyOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfY3FlICoqcmV0LFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjgzLVxcdFxcdFxcdFxcdGJvb2wgY3FlMzIpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTI4OD1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZGVmZXJfZ2V0X3VuY29tbWl0ZWRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTMtXFx0Y3R4LVxcdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjk0OlxcdHJldHVybiBpb19nZXRfY3FlKGN0eCwgY3FlX3JldCwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjk1LX1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTMwNi1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5oOjMwNzpcXHRpZiAodW5saWtlbHkoIWlvX2dldF9jcWUoY3R4LCBcXHUwMDI2Y3FlLCBpc19jcWUzMikpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzA4LVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6NDguNDQ1MTU4OTIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNDc5MTcxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYGlvX3VyaW5nLmhgIGF0IExpbmUgMjgyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIGBpb191cmluZ2AsIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaGVhZGVyIGZpbGUsIGBpb191cmluZy5oYC4gSSd2ZSBob25lZCBpbiBvbiBsaW5lIDI4Mi4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoZXJlJ3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIG9yIHBlcnRpbmVudCB0byBteSBjdXJyZW50IHByb2JsZW0gZGVmaW5lZCBvciByZWZlcmVuY2VkIGFyb3VuZCB0aGF0IGFyZWEuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGF0IHRoYXQgbGluZSByZXZlYWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHN0cnVjdHMsIGVudW1zLCBtYWNyb3MsIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBtaWdodCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gSSdtIGludGVyZXN0ZWQgaW4uIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFyb3VuZCBbdGhlIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QgLSB0aGlzIHBhcnQgaXMgdXAgdG8gdGhlIHVzZXIncyBleHBlcnRpc2UgYW5kIGNvbnRleHQuIEV4YW1wbGU6IHF1ZXVpbmcgYmVoYXZpb3IsIGNvbXBsZXRpb24gaGFuZGxpbmcsIHN1Ym1pc3Npb24gZmxhZ3MsIGxpbmtlZCByZXF1ZXN0cywgZXRjXS4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBsaW5lIDI4MiBpcyBndWFyZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo1MC41OTMwNzg0OTJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKipyZXQsXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHRcXHRib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxcbiAyNjI6XFx0e1xcbiAyNjM6XFx0XFx0aW9fbG9ja2RlcF9hc3NlcnRfY3FfbG9ja2VkKGN0eCk7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGlmICh1bmxpa2VseShjdHgtXFx1MDAzZWNxZV9zZW50aW5lbCAtIGN0eC1cXHUwMDNlY3FlX2NhY2hlZCBcXHUwMDNjIChjcWUzMiArIDEpKSkge1xcbiAyNjY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFpb19jcWVfY2FjaGVfcmVmaWxsKGN0eCwgb3ZlcmZsb3csIGNxZTMyKSkpXFxuIDI2NzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI2ODpcXHRcXHR9XFxuIDI2OTpcXHRcXHQqcmV0ID0gY3R4LVxcdTAwM2VjcWVfY2FjaGVkO1xcbiAyNzA6XFx0XFx0Y3R4LVxcdTAwM2VjYWNoZWRfY3FfdGFpbCsrO1xcbiAyNzE6XFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuIDI3MjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbiAyNzM6XFx0XFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuIDI3NDpcXHRcXHR9IGVsc2UgaWYgKGNxZTMyIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSB7XFxuIDI3NTpcXHRcXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG4gMjc2OlxcdFxcdFxcdGN0eC1cXHUwMDNlY2FjaGVkX2NxX3RhaWwrKztcXG4gMjc3OlxcdFxcdH1cXG4gMjc4OlxcdFxcdFdBUk5fT05fT05DRShjdHgtXFx1MDAzZWNxZV9jYWNoZWQgXFx1MDAzZSBjdHgtXFx1MDAzZWNxZV9zZW50aW5lbCk7XFxuIDI3OTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjgwOlxcdH1cXG4gMjgxOlxcdFxcbiAyODI6XFx0c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ19jcWUgKipyZXQsXFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRib29sIGNxZTMyKVxcbiAyODQ6XFx0e1xcbiAyODU6XFx0XFx0cmV0dXJuIGlvX2dldF9jcWVfb3ZlcmZsb3coY3R4LCByZXQsIGZhbHNlLCBjcWUzMik7XFxuIDI4NjpcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19kZWZlcl9nZXRfdW5jb21taXRlZF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSAqKmNxZV9yZXQpXFxuIDI5MDpcXHR7XFxuIDI5MTpcXHRcXHRpb19sb2NrZGVwX2Fzc2VydF9jcV9sb2NrZWQoY3R4KTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0Y3R4LVxcdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xcbiAyOTQ6XFx0XFx0cmV0dXJuIGlvX2dldF9jcWUoY3R4LCBjcWVfcmV0LCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCk7XFxuIDI5NTpcXHR9XFxuIDI5NjpcXHRcXG4gMjk3OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuIDI5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjUwLjU5MzE4MjgwMloiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjg0MTQwNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gc2VlaW5nOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIENRRSBPdmVyZmxvdyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGlvX2dldF9jcWVfb3ZlcmZsb3dgLCBzcGVjaWZpY2FsbHksIHRoZSBjb25kaXRpb24gd2hlcmUgdGhlIENvbXBsZXRpb24gUXVldWUgRW50cnkgKENRRSkgY2FjaGUgbmVlZHMgcmVmaWxsaW5nLiAgSSBzZWUgdGhhdCBpdCB0cmlnZ2VycyBgaW9fY3FlX2NhY2hlX3JlZmlsbGAgd2hlbiBgY3R4LVx1MDAzZWNxZV9zZW50aW5lbCAtIGN0eC1cdTAwM2VjcWVfY2FjaGVkYCBpcyBsZXNzIHRoYW4gYChjcWUzMiArIDEpYC4gVGhhdCdzIHRoZSBjcnVjaWFsIHRocmVzaG9sZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpbmVxdWFsaXR5IHNpZ25hbHMgYW4gb3ZlcmZsb3cgY29uZGl0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgbWFuYWdlZCBhbmQgcmVsYXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2VudGluZWwgYW5kIHRoZSBjYWNoZWQgZW50cnkgaXMgcHJvYmFibHkgaW5kaWNhdGluZyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IGluIHRoZSBjYWNoZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29kZSBhbnRpY2lwYXRlcyBhbiBpc3N1ZS4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgaW9fY3FlX2NhY2hlX3JlZmlsbGAgZnVuY3Rpb24gaW4gYGlvX3VyaW5nL2lvX3VyaW5nLmNgIHRvIHNlZSBob3cgaXQgd29ya3MgYW5kIHdoYXQgdHJpZ2dlcnMgaXQgdG8gYmUgbmVlZGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbG9naWMgd2l0aGluIHRoYXQgcmVmaWxsIGZ1bmN0aW9uLCBhbmQgaG93IGl0IHRpZXMgaW50byB0aGUgY29yZSBDUUUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjUzLjg3NzMyNjM2NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTU6XFx0ICogY29udHJvbCBkZXBlbmRlbmN5IGlzIGVub3VnaCBhcyB3ZSdyZSB1c2luZyBXUklURV9PTkNFIHRvXFxuIDcxNjpcXHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxcbiA3MTc6XFx0ICovXFxuIDcxODpcXHRib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXFxuIDcxOTpcXHR7XFxuIDcyMDpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzID0gY3R4LVxcdTAwM2VyaW5ncztcXG4gNzIxOlxcdFxcdHVuc2lnbmVkIGludCBvZmYgPSBjdHgtXFx1MDAzZWNhY2hlZF9jcV90YWlsIFxcdTAwMjYgKGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIDEpO1xcbiA3MjI6XFx0XFx0dW5zaWduZWQgaW50IGZyZWUsIGxlbjtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0LypcXG4gNzI1OlxcdFxcdCAqIFBvc3RpbmcgaW50byB0aGUgQ1Egd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBvdmVyZmxvd2VkIENRRXMgbWF5IGJyZWFrXFxuIDcyNjpcXHRcXHQgKiBvcmRlcmluZyBndWFyYW50ZWVzLCB3aGljaCB3aWxsIGFmZmVjdCBsaW5rcywgRl9NT1JFIHVzZXJzIGFuZCBtb3JlLlxcbiA3Mjc6XFx0XFx0ICogRm9yY2Ugb3ZlcmZsb3cgdGhlIGNvbXBsZXRpb24uXFxuIDcyODpcXHRcXHQgKi9cXG4gNzI5OlxcdFxcdGlmICghb3ZlcmZsb3cgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2hlY2tfY3EgXFx1MDAyNiBCSVQoSU9fQ0hFQ0tfQ1FfT1ZFUkZMT1dfQklUKSkpXFxuIDczMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdC8qXFxuIDczMzpcXHRcXHQgKiBQb3N0IGR1bW15IENRRSBpZiBhIDMyYiBDUUUgaXMgbmVlZGVkIGFuZCB0aGVyZSdzIG9ubHkgcm9vbSBmb3IgYVxcbiA3MzQ6XFx0XFx0ICogMTZiIENRRSBiZWZvcmUgdGhlIHJpbmcgd3JhcHMuXFxuIDczNTpcXHRcXHQgKi9cXG4gNzM2OlxcdFxcdGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBvZmYgKyAxID09IGN0eC1cXHUwMDNlY3FfZW50cmllcykge1xcbiA3Mzc6XFx0XFx0XFx0aWYgKCFpb19maWxsX25vcF9jcWUoY3R4LCBvZmYpKVxcbiA3Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3Mzk6XFx0XFx0XFx0b2ZmID0gMDtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0ZnJlZSA9IGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIGlvX2NxcmluZ19xdWV1ZWQoY3R4KTtcXG4gNzQzOlxcdFxcdC8qIHdlIG5lZWQgYSBjb250aWd1b3VzIHJhbmdlLCBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBhcnJheSBvZmZzZXQgKi9cXG4gNzQ0OlxcdFxcdGxlbiA9IG1pbihmcmVlLCBjdHgtXFx1MDAzZWNxX2VudHJpZXMgLSBvZmYpO1xcbiA3NDU6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIChjcWUzMiArIDEpKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbiA3NDk6XFx0XFx0XFx0b2ZmIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTA6XFx0XFx0XFx0bGVuIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQgPSBcXHUwMDI2cmluZ3MtXFx1MDAzZWNxZXNbb2ZmXTtcXG4gNzU0OlxcdFxcdGN0eC1cXHUwMDNlY3FlX3NlbnRpbmVsID0gY3R4LVxcdTAwM2VjcWVfY2FjaGVkICsgbGVuO1xcbiA3NTU6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDc1NjpcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdHN0YXRpYyBib29sIGlvX2ZpbGxfY3FlX2F1eDMyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiA3NTk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSBzcmNfY3FlWzJdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo1My44Nzc1MjM1OTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg4MzEyNDg1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENRRSBSaW5nIEJ1ZmZlciBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSdtIGZvY3VzaW5nIG9uIGxpbmVzIDczMi03NDAgb2YgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBDUUUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBcImR1bW15IENRRVwiIGluc2VydGlvbi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIGhhbmRsaW5nIDMyLWJpdCBDUUVzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIG5lYXJpbmcgaXRzIHdyYXAtYXJvdW5kIHBvaW50LCBidXQgb25seSBlbm91Z2ggc3BhY2UgZXhpc3RzIGZvciBhIDE2LWJpdCBDUUUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaW9fZmlsbF9ub3BfY3FlYCBmdW5jdGlvbiBvcGVyYXRlcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgXCJkdW1teVwiIGVudHJ5IGlzIGNyZWF0ZWQgYW5kIGluc2VydGVkIGludG8gdGhlIGJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhlIHJpbmcgYnVmZmVyIGRvZXNuJ3QgY29ycnVwdCBkYXRhIG9yIHRyaWdnZXIgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIENRRSBwcm9jZXNzaW5nLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZWl0aGVyIGluc2VydCBhIHNwZWNpYWwgJ05PUCcgKG5vIG9wZXJhdGlvbikgQ1FFLCB0byBzaWduYWwgdG8gZG93bnN0cmVhbSBjb25zdW1lcnMgdGhhdCBub3RoaW5nIGlzIGFjdHVhbGx5IHJlYWR5LCBvciBtYXliZSBldmVuIHBlcmZvcm0gYSBidWZmZXIgcmVzZXQsIGRlcGVuZGluZyBvbiBjb250ZXh0LiBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGl0IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MTIuNzA4Nzc1MTc0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUxMTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19maWxsX25vcF9jcWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz02ODQ9c3RhdGljIHVuc2lnbmVkIGludCBpb19jcXJpbmdfcXVldWVkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02OTgtICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo2OTk6c3RhdGljIGJvb2wgaW9fZmlsbF9ub3BfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgb2ZmKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzAwLXtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzM2LVxcdGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBvZmYgKyAxID09IGN0eC1cXHUwMDNlY3FfZW50cmllcykge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzM3OlxcdFxcdGlmICghaW9fZmlsbF9ub3BfY3FlKGN0eCwgb2ZmKSlcXG5pb191cmluZy9pb191cmluZy5jLTczOC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI3OjEyLjc1ODI5MzA2M1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1Mzg0OTU1NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBpb191cmluZy5jOiBBIFNwZWNpZmljIENvZGUgQmxvY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgaW9fdXJpbmcvaW9fdXJpbmcuY2AuIExldCdzIHplcm8gaW4gb24gbGluZXMgNjk4IHRocm91Z2ggNzE1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGluIHRoaXMgc2VjdGlvbi4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgY29yZSBhc3BlY3Qgb2YgdGhlIHN1Ym1pc3Npb24gb3IgY29tcGxldGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gSS9PIG9wZXJhdGlvbnMuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgYGlvX3VyaW5nYCwgSSdkIGJldCBpdCdzIGludm9sdmVkIGluIGRpc3BhdGNoaW5nIHdvcmsgdG8gdGhlIGtlcm5lbCBvciByZXRyaWV2aW5nIGNvbXBsZXRlZCByZXF1ZXN0cy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgYXNzaWdubWVudHMgcmVsYXRlZCB0byByaW5nIGJ1ZmZlcnMsIGNvbXBsZXRpb24gcXVldWVzLCBhbmQgdGhlIHN1Ym1pc3Npb24gcXVldWUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIGBpb191cmluZ19zdWJtaXQoKWAsIGBpb191cmluZ19jcV9lbnRlcigpYCwgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIG1lbW9yeSBiYXJyaWVyIGluc3RydWN0aW9ucyB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBjaGVja3Mgb24gZmxhZ3Mgb3IgZXJyb3IgY29kZXMuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIHNvdXJjZSBjb2RlLiBNeSBnb2FsIGlzIHRvIGdyYXNwIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzY29wZSBvZiBob3cgaW9fdXJpbmcgZWZmaWNpZW50bHkgaGFuZGxlcyBJL08uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MTguMTQzMjUyMTc2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5ODpcXHQgKi9cXG4gNjk5OlxcdHN0YXRpYyBib29sIGlvX2ZpbGxfbm9wX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG9mZilcXG4gNzAwOlxcdHtcXG4gNzAxOlxcdFxcdGlmIChpb19jcXJpbmdfcXVldWVkKGN0eCkgXFx1MDAzYyBjdHgtXFx1MDAzZWNxX2VudHJpZXMpIHtcXG4gNzAyOlxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZSA9IFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdzLVxcdTAwM2VjcWVzW29mZl07XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdFxcdGNxZS1cXHUwMDNldXNlcl9kYXRhID0gMDtcXG4gNzA1OlxcdFxcdFxcdGNxZS1cXHUwMDNlcmVzID0gMDtcXG4gNzA2OlxcdFxcdFxcdGNxZS1cXHUwMDNlZmxhZ3MgPSBJT1JJTkdfQ1FFX0ZfU0tJUDtcXG4gNzA3OlxcdFxcdFxcdGN0eC1cXHUwMDNlY2FjaGVkX2NxX3RhaWwrKztcXG4gNzA4OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA3MDk6XFx0XFx0fVxcbiA3MTA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MTE6XFx0fVxcbiA3MTI6XFx0XFxuIDcxMzpcXHQvKlxcbiA3MTQ6XFx0ICogd3JpdGVzIHRvIHRoZSBjcSBlbnRyeSBuZWVkIHRvIGNvbWUgYWZ0ZXIgcmVhZGluZyBoZWFkOyB0aGVcXG4gNzE1OlxcdCAqIGNvbnRyb2wgZGVwZW5kZW5jeSBpcyBlbm91Z2ggYXMgd2UncmUgdXNpbmcgV1JJVEVfT05DRSB0b1xcbiA3MTY6XFx0ICogZmlsbCB0aGUgY3EgZW50cnlcXG4gNzE3OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzoxOC4xNDM0NjM5NDZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzUxMzA5NzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIGlvX3VyaW5nIENRRSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gbWl4ZWQgbW9kZSwgd2l0aCBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGAsIHRoZSBjb2RlIHNlZW1zIHRvIGhhdmUgYSBzcGVjaWZpYyBoYW5kbGluZyBmb3IgdGhlIGxhc3Qgc2xvdCBiZWZvcmUgdGhlIENRIHJpbmcgd3JhcHMgYXJvdW5kLiBTcGVjaWZpY2FsbHksIHdoZW4gYG9mZiArIDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXNgLCBpdCBsb29rcyBsaWtlIGEgZHVtbXkgQ1FFIHdpdGggYElPUklOR19DUUVfRl9TS0lQYCBpcyBpbnNlcnRlZC4gVGhlbiwgYSAzMi1ieXRlIENRRSBpcyBwbGFjZWQgc3RhcnRpbmcgYXQgdGhlIGJlZ2lubmluZyAoYG9mZiA9IDBgKS4gQnV0IGhhbmcgb24uLi4gdXNlcnNwYWNlIGhhcyBhY2Nlc3MgdG8gdGhpcyBzaGFyZWQgbWVtb3J5IChtbWFwISksIGFuZCB0aGV5ICpjb3VsZCogcG90ZW50aWFsbHkgbW9kaWZ5IHRoZSBDUUUgZW50cmllcyBpbiB0aGUgc2hhcmVkIHJpbmcuXG5cbkkgc2VlIHRoYXQgYHItXHUwMDNlY3Flc2AgaXMgbWFwcGVkIGludG8gdXNlcnNwYWNlOyBhbmQgSSBoYXZlIGEgYmFkIGZlZWxpbmcgYWJvdXQgdGhpcywgdGhpcyBjb3VsZCBoYXZlIG1ham9yIGltcGxpY2F0aW9ucy4gTGV0J3MgbG9vayBhdCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggdGhlIENRIGVudHJpZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgY2hlY2sgYW5kIHRoZSBjb25kaXRpb24gdGhhdCBzZXRzIHRoZSBgY3FlMzJgIGJvb2xlYW4uXG5cblRoZSBsaW5lIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoaXM6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gTm93LCBgY3FfaGVhZGAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGluY3JlbWVudHMuIFRoZSBpbmRleCB0byBhY2Nlc3MgYHItXHUwMDNlY3Flc2AgaXMgYGNxX2hlYWQgXHUwMDI2IGNxX21hc2tgLiBXYWl0LCB3aGF0IGlzIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgZG9pbmc/IFdoeSBpcyB0aGVyZSBhIGRpcmVjdCBjb21wYXJpc29uIGJldHdlZW4gYGNxX2hlYWRgIGFuZCBgY3FfbWFza2AsIHJhdGhlciB0aGFuIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgPT0gY3FfbWFza2A/XG5cbk9rYXksIEkgdGhpbmsgSSdtIHN0YXJ0aW5nIHRvIHNlZSB0aGUgaXNzdWUuIFdoZW4gYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKWAgcG9pbnRzIHRvIHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgKmFuZCogYGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyYCBpcyBzZXQgKHdoaWNoIGNvdWxkIGJlIG1hbGljaW91c2x5IHNldCBieSB1c2Vyc3BhY2UpLCB0aGUgY29kZSB3aWxsIHByb2NlZWQgdG8gYWNjZXNzIHRoZSBgY3FlLVx1MDAzZWJpZ19jcWVgIGFycmF5LiAgSWYgdGhlIGxhc3QgZWxlbWVudCBpcyBhY2Nlc3NlZCwgaXQgbWF5IGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGByLVx1MDAzZWNxZXNgIGFycmF5LiBUaGlzIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCFcblxuSWYgdGhpcyBvY2N1cnMsIGNvdWxkIHRoaXMgYmUgZGV0ZWN0ZWQ/IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoaXMgc29ydCBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggbWVhbnMgYSBrZXJuZWwgcGFuaWMuIFdhaXQsIHdoYXQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IElzIHRoaXMgbWVtb3J5IGFmdGVyIGByLVx1MDAzZWNxZXNgIGFsbG9jYXRlZCBvciBub3Q/IEkgbmVlZCB0byBjaGVjayBob3cgYHItXHUwMDNlY3Flc2AgaXMgYWxsb2NhdGVkIGFuZCBzaXplZCB0byBjb25maXJtIHRoaXMgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIHNlYXJjaCBmb3IgYHJpbmdzX3NpemVgIGFuZCB3aGVyZSBgci1cdTAwM2VjcWVzYCBsaXZlcyEgSSBhbSBwcmV0dHkgc3VyZSB0aGlzIGlzIGEgcmVhbCB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBhIG1pc2NhbGN1bGF0aW9uIG9mIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjUuNjU2NTYzOTEzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyNTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nc19zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9MjA2OT1zdGF0aWMgdm9pZCBpb19yaW5nc19mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDc3LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjA3ODpzdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG5pb191cmluZy9pb191cmluZy5jLTIwNzktXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNxX2VudHJpZXMsIHN0cnVjdCBpb19yaW5nc19sYXlvdXQgKnJsKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTI2LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEyNzpcXHRybC1cXHUwMDNlcmluZ3Nfc2l6ZSA9IG9mZjtcXG5pb191cmluZy9pb191cmluZy5jLTIxMjgtXFx0cmV0dXJuIDA7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI3MTc9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjczMC1cXHRtZW1zZXQoXFx1MDAyNnJkLCAwLCBzaXplb2YocmQpKTtcXG5pb191cmluZy9pb191cmluZy5jOjI3MzE6XFx0cmQuc2l6ZSA9IFBBR0VfQUxJR04ocmwtXFx1MDAzZXJpbmdzX3NpemUpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjczMi1cXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI4OTQ9aW50IGlvX3ByZXBhcmVfY29uZmlnKHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI5MDYtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTA3OlxcdHJldCA9IHJpbmdzX3NpemUocC1cXHUwMDNlZmxhZ3MsIHAtXFx1MDAzZXNxX2VudHJpZXMsIHAtXFx1MDAzZWNxX2VudHJpZXMsXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTA4LVxcdFxcdFxcdCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VsYXlvdXQpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yMj1zdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0IHtcXG5pb191cmluZy9pb191cmluZy5oLTIzLVxcdC8qIHNpemUgb2YgQ1EgKyBoZWFkZXJzICsgU1Egb2Zmc2V0IGFycmF5ICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNDpcXHRzaXplX3QgcmluZ3Nfc2l6ZTtcXG5pb191cmluZy9pb191cmluZy5oLTI1LVxcdHNpemVfdCBzcV9zaXplO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTUyNi1cXHRtZW1zZXQoXFx1MDAyNnJkLCAwLCBzaXplb2YocmQpKTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjUyNzpcXHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cXHUwMDNlcmluZ3Nfc2l6ZSk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MjgtXFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX05PX01NQVApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjUuNzAzOTkyODMyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MDI0ODQ4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHJpbmdzX3NpemVgIGluIGBpb191cmluZy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgYGlvX3VyaW5nYCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgcmluZ3Nfc2l6ZWAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmluZyBidWZmZXIgc2l6ZSBpcyBkZXRlcm1pbmVkIGFuZCBob3cgaXQgaW1wYWN0cyBwZXJmb3JtYW5jZS4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN0cnVjdHVyZXMsIHRoYXQgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNlbnRyYWwgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IGxheW91dCBhbmQgdGhlIGJhbGFuY2UgYmV0d2VlbiBDUFUgdXRpbGl6YXRpb24gYW5kIEkvTyBsYXRlbmN5LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBpbmZsdWVuY2VzIGZyb20gYm90aCBoYXJkd2FyZSBsaW1pdGF0aW9ucyAoY2FjaGUgbGluZSBzaXplcywgcGFnZSBzaXplcykgYW5kIHBvdGVudGlhbCB0dW5pbmcgcGFyYW1ldGVycyBleHBvc2VkIHRvIHRoZSB1c2VyLiBJIGFsc28gYW50aWNpcGF0ZSBpdCB3aWxsIGFmZmVjdCB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBwcm9jZXNzaW5nLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IGR5bmFtaWMgYWRqdXN0bWVudHMgYXJlIG1hZGUgZHVyaW5nIHJ1bnRpbWUgYmFzZWQgb24gc3lzdGVtIGxvYWQgb3Igb3RoZXIgZmFjdG9ycy4gVGhlIGNvZGUgaW4gYGlvX3VyaW5nLmNgIHdpbGwgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIsIGFuZCBJJ20gcmVhZHkgdG8gZmluZCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjguMzA2NDgwNjIyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNzgsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNzg6XFx0c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXFxuMjA3OTpcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3FfZW50cmllcywgc3RydWN0IGlvX3JpbmdzX2xheW91dCAqcmwpXFxuMjA4MDpcXHR7XFxuMjA4MTpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzO1xcbjIwODI6XFx0XFx0c2l6ZV90IHNxZV9zaXplO1xcbjIwODM6XFx0XFx0c2l6ZV90IG9mZjtcXG4yMDg0OlxcdFxcbjIwODU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xcbjIwODY6XFx0XFx0XFx0aWYgKGNxX2VudHJpZXMgXFx1MDAzYyAyKVxcbjIwODc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjA4ODpcXHRcXHR9XFxuMjA4OTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKSB7XFxuMjA5MDpcXHRcXHRcXHRpZiAoc3FfZW50cmllcyBcXHUwMDNjIDIpXFxuMjA5MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4yMDkyOlxcdFxcdH1cXG4yMDkzOlxcdFxcbjIwOTQ6XFx0XFx0cmwtXFx1MDAzZXNxX2FycmF5X29mZnNldCA9IFNJWkVfTUFYO1xcbjIwOTU6XFx0XFxuMjA5NjpcXHRcXHRzcWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfc3FlKTtcXG4yMDk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpXFxuMjA5ODpcXHRcXHRcXHRzcWVfc2l6ZSAqPSAyO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRybC1cXHUwMDNlc3Ffc2l6ZSA9IGFycmF5X3NpemUoc3FlX3NpemUsIHNxX2VudHJpZXMpO1xcbjIxMDE6XFx0XFx0aWYgKHJsLVxcdTAwM2VzcV9zaXplID09IFNJWkVfTUFYKVxcbjIxMDI6XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjEwMzpcXHRcXG4yMTA0OlxcdFxcdG9mZiA9IHN0cnVjdF9zaXplKHJpbmdzLCBjcWVzLCBjcV9lbnRyaWVzKTtcXG4yMTA1OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG4yMTA2OlxcdFxcdFxcdG9mZiA9IHNpemVfbXVsKG9mZiwgMik7XFxuMjEwNzpcXHRcXHRpZiAob2ZmID09IFNJWkVfTUFYKVxcbjIxMDg6XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjEwOTpcXHRcXG4yMTEwOlxcdCNpZmRlZiBDT05GSUdfU01QXFxuMjExMTpcXHRcXHRvZmYgPSBBTElHTihvZmYsIFNNUF9DQUNIRV9CWVRFUyk7XFxuMjExMjpcXHRcXHRpZiAob2ZmID09IDApXFxuMjExMzpcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4yMTE0OlxcdCNlbmRpZlxcbjIxMTU6XFx0XFxuMjExNjpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSkge1xcbjIxMTc6XFx0XFx0XFx0c2l6ZV90IHNxX2FycmF5X3NpemU7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdFxcdHJsLVxcdTAwM2VzcV9hcnJheV9vZmZzZXQgPSBvZmY7XFxuMjEyMDpcXHRcXG4yMTIxOlxcdFxcdFxcdHNxX2FycmF5X3NpemUgPSBhcnJheV9zaXplKHNpemVvZih1MzIpLCBzcV9lbnRyaWVzKTtcXG4yMTIyOlxcdFxcdFxcdG9mZiA9IHNpemVfYWRkKG9mZiwgc3FfYXJyYXlfc2l6ZSk7XFxuMjEyMzpcXHRcXHRcXHRpZiAob2ZmID09IFNJWkVfTUFYKVxcbjIxMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjEyNTpcXHRcXHR9XFxuMjEyNjpcXHRcXG4yMTI3OlxcdFxcdHJsLVxcdTAwM2VyaW5nc19zaXplID0gb2ZmO1xcbjIxMjg6XFx0XFx0cmV0dXJuIDA7XFxuMjEyOTpcXHR9XFxuMjEzMDpcXHRcXG4yMTMxOlxcdHN0YXRpYyBfX2NvbGQgdm9pZCBfX2lvX3JlcV9jYWNoZXNfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4yMTMyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjguMzA2Njg4MzIyWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNjc2MjgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSS9PIFJpbmcgQ1FFIFNpemluZyBhbmQgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgQWNjZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIHNpemUgb2YgdGhlIEkvTyByaW5nIGlzIGNhbGN1bGF0ZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJpZXMgKENRRXMpLiBJJ20gc2VlaW5nIHRoYXQgdGhlIGByaW5nc19zaXplYCBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBgcmluZ3NgLCBgY3Flc2AsIGFuZCBgY3FfZW50cmllc2AuIE5vdywgZm9yIHRoZSBzdGFuZGFyZCBjYXNlLCBldmVyeXRoaW5nIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZSBjcnVjaWFsIG9ic2VydmF0aW9uIGhlcmUgaXMgYWJvdXQgdGhlIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBmbGFnLiBXaXRoIHRoaXMsIHRoZSBjb2RlICpkb2Vzbid0KiBkb3VibGUgYGNxX2VudHJpZXNgLCB3aGljaCBpcyB3aGF0IG9uZSBtaWdodCBpbml0aWFsbHkgZXhwZWN0LiBJbnN0ZWFkLCBgY3FfZW50cmllc2AgcmVmbGVjdHMgdGhlIG51bWJlciBvZiAxNi1ieXRlIENRRSBzbG90cyBhbGxvY2F0ZWQgaW4gYHJpbmdzLVx1MDAzZWNxZXNgLlxuXG5UaGUgaW1wbGljYXRpb24/IFdoZW4gYSAzMi1ieXRlIENRRSBpcyB1dGlsaXplZCBpbiBtaXhlZCBtb2RlLCBpdCBjb25zdW1lcyAqdHdvKiBvZiB0aGVzZSAxNi1ieXRlIHNsb3RzLiBJdCdzIHRoaXMgZGV0YWlsIHRoYXQgYnJpbmdzIHVwIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgc2VlIGEgcHJvYmxlbSBpZiB0aGUgKmxhc3QqIHNsb3QgaW4gdGhlIHJpbmcgKGBjcV9oZWFkIFx1MDAyNiBjcV9tYXNrID09IGNxX21hc2tgKSBoYXMgYElPUklOR19DUUVfRl8zMmAgc2V0LiBUaGlzIG1lYW5zIGEgMzItYnl0ZSBDUUUgaXMgaW1wbGllZCwgYnV0IHNpbmNlIGl0J3MgdGhlIGZpbmFsIHNsb3QsIGl0IGNhbm5vdCBhY3R1YWxseSBiZSBhIDMyLWJ5dGUgQ1FFOyBpdCBpcyBvbmx5IGEgMTYgYnl0ZSBzbG90LiBSZWFkaW5nIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYHJpbmdzLVx1MDAzZWNxZXNbY3FfZW50cmllcyAtIDFdYCFcblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGltbWVkaWF0ZWx5IGFmdGVyIHRoYXQgbGFzdCBgcmluZ3MtXHUwMDNlY3Flc2AgZWxlbWVudC4gQWgsIEkgc2VlOiB0aGVyZSdzIGVpdGhlciBwYWRkaW5nIGZvciBTTVAgKGlmIGBDT05GSUdfU01QYCBpcyBlbmFibGVkKSBvciBwYWRkaW5nIHRvIHBhZ2UgYWxpZ25tZW50IGlmIGBJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWWAgaXMgc2V0LiBTbywgaWYgd2UgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIENRRXMsIHdpbGwgd2UgaGl0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB3aWxsIGl0IGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gV2UgaGF2ZSB0byBjaGVjayBob3cgdGhlIG1lbW9yeSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEknbGwgbmVlZCB0byBnbyBsb29rIGF0IGhvdyBgaW9fYWxsb2NhdGVfc2NxX3VyaW5nc2Agd29ya3MuIFRoYXQncyB3aGVyZSB0aGUgYW5zd2VyIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MzMuMzc0MzIwMDRaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcxNTpcXHR9XFxuMjcxNjpcXHRcXG4yNzE3OlxcdHN0YXRpYyBfX2NvbGQgaW50IGlvX2FsbG9jYXRlX3NjcV91cmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuMjcxODpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX2N0eF9jb25maWcgKmNvbmZpZylcXG4yNzE5OlxcdHtcXG4yNzIwOlxcdFxcdHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnAgPSBcXHUwMDI2Y29uZmlnLVxcdTAwM2VwO1xcbjI3MjE6XFx0XFx0c3RydWN0IGlvX3JpbmdzX2xheW91dCAqcmwgPSBcXHUwMDI2Y29uZmlnLVxcdTAwM2VsYXlvdXQ7XFxuMjcyMjpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgcmQ7XFxuMjcyMzpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzO1xcbjI3MjQ6XFx0XFx0aW50IHJldDtcXG4yNzI1OlxcdFxcbjI3MjY6XFx0XFx0LyogbWFrZSBzdXJlIHRoZXNlIGFyZSBzYW5lLCBhcyB3ZSBhbHJlYWR5IGFjY291bnRlZCB0aGVtICovXFxuMjcyNzpcXHRcXHRjdHgtXFx1MDAzZXNxX2VudHJpZXMgPSBwLVxcdTAwM2VzcV9lbnRyaWVzO1xcbjI3Mjg6XFx0XFx0Y3R4LVxcdTAwM2VjcV9lbnRyaWVzID0gcC1cXHUwMDNlY3FfZW50cmllcztcXG4yNzI5OlxcdFxcbjI3MzA6XFx0XFx0bWVtc2V0KFxcdTAwMjZyZCwgMCwgc2l6ZW9mKHJkKSk7XFxuMjczMTpcXHRcXHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cXHUwMDNlcmluZ3Nfc2l6ZSk7XFxuMjczMjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XFxuMjczMzpcXHRcXHRcXHRyZC51c2VyX2FkZHIgPSBwLVxcdTAwM2VjcV9vZmYudXNlcl9hZGRyO1xcbjI3MzQ6XFx0XFx0XFx0cmQuZmxhZ3MgfD0gSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSO1xcbjI3MzU6XFx0XFx0fVxcbjI3MzY6XFx0XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XFxuMjczNzpcXHRcXHRpZiAocmV0KVxcbjI3Mzg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yNzM5OlxcdFxcdGN0eC1cXHUwMDNlcmluZ3MgPSByaW5ncyA9IGlvX3JlZ2lvbl9nZXRfcHRyKFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdfcmVnaW9uKTtcXG4yNzQwOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXFx1MDAzZXJpbmdzX3JjdSwgcmluZ3MpO1xcbjI3NDE6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSlcXG4yNzQyOlxcdFxcdFxcdGN0eC1cXHUwMDNlc3FfYXJyYXkgPSAodTMyICopKChjaGFyICopcmluZ3MgKyBybC1cXHUwMDNlc3FfYXJyYXlfb2Zmc2V0KTtcXG4yNzQzOlxcdFxcbjI3NDQ6XFx0XFx0bWVtc2V0KFxcdTAwMjZyZCwgMCwgc2l6ZW9mKHJkKSk7XFxuMjc0NTpcXHRcXHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cXHUwMDNlc3Ffc2l6ZSk7XFxuMjc0NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XFxuMjc0NzpcXHRcXHRcXHRyZC51c2VyX2FkZHIgPSBwLVxcdTAwM2VzcV9vZmYudXNlcl9hZGRyO1xcbjI3NDg6XFx0XFx0XFx0cmQuZmxhZ3MgfD0gSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSO1xcbjI3NDk6XFx0XFx0fVxcbjI3NTA6XFx0XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbjI3NTE6XFx0XFx0aWYgKHJldCkge1xcbjI3NTI6XFx0XFx0XFx0aW9fcmluZ3NfZnJlZShjdHgpO1xcbjI3NTM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yNzU0OlxcdFxcdH1cXG4yNzU1OlxcdFxcdGN0eC1cXHUwMDNlc3Ffc3FlcyA9IGlvX3JlZ2lvbl9nZXRfcHRyKFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbik7XFxuMjc1NjpcXHRcXG4yNzU3OlxcdFxcdG1lbXNldChyaW5ncywgMCwgc2l6ZW9mKCpyaW5ncykpO1xcbjI3NTg6XFx0XFx0V1JJVEVfT05DRShyaW5ncy1cXHUwMDNlc3FfcmluZ19tYXNrLCBjdHgtXFx1MDAzZXNxX2VudHJpZXMgLSAxKTtcXG4yNzU5OlxcdFxcdFdSSVRFX09OQ0UocmluZ3MtXFx1MDAzZWNxX3JpbmdfbWFzaywgY3R4LVxcdTAwM2VjcV9lbnRyaWVzIC0gMSk7XFxuMjc2MDpcXHRcXHRXUklURV9PTkNFKHJpbmdzLVxcdTAwM2VzcV9yaW5nX2VudHJpZXMsIGN0eC1cXHUwMDNlc3FfZW50cmllcyk7XFxuMjc2MTpcXHRcXHRXUklURV9PTkNFKHJpbmdzLVxcdTAwM2VjcV9yaW5nX2VudHJpZXMsIGN0eC1cXHUwMDNlY3FfZW50cmllcyk7XFxuMjc2MjpcXHRcXHRyZXR1cm4gMDtcXG4yNzYzOlxcdH1cXG4yNzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozMy4zNzQ0NzAyOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTAzMjkwNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbiBpbiBgaW9fY3JlYXRlX3JlZ2lvbmAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBpb19jcmVhdGVfcmVnaW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQgdGhlcmUuIEl0J3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgcmVnaW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2lsbCBsaWtlbHkgcmVzaWRlIHdpdGhpbiB0aG9zZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBnb29kLCBidXQgaXQncyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUgb2YgYGlvX2NyZWF0ZV9yZWdpb25gIGl0c2VsZiBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyB0aGluZyBhY3R1YWxseSBidWlsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTc2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozNS44Nzc3NjQ2WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA0ODc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9MjcxNz1zdGF0aWMgX19jb2xkIGludCBpb19hbGxvY2F0ZV9zY3FfdXJpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzM1LVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjI3MzY6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzM3LVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI3NDktXFx0fVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mjc1MDpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNlc3FfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzUxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz02MzA9aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy02NzgtXFx0fVxcbmlvX3VyaW5nL2tidWYuYzo2Nzk6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZibC1cXHUwMDNlcmVnaW9uLCBcXHUwMDI2cmQsIG1tYXBfb2Zmc2V0KTtcXG5pb191cmluZy9rYnVmLmMtNjgwLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0xNzQ9c3RhdGljIGludCBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMjA2LVxcbmlvX3VyaW5nL21lbW1hcC5jOjIwNzppbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbmlvX3VyaW5nL21lbW1hcC5jLTIwOC1cXHRcXHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmg9MjA9dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcik7XFxuaW9fdXJpbmcvbWVtbWFwLmg6MjE6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG5pb191cmluZy9tZW1tYXAuaC0yMi1cXHRcXHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTUzMS1cXHR9XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1MzI6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZuLnJpbmdfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzMtXFx0aWYgKHJldClcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYxLVxcdH1cXG5pb191cmluZy9yZWdpc3Rlci5jOjU2MjpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNm4uc3FfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01NjMtXFx0aWYgKHJldCkge1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03MDM9c3RhdGljIGludCBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqdWFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzMyLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzMzOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2cmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19NQVBfT0ZGX1BBUkFNX1JFR0lPTik7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzQtXFx0aWYgKHJldClcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz00MTQ9c3RhdGljIGludCBpb19hbGxvY2F0ZV9yYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtNDMzLVxcbmlvX3VyaW5nL3pjcnguYzo0MzQ6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZpZnEtXFx1MDAzZXJxX3JlZ2lvbiwgcmQsIG1tYXBfb2Zmc2V0KTtcXG5pb191cmluZy96Y3J4LmMtNDM1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozNS45MjQ4MTgwMDlaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDYxMjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbWVtbWFwLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiBgaW9fdXJpbmcvbWVtbWFwLmNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBpb191cmluZ2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbW1hcC1yZWxhdGVkIGFzcGVjdHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGFuZCBrZXJuZWwtc3BhY2UgbWVtb3J5IHJlZ2lvbnMgaGVyZS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBzaGFyaW5nIG9mIG1lbW9yeSBidWZmZXJzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zIGFuZCBob3cgdGhhdCdzIGhhbmRsZWQgd2l0aCBtZW1vcnkgbWFwcGluZy4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIG51YW5jZXMgb2YgbWVtb3J5IHByb3RlY3Rpb24sIGNhY2hpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIGVmZmljaWVudCBhbmQgc2FmZSBkYXRhIHRyYW5zZmVycy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHVzZWQgb3IgcG90ZW50aWFsIGFyZWFzIHdoZXJlIHRoZXkgY291bGQgYmUgaW1wbGVtZW50ZWQgb3IgaW1wcm92ZWQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MzguMzg1NDMyOTg5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL21lbW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3NDpcXHRzdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcsXFxuIDE3NjpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBtbWFwX29mZnNldCxcXG4gMTc3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHRnZnBfdCBnZnAgPSBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOO1xcbiAxODA6XFx0XFx0c2l6ZV90IHNpemUgPSBpb19yZWdpb25fc2l6ZShtcik7XFxuIDE4MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZDtcXG4gMTgyOlxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXM7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIG1yLVxcdTAwM2Vucl9wYWdlcywgZ2ZwKTtcXG4gMTg1OlxcdFxcdGlmICghcGFnZXMpXFxuIDE4NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0aWYgKGlvX21lbV9hbGxvY19jb21wb3VuZChwYWdlcywgbXItXFx1MDAzZW5yX3BhZ2VzLCBzaXplLCBnZnAsIHVzZXIpKSB7XFxuIDE4OTpcXHRcXHRcXHRtci1cXHUwMDNlZmxhZ3MgfD0gSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRjtcXG4gMTkwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMTkxOlxcdFxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbiAxOTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGlmIChucl9hbGxvY2F0ZWQgIT0gbXItXFx1MDAzZW5yX3BhZ2VzKSB7XFxuIDE5NjpcXHRcXHRcXHRpZiAobnJfYWxsb2NhdGVkKVxcbiAxOTc6XFx0XFx0XFx0XFx0cmVsZWFzZV9wYWdlcyhwYWdlcywgbnJfYWxsb2NhdGVkKTtcXG4gMTk4OlxcdFxcdFxcdGt2ZnJlZShwYWdlcyk7XFxuIDE5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjAwOlxcdFxcdH1cXG4gMjAxOlxcdGRvbmU6XFxuIDIwMjpcXHRcXHRyZWctXFx1MDAzZW1tYXBfb2Zmc2V0ID0gbW1hcF9vZmZzZXQ7XFxuIDIwMzpcXHRcXHRtci1cXHUwMDNlcGFnZXMgPSBwYWdlcztcXG4gMjA0OlxcdFxcdHJldHVybiAwO1xcbiAyMDU6XFx0fVxcbiAyMDY6XFx0XFxuIDIwNzpcXHRpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbiAyMDg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4gMjA5OlxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBtbWFwX29mZnNldClcXG4gMjEwOlxcdHtcXG4gMjExOlxcdFxcdGludCBucl9wYWdlcywgcmV0O1xcbiAyMTI6XFx0XFx0dTY0IGVuZDtcXG4gMjEzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozOC4zODU1MDk5NTlaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcyODIyMDQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIGlvX3VyaW5nIENRRSBDb3JydXB0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGlvX3VyaW5nYCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgbWVtb3J5IGZvciB0aGUgQ1FFIChDb21wbGV0aW9uIFF1ZXVlIEVudHJ5KSBzdHJ1Y3R1cmVzIGlzIHplcm9lZCBvdXQgb24gYWxsb2NhdGlvbiDigJMgSSdtIHNlZWluZyBgX19HRlBfWkVST2AgdXNlZCwgYW5kIGBtZW1zZXRgIGlzIGNhbGxlZCBvbiBgcmluZ3NgLiBUaGlzIHNob3VsZCBtZWFuIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSwgc28gYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGFyZSBhIHJlZCBmbGFnLlxuXG5Ob3csIEknbSByZS1leGFtaW5pbmcgdGhpcyBwYXRjaCBkaWZmLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHNvbWV0aGluZyBhcm91bmQgdGhlIHByaW50aW5nIG9mIENRRSBpbmZvcm1hdGlvbiBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGFuZCB1c2luZyBpdCB3aGVuIHByaW50aW5nIENRRXMuIFxuXG5JdCBzZWVtcyB0aGUgY29kZSBpcyB0cnlpbmcgdG8gaGFuZGxlIHRoZSBgSU9SSU5HX0NRRV9GXzMyYCBmbGFnIGFuZCBgSU9SSU5HX1NFVFVQX0NRRTMyYCBvcHRpb24sIGxpa2VseSByZWxhdGVkIHRvIDMyLWJpdCBDUUUgaGFuZGxpbmcuIFRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhZGRpbmcgYSBjb25kaXRpb246IGl0J3MgY2hlY2tpbmcgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgMzItYml0IENRRSwgZWl0aGVyIGV4cGxpY2l0bHkgaW4gdGhlIENRRSdzIGZsYWdzIG9yIGltcGxpY2l0bHkgdmlhIHRoZSByaW5nIHNldHVwLCAqYW5kKiBpZiB3ZSBhcmUgKm5vdCogYXQgdGhlIGxhc3Qgc2xvdCBpbiB0aGUgQ1FFIGFycmF5LCB3ZSBleGVjdXRlIHRoaXMgY29uZGl0aW9uLiBUaGUgZWFybGllciBjb25kaXRpb24gcHJpbnRlZCB0aGUgQ1FFIGluZm8gaWYgZWl0aGVyIGZsYWcgd2FzIHNldC4gXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCByZWFsbHkgcmVhZCB0aGUgY29kZSBhcm91bmQgbGluZXMgMTIwLTE4MCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgQ1FFIGFycmF5IGlzIG1hbmFnZWQgYW5kIGhvdyB0aGlzIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgdmFyaWFibGUgaXMgY2FsY3VsYXRlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhdGNoIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXQgc2VlbXMgYXMgdGhvdWdoIHRoZSBpc3N1ZSBoYXMgdG8gZG8gd2l0aCByZWFkaW5nIGZyb20gdGhlIENRRSB3aGVuIHdlIGFyZSBhdCB0aGUgbGFzdCBzbG90IGluIHRoZSBDUUUgYXJyYXksIGFuZCB3aXRoIHRoZSBmbGFncyBpbmRpY2F0aW5nIGEgYGNxZTMyYCwgc28gSSdsbCBuZWVkIHRvIHJlYWQgbW9yZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI3OjQzLjExMzczMzYwNFoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9mZGluZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyMTpcXHRcXHRcXHRcXHR9XFxuIDEyMjpcXHRcXHRcXHRcXHRpZiAoc3FfaWR4ID09IHNxX21hc2spIHtcXG4gMTIzOlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSxcXG4gMTI0OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCIlNXU6IGNvcnJ1cHRlZCBzcWUsIHdyYXBwaW5nIDEyOEIgZW50cnlcXFxcblxcXCIsXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRcXHRzcV9pZHgpO1xcbiAxMjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyNzpcXHRcXHRcXHRcXHR9XFxuIDEyODpcXHRcXHRcXHRcXHRzcV9oZWFkKys7XFxuIDEyOTpcXHRcXHRcXHRcXHRpKys7XFxuIDEzMDpcXHRcXHRcXHRcXHRzcWUxMjggPSB0cnVlO1xcbiAxMzE6XFx0XFx0XFx0fVxcbiAxMzI6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiBvcGNvZGU6JXMsIGZkOiVkLCBmbGFnczoleCwgb2ZmOiVsbHUsIFxcXCJcXG4gMTMzOlxcdFxcdFxcdFxcdCAgICAgIFxcXCJhZGRyOjB4JWxseCwgcndfZmxhZ3M6MHgleCwgYnVmX2luZGV4OiVkIFxcXCJcXG4gMTM0OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJ1c2VyX2RhdGE6JWxsdVxcXCIsXFxuIDEzNTpcXHRcXHRcXHRcXHQgICBzcV9pZHgsIGlvX3VyaW5nX2dldF9vcGNvZGUob3Bjb2RlKSwgc3FlLVxcdTAwM2VmZCxcXG4gMTM2OlxcdFxcdFxcdFxcdCAgIHNxZS1cXHUwMDNlZmxhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNxZS1cXHUwMDNlb2ZmLFxcbiAxMzc6XFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3FlLVxcdTAwM2VhZGRyLCBzcWUtXFx1MDAzZXJ3X2ZsYWdzLFxcbiAxMzg6XFx0XFx0XFx0XFx0ICAgc3FlLVxcdTAwM2VidWZfaW5kZXgsIHNxZS1cXHUwMDNldXNlcl9kYXRhKTtcXG4gMTM5OlxcdFxcdFxcdGlmIChzcWUxMjgpIHtcXG4gMTQwOlxcdFxcdFxcdFxcdHU2NCAqc3FlYiA9ICh2b2lkICopIChzcWUgKyAxKTtcXG4gMTQxOlxcdFxcdFxcdFxcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XFxuIDE0MjpcXHRcXHRcXHRcXHRpbnQgajtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHNpemU7IGorKykge1xcbiAxNDU6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLCBlJWQ6MHglbGx4XFxcIiwgaixcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdHNxZWIrKztcXG4gMTQ4OlxcdFxcdFxcdFxcdH1cXG4gMTQ5OlxcdFxcdFxcdH1cXG4gMTUwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE1MTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIkNRRXM6XFxcXHQldVxcXFxuXFxcIiwgY3FfdGFpbCAtIGNxX2hlYWQpO1xcbiAxNTQ6XFx0XFx0Y3FfZW50cmllcyA9IG1pbihjcV90YWlsIC0gY3FfaGVhZCwgY3R4LVxcdTAwM2VjcV9lbnRyaWVzKTtcXG4gMTU1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjcV9lbnRyaWVzOyBpKyspIHtcXG4gMTU2OlxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcXG4gMTU3OlxcdFxcdFxcdGJvb2wgY3FlMzIgPSBmYWxzZTtcXG4gMTU4OlxcdFxcdFxcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0XFx0Y3FlID0gXFx1MDAyNnItXFx1MDAzZWNxZXNbKGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrKV07XFxuIDE2MTpcXHRcXHRcXHRpZiAoKGNxZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXFx1MDAyNlxcdTAwMjZcXG4gMTYyOlxcdFxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuIDE2MzpcXHRcXHRcXHRcXHRjcWUzMiA9IHRydWU7XFxuIDE2NDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XFxcIixcXG4gMTY1OlxcdFxcdFxcdFxcdCAgIGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrLCBjcWUtXFx1MDAzZXVzZXJfZGF0YSwgY3FlLVxcdTAwM2VyZXMsXFxuIDE2NjpcXHRcXHRcXHRcXHQgICBjcWUtXFx1MDAzZWZsYWdzKTtcXG4gMTY3OlxcdFxcdFxcdGlmIChjcWUzMilcXG4gMTY4OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiwgZXh0cmExOiVsbHUsIGV4dHJhMjolbGx1XFxcIixcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdGNxZS1cXHUwMDNlYmlnX2NxZVswXSwgY3FlLVxcdTAwM2ViaWdfY3FlWzFdKTtcXG4gMTcwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE3MTpcXHRcXHRcXHRjcV9oZWFkKys7XFxuIDE3MjpcXHRcXHRcXHRpZiAoY3FlMzIpIHtcXG4gMTczOlxcdFxcdFxcdFxcdGNxX2hlYWQrKztcXG4gMTc0OlxcdFxcdFxcdFxcdGkrKztcXG4gMTc1OlxcdFxcdFxcdH1cXG4gMTc2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUVBPTEwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6NDMuMTEzODIxNDg0WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNDc5NTcwNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgaW9fdXJpbmcgcGF0Y2gsIGFuZCB0aGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGluIHRoZSBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIHNjZW5hcmlvIGlzIHRoaXM6IHdoZW4gcHJpbnRpbmcgdGhlIENRRSAoQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSkgaW5mb3JtYXRpb24sIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiB0cnlpbmcgdG8gYWNjZXNzIGBjcWUtXHUwMDNlYmlnX2NxZWAgd2hlbiBgY3FlYCBpcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSByaW5nIGJ1ZmZlciAoYHItXHUwMDNlY3Flc2ApLiBUaGlzIHdvdWxkIGJlIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGNvbmRpdGlvbjogYGNxX2hlYWQgXHUwMDI2IGNxX21hc2sgPT0gY3FfbWFza2AsIHdoaWNoIHNpZ25pZmllcyB0aGF0IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIENRRSBhcnJheS4gSWYsIHVuZGVyIHRoYXQgY29uZGl0aW9uLCBgY3FlMzJgIGlzIHRydWUsIHRoZW4gd2UgaGF2ZSBhbiBPT0IuXG5cblRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcywgYWRkaW5nIGEgYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIGNoZWNrLiBUaG91Z2ggdGhlIGJpdG1hc2tpbmcgb3BlcmF0aW9uIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaylgIGltcGxpZXMgdGhhdCB0aGUgYWN0dWFsIGltcGxlbWVudGVkIGNvbmRpdGlvbiBgKGNxX2hlYWQgPT0gY3FfbWFzaylgIGNhbiBiZSBidWdneSAoaXQgc2hvdWxkIGJlIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgPT0gY3FfbWFza2ApIGJ1dCBpbiB0aGlzIGFuYWx5c2lzLCB0aGF0IGlzIG5vdCBpbXBvcnRhbnQuXG5cbk5vdywgbXkgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB3aGljaCB3b3VsZCBuZWNlc3NpdGF0ZSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBMZXQncyBzdGVwIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLlxuXG5GaXJzdGx5LCBJIGNoZWNrZWQgaWYgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhlIGtleSB2YXJpYWJsZXMsIGBjcV9oZWFkYCwgYGNxX21hc2tgLCBhbmQgYGlzX2xhc3RfY3FhcnJheV9zbG90YCwgYXJlIGFsbCBpbml0aWFsaXplZC4gVGhlIGBjcWUzMmAgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuXG5cblNlY29uZGx5LCBJIGNvbnNpZGVyZWQgaWYgdGhlIHBhdGNoIGFsbG93cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBY3R1YWxseSwgdGhpcyBwYXRjaCAqKnByZXZlbnRzKiogcmVhZGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBieSBwcmV2ZW50aW5nIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbnRvIHdoYXRldmVyIGZvbGxvd3MgdGhlIHJpbmcgYXJyYXkuXG5cblRoaXJkbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNlcV9wcmludGZgIG91dHB1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHZhbHVlcyBlaXRoZXIgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgb3IgdXNlcnNwYWNlLlxuXG5GaW5hbGx5LCBkb2VzIHRoZSBwYXRjaCBjaGFuZ2UgdGhlIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4gSXQgb25seSBtb2RpZmllcyBgc2hvd19mZGluZm9gJ3MgZGlhZ25vc3RpYyBvdXRwdXQuIFRoZSBjb3JlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgc29tZXRoaW5nIEtBU0FOIGNhdGNoZXMuXG5cblRvIGJlIGV4dHJhIHN1cmUsIEkgbWV0aWN1bG91c2x5IHJlLWV2YWx1YXRlZCB0aGUgS01TQU4gY3JpdGVyaWE6XG5cbiogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLlxuKiAgIE5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG4qICAgTm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyBhbHRlcmF0aW9ucyBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaXNzdWUgdGhhdCBLQVNBTiBkZXRlY3RzLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYm91bmRhcnkgY2hlY2tzIGFuZCBhcnJheSBpbmRleGluZywgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLlxuXG4qKkNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBOb3cgSSdsbCBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjE3LCJPdXRwdXRUb2tlbnMiOjI2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyODowNC41OTMzOTUxMzFaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKClgIGluIGBpb191cmluZy9mZGluZm8uY2AgdG8gcHJldmVudCB0cmVhdGluZyB0aGUgbGFzdCBzbG90IG9mIHRoZSBDUSByaW5nIGFycmF5IGFzIGEgMzItYnl0ZSBDUUUgKGBjcWUzMmApLiBXaXRob3V0IHByb3BlciBib3VuZGFyeSBoYW5kbGluZywgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNxZS1cXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXFx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXFx1MDAzZWNxZXNbXWAuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKClgIGluIGBpb191cmluZy9mZGluZm8uY2AgdG8gcHJldmVudCB0cmVhdGluZyB0aGUgbGFzdCBzbG90IG9mIHRoZSBDUSByaW5nIGFycmF5IGFzIGEgMzItYnl0ZSBDUUUgKGBjcWUzMmApLiBXaXRob3V0IHByb3BlciBib3VuZGFyeSBoYW5kbGluZywgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNxZS1cXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXFx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXFx1MDAzZWNxZXNbXWAuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowjmc4j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 16:21:21 +0000 UTC FinishedAt: 2026-09-11 16:28:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "PROC_FS" ], "series_id": "e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "__io_uring_show_fdinfo", "io_uring_show_fdinfo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "50d05c7c76c96b90462f24debacca971d2e86713", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXHUwMDNlY3Flc1tdYC5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIENRRSBmb3JtYXR0aW5nIGxvZ2ljIGluIF9faW9fdXJpbmdfc2hvd19mZGluZm8oKSB3aXRoaW4gaW9fdXJpbmcvZmRpbmZvLmMsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSByZWFkaW5nIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjaW9fdXJpbmdfZmRcdTAwM2UuIFRoZSBjaGVjayBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spYCBmYWlscyB0byBtYXNrIGNxX2hlYWQgYWdhaW5zdCBjcV9tYXNrLCBtZWFuaW5nIHdoZW4gY3FfaGVhZCBhZHZhbmNlcyBwYXN0IGNxX21hc2ssIHRoZSBib3VuZGFyeSBjaGVjayBiZWNvbWVzIGZhbHNlIGFuZCBjYW4gYWxsb3cgb3V0LW9mLWJvdW5kcyByZWFkcyBpbnRvIGNxZS1cdTAwM2ViaWdfY3FlIG9uIHdyYXBwZWQgcmluZ3MuIEZ1enppbmcgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIHBhdGggYW5kIHZlcmlmeSBtZW1vcnkgc2FmZXR5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTIxMzExMDBjZTE2N2M0OGQzYjE0OWExY2Q4MzhiMmIwM2I0MGExZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE2OjIyOjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2ZkaW5mby5jIGIvaW9fdXJpbmcvZmRpbmZvLmNcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mZGluZm8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZmRpbmZvLmNcbkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbiYjNDM7XHRcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbiBcbiBcdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG4tXHRcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbiYjNDM7XHRcdGlmICgoY3FlLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleFwmIzM0OyxcbiBcdFx0XHQgICBjcV9oZWFkIFx1MDAyNiBjcV9tYXNrLCBjcWUtXHUwMDNldXNlcl9kYXRhLCBjcWUtXHUwMDNlcmVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2Npb191cmluZ19mZFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjEzMTEwMGNlMTY3YzQ4ZDNiMTQ5YTFjZDgzOGIyYjAzYjQwYTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTY6MjI6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jCmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2ZkaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2ZkaW5mby5jCkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNxX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpb191cmluZ19jcWUgKmNxZTsKIAkJYm9vbCBjcWUzMiA9IGZhbHNlOwomIzQzOwkJYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spOwogCiAJCWNxZSA9ICZhbXA7ci0mZ3Q7Y3Flc1soY3FfaGVhZCAmYW1wOyBjcV9tYXNrKV07Ci0JCWlmIChjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMiB8fCBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMikKJiM0MzsJCWlmICgoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpCiAJCQljcWUzMiA9IHRydWU7CiAJCXNlcV9wcmludGYobSwgJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4JiMzNDssCiAJCQkgICBjcV9oZWFkICZhbXA7IGNxX21hc2ssIGNxZS0mZ3Q7dXNlcl9kYXRhLCBjcWUtJmd0O3JlcywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSU9fVVJJTkcgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBoYXMgdG91Y2hlZCBgaW9fdXJpbmcvZmRpbmZvLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdDsgYW55dGhpbmcgdGhhdCBkZWFscyB3aXRoIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGBpb191cmluZ2AgY29udGV4dCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGFzc29jaWF0ZWQgZ2l0IGNvbW1pdCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHNvbWUgaW1tZWRpYXRlIGNvbnRleHQuIExldCYjMzk7cyB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiBhIHNuaXBwZXQgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYCBhcm91bmQgbGluZSAxNTUg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhbmQgc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbXBhY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0XHR1NjQgKnNxZWIgPSAodm9pZCAqKSAoc3FlICYjNDM7IDEpO1xuIDE0MTpcdFx0XHRcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XG4gMTQyOlx0XHRcdFx0aW50IGo7XG4gMTQzOlx0XG4gMTQ0Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2Mgc2l6ZTsgaiYjNDM7JiM0MzspIHtcbiAxNDU6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LCBlJWQ6MHglbGx4XCYjMzQ7LCBqLFxuIDE0NjpcdFx0XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcbiAxNDc6XHRcdFx0XHRcdHNxZWImIzQzOyYjNDM7O1xuIDE0ODpcdFx0XHRcdH1cbiAxNDk6XHRcdFx0fVxuIDE1MDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1xcblwmIzM0Oyk7XG4gMTUxOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtDUUVzOlxcdCV1XFxuXCYjMzQ7LCBjcV90YWlsIC0gY3FfaGVhZCk7XG4gMTU0Olx0XHRjcV9lbnRyaWVzID0gbWluKGNxX3RhaWwgLSBjcV9oZWFkLCBjdHgtXHUwMDNlY3FfZW50cmllcyk7XG4gMTU1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDE1NjpcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gMTU3Olx0XHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbiAxNTg6XHRcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIDE1OTpcdFxuIDE2MDpcdFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbiAxNjE6XHRcdFx0aWYgKChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXHUwMDI2XHUwMDI2XG4gMTYyOlx0XHRcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXG4gMTYzOlx0XHRcdFx0Y3FlMzIgPSB0cnVlO1xuIDE2NDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU1dTogdXNlcl9kYXRhOiVsbHUsIHJlczolZCwgZmxhZ3M6JXhcJiMzNDssXG4gMTY1Olx0XHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiAxNjY6XHRcdFx0XHQgICBjcWUtXHUwMDNlZmxhZ3MpO1xuIDE2NzpcdFx0XHRpZiAoY3FlMzIpXG4gMTY4Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdVwmIzM0OyxcbiAxNjk6XHRcdFx0XHRcdFx0Y3FlLVx1MDAzZWJpZ19jcWVbMF0sIGNxZS1cdTAwM2ViaWdfY3FlWzFdKTtcbiAxNzA6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtcXG5cJiMzNDspO1xuIDE3MTpcdFx0XHRjcV9oZWFkJiM0MzsmIzQzOztcbiAxNzI6XHRcdFx0aWYgKGNxZTMyKSB7XG4gMTczOlx0XHRcdFx0Y3FfaGVhZCYjNDM7JiM0Mzs7XG4gMTc0Olx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4gMTc1Olx0XHRcdH1cbiAxNzY6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FQT0xMKSB7XG4gMTgwOlx0XHRcdHN0cnVjdCBpb19zcV9kYXRhICpzcSA9IGN0eC1cdTAwM2VzcV9kYXRhO1xuIDE4MTpcdFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiAxODI6XHRcbiAxODM6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDE4NDpcdFx0XHR0c2sgPSByY3VfZGVyZWZlcmVuY2Uoc3EtXHUwMDNldGhyZWFkKTtcbiAxODU6XHRcdFx0LypcbiAxODY6XHRcdFx0ICogc3EtXHUwMDNldGhyZWFkIG1pZ2h0IGJlIE5VTEwgaWYgd2UgcmFjZWQgd2l0aCB0aGUgc3Fwb2xsXG4gMTg3Olx0XHRcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cbiAxODg6XHRcdFx0ICovXG4gMTg5Olx0XHRcdGlmICh0c2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvZGUmIzM5O3MgRmxvdyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgY29uY2x1c2lvbiwgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byB6b29tIGluIG9uIGxpbmUgMTQwIGFuZCB1bmRlcnN0YW5kIGl0cyBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbGVhZGluZyB1cCB0byB0aGF0IHBvaW50LiBXaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBjb250ZXh0PyBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgc3RydWN0dXJlIGFuZCBwdXJwb3NlIGlzIGNyaXRpY2FsLiBJcyB0aGlzIHBhcnQgb2YgYSBjb3JlIGFsZ29yaXRobSwgYSB1dGlsaXR5IGZ1bmN0aW9uLCBvciBlcnJvciBoYW5kbGluZz8gS25vd2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgcmVzcG9uc2liaWxpdHkgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgZnJhbWV3b3JrIHdpdGhpbiB3aGljaCB0byBpbnRlcnByZXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBzcGVjaWZpYyBsaW5lLiBUaGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvZmRpbmZvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7TkFQSTpcXHR1bmtub3duIG1vZGUgKCV1KVxcblwmIzM0OywgbW9kZSk7XG4gIDUxOlx0XHR9XG4gIDUyOlx0fVxuICA1MzpcdCNlbHNlXG4gIDU0Olx0c3RhdGljIGlubGluZSB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gIDU1Olx0XHRcdFx0XHQgICAgc3RydWN0IHNlcV9maWxlICptKVxuICA1NjpcdHtcbiAgNTc6XHR9XG4gIDU4Olx0I2VuZGlmXG4gIDU5Olx0XG4gIDYwOlx0c3RhdGljIHZvaWQgX19pb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHNlcV9maWxlICptKVxuICA2MTpcdHtcbiAgNjI6XHRcdHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKm9jcWU7XG4gIDYzOlx0XHRzdHJ1Y3QgaW9fcmluZ3MgKnIgPSBjdHgtXHUwMDNlcmluZ3M7XG4gIDY0Olx0XHR1bnNpZ25lZCBpbnQgc3FfbWFzayA9IGN0eC1cdTAwM2VzcV9lbnRyaWVzIC0gMSwgY3FfbWFzayA9IGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gMTtcbiAgNjU6XHRcdHVuc2lnbmVkIGludCBzcV9oZWFkID0gUkVBRF9PTkNFKHItXHUwMDNlc3EuaGVhZCk7XG4gIDY2Olx0XHR1bnNpZ25lZCBpbnQgc3FfdGFpbCA9IFJFQURfT05DRShyLVx1MDAzZXNxLnRhaWwpO1xuICA2NzpcdFx0dW5zaWduZWQgaW50IGNxX2hlYWQgPSBSRUFEX09OQ0Uoci1cdTAwM2VjcS5oZWFkKTtcbiAgNjg6XHRcdHVuc2lnbmVkIGludCBjcV90YWlsID0gUkVBRF9PTkNFKHItXHUwMDNlY3EudGFpbCk7XG4gIDY5Olx0XHR1bnNpZ25lZCBpbnQgc3Ffc2hpZnQgPSAwO1xuICA3MDpcdFx0dW5zaWduZWQgaW50IGNxX2VudHJpZXMsIHNxX2VudHJpZXM7XG4gIDcxOlx0XHRpbnQgc3FfcGlkID0gLTEsIHNxX2NwdSA9IC0xO1xuICA3MjpcdFx0dTY0IHNxX3RvdGFsX3RpbWUgPSAwLCBzcV93b3JrX3RpbWUgPSAwO1xuICA3MzpcdFx0dW5zaWduZWQgaW50IGk7XG4gIDc0Olx0XG4gIDc1Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFMTI4KVxuICA3NjpcdFx0XHRzcV9zaGlmdCA9IDE7XG4gIDc3Olx0XG4gIDc4Olx0XHQvKlxuICA3OTpcdFx0ICogd2UgbWF5IGdldCBpbXByZWNpc2Ugc3FlIGFuZCBjcWUgaW5mbyBpZiB1cmluZyBpcyBhY3RpdmVseSBydW5uaW5nXG4gIDgwOlx0XHQgKiBzaW5jZSB3ZSBnZXQgY2FjaGVkX3NxX2hlYWQgYW5kIGNhY2hlZF9jcV90YWlsIHdpdGhvdXQgdXJpbmdfbG9ja1xuICA4MTpcdFx0ICogYW5kIHNxX3RhaWwgYW5kIGNxX2hlYWQgYXJlIGNoYW5nZWQgYnkgdXNlcnNwYWNlLiBCdXQgaXQmIzM5O3Mgb2sgc2luY2VcbiAgODI6XHRcdCAqIHdlIHVzdWFsbHkgdXNlIHRoZXNlIGluZm8gd2hlbiBpdCBpcyBzdHVjay5cbiAgODM6XHRcdCAqL1xuICA4NDpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtTcU1hc2s6XFx0MHgleFxcblwmIzM0Oywgc3FfbWFzayk7XG4gIDg1Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1NxSGVhZDpcXHQldVxcblwmIzM0Oywgc3FfaGVhZCk7XG4gIDg2Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1NxVGFpbDpcXHQldVxcblwmIzM0Oywgc3FfdGFpbCk7XG4gIDg3Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NhY2hlZFNxSGVhZDpcXHQldVxcblwmIzM0OywgZGF0YV9yYWNlKGN0eC1cdTAwM2VjYWNoZWRfc3FfaGVhZCkpO1xuICA4ODpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtDcU1hc2s6XFx0MHgleFxcblwmIzM0OywgY3FfbWFzayk7XG4gIDg5Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NxSGVhZDpcXHQldVxcblwmIzM0OywgY3FfaGVhZCk7XG4gIDkwOlx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NxVGFpbDpcXHQldVxcblwmIzM0OywgY3FfdGFpbCk7XG4gIDkxOlx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O0NhY2hlZENxVGFpbDpcXHQldVxcblwmIzM0OywgZGF0YV9yYWNlKGN0eC1cdTAwM2VjYWNoZWRfY3FfdGFpbCkpO1xuICA5MjpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtTUUVzOlxcdCV1XFxuXCYjMzQ7LCBzcV90YWlsIC0gc3FfaGVhZCk7XG4gIDkzOlx0XHRzcV9lbnRyaWVzID0gbWluKHNxX3RhaWwgLSBzcV9oZWFkLCBjdHgtXHUwMDNlc3FfZW50cmllcyk7XG4gIDk0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuICA5NTpcdFx0XHR1bnNpZ25lZCBpbnQgZW50cnkgPSBpICYjNDM7IHNxX2hlYWQ7XG4gIDk2Olx0XHRcdHN0cnVjdCBpb191cmluZ19zcWUgKnNxZTtcbiAgOTc6XHRcdFx0dW5zaWduZWQgaW50IHNxX2lkeDtcbiAgOTg6XHRcdFx0Ym9vbCBzcWUxMjggPSBmYWxzZTtcbiAgOTk6XHRcdFx0dTggb3Bjb2RlO1xuIDEwMDpcdFxuIDEwMTpcdFx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWSlcbiAxMDI6XHRcdFx0XHRzcV9pZHggPSBlbnRyeSBcdTAwMjYgc3FfbWFzaztcbiAxMDM6XHRcdFx0ZWxzZVxuIDEwNDpcdFx0XHRcdHNxX2lkeCA9IFJFQURfT05DRShjdHgtXHUwMDNlc3FfYXJyYXlbZW50cnkgXHUwMDI2IHNxX21hc2tdKTtcbiAxMDU6XHRcdFx0aWYgKHNxX2lkeCBcdTAwM2Ugc3FfbWFzaylcbiAxMDY6XHRcdFx0XHRjb250aW51ZTtcbiAxMDc6XHRcbiAxMDg6XHRcdFx0c3FlID0gXHUwMDI2Y3R4LVx1MDAzZXNxX3NxZXNbc3FfaWR4IFx1MDAzY1x1MDAzYyBzcV9zaGlmdF07XG4gMTA5Olx0XHRcdG9wY29kZSA9IFJFQURfT05DRShzcWUtXHUwMDNlb3Bjb2RlKTtcbiAxMTA6XHRcdFx0aWYgKG9wY29kZSBcdTAwM2U9IElPUklOR19PUF9MQVNUKVxuIDExMTpcdFx0XHRcdGNvbnRpbnVlO1xuIDExMjpcdFx0XHRvcGNvZGUgPSBhcnJheV9pbmRleF9ub3NwZWMob3Bjb2RlLCBJT1JJTkdfT1BfTEFTVCk7XG4gMTEzOlx0XHRcdGlmIChzcV9zaGlmdCkge1xuIDExNDpcdFx0XHRcdHNxZTEyOCA9IHRydWU7XG4gMTE1Olx0XHRcdH0gZWxzZSBpZiAoaW9faXNzdWVfZGVmc1tvcGNvZGVdLmlzXzEyOCkge1xuIDExNjpcdFx0XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRCkpIHtcbiAxMTc6XHRcdFx0XHRcdHNlcV9wcmludGYobSxcbiAxMTg6XHRcdFx0XHRcdFx0XCYjMzQ7JTV1OiBpbnZhbGlkIHNxZSwgMTI4QiBlbnRyeSBvbiBub24tbWl4ZWQgc3FcXG5cJiMzNDssXG4gMTE5Olx0XHRcdFx0XHRcdHNxX2lkeCk7XG4gMTIwOlx0XHRcdFx0XHRicmVhaztcbiAxMjE6XHRcdFx0XHR9XG4gMTIyOlx0XHRcdFx0aWYgKHNxX2lkeCA9PSBzcV9tYXNrKSB7XG4gMTIzOlx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sXG4gMTI0Olx0XHRcdFx0XHRcdFwmIzM0OyU1dTogY29ycnVwdGVkIHNxZSwgd3JhcHBpbmcgMTI4QiBlbnRyeVxcblwmIzM0OyxcbiAxMjU6XHRcdFx0XHRcdFx0c3FfaWR4KTtcbiAxMjY6XHRcdFx0XHRcdGJyZWFrO1xuIDEyNzpcdFx0XHRcdH1cbiAxMjg6XHRcdFx0XHRzcV9oZWFkJiM0MzsmIzQzOztcbiAxMjk6XHRcdFx0XHRpJiM0MzsmIzQzOztcbiAxMzA6XHRcdFx0XHRzcWUxMjggPSB0cnVlO1xuIDEzMTpcdFx0XHR9XG4gMTMyOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTV1OiBvcGNvZGU6JXMsIGZkOiVkLCBmbGFnczoleCwgb2ZmOiVsbHUsIFwmIzM0O1xuIDEzMzpcdFx0XHRcdCAgICAgIFwmIzM0O2FkZHI6MHglbGx4LCByd19mbGFnczoweCV4LCBidWZfaW5kZXg6JWQgXCYjMzQ7XG4gMTM0Olx0XHRcdFx0ICAgICAgXCYjMzQ7dXNlcl9kYXRhOiVsbHVcJiMzNDssXG4gMTM1Olx0XHRcdFx0ICAgc3FfaWR4LCBpb191cmluZ19nZXRfb3Bjb2RlKG9wY29kZSksIHNxZS1cdTAwM2VmZCxcbiAxMzY6XHRcdFx0XHQgICBzcWUtXHUwMDNlZmxhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNxZS1cdTAwM2VvZmYsXG4gMTM3Olx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3FlLVx1MDAzZWFkZHIsIHNxZS1cdTAwM2Vyd19mbGFncyxcbiAxMzg6XHRcdFx0XHQgICBzcWUtXHUwMDNlYnVmX2luZGV4LCBzcWUtXHUwMDNldXNlcl9kYXRhKTtcbiAxMzk6XHRcdFx0aWYgKHNxZTEyOCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBDYWxsZXJzKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgYmVpbmcgdXNlZC4gRmlyc3Qgc3RlcCwgSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyByZWx5IG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgZ2l2ZXMgbWUgYSBtYXAgb2YgaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgYWN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAxODAgdG8gMjQwIG9mIGBpb191cmluZy9mZGluZm8uY2AuIFRoYXQgcmFuZ2UgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIG9yIHJlbGV2YW50IGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IHJlYWQgdGhyb3VnaCB0aGlzIHNlY3Rpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdmFyaWFibGUgYXNzaWdubWVudHMsIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHdpbGwgaGVscCBtZSBkZWNpcGhlciB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSB3aXRoaW4gaXRzIGxvY2FsIGVjb3N5c3RlbS4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgJiMzOTttZWF0JiMzOTsgb2YgdGhlIG1hdHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdFx0c3RydWN0IGlvX3NxX2RhdGEgKnNxID0gY3R4LVx1MDAzZXNxX2RhdGE7XG4gMTgxOlx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xuIDE4MjpcdFxuIDE4MzpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTg0Olx0XHRcdHRzayA9IHJjdV9kZXJlZmVyZW5jZShzcS1cdTAwM2V0aHJlYWQpO1xuIDE4NTpcdFx0XHQvKlxuIDE4NjpcdFx0XHQgKiBzcS1cdTAwM2V0aHJlYWQgbWlnaHQgYmUgTlVMTCBpZiB3ZSByYWNlZCB3aXRoIHRoZSBzcXBvbGxcbiAxODc6XHRcdFx0ICogdGhyZWFkIHRlcm1pbmF0aW9uLlxuIDE4ODpcdFx0XHQgKi9cbiAxODk6XHRcdFx0aWYgKHRzaykge1xuIDE5MDpcdFx0XHRcdHU2NCB1c2VjO1xuIDE5MTpcdFxuIDE5MjpcdFx0XHRcdGdldF90YXNrX3N0cnVjdCh0c2spO1xuIDE5MzpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDE5NDpcdFx0XHRcdHVzZWMgPSBpb19zcV9jcHVfdXNlYyh0c2spO1xuIDE5NTpcdFx0XHRcdHNxX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzayxcbiAxOTY6XHRcdFx0XHRcdFx0XHRwcm9jX3BpZF9ucyhmaWxlX2lub2RlKG0tXHUwMDNlZmlsZSktXHUwMDNlaV9zYikpO1xuIDE5NzpcdFx0XHRcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xuIDE5ODpcdFx0XHRcdHNxX2NwdSA9IHNxLVx1MDAzZXNxX2NwdTtcbiAxOTk6XHRcdFx0XHRzcV90b3RhbF90aW1lID0gdXNlYztcbiAyMDA6XHRcdFx0XHRzcV93b3JrX3RpbWUgPSBzcS1cdTAwM2V3b3JrX3RpbWU7XG4gMjAxOlx0XHRcdH0gZWxzZSB7XG4gMjAyOlx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMjAzOlx0XHRcdH1cbiAyMDQ6XHRcdH1cbiAyMDU6XHRcbiAyMDY6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7U3FUaHJlYWQ6XFx0JWRcXG5cJiMzNDssIHNxX3BpZCk7XG4gMjA3Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1NxVGhyZWFkQ3B1OlxcdCVkXFxuXCYjMzQ7LCBzcV9jcHUpO1xuIDIwODpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtTcVRvdGFsVGltZTpcXHQlbGx1XFxuXCYjMzQ7LCBzcV90b3RhbF90aW1lKTtcbiAyMDk6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7U3FXb3JrVGltZTpcXHQlbGx1XFxuXCYjMzQ7LCBzcV93b3JrX3RpbWUpO1xuIDIxMDpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtVc2VyRmlsZXM6XFx0JXVcXG5cJiMzNDssIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xuIDIxMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucjsgaSYjNDM7JiM0MzspIHtcbiAyMTI6XHRcdFx0c3RydWN0IGZpbGUgKmYgPSBOVUxMO1xuIDIxMzpcdFxuIDIxNDpcdFx0XHRpZiAoY3R4LVx1MDAzZWZpbGVfdGFibGUuZGF0YS5ub2Rlc1tpXSlcbiAyMTU6XHRcdFx0XHRmID0gaW9fc2xvdF9maWxlKGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubm9kZXNbaV0pO1xuIDIxNjpcdFx0XHRpZiAoZikge1xuIDIxNzpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTV1OiBcJiMzNDssIGkpO1xuIDIxODpcdFx0XHRcdHNlcV9maWxlX3BhdGgobSwgZiwgXCYjMzQ7IFxcdFxcblxcXFxcJiMzNDspO1xuIDIxOTpcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0O1xcblwmIzM0Oyk7XG4gMjIwOlx0XHRcdH1cbiAyMjE6XHRcdH1cbiAyMjI6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7VXNlckJ1ZnM6XFx0JXVcXG5cJiMzNDssIGN0eC1cdTAwM2VidWZfdGFibGUubnIpO1xuIDIyMzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3R4LVx1MDAzZWJ1Zl90YWJsZS5ucjsgaSYjNDM7JiM0MzspIHtcbiAyMjQ6XHRcdFx0c3RydWN0IGlvX21hcHBlZF91YnVmICpidWYgPSBOVUxMO1xuIDIyNTpcdFxuIDIyNjpcdFx0XHRpZiAoY3R4LVx1MDAzZWJ1Zl90YWJsZS5ub2Rlc1tpXSlcbiAyMjc6XHRcdFx0XHRidWYgPSBjdHgtXHUwMDNlYnVmX3RhYmxlLm5vZGVzW2ldLVx1MDAzZWJ1ZjtcbiAyMjg6XHRcdFx0aWYgKGJ1ZilcbiAyMjk6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU1dTogMHglbGx4LyV6dVxcblwmIzM0OywgaSwgYnVmLVx1MDAzZXVidWYsIGJ1Zi1cdTAwM2VsZW4pO1xuIDIzMDpcdFx0XHRlbHNlXG4gMjMxOlx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNXU6IFx1MDAzY25vbmVcdTAwM2VcXG5cJiMzNDssIGkpO1xuIDIzMjpcdFx0fVxuIDIzMzpcdFxuIDIzNDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7UG9sbExpc3Q6XFxuXCYjMzQ7KTtcbiAyMzU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjICgxVSBcdTAwM2NcdTAwM2MgY3R4LVx1MDAzZWNhbmNlbF90YWJsZS5oYXNoX2JpdHMpOyBpJiM0MzsmIzQzOykge1xuIDIzNjpcdFx0XHRzdHJ1Y3QgaW9faGFzaF9idWNrZXQgKmhiID0gXHUwMDI2Y3R4LVx1MDAzZWNhbmNlbF90YWJsZS5oYnNbaV07XG4gMjM3Olx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxO1xuIDIzODpcdFxuIDIzOTpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsIFx1MDAyNmhiLVx1MDAzZWxpc3QsIGhhc2hfbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBpb191cmluZyBjb250ZXh0LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBhc3NvY2lhdGluZyBmaWxlIGRlc2NyaXB0b3JzIHdpdGggdGhlIGNvbXBsZXRpb24gcXVldWVzIGxpa2VseSByZXNpZGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGFzc29jaWF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBlcnJvcnMgb3IgcmVzb3VyY2UgY2xlYW51cCByZWxhdGVkIHRvIGZpbGUgZGVzY3JpcHRvcnMuIEkgd2FudCB0byBzZWUgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGhlcmUgdG9vLiBUaGUgcGVyZm9ybWFuY2Ugd2lsbCBpbmZsdWVuY2UgbGF0ZW5jeSBpbiBwYXJ0aWN1bGFyLCBzbyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHdlbGwgdGhlIGtlcm5lbCBjYW4ga2VlcCB1cCB3aXRoIHRoZSBsb2FkLiBBbnkgb3B0aW1pemF0aW9ucyBmb3IgaGlnaC10aHJvdWdocHV0IG9yIGNvbmN1cnJlbnQgSS9PIHdpbGwgYmUgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvZmRpbmZvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICBvcD0lZCwgdGFza193b3Jrcz0lZFxcblwmIzM0OywgcmVxLVx1MDAzZW9wY29kZSxcbiAyNDE6XHRcdFx0XHRcdFx0dGFza193b3JrX3BlbmRpbmcocmVxLVx1MDAzZXRjdHgtXHUwMDNldGFzaykpO1xuIDI0MjpcdFx0fVxuIDI0MzpcdFxuIDI0NDpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7Q3FPdmVyZmxvd0xpc3Q6XFxuXCYjMzQ7KTtcbiAyNDU6XHRcdHNwaW5fbG9jayhcdTAwMjZjdHgtXHUwMDNlY29tcGxldGlvbl9sb2NrKTtcbiAyNDY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob2NxZSwgXHUwMDI2Y3R4LVx1MDAzZWNxX292ZXJmbG93X2xpc3QsIGxpc3QpIHtcbiAyNDc6XHRcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlID0gXHUwMDI2b2NxZS1cdTAwM2VjcWU7XG4gMjQ4Olx0XG4gMjQ5Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICB1c2VyX2RhdGE9JWxsdSwgcmVzPSVkLCBmbGFncz0leFxcblwmIzM0OyxcbiAyNTA6XHRcdFx0XHQgICBjcWUtXHUwMDNldXNlcl9kYXRhLCBjcWUtXHUwMDNlcmVzLCBjcWUtXHUwMDNlZmxhZ3MpO1xuIDI1MTpcdFxuIDI1MjpcdFx0fVxuIDI1MzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG4gMjU0Olx0XHRuYXBpX3Nob3dfZmRpbmZvKGN0eCwgbSk7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdC8qXG4gMjU4Olx0ICogQ2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGFscmVhZHksIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvXG4gMjU5Olx0ICogYW55dGhpbmcgZWxzZSB0byBnZXQgYW4gZXh0cmEgcmVmZXJlbmNlLlxuIDI2MDpcdCAqL1xuIDI2MTpcdF9fY29sZCB2b2lkIGlvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gMjYyOlx0e1xuIDI2MzpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyNjQ6XHRcbiAyNjU6XHRcdC8qXG4gMjY2Olx0XHQgKiBBdm9pZCBBQkJBIGRlYWRsb2NrIGJldHdlZW4gdGhlIHNlcSBsb2NrIGFuZCB0aGUgaW9fdXJpbmcgbXV0ZXgsXG4gMjY3Olx0XHQgKiBzaW5jZSBmZGluZm8gY2FzZSBncmFicyBpdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIG5vcm1hbCB1c2VcbiAyNjg6XHRcdCAqIGNhc2VzLlxuIDI2OTpcdFx0ICovXG4gMjcwOlx0XHRpZiAobXV0ZXhfdHJ5bG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jaykpIHtcbiAyNzE6XHRcdFx0X19pb191cmluZ19zaG93X2ZkaW5mbyhjdHgsIG0pO1xuIDI3MjpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuIDI3MzpcdFx0fVxuIDI3NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGZkaW5mbyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21lb25lIHJlYWRzIHRoZSBgL3Byb2MvW3BpZF0vZmRpbmZvL1tmZF1gIGZpbGUgZm9yIGFuIGlvX3VyaW5nIGZpbGUgZGVzY3JpcHRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGZpbGUgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkLiBJIHNlZSB0aGlzIGJpdCBoZXJlOgoKYGBgYwpib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7CmBgYAoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHkuIFdlJiMzOTtyZSBjaGVja2luZyBpZiBgY3FfaGVhZGAgZXF1YWxzIGBjcV9tYXNrYC4gIGBjcV9oZWFkYCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQgcmVwcmVzZW50cyB0aGUgaGVhZCBwb2ludGVyLCBhbmQgaXQmIzM5O3MgYSBwb2ludGVyLCBzby4uLkRvZXMgaXQgbWVhbiBgY3FfaGVhZGAgZXF1YWxzIGBjcV9tYXNrYCwgb3Igc2hvdWxkIGl0IGJlIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKSA9PSBjcV9tYXNrYD8gU29tZXRoaW5nIGZlZWxzIG9mZi4gQWxzbywgYGNxX2hlYWRgIHdyYXBzIGFmdGVyIDJeMzIsIGJ1dCBgY3FfbWFza2AgaXMgYGN0eC0mZ3Q7Y3FfZW50cmllcyAtIDFgIQoKSXMgdGhpcyBhIGJ1ZyBmaXg/IE9yIGRvZXMgaXQgaW50cm9kdWNlIGEgYnVnIG9yIGZpeCBhbiBPT0IgYWNjZXNzPyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY3EgYXJyYXkuIEJ1dCB0aGUgbG9naWMgaXMgY29uZnVzaW5nLiBJdCYjMzk7cyBjaGVja2luZyBpZiB0aGUgaGVhZCBvZiB0aGUgQ1EgaXMgZXF1YWwgdG8gdGhlIG1hc2suIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBDUUUzMiBsb2dpYy4KCkFsc28sIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzJgPyBJZiB0aGF0IGZsYWcgaXMgc2V0LCBob3cgZG9lcyBDUUUzMiBpbmRleGluZyB3b3JrIHdpdGhpbiBpb191cmluZz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBDUUUzMiBpcyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGFuZCBzZWFyY2ggZm9yIGBJT1JJTkdfU0VUVVBfQ1FFMzJgIGluIHRoZSBpb191cmluZyBzb3VyY2UgdG8gZmlndXJlIG91dCBob3cgdGhlIENRRTMyIGZsYWcgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPUklOR19TRVRVUF9DUUUzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jPTYwPXN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5pb191cmluZy9mZGluZm8uYy0xNjAtXHRcdGNxZSA9IFx1MDAyNnItXHUwMDNlY3Flc1soY3FfaGVhZCBcdTAwMjYgY3FfbWFzayldO1xuaW9fdXJpbmcvZmRpbmZvLmM6MTYxOlx0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbmlvX3VyaW5nL2ZkaW5mby5jLTE2Mi1cdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbi0tXG5pb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzMi1cdFx0aWYgKG9jcWUtXHUwMDNlY3FlLmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NTMzOlx0XHQgICAgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVx0XHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzNi1cdFx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1Mzc6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM4LVx0XHRcdGlzX2NxZTMyID0gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NTktXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTcxOD1ib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXG5pb191cmluZy9pb191cmluZy5jOjc0ODpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDktXHRcdG9mZiBcdTAwM2NcdTAwM2M9IDE7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjItXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDc4PXN0YXRpYyBpbnQgcmluZ3Nfc2l6ZSh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzcV9lbnRyaWVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cdG9mZiA9IHN0cnVjdF9zaXplKHJpbmdzLCBjcWVzLCBjcV9lbnRyaWVzKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEwNTpcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA2LVx0XHRvZmYgPSBzaXplX211bChvZmYsIDIpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM2Olx0aWYgKChmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNzpcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9pb191cmluZy5oPTMwPXN0cnVjdCBpb19jdHhfY29uZmlnIHtcbi0tXG5pb191cmluZy9pb191cmluZy5oLTY1LVx0XHRcdElPUklOR19TRVRVUF9TUUUxMjggfFxcXG5pb191cmluZy9pb191cmluZy5oOjY2Olx0XHRcdElPUklOR19TRVRVUF9DUUUzMiB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjctXHRcdFx0SU9SSU5HX1NFVFVQX1NJTkdMRV9JU1NVRVIgfFxcXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzEtXHRjdHgtXHUwMDNlY3FlX2NhY2hlZCYjNDM7JiM0Mzs7XG5pb191cmluZy9pb191cmluZy5oOjI3MjpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzMtXHRcdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI5Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaW9fZmlsbF9jcWVfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzEwLVx0bWVtY3B5KGNxZSwgXHUwMDI2cmVxLVx1MDAzZWNxZSwgc2l6ZW9mKCpjcWUpKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzExOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyIHx8IGlzX2NxZTMyKSB7XG5pb191cmluZy9pb191cmluZy5oLTMxMi1cdFx0bWVtY3B5KGNxZS1cdTAwM2ViaWdfY3FlLCBcdTAwMjZyZXEtXHUwMDNlYmlnX2NxZSwgc2l6ZW9mKCpjcWUpKTtcbi0tXG5pb191cmluZy9tc2dfcmluZy5jPTk2PXN0YXRpYyBpbnQgaW9fbXNnX3JpbmdfY3FlX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqdGFyZ2V0X2N0eCxcbi0tXG5pb191cmluZy9tc2dfcmluZy5jLTEwNS1cdGlmICgoKmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIpIFx1MDAyNlx1MDAyNlxuaW9fdXJpbmcvbXNnX3JpbmcuYzoxMDY6XHQgICAgISh0YXJnZXRfY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA3LVx0XHRcdFx0ICAgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuLS1cbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25vcC5jLTQ5LVxuaW9fdXJpbmcvbm9wLmM6NTA6XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy9ub3AuYy01MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk0LSNkZWZpbmUgQ09QWV9GTEFHU1x0KElPUklOR19TRVRVUF9OT19TUUFSUkFZIHwgSU9SSU5HX1NFVFVQX1NRRTEyOCB8IFxcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5NTpcdFx0XHQgSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX05PX01NQVAgfCBcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTYtXHRcdFx0IElPUklOR19TRVRVUF9DUUVfTUlYRUQgfCBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjQ5LVx0XHRkc3RfbWFzayA9IHAtXHUwMDNlY3FfZW50cmllcyAtIDE7XG5pb191cmluZy9yZWdpc3Rlci5jOjY1MDpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9yZWdpc3Rlci5jLTY1MS1cdFx0XHRpbmRleCBcdTAwM2NcdTAwM2M9IDE7XG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MjQzPWludCBpb191cmluZ19jbWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0yNTktXHRcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfU1FFMTI4O1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6MjYwOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjYxLVx0XHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX0NRRTMyO1xuLS1cbmlvX3VyaW5nL3pjcnguYz04MzE9c3RhdGljIGludCBpbXBvcnRfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy96Y3J4LmMtODQxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL3pjcnguYzo4NDI6XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvemNyeC5jLTg0My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTk2MT1pbnQgaW9fcmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy96Y3J4LmMtOTgxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmlvX3VyaW5nL3pjcnguYzo5ODI6XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvemNyeC5jLTk4My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBpb191cmluZyBDUUUgSGFuZGxpbmcgaW4gZmRpbmZvLmMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBpb191cmluZy9mZGluZm8uY2AsIHNwZWNpZmljYWxseSBob3cgdGhlIENRRXMgKENvbXBsZXRpb24gUXVldWUgRW50cmllcykgYXJlIGhhbmRsZWQuIEkgc2VlIHRoaXMgY2hlY2s6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gVGhhdCBmbGFncyB0aGUgbGFzdCBzbG90IG9mIHRoZSBjaXJjdWxhciBhcnJheS4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgZnVuY3Rpb24uCgpJIHNlZSBpbiBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgdGhhdCB3aGVuIFNRRXMgKFN1Ym1pc3Npb24gUXVldWUgRW50cmllcykgYXJlIGJlaW5nIHBhcnNlZCwgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYElPUklOR19TRVRVUF9TUUVfTUlYRURgLiBJZiB0aGF0IGZsYWcgaXNuJiMzOTt0IHNldCwgYW5kIGEgMTI4QiBTUUUgaXMgZW5jb3VudGVyZWQsIGl0JiMzOTtzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIFRoZXJlJiMzOTtzIGFsc28gYSBjaGVjayB0byBlbnN1cmUgdGhhdCBhIDEyOEIgZW50cnkgZG9lc24mIzM5O3Qgd3JhcCBhcm91bmQgdGhlIGFycmF5LgoKTm93LCBsb29raW5nIGF0IHRoZSBDUUUgcHJvY2Vzc2luZywgSSBzZWUgdGhpcyBsb29wIHdoZXJlIGBjcWVgIGlzIHB1bGxlZCBmcm9tIHRoZSByaW5nOiBgY3FlID0gJmFtcDtyLSZndDtjcWVzWyhjcV9oZWFkICZhbXA7IGNxX21hc2spXTtgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgYGNxZTMyYCBmbGFnIGFuZCB0aGUgY29uZGl0aW9uYWwgcHJpbnRpbmcgb2YgYGNxZS0mZ3Q7YmlnX2NxZVswXWAgYW5kIGBjcWUtJmd0O2JpZ19jcWVbMV1gIHdoZW4gaXQmIzM5O3Mgc2V0LiBUaGlzIGluZGljYXRlcyBhIDMyLWJpdCBDUUUgKGxhcmdlciB0aGFuIG5vcm1hbCksIHV0aWxpemluZyB0aGUgYGJpZ19jcWVgIGZpZWxkcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIHVzZWQgdG8gc2tpcCB0aGUgYGJpZ19jcWVgIGZpZWxkcyBpZiBpdCYjMzk7cyB0aGUgbGFzdCBzbG90LgoKSG93ZXZlciwgdGhlIGxpbmU6IGBpZiAoY3FlMzIpIHNlcV9wcmludGYobSwgJiMzNDssIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdSYjMzQ7LCBjcWUtJmd0O2JpZ19jcWVbMF0sIGNxZS0mZ3Q7YmlnX2NxZVsxXSk7YCBjb25jZXJucyBtZSBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgdGhvc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBldmVuIGlmIHRoZSBDUUUgaXMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5LiBUaGlzIGlzIHJlYWxseSBpbnRlcmVzdGluZyBhbmQgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgYSByZWFkIG91dCBvZiBib3VuZHMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJpZ19jcWVgICphY3R1YWxseSBpcyouIEl0JiMzOTtzIGxpa2VseSBhIHVuaW9uIG9mIHNvbWUga2luZCwgYW5kIEkgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gTGV0JiMzOTtzIGdyZXAgZm9yIHRoYXQgdG8gY29uZmlybSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWVzLCBwb3RlbnRpYWxseS4gSXQgZmVlbHMgbGlrZSBhIHN1YnRsZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlnX2NxZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTUwMD1zdHJ1Y3QgaW9fdXJpbmdfY3FlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC01MDgtXHQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjUwOTpcdF9fdTY0IGJpZ19jcWVbXTtcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTUxMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEwMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqaW9fdXJpbmcgQ1FFIE91dC1vZi1Cb3VuZHMgQWNjZXNzIC0gV29ydGh5IG9mIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYGlvX3VyaW5nX2NxZWAgc3RydWN0dXJlIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBUaGUgZmxleGlibGUgYXJyYXkgbWVtYmVyLCBgYmlnX2NxZWAsIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gSWYgYGNxZTMyYCBpcyB0cnVlLCBpdCYjMzk7cyBhIDMyLWJ5dGUgQ1FFLCBhbmQgYWNjZXNzaW5nIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYCBlZmZlY3RpdmVseSAqb3ZlcmxheXMqIHRoZSBuZXh0IENRRSBzbG90LCBgY3FlICYjNDM7IDFgLCB3aXRoaW4gdGhlIGByLSZndDtjcWVzW11gIGFycmF5LiBOb3csIHRoZSBjb2RlJiMzOTtzIGxvZ2ljIGhhcyBhIGNvbmRpdGlvbjogSWYgYGNxX2hlYWQgJmFtcDsgY3FfbWFzayA9PSBjcV9tYXNrYCwgdGhlbiBgY3FlYCBwb2ludHMgdG8gdGhlIGxhc3QgZWxlbWVudC4gQ29uc2VxdWVudGx5LCBhY2Nlc3NpbmcgYGNxZS0mZ3Q7YmlnX2NxZVswXWAgd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCkhhbmcgb24uLi4gSSBzZWUgYSBwYXRjaCB0b3VjaGluZyB0aGlzIGNvZGUhIEl0IGludHJvZHVjZXMgYSBjaGVjazogYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKWAuIEhvbGQgb24uLi4gVGhlIG9yaWdpbmFsIGNvbXBhcmlzb24gd2FzIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKSA9PSBjcV9tYXNrYC4gVGhlIGNyaXRpY2FsIGRpZmZlcmVuY2UgaXMgdGhlIGNoYW5nZSBmcm9tIGVxdWFsaXR5IHRvIGAoY3FfaGVhZCA9PSBjcV9tYXNrKWAhICBgY3FfaGVhZGAgc3RhcnRzIGF0IHplcm8gYW5kIGluY3JlbWVudHMuIFRoaXMgYChjcV9oZWFkID09IGNxX21hc2spYCB3aWxsIGJlIGZhbHNlIGV2ZW4gaWYgdGhlIG9yaWdpbmFsIGNvbmRpdGlvbiBpcyB0cnVlLiBJcyB0aGlzIGEgYnVnPyBJdCBpcyBhIGNoYW5nZSB0byBjb3JlIGNvZGU6IGBpb191cmluZy9mZGluZm8uY2AuCgpOb3csIGFjY29yZGluZyB0byB0aGUgZnV6emluZyBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcuJiMzNDsgTGV0JiMzOTtzIGFwcGx5IHRoZSBjcml0ZXJpYS4KClRoZSB0cmlhZ2UgcGhpbG9zb3BoeSBjbGVhcmx5IHN0YXRlcyB0aGF0OgoKMS4gIFJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiBUaGUgY29kZSBuZWVkcyB0byBiZSBleGVjdXRhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCjIuICBJIHNob3VsZCBuZXZlciBibGluZGx5IHRydXN0ICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvcmUuCjMuICBOZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBNVVNUIGJlIGZ1enplZC4KCkFuZCBzcGVjaWZpY2FsbHk6IEkmIzM5O20gbG9va2luZyBmb3IgKkNvcmUgU3Vic3lzdGVtcyosICpSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHMqLCAqUnVudGltZSBBc3NlcnRpb25zKiwgb3IgKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMqLiBBbnl0aGluZyB0aGF0IHRvdWNoZXMgdGhlICpjb3JlKiAobW0sIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZykgaXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlLiBUaGlzIHRvdWNoZXMgc3lzY2FsbCBoYW5kbGluZyAtIGFuZCBhc3luYyBJL08uCgpPa2F5LCBgaW9fdXJpbmdgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbS4gYGlvX3VyaW5nL2ZkaW5mby5jYCBpcyByZWFjaGFibGUgdmlhIGAvcHJvYy9bcGlkXS9mZGluZm8vW2lvX3VyaW5nX2ZkXWAuIFN5emthbGxlciAqZXh0ZW5zaXZlbHkqIHRlc3RzIGlvX3VyaW5nLCBhbmQgdGhpcyBgL3Byb2Mvc2VsZi9mZGluZm9gIHRoaW5nIGlzIGEgc3RhbmRhcmQsIHJlYWNoYWJsZSBvcGVyYXRpb24uIEkga25vdyBzeXprYWxsZXIgY2FuIHJlYWQgdGhlc2UgZmRpbmZvIGZpbGVzIC0gaXQgZ2VuZXJhdGVzIGNhbGxzIGxpa2UgYHJlYWQob3BlbigmIzM0Oy9wcm9jL3NlbGYvZmRpbmZvLy4uLiYjMzQ7KSlgLiBgaW9fdXJpbmdgICppcyogcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiAgT3BlbmluZyBgL3Byb2Mvc2VsZi9mZGluZm8vJmx0O2ZkJmd0O2Agd2hlcmUgYCZsdDtmZCZndDtgIGlzIGFuIGlvX3VyaW5nIGZkLCBhbmQgcmVhZGluZyBmcm9tIGl0LCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSwgdG8gY29uZmlybSBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIGNvbXBpbGVkIGluLiBZZXAuICBgaW9fdXJpbmcvZmRpbmZvLmNgIGlzIHJpZ2h0IHRoZXJlIGluIGBpb191cmluZy9NYWtlZmlsZWAuCgpUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIGFuZCB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZSBjb2RlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoaXMgcGF0Y2ggKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbmlvX3VyaW5nL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9cbmlvX3VyaW5nL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICYjNDM7PSBtb2NrX2ZpbGUub1xuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTE0LSNpbmNsdWRlIFwmIzM0O3NxcG9sbC5oXCYjMzQ7XG5pb191cmluZy9mZGluZm8uYzoxNTojaW5jbHVkZSBcJiMzNDtmZGluZm8uaFwmIzM0O1xuaW9fdXJpbmcvZmRpbmZvLmMtMTYtI2luY2x1ZGUgXCYjMzQ7Y2FuY2VsLmhcJiMzNDtcbi0tXG5pb191cmluZy9mZGluZm8uYy0yMC0jaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbmlvX3VyaW5nL2ZkaW5mby5jOjIxOnN0YXRpYyBfX2NvbGQgdm9pZCBjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG5pb191cmluZy9mZGluZm8uYy0yMi1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzZXFfZmlsZSAqbSxcbi0tXG5pb191cmluZy9mZGluZm8uYy0zMy1cbmlvX3VyaW5nL2ZkaW5mby5jOjM0OnN0YXRpYyBfX2NvbGQgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvZmRpbmZvLmMtMzUtXHRcdFx0XHQgICAgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTQzLVx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX0RZTkFNSUM6XG5pb191cmluZy9mZGluZm8uYzo0NDpcdFx0Y29tbW9uX3RyYWNraW5nX3Nob3dfZmRpbmZvKGN0eCwgbSwgXCYjMzQ7ZHluYW1pY1wmIzM0Oyk7XG5pb191cmluZy9mZGluZm8uYy00NS1cdFx0YnJlYWs7XG5pb191cmluZy9mZGluZm8uYy00Ni1cdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19TVEFUSUM6XG5pb191cmluZy9mZGluZm8uYzo0NzpcdFx0Y29tbW9uX3RyYWNraW5nX3Nob3dfZmRpbmZvKGN0eCwgbSwgXCYjMzQ7c3RhdGljXCYjMzQ7KTtcbmlvX3VyaW5nL2ZkaW5mby5jLTQ4LVx0XHRicmVhaztcbi0tXG5pb191cmluZy9mZGluZm8uYy01My0jZWxzZVxuaW9fdXJpbmcvZmRpbmZvLmM6NTQ6c3RhdGljIGlubGluZSB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG5pb191cmluZy9mZGluZm8uYy01NS1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxuaW9fdXJpbmcvZmRpbmZvLmMtNTktXG5pb191cmluZy9mZGluZm8uYzo2MDpzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG5pb191cmluZy9mZGluZm8uYy02MS17XG4tLVxuaW9fdXJpbmcvZmRpbmZvLmMtMjUzLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG5pb191cmluZy9mZGluZm8uYzoyNTQ6XHRuYXBpX3Nob3dfZmRpbmZvKGN0eCwgbSk7XG5pb191cmluZy9mZGluZm8uYy0yNTUtfVxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTI2MC0gKi9cbmlvX3VyaW5nL2ZkaW5mby5jOjI2MTpfX2NvbGQgdm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxlKVxuaW9fdXJpbmcvZmRpbmZvLmMtMjYyLXtcbi0tXG5pb191cmluZy9mZGluZm8uYy0yNjYtXHQgKiBBdm9pZCBBQkJBIGRlYWRsb2NrIGJldHdlZW4gdGhlIHNlcSBsb2NrIGFuZCB0aGUgaW9fdXJpbmcgbXV0ZXgsXG5pb191cmluZy9mZGluZm8uYzoyNjc6XHQgKiBzaW5jZSBmZGluZm8gY2FzZSBncmFicyBpdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIG5vcm1hbCB1c2VcbmlvX3VyaW5nL2ZkaW5mby5jLTI2OC1cdCAqIGNhc2VzLlxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTI3MC1cdGlmIChtdXRleF90cnlsb2NrKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKSkge1xuaW9fdXJpbmcvZmRpbmZvLmM6MjcxOlx0XHRfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKGN0eCwgbSk7XG5pb191cmluZy9mZGluZm8uYy0yNzItXHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4tLVxuaW9fdXJpbmcvZmRpbmZvLmgtMi1cbmlvX3VyaW5nL2ZkaW5mby5oOjM6dm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc3LSNpbmNsdWRlIFwmIzM0O3NxcG9sbC5oXCYjMzQ7XG5pb191cmluZy9pb191cmluZy5jOjc4OiNpbmNsdWRlIFwmIzM0O2ZkaW5mby5oXCYjMzQ7XG5pb191cmluZy9pb191cmluZy5jLTc5LSNpbmNsdWRlIFwmIzM0O2tidWYuaFwmIzM0O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpb191cmluZ19mb3BzID0ge1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwNy0jaWZkZWYgQ09ORklHX1BST0NfRlNcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcwODpcdC5zaG93X2ZkaW5mb1x0PSBpb191cmluZ19zaG93X2ZkaW5mbyxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwOS0jZW5kaWZcbi0tXG5pb191cmluZy9vcGRlZi5jLTE2LSNpbmNsdWRlIFwmIzM0O3NxcG9sbC5oXCYjMzQ7XG5pb191cmluZy9vcGRlZi5jOjE3OiNpbmNsdWRlIFwmIzM0O2ZkaW5mby5oXCYjMzQ7XG5pb191cmluZy9vcGRlZi5jLTE4LSNpbmNsdWRlIFwmIzM0O2tidWYuaFwmIzM0O1xuLS1cbmlvX3VyaW5nL3NxcG9sbC5jPTI4NT1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxuLS1cbmlvX3VyaW5nL3NxcG9sbC5jLTMwNC1cbmlvX3VyaW5nL3NxcG9sbC5jOjMwNTpcdC8qIHJlc2V0IHRvIG91ciBwaWQgYWZ0ZXIgd2UmIzM5O3ZlIHNldCB0YXNrX2NvbW0sIGZvciBmZGluZm8gKi9cbmlvX3VyaW5nL3NxcG9sbC5jLTMwNi1cdHNxZC1cdTAwM2V0YXNrX3BpZCA9IGN1cnJlbnQtXHUwMDNlcGlkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA0NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhpcywgY29uc2lkZXJpbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6CgoqKklPX1VSSU5HIE1vZHVsZSBCdWlsZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9gIGluIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBtZWFuaW5nIHRoYXQgdGhlIGBmZGluZm8ub2Agb2JqZWN0IGZpbGUgd2l0aGluIGBpb191cmluZ2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19QUk9DX0ZTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uICBJdCBtYWtlcyBzZW5zZTsgYGZkaW5mb2AgbGlrZWx5IGludGVyYWN0cyB3aXRoIHRoZSBwcm9jIGZpbGVzeXN0ZW0gdG8gcHJvdmlkZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGRlcGVuZGVuY3kuCgpOb3csIGlmIEkgd2FudCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYENPTkZJR19QUk9DX0ZTYCBpcyBkZWZpbmVkIGZvciBgaW9fdXJpbmdgLCBJJiMzOTtsbCBjaGVjayBpbiB0aGUgYEtjb25maWdgIGZpbGVzLiBQcm9iYWJseSBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gdHJhY2UgdXBzdHJlYW0gdG8gYGluaXQvS2NvbmZpZ2AgaWYgaXQmIzM5O3MgaW5oZXJpdGVkIG9yIGRlZmluZWQgZ2VuZXJhbGx5LiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdGhlcmUuLi4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9yIGlmIGl0IGlzIGJlaW5nIGRlZmluZWQgYXMgYSBidWlsZCB0YXJnZXQgaW4gYW55IGBLY29uZmlnYCBmaWxlcy4gVGhhdCB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGBpb191cmluZ2AgbW9kdWxlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk1Mj1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5NTktXG5pbml0L0tjb25maWc6MTk2MDpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYxLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTk2OT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5ODEtXG5pbml0L0tjb25maWc6MTk4Mjpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk4My1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSU9fVVJJTkdgIGlzIHByb3Blcmx5IGVuYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoYXQgaW4gYGluaXQvS2NvbmZpZ2AuIEl0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgYW55IGZlYXR1cmUgZW5hYmxlZCBvciBkaXNhYmxlZCB0aGF0IGlzIGluaXRpYWxpemVkIGVhcmx5LiBOb3csIGxldCYjMzk7cyBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDE5NjAuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgdW5kZXIgdGhlIHNlY3Rpb24gcmVsYXRpbmcgdG8gYmxvY2sgZGV2aWNlcyBvciBzdG9yYWdlIGRyaXZlcnMgaWYgbWVtb3J5IHNlcnZlcy4gSSBqdXN0IG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHN0YXR1cy4gVGhlbiwgSSBjYW4gbW92ZSBvbiB0byBvdGhlciBhcmVhcyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgSU9fVVJJTkcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTU1Olx0XHRoZWxwXG4xOTU2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZFxuMTk1NzpcdFx0ICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmdcbjE5NTg6XHRcdCAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suXG4xOTU5Olx0XG4xOTYwOlx0Y29uZmlnIElPX1VSSU5HXG4xOTYxOlx0XHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuMTk2MjpcdFx0c2VsZWN0IElPX1dRXG4xOTYzOlx0XHRkZWZhdWx0IHlcbjE5NjQ6XHRcdGhlbHBcbjE5NjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgaW9fdXJpbmcgaW50ZXJmYWNlLCBlbmFibGluZ1xuMTk2NjpcdFx0ICBhcHBsaWNhdGlvbnMgdG8gc3VibWl0IGFuZCBjb21wbGV0ZSBJTyB0aHJvdWdoIHN1Ym1pc3Npb24gYW5kXG4xOTY3Olx0XHQgIGNvbXBsZXRpb24gcmluZ3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgYXBwbGljYXRpb24uXG4xOTY4Olx0XG4xOTY5Olx0Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuMTk3MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuMTk3MTpcdFx0ZGVwZW5kcyBvbiBJT19VUklORyBcdTAwMjZcdTAwMjYgR0NPVl9LRVJORUxcbjE5NzI6XHRcdGhlbHBcbjE5NzM6XHRcdCAgRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHRvIGZhY2lsaXRhdGVcbjE5NzQ6XHRcdCAgY29kZSBjb3ZlcmFnZSB0ZXN0aW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgUHJvYyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYENPTkZJR19QUk9DX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggSSBrbm93IGlzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIGxpc3RlZCBpbiBgZnMvcHJvYy9LY29uZmlnYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGF0IGBLY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW55IHJlbGV2YW50IGhlbHAgdGV4dCwgYW5kIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBgQ09ORklHX1BST0NfRlNgIHRvIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gb3IgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJIHdhbnQgdG8gc2VlIHdoYXQgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBiZWZvcmUgdGhpcyBvcHRpb24gaXMgZXZlbiBwcmVzZW50ZWQgYW5kIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFBST0NfRlNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1c1xuICAgNzpcdFx0ICBvZiB0aGUgc3lzdGVtLiBcJiMzNDtWaXJ0dWFsXCYjMzQ7IG1lYW5zIHRoYXQgaXQgZG9lc24mIzM5O3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cbiAgIDg6XHRcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxuICAgOTpcdFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcbiAgMTA6XHRcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0JiMzOTtzIHRvdGFsbHkgY29vbDsgZm9yIGV4YW1wbGUsIFwmIzM0O2NhdCAvcHJvYy9pbnRlcnJ1cHRzXCYjMzQ7IGdpdmVzXG4gIDEzOlx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XG4gIDE0Olx0XHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXG4gIDE1Olx0XHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJiMzOTtzIGF0dGVudGlvbiAtLVxuICAxNjpcdFx0ICBvZnRlbiBhIHNvdXJjZSBvZiB0cm91YmxlIGlmIHR3byBkZXZpY2VzIGFyZSBtaXN0YWtlbmx5IGNvbmZpZ3VyZWRcbiAgMTc6XHRcdCAgdG8gdXNlIHRoZSBzYW1lIElSUSkuIFRoZSBwcm9ncmFtIHByb2NpbmZvIHRvIGRpc3BsYXkgc29tZVxuICAxODpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBnYXRoZXJlZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSAvcHJvYyBmaWxlIHN5c3RlbSwgaXQgaGFzIHRvIGJlIG1vdW50ZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIENRRSBBcnJheSBPdXQtb2YtQm91bmRzIGluIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgSU9fVVJJTkdgIHBhdGNoLCBhbmQgZmlyc3QgdGhpbmdzIGZpcnN0LCBgSU9fVVJJTkdgIGFuZCBgUFJPQ19GU2AgYXJlIHN0YW5kYXJkIGNvbmZpZ3MsIHNvIHRoYXQgcGFydCBsb29rcyBnb29kLiBOb3csIGxldCYjMzk7cyBzZWUsIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgaW9fdXJpbmdfc2hvd19mZGluZm9gLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEkgbmVlZCB0byBmb2N1cyBvbiBrZXkgc3ltYm9scyBoZXJlLiBJIHNlZSB0aGF0IGBpb191cmluZ19zaG93X2ZkaW5mb2AgaXMgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQvY2FsbGVkIGZyb20gYGlvX3VyaW5nX2ZvcHMuc2hvd19mZGluZm9gLiBBbmQgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gICppcyogc3RhdGljLiBUaGUgcXVlc3Rpb24gaXMgY2FuIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBiZSBpbmxpbmVkPwoKSXQgb25seSBoYXMgb25lIGNhbGxlciwgc28gaW5saW5pbmcgaXQgbG9va3MgZmVhc2libGUuIExpc3RpbmcgYm90aCBmdW5jdGlvbnMsIG9yIGp1c3QgdGhlIG5vbi1zdGF0aWMgb25lLCBpcyBpZGVhbC4gV2FpdCwgYWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBgaW9fdXJpbmdfc2hvd19mZGluZm9gICppcyogdGhlIEFQSSBlbnRyeXBvaW50IGFuZCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLgoKT2theSwgbm93IGxldCYjMzk7cyBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgcGF0Y2ggaXRzZWxmLCBiZWNhdXNlIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBIZXJlJiMzOTtzIHRoZSByZWxldmFudCBjb2RlOgoKYGBgYwpAQCAtMTU1LDkgJiM0MzsxNTUsMTEgQEAgc3RhdGljIHZvaWQgX19pb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHNlcV9maWxlICptKQogCWZvciAoaSA9IDA7IGkgJmx0OyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7CiAJCWJvb2wgY3FlMzIgPSBmYWxzZTsKJiM0MzsJCWJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTsKIAogCQljcWUgPSAmYW1wO3ItJmd0O2NxZXNbKGNxX2hlYWQgJmFtcDsgY3FfbWFzayldOwotCQlpZiAoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpCiYjNDM7CQlpZiAoKGNxZS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0NRRTMyKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KQogCQkJY3FlMzIgPSB0cnVlOwogCQlzZXFfcHJpbnRmKG0sICYjMzQ7JTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleCYjMzQ7LAogCQkJICAgY3FfaGVhZCAmYW1wOyBjcV9tYXNrLCBjcWUtJmd0O3VzZXJfZGF0YSwgY3FlLSZndDtyZXMsCmBgYAoKSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgY2hlY2s6IGBjcV9oZWFkID09IGNxX21hc2tgLiBSZW1lbWJlciwgYGNxX21hc2tgIGlzIGBjdHgtJmd0O2NxX2VudHJpZXMgLSAxYCwgYW5kIGBjcV9oZWFkYCBpcyBhIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIHJpbmcgYnVmZmVyIGhlYWQuIFNvLCB3aGVuIGBjcV9oZWFkYCBoaXRzIHRoZSBsYXN0IHNsb3QgKGBjcV9tYXNrYCksIHRoZSBjb25kaXRpb24gYGNxX2hlYWQgPT0gY3FfbWFza2AgaXMgKnRydWUqLiBCdXQgd2hlbiBgY3FfaGVhZGAgd3JhcHMgYXJvdW5kIHRvIHRoZSBiZWdpbm5pbmcsIGl0JiMzOTtzICpmYWxzZSogZXZlbiB0aG91Z2ggdGhlIGluZGV4IGlzIHRoZSBzYW1lLiBOb3csICppZiogYGlzX2xhc3RfY3FhcnJheV9zbG90YCBpcyBmYWxzZSAqYW5kKiBgY3FlMzJgIGlzIHRydWUgYXQgdGhlIGxhc3Qgc2xvdC4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIGJhZCEKCklmIGBjcWUzMmAgaXMgdHJ1ZSwgYW5kIHdlIGFyZSBub3QgaW4gdGhlIGxhc3Qgc2xvdCwgdGhlIGNvZGUgdGhlbiByZWZlcmVuY2VzIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYC4uLiB0aGF0JiMzOTtzICpiZXlvbmQqIHRoZSBib3VuZHMgb2YgYHItJmd0O2NxZXNgISBJdCBzZWVtcyB0byBoYXZlIGJlZW4gYWRkZWQgdG8gaGFuZGxlIDMyIGJ5dGUgQ1FFcy4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBDUUUgZW50cmllcyBjYW4gd3JhcCBpbiBhIHJpbmcsIHNvIGlmIHRoZSBmbGFnIGlzIHNldCBhbmQgd2UgYXJlIGF0IHRoZSBsYXN0IGFycmF5IHNsb3QsIHdlIGFyZSAqbm90KiBnb2luZyB0byBzZXQgY3FlMzIgdG8gdHJ1ZSwgc28gd2UgYXJlIG9rLCBidXQgaWYgd2UgYXJlICpub3QqIGF0IHRoZSBsYXN0IGFycmF5IHNsb3QsIGFuZCBpdCBpcyAzMiBieXRlcy4uLgoKTm93IHdhaXQgYSBtaW51dGUhIElmIGBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMmAsIHRoZSBDUUUgV0FTIDMyIGJ5dGVzLCByaWdodD8gQnV0IGhvbGQgb24sIGNhbiBpb191cmluZyBDUUUzMiBlbnRyaWVzICp3cmFwKiBpbiB0aGUgcmluZz8gQW5kIGlmIHNvLCBob3cgaXMgaXQgaGFuZGxlZCBvbiBDUUUgYWxsb2NhdGlvbiBpbiBgaW9fY3FlX2NhY2hlX3JlZmlsbGAgb3IgZWxzZXdoZXJlPyBJIG5lZWQgdG8gY2hlY2sgaG93IENRRTMyIGlzIGhhbmRsZWQgd2hlbiBhbGxvY2F0aW5nIGVudHJpZXMsIHRoYXQmIzM5O3Mga2V5LiBXZSYjMzk7dmUgZ290IGEgbGlrZWx5IGFycmF5IG91dC1vZi1ib3VuZHMgc2l0dWF0aW9uIGhlcmUsIGFuZCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGludG8gdGhlIENRRSBhbGxvY2F0aW9uIGFuZCByaW5nIGJ1ZmZlciBtZWNoYW5pY3MgaW4gYGlvX3VyaW5nLmNgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9SSU5HX1NFVFVQX0NRRTMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzMi1cdFx0aWYgKG9jcWUtXHUwMDNlY3FlLmZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NTMzOlx0XHQgICAgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVx0XHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jLTUzNi1cdFx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1Mzc6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM4LVx0XHRcdGlzX2NxZTMyID0gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NTktXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXHRcdGlzX2NxZTMyID0gdHJ1ZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTcxOD1ib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXG5pb191cmluZy9pb191cmluZy5jOjc0ODpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDktXHRcdG9mZiBcdTAwM2NcdTAwM2M9IDE7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjItXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDc4PXN0YXRpYyBpbnQgcmluZ3Nfc2l6ZSh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzcV9lbnRyaWVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cdG9mZiA9IHN0cnVjdF9zaXplKHJpbmdzLCBjcWVzLCBjcV9lbnRyaWVzKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEwNTpcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA2LVx0XHRvZmYgPSBzaXplX211bChvZmYsIDIpO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cdCAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM2Olx0aWYgKChmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNzpcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJpbmcgQnVmZmVyIE1lbW9yeSBBbGxvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcmluZyBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYy4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYHJpbmdzX3NpemVgIGlzIGNhbGN1bGF0ZWQuIFNwZWNpZmljYWxseSwgaWYgYElPUklOR19TRVRVUF9DUUUzMmAgaXMgc2V0LCB0aGUgYHJpbmdzYCBidWZmZXIgZWZmZWN0aXZlbHkgZG91YmxlcyBpdHMgc2l6ZSBmb3IgdGhlIGBjcWVzYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBoYWRuJiMzOTt0IGV4cGxpY2l0bHkgdGhvdWdodCBhYm91dCB0aGF0LCBidXQgaXQgbWFrZXMgc2Vuc2Ug4oCTIGl0JiMzOTtzIGFsbG9jYXRpbmcgc3BhY2UgZm9yIDMyLWJpdCBDUUVzIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCA2NC1iaXQgb25lcywgd2hpY2ggbWVhbnMgbW9yZSBlbnRyaWVzIGluIHRoZSBDUSByaW5nIGNhbiBiZSB0cmFja2VkLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGA/IFRoYXQgc2V0dXAgb3B0aW9uIGluZGljYXRlcyBDUUVzIGFyZSBvZiBtaXhlZCBzaXplcy4gVGhhdCBtZWFucyB0aGUgZG91YmxpbmcgaXMgY29udGluZ2VudCBvbiB0aGUgZmxhZyAqbm90KiBiZWluZyBtaXhlZCBzaXplcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB3b3JrcyBpbiB0aGF0IHNjZW5hcmlvLCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3Igb2NjdXJyZW5jZXMgb2YgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gaXMgbW9kaWZpZWQgd2hlbiBtaXhlZCBDUUUgc2l6ZXMgYXJlIGVuYWJsZWQgc28gSSBkb24mIzM5O3QgaW50cm9kdWNlIGVycm9ycyBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJT1JJTkdfU0VUVVBfQ1FFX01JWEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjItXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMDc4PXN0YXRpYyBpbnQgcmluZ3Nfc2l6ZSh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzcV9lbnRyaWVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4NC1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjA4NTpcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDg2LVx0XHRpZiAoY3FfZW50cmllcyBcdTAwM2MgMilcbi0tXG5pb191cmluZy9pb191cmluZy5jPTI3ODg9c3RhdGljIGludCBpb191cmluZ19zYW5pdGlzZV9wYXJhbXMoc3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTI4MzUtXHQgKi9cbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNjpcdGlmICgoZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpID09XG5pb191cmluZy9pb191cmluZy5jOjI4Mzc6XHQgICAgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC03Mi1cdFx0XHRJT1JJTkdfU0VUVVBfSFlCUklEX0lPUE9MTCB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NzM6XHRcdFx0SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzQtXHRcdFx0SU9SSU5HX1NFVFVQX1NRRV9NSVhFRCB8XFxcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZV9vdmVyZmxvdyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI3My1cdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzQ6XHR9IGVsc2UgaWYgKGNxZTMyIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjc1LVx0XHRjdHgtXHUwMDNlY3FlX2NhY2hlZCYjNDM7JiM0Mzs7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yODg9c3RhdGljIGlubGluZSBib29sIGlvX2RlZmVyX2dldF91bmNvbW1pdGVkX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI5My1cdGN0eC1cdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDoyOTQ6XHRyZXR1cm4gaW9fZ2V0X2NxZShjdHgsIGNxZV9yZXQsIGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCk7XG5pb191cmluZy9pb191cmluZy5oLTI5NS19XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMzY9c3RhdGljIGlubGluZSB1MzIgY3R4X2NxZTMyX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzcte1xuaW9fdXJpbmcvaW9fdXJpbmcuaDozMzg6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzktXHRcdHJldHVybiBJT1JJTkdfQ1FFX0ZfMzI7XG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXG4tLVxuaW9fdXJpbmcvbXNnX3JpbmcuYy0xMDYtXHQgICAgISh0YXJnZXRfY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHxcbmlvX3VyaW5nL21zZ19yaW5nLmM6MTA3Olx0XHRcdFx0ICAgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvbXNnX3JpbmcuYy0xMDgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL25vcC5jLTQ5LVxuaW9fdXJpbmcvbm9wLmM6NTA6XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy9ub3AuYy01MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk1LVx0XHRcdCBJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfTk9fTU1BUCB8IFxcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5NjpcdFx0XHQgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8IElPUklOR19TRVRVUF9TUUVfTUlYRUQpXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ny1cbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0xNTI9dm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY2LVx0aWYgKGlzX2NxZTMyKSB7XG5pb191cmluZy91cmluZ19jbWQuYzoxNjc6XHRcdGlmIChyZXEtXHUwMDNlY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY4LVx0XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTI0Mz1pbnQgaW9fdXJpbmdfY21kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjU5LVx0XHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX1NRRTEyODtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjI2MDpcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI2MS1cdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9DUUUzMjtcbi0tXG5pb191cmluZy96Y3J4LmM9ODMxPXN0YXRpYyBpbnQgaW1wb3J0X3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTg0MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy96Y3J4LmM6ODQyOlx0aWYgKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL3pjcnguYy04NDMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL3pjcnguYz05NjE9aW50IGlvX3JlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTk4MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy96Y3J4LmM6OTgyOlx0aWYgKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL3pjcnguYy05ODMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL3pjcnguYz0xNjI4PXN0YXRpYyBib29sIGlvX3pjcnhfcXVldWVfY3FlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdixcbi0tXG5pb191cmluZy96Y3J4LmMtMTY0Mi1cdGNxZS1cdTAwM2VmbGFncyA9IElPUklOR19DUUVfRl9NT1JFO1xuaW9fdXJpbmcvemNyeC5jOjE2NDM6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxuaW9fdXJpbmcvemNyeC5jLTE2NDQtXHRcdGNxZS1cdTAwM2VmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBpb19jcWVfY2FjaGVfcmVmaWxsIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgY2xvc2VyIGxvb2sgYXQgYGlvX2NxZV9jYWNoZV9yZWZpbGxgLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBjb2RlYmFzZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW5zaWRlIGFuZCBvdXQuIExldCYjMzk7cyBwdWxsIHVwIGBpb191cmluZy9pb191cmluZy5jYCDigJMgc3BlY2lmaWNhbGx5IGxpbmVzIDcxNSB0aHJvdWdoIDc1NS4gVGhhdCBzaG91bGQgYmUgdGhlIHJlbGV2YW50IGJsb2NrIG9mIGNvZGUgSSYjMzk7bSBhZnRlci4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGNhY2hlIGlzIG1hbmFnZWQgYW5kIHJlcGxlbmlzaGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCBwb3RlbnRpYWxseSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBoZXJlLiBIb3BlZnVsbHksIEkmIzM5O2xsIGJlIGFibGUgdG8gc3BvdCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgYnkgZm9jdXNpbmcgb24gdGhpcyBzZWN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdCAqIGNvbnRyb2wgZGVwZW5kZW5jeSBpcyBlbm91Z2ggYXMgd2UmIzM5O3JlIHVzaW5nIFdSSVRFX09OQ0UgdG9cbiA3MTY6XHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxuIDcxNzpcdCAqL1xuIDcxODpcdGJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbiA3MTk6XHR7XG4gNzIwOlx0XHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzID0gY3R4LVx1MDAzZXJpbmdzO1xuIDcyMTpcdFx0dW5zaWduZWQgaW50IG9mZiA9IGN0eC1cdTAwM2VjYWNoZWRfY3FfdGFpbCBcdTAwMjYgKGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gMSk7XG4gNzIyOlx0XHR1bnNpZ25lZCBpbnQgZnJlZSwgbGVuO1xuIDcyMzpcdFxuIDcyNDpcdFx0LypcbiA3MjU6XHRcdCAqIFBvc3RpbmcgaW50byB0aGUgQ1Egd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBvdmVyZmxvd2VkIENRRXMgbWF5IGJyZWFrXG4gNzI2Olx0XHQgKiBvcmRlcmluZyBndWFyYW50ZWVzLCB3aGljaCB3aWxsIGFmZmVjdCBsaW5rcywgRl9NT1JFIHVzZXJzIGFuZCBtb3JlLlxuIDcyNzpcdFx0ICogRm9yY2Ugb3ZlcmZsb3cgdGhlIGNvbXBsZXRpb24uXG4gNzI4Olx0XHQgKi9cbiA3Mjk6XHRcdGlmICghb3ZlcmZsb3cgXHUwMDI2XHUwMDI2IChjdHgtXHUwMDNlY2hlY2tfY3EgXHUwMDI2IEJJVChJT19DSEVDS19DUV9PVkVSRkxPV19CSVQpKSlcbiA3MzA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczMTpcdFxuIDczMjpcdFx0LypcbiA3MzM6XHRcdCAqIFBvc3QgZHVtbXkgQ1FFIGlmIGEgMzJiIENRRSBpcyBuZWVkZWQgYW5kIHRoZXJlJiMzOTtzIG9ubHkgcm9vbSBmb3IgYVxuIDczNDpcdFx0ICogMTZiIENRRSBiZWZvcmUgdGhlIHJpbmcgd3JhcHMuXG4gNzM1Olx0XHQgKi9cbiA3MzY6XHRcdGlmIChjcWUzMiBcdTAwMjZcdTAwMjYgb2ZmICYjNDM7IDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXMpIHtcbiA3Mzc6XHRcdFx0aWYgKCFpb19maWxsX25vcF9jcWUoY3R4LCBvZmYpKVxuIDczODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA3Mzk6XHRcdFx0b2ZmID0gMDtcbiA3NDA6XHRcdH1cbiA3NDE6XHRcbiA3NDI6XHRcdGZyZWUgPSBjdHgtXHUwMDNlY3FfZW50cmllcyAtIGlvX2NxcmluZ19xdWV1ZWQoY3R4KTtcbiA3NDM6XHRcdC8qIHdlIG5lZWQgYSBjb250aWd1b3VzIHJhbmdlLCBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBhcnJheSBvZmZzZXQgKi9cbiA3NDQ6XHRcdGxlbiA9IG1pbihmcmVlLCBjdHgtXHUwMDNlY3FfZW50cmllcyAtIG9mZik7XG4gNzQ1Olx0XHRpZiAobGVuIFx1MDAzYyAoY3FlMzIgJiM0MzsgMSkpXG4gNzQ2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA3NDc6XHRcbiA3NDg6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuIDc0OTpcdFx0XHRvZmYgXHUwMDNjXHUwMDNjPSAxO1xuIDc1MDpcdFx0XHRsZW4gXHUwMDNjXHUwMDNjPSAxO1xuIDc1MTpcdFx0fVxuIDc1MjpcdFxuIDc1MzpcdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQgPSBcdTAwMjZyaW5ncy1cdTAwM2VjcWVzW29mZl07XG4gNzU0Olx0XHRjdHgtXHUwMDNlY3FlX3NlbnRpbmVsID0gY3R4LVx1MDAzZWNxZV9jYWNoZWQgJiM0MzsgbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBEZWVwIERpdmUgaW50byBhIFBvdGVudGlhbCBpb191cmluZyBPdXQtb2YtQm91bmRzIFJlYWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCBJIG5vdGljZWQgc29tZXRoaW5nIGFib3V0IGhvdyB0aGUgQ29tcGxldGlvbiBRdWV1ZSBFbnRyaWVzIChDUUVzKSBhcmUgaGFuZGxlZCB3aGVuIGBJT1JJTkdfU0VUVVBfQ1FFMzJgIGlzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHJpbmcgc2l6ZSBkb3VibGVzIGJlY2F1c2UgdGhlIGluZGV4IG1hdGggYG9mZiA9IHNpemVfbXVsKG9mZiwgMik7YCBzdWdnZXN0cyBgcmluZ3MtJmd0O2NxZXNgIGhhcyB0d2ljZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXMgYGNxX2VudHJpZXNgLiBUaGVuLCB0aGUgaW5kZXhpbmcgdXNlcyBgY3FfaGVhZCAmbHQ7Jmx0OyAxYC4gQnV0IHRoZW4gSSBub3RpY2VkIGEgcG90ZW50aWFsIHByb2JsZW0gd2hlbiBsb29raW5nIGF0IGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYC4gSXQgZG9lc24mIzM5O3QgdXNlIHRoZSBgJmx0OyZsdDsgMWAgc2hpZnQsIHVzaW5nIGAmYW1wOyBjcV9tYXNrYCBmb3IgaW5kZXhpbmcuIFRoYXQgc3Rvb2Qgb3V0LgoKVGhlbiBJIHJlY2FsbGVkIHRoYXQgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIHVzZXMgYGNxX2VudHJpZXNgIG5vdCBgMiAqIGNxX2VudHJpZXNgLiBPa2F5LCBzbyBhIDMyLWJpdCBDUUUsIGluZGljYXRlZCBieSBgY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzJgLCBvY2N1cGllcyB0d28gc2xvdHMuIE5vdywgbGluZSA3MzYgaW4gdGhlIGNvZGUgc2hvd3MgYSBjaGVjayB0aGF0IGlzIGNydWNpYWwuIElmIGEgMzJiIENRRSBpcyBuZWVkZWQsIGFuZCBgb2ZmICYjNDM7IDEgPT0gY3R4LSZndDtjcV9lbnRyaWVzYCAoaS5lLiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgcmluZyksIHRoZSBjb2RlIGZpbGxzIGEgTk9QIENRRSBhbmQgd3JhcHMgYXJvdW5kLiBUaGlzIG1lYW5zLCBhIDMyYiBDUUUgKnNob3VsZCogbmV2ZXIgYmUgYXQgdGhlIHZlcnkgbGFzdCBzbG90LiBBIE5PUCBDUUUgc2hvdWxkIGJlIHRoZXJlIGluc3RlYWQuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBpZiBzb21laG93IGEgdXNlciBvciBjb3JydXB0aW9uLCBvciBhIHJhY2UsIG9yIGlmIGAvcHJvYy8mbHQ7cGlkJmd0Oy9mZGluZm8vJmx0O2lvX3VyaW5nX2ZkJmd0O2AgcmVhZHMgdGhlIHdyb25nIHZhbHVlLCBwdXRzIGEgMzJiIENRRSBhdCBgY3FfbWFza2AsIHRoZW4gdGhlIGNvZGUgdHJpZXMgdG8gcmVhZCBgY3FlLSZndDtiaWdfY3FlWzBdYCBhbmQgYGNxZS0mZ3Q7YmlnX2NxZVsxXWAuLi4gd2hpY2ggaXMgKm91dC1vZi1ib3VuZHMqIGJlY2F1c2UgaXQmIzM5O3MgcmVhZGluZyBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgYHItJmd0O2NxZXNgIGFycmF5LgoKQW5kIHRoZW4gSSBzYXcgdGhlIGF1dGhvciYjMzk7cyBjb2RlOiBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO2AuIEhvbGQgb24uIGBjcV9oZWFkYCBpc24mIzM5O3QgbWFza2VkISBgY3FfaGVhZGAgY2FuIGJlIDE2LCAzMiwgNDguLi4gYW5kIGBjcV9tYXNrYCBpcyAxNSBpbiB0aGlzIGNhc2UuIFRoZSBhdXRob3Igc2hvdWxkIGhhdmUgd3JpdHRlbiBgKGNxX2hlYWQgJmFtcDsgY3FfbWFzaykgPT0gY3FfbWFza2AhIEJlY2F1c2UgdGhleSBkaWRuJiMzOTt0LCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIGZhbHNlIG9uIHN1YnNlcXVlbnQgd3JhcHMuIFNvIG9uIHN1YnNlcXVlbnQgd3JhcHMsIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgaXMgZmFsc2UsIGBjcWUzMmAgaXMgdHJ1ZSwgYW5kIGBjcWUtJmd0O2JpZ19jcWVbMF1gIHJlYWRzIG91dCBvZiBib3VuZHMgYmV5b25kIGByLSZndDtjcWVzYCEgSXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZyBpbnRyb2R1Y2VkIGJ5IGEgcGF0Y2gsIGFuZCBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIhCgpOb3cgbGV0JiMzOTtzIHZlcmlmeS4gQ2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoaXMgY29kZT8gWWVzLCBgL3Byb2MvJmx0O3BpZCZndDsvZmRpbmZvLyZsdDtpb191cmluZ19mZCZndDtgIGlzIHJlYWNoYWJsZS4gRG9lcyBpdCB0b3VjaCBhIGNvcmUgc3Vic3lzdGVtPyBZZXMsIGBpb191cmluZ2AuIERvZXMgaXQgd2FycmFudCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCYjMzk7cyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBjb25maWdzIHJlcXVpcmVkIGZvciBmdXp6aW5nLiBXZSBuZWVkIGBJT19VUklOR2AgKGxpa2VseSBhbHJlYWR5IGVuYWJsZWQpLCBhbmQgYFBST0NfRlNgIHRvIHJlYWQgYGZkaW5mb2AuIExvb2tpbmcgYXQgYGlvX3VyaW5nL01ha2VmaWxlYCwgYGZkaW5mby5vYCBpcyBidWlsdCB3aXRoIGBDT05GSUdfUFJPQ19GU2AuIFNvLCBgUFJPQ19GU2AgaXMgYSByZXF1aXJlbWVudC4gQWxzbyBgQ09ORklHX0lPX1VSSU5HYCBjb21waWxlcyB0aGUgZW50aXJlIGBpb191cmluZy9gIGRpcmVjdG9yeS4KCldlIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bGwgYGlvX3VyaW5nL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBpb191cmluZ1xuICAgNDpcdFxuICAgNTpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfVVJJTkdcbiAgIDY6XHRHQ09WX1BST0ZJTEUgOj0geVxuICAgNzpcdGVuZGlmXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0XHQmIzQzOz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxuICAxMDpcdFx0XHRcdFx0XHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcbiAgMTE6XHRcdFx0XHRcdFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXG4gIDEyOlx0XHRcdFx0XHRcdG9wZW5jbG9zZS5vIHNxcG9sbC5vIHhhdHRyLm8gbm9wLm8gXFxcbiAgMTM6XHRcdFx0XHRcdFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxuICAxNDpcdFx0XHRcdFx0XHRhZHZpc2UubyBvcGVuY2xvc2UubyBzdGF0eC5vIHRpbWVvdXQubyBcXFxuICAxNTpcdFx0XHRcdFx0XHRjYW5jZWwubyB3YWl0aWQubyByZWdpc3Rlci5vIFxcXG4gIDE2Olx0XHRcdFx0XHRcdHRydW5jYXRlLm8gbWVtbWFwLm8gYWxsb2NfY2FjaGUubyBcXFxuICAxNzpcdFx0XHRcdFx0XHRxdWVyeS5vIGxvb3Aub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVx0JiM0Mzs9IHpjcngub1xuICAyMDpcdG9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbiAgMjE6XHRvYmotJChDT05GSUdfRlVURVgpXHRcdCYjNDM7PSBmdXRleC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0VQT0xMKVx0XHQmIzQzOz0gZXBvbGwub1xuICAyMzpcdG9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVx0JiM0Mzs9IG5hcGkub1xuICAyNDpcdG9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbiAgMjU6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgJiM0Mzs9IG1vY2tfZmlsZS5vXG4gIDI3Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuICAyODpcdG9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSAmIzQzOz0gYnBmLW9wcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTQzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgQnVpbGQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBjb25kaXRpb25zIGZvciB0aGUgYGlvX3VyaW5nL2AgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgaWYgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5lZCwgdGhlIGFzc29jaWF0ZWQgY29kZSAqYWx3YXlzKiBnZXRzIGJ1aWx0LiBObyBzbmVha3kgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gSSYjMzk7bSBtaXNzaW5nLgoKRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgYHJvb3QgTWFrZWZpbGVgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSB0b3AtbGV2ZWwgYnVpbGQgcnVsZXMgdXN1YWxseSByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgaXQsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBpb191cmluZy9gLiBJJiMzOTtsbCBiZSBzY2FubmluZyBmb3IgZXhwbGljaXQgbWVudGlvbnMsIG9mIGNvdXJzZSwgYnV0IGFsc28gYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBvciBpbmNsdWRlIHN0YXRlbWVudHMuCgpUaGVuLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBicm9hZGVuIHRoZSBzZWFyY2guIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gaHVudCBkb3duICphbnkqIGluc3RhbmNlcyBvZiBgaW9fdXJpbmcvYCB3aXRoaW4gdGhlIGBNYWtlZmlsZWAgYW5kIGFueSBgS2J1aWxkYCBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgdGhlIGBpb191cmluZy9gIGRpcmVjdG9yeSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgaW5mbHVlbmNlIGl0cyBpbmNsdXNpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtNYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTAwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogS2J1aWxkKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBLYnVpbGRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBsaWVzLCB0aGUgbWFrZWZpbGVzIGFuZCBzY3JpcHRzIHRoYXQgZGljdGF0ZSBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBwYWNrYWdlZC4gVW5kZXJzdGFuZGluZyBgS2J1aWxkYCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsLiBJdOKAmXMgdGhlIG9yY2hlc3RyYXRvci4gSWYgSSYjMzk7bSBnb2luZyB0byB1bmRlcnN0YW5kIG9yIGRlYnVnIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJ1aWxkLCBgS2J1aWxkYCBoYXMgdG8gYmUgdGhlIGZpcnN0IHN0b3AuIExldCYjMzk7cyBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb191cmluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O0tidWlsZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtLYnVpbGQ9MTA3PW9iai0kKENPTkZJR19CTE9DSylcdCYjNDM7PSBibG9jay9cbktidWlsZDoxMDg6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0JiM0Mzs9IGlvX3VyaW5nL1xuS2J1aWxkLTEwOS1vYmotJChDT05GSUdfUlVTVClcdCYjNDM7PSBydXN0L1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE0NQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBmZGluZm8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYEtidWlsZGAgZmlsZSBpbmNsdWRlcyBgaW9fdXJpbmcvYCBhbmQgd2l0aGluIHRoYXQsIHRoZSBgTWFrZWZpbGVgIGNvbmRpdGlvbmFsbHkgaW5jbHVkZXMgYGZkaW5mby5vYCBiYXNlZCBvbiBgUFJPQ19GU2AuIFNvLCBgSU9fVVJJTkdgIGFuZCBgUFJPQ19GU2AgYXJlIGJvdGggcHJlcmVxdWlzaXRlcyBoZXJlLgoKTXkgZm9jdXMgaXMgdGhlIGBpb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgdXNlZCB3aXRoIGAvcHJvYy8mbHQ7cGlkJmd0Oy9mZGluZm8vJmx0O2ZkJmd0O2AuIFRoZSBjb2RlIHBhdGggaXM6IHByb2NmcyBjYWxscyBgc2hvd19mZGluZm9gIChsaWtlbHkgdmlhIGBzZXFfcmVhZGAgYW5kIGBzZXFfc2hvd2AsIHNvbWV0aGluZyBsaWtlIGBwcm9jX2ZkaW5mb19zaG93YCkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzOiBgaW9fdXJpbmdfc2hvd19mZGluZm9gIOKAkyB0aGUgZmlsZSBvcGVyYXRpb25zIGVudHJ5IHBvaW50IOKAkyBhbmQgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIOKAkyB3aGljaCAqY29udGFpbnMqIHRoZSBhY3R1YWwgbG9naWMgY2hhbmdlLiBUaGF0IHNlZW1zIHJpZ2h0LCBJIGV2ZW4gdmVyaWZpZWQgdGhhdCB0aGUgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCBpcyBkZWZpbmVkIGluIGBpb191cmluZy9mZGluZm8uaGAgYW5kIHVzZWQgaW4gYGlvX3VyaW5nL2lvX3VyaW5nLmNgLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLCB3aGljaCwgaW1wb3J0YW50bHksIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgdGhlIGAvcHJvYy9bcGlkXS9mZGluZm8vW2ZkXWAgb2YgYW4gaW9fdXJpbmcgZmlsZSBkZXNjcmlwdG9yLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIGBjcWUtJmd0O2JpZ19jcWVgIHdoZW4gZGlzcGxheWluZyAzMi1ieXRlIENRRXMgYXQgdGhlIGVuZCBvZiB0aGUgQ1EgcmluZyBhcnJheS4gSG93ZXZlciwgdGhlIGNvbmRpdGlvbiBpbnRyb2R1Y2VkIHRvIHByZXZlbnQgdGhhdCBvdXQtb2YtYm91bmRzIHJlYWQgYXBwZWFycyB0byBiZSBmbGF3ZWQsIGxpa2VseSBmYWlsaW5nIHRvIHRyaWdnZXIgd2hlbiBgY3FfaGVhZGAgd3JhcHMgYmV5b25kIGBjcV9tYXNrYC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgaW5jb3JyZWN0IGZkaW5mbyBvdXRwdXQgdW5kZXIgdmFsaWQgcmluZyB3cmFwcGluZyBzY2VuYXJpb3MsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHJlcXVpcmVtZW50czogYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kOyB0aGUgcHJvYmxlbSBpcyB3ZWxsLWV4cGxhaW5lZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYElPX1VSSU5HYCBhbmQgYFBST0NfRlNgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGFuZCBgaW9fdXJpbmdfc2hvd19mZGluZm9gLgoKSSYjMzk7dmUgY29uZmlybWVkOiB0aGUgY2hhbmdlcyBhcmUgYWxyZWFkeSBhcHBsaWVkLiBSZWFjaGFiaWxpdHkgaXMgdmlhIHN0YW5kYXJkIC9wcm9jIHJlYWRzLCB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbmQgdGhlIEZvY3VzU3ltYm9scyBhcmUgdmVyeSBzcGVjaWZpYyB0byB0aGUgYWx0ZXJlZCBmZWF0dXJlIGxvZ2ljLiBUaGUgRW5hYmxlQ29uZmlncyBhcmUgdGhlIGV4cGVjdGVkIG9uZXMuCgpUaGlzIGFsbCBjaGVja3Mgb3V0LiBUaGUgYW5hbHlzaXMgaXMgc29saWQsIGFuZCBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2Npb191cmluZ19mZFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2Npb191cmluZ19mZFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19pb191cmluZ19zaG93X2ZkaW5mbygpYCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgIHRvIHByZXZlbnQgdHJlYXRpbmcgdGhlIGxhc3Qgc2xvdCBvZiB0aGUgQ1EgcmluZyBhcnJheSBhcyBhIDMyLWJ5dGUgQ1FFIChgY3FlMzJgKS4gV2l0aG91dCBwcm9wZXIgYm91bmRhcnkgaGFuZGxpbmcsIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAgb24gdGhlIGxhc3QgZW50cnkgb2YgdGhlIHJpbmcgYXJyYXkgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiBgci1cdTAwM2VjcWVzW11gLlxuXG5UaGlzIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4uIFRoZSB1bmRlcmx5aW5nIENRIHJpbmcgcGFnZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgX19HRlBfWkVST2AgLyBgbWVtc2V0YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGBjcWUzMmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMjEzMTEwMGNlMTY3YzQ4ZDNiMTQ5YTFjZDgzOGIyYjAzYjQwYTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTY6MjI6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jCmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2ZkaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2ZkaW5mby5jCkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNxX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpb191cmluZ19jcWUgKmNxZTsKIAkJYm9vbCBjcWUzMiA9IGZhbHNlOwomIzQzOwkJYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spOwogCiAJCWNxZSA9ICZhbXA7ci0mZ3Q7Y3Flc1soY3FfaGVhZCAmYW1wOyBjcV9tYXNrKV07Ci0JCWlmIChjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMiB8fCBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMikKJiM0MzsJCWlmICgoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpCiAJCQljcWUzMiA9IHRydWU7CiAJCXNlcV9wcmludGYobSwgJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4JiMzNDssCiAJCQkgICBjcV9oZWFkICZhbXA7IGNxX21hc2ssIGNxZS0mZ3Q7dXNlcl9kYXRhLCBjcWUtJmd0O3JlcywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBpb191cmluZy9mZGluZm8uYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgc3BlY2lmaWMgcGF0Y2ggaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gd2l0aGluIHN5emthbGxlci4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyB3ZSBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBlYXJseS4gRXNzZW50aWFsbHksIEkmIzM5O20gcGVyZm9ybWluZyBhIHJpc2sgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBoaWdoZXIgcmlzayBwcm9maWxlIGZvciBtZW1vcnkgZXJyb3JzIHRoYXQgS0FTQU4gbWlnaHQgbWlzcy4gSXQmIzM5O3MgYSBiZW5pZ24gYWN0aW9uOyBhIHN0YW5kYXJkIHBhcnQgb2YgbXkgd29ya2Zsb3cgZm9yIHJldmlld2luZyBjaGFuZ2VzLiBJJiMzOTttIG9wZXJhdGluZyBhcyBhIHNvcnQgb2YgZGVmZW5zaXZlIG1lY2hhbmlzbSwgYSBkZXZlbG9wZXIgUUEgdG9vbCwgZm9yIHN5emthbGxlciB0cmlhZ2UuCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgcGF0Y2ggYWN0dWFsbHkgZG9lcy4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBkaWZmLCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE1NSwgd2hpY2ggSSYjMzk7dmUgYnJvdWdodCBpbnRvIHZpZXcgd2l0aCBgcmVhZC1maWxlYC4gCgpgYGBkaWZmCmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jCmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2ZkaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2ZkaW5mby5jCkBAIC0xNTUsOSAmIzQzOzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNxX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpb191cmluZ19jcWUgKmNxZTsKIAkJYm9vbCBjcWUzMiA9IGZhbHNlOwomIzQzOwkJYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spOwogCiAJCWNxZSA9ICZhbXA7ci0mZ3Q7Y3Flc1soY3FfaGVhZCAmYW1wOyBjcV9tYXNrKV07Ci0JCWlmIChjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMiB8fCBjdHgtJmd0O2ZsYWdzICZhbXA7IElPUklOR19TRVRVUF9DUUUzMikKJiM0MzsJCWlmICgoY3FlLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LSZndDtmbGFncyAmYW1wOyBJT1JJTkdfU0VUVVBfQ1FFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpCiAJCQljcWUzMiA9IHRydWU7CiAJCXNlcV9wcmludGYobSwgJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4JiMzNDssCiAJCQkgICBjcV9oZWFkICZhbXA7IGNxX21hc2ssIGNxZS0mZ3Q7dXNlcl9kYXRhLCBjcWUtJmd0O3JlcywKYGBgCgpJdCBzZWVtcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLiBUaGlzIGlzIGxpa2VseSBhIGJvdW5kYXJ5IGNvbmRpdGlvbiByZWxhdGVkIHRvIGBJT1JJTkdfQ1FFX0ZfMzJgIGhhbmRsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGlzIG5ldyBjb25kaXRpb25hbC4gQXJlIHRoZXJlIHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycz8gSXMgdGhlcmUgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gdGhhdCBLTVNBTiBtaWdodCBjYXRjaCB0aGF0IEtBU0FOIHdvdWxkbiYjMzk7dD8gVGhlIGFkZGl0aW9uIG9mIGAhaXNfbGFzdF9jcWFycmF5X3Nsb3RgIHN1Z2dlc3RzIGEgcG9zc2libGUgY29ycmVjdGlvbiB0byBhIHByZXZpb3VzIGlzc3VlLCBwb3NzaWJseSBhIG1lbW9yeSBhY2Nlc3MgdGhhdCBnb2VzIGJleW9uZCB0aGUgYm91bmRzIG9mIGEgYnVmZmVyIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsb2dpYyBoZXJlIGludHJvZHVjZXMgbW9yZSBjb21wbGV4IGNvbmRpdGlvbnMsIGFuZCB3aGV0aGVyIEtNU0FOJiMzOTtzIHN0cmljdGVyIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24gd291bGQgcHJvdmlkZSBhZGRpdGlvbmFsIHZhbHVlLiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciBhY2Nlc3NlcyB0byBmcmVlZCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBjb3VsZCBhcmlzZSBiZWNhdXNlIG9mIHRoaXMgY2hlY2suIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdFx0XHR1NjQgKnNxZWIgPSAodm9pZCAqKSAoc3FlICYjNDM7IDEpO1xuIDE0MTpcdFx0XHRcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XG4gMTQyOlx0XHRcdFx0aW50IGo7XG4gMTQzOlx0XG4gMTQ0Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2Mgc2l6ZTsgaiYjNDM7JiM0MzspIHtcbiAxNDU6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LCBlJWQ6MHglbGx4XCYjMzQ7LCBqLFxuIDE0NjpcdFx0XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcbiAxNDc6XHRcdFx0XHRcdHNxZWImIzQzOyYjNDM7O1xuIDE0ODpcdFx0XHRcdH1cbiAxNDk6XHRcdFx0fVxuIDE1MDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1xcblwmIzM0Oyk7XG4gMTUxOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDE1MjpcdFx0fVxuIDE1MzpcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtDUUVzOlxcdCV1XFxuXCYjMzQ7LCBjcV90YWlsIC0gY3FfaGVhZCk7XG4gMTU0Olx0XHRjcV9lbnRyaWVzID0gbWluKGNxX3RhaWwgLSBjcV9oZWFkLCBjdHgtXHUwMDNlY3FfZW50cmllcyk7XG4gMTU1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDE1NjpcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gMTU3Olx0XHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbiAxNTg6XHRcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIDE1OTpcdFxuIDE2MDpcdFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbiAxNjE6XHRcdFx0aWYgKChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXHUwMDI2XHUwMDI2XG4gMTYyOlx0XHRcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXG4gMTYzOlx0XHRcdFx0Y3FlMzIgPSB0cnVlO1xuIDE2NDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU1dTogdXNlcl9kYXRhOiVsbHUsIHJlczolZCwgZmxhZ3M6JXhcJiMzNDssXG4gMTY1Olx0XHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiAxNjY6XHRcdFx0XHQgICBjcWUtXHUwMDNlZmxhZ3MpO1xuIDE2NzpcdFx0XHRpZiAoY3FlMzIpXG4gMTY4Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdVwmIzM0OyxcbiAxNjk6XHRcdFx0XHRcdFx0Y3FlLVx1MDAzZWJpZ19jcWVbMF0sIGNxZS1cdTAwM2ViaWdfY3FlWzFdKTtcbiAxNzA6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtcXG5cJiMzNDspO1xuIDE3MTpcdFx0XHRjcV9oZWFkJiM0MzsmIzQzOztcbiAxNzI6XHRcdFx0aWYgKGNxZTMyKSB7XG4gMTczOlx0XHRcdFx0Y3FfaGVhZCYjNDM7JiM0Mzs7XG4gMTc0Olx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4gMTc1Olx0XHRcdH1cbiAxNzY6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMTc3Olx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FQT0xMKSB7XG4gMTgwOlx0XHRcdHN0cnVjdCBpb19zcV9kYXRhICpzcSA9IGN0eC1cdTAwM2VzcV9kYXRhO1xuIDE4MTpcdFx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiAxODI6XHRcbiAxODM6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDE4NDpcdFx0XHR0c2sgPSByY3VfZGVyZWZlcmVuY2Uoc3EtXHUwMDNldGhyZWFkKTtcbiAxODU6XHRcdFx0LypcbiAxODY6XHRcdFx0ICogc3EtXHUwMDNldGhyZWFkIG1pZ2h0IGJlIE5VTEwgaWYgd2UgcmFjZWQgd2l0aCB0aGUgc3Fwb2xsXG4gMTg3Olx0XHRcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cbiAxODg6XHRcdFx0ICovXG4gMTg5Olx0XHRcdGlmICh0c2spIHtcbiAxOTA6XHRcdFx0XHR1NjQgdXNlYztcbiAxOTE6XHRcbiAxOTI6XHRcdFx0XHRnZXRfdGFza19zdHJ1Y3QodHNrKTtcbiAxOTM6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxOTQ6XHRcdFx0XHR1c2VjID0gaW9fc3FfY3B1X3VzZWModHNrKTtcbiAxOTU6XHRcdFx0XHRzcV9waWQgPSB0YXNrX3BpZF9ucl9ucyh0c2ssXG4gMTk2Olx0XHRcdFx0XHRcdFx0cHJvY19waWRfbnMoZmlsZV9pbm9kZShtLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2IpKTtcbiAxOTc6XHRcdFx0XHRwdXRfdGFza19zdHJ1Y3QodHNrKTtcbiAxOTg6XHRcdFx0XHRzcV9jcHUgPSBzcS1cdTAwM2VzcV9jcHU7XG4gMTk5Olx0XHRcdFx0c3FfdG90YWxfdGltZSA9IHVzZWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlzc2VjdGluZyB0aGUgaW9fdXJpbmcgQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSAoQ1FFKSBEaXNwbGF5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24uIFNlZW1zIGxpa2UgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGlvX3VyaW5nIGNvbXBsZXRpb24gcXVldWUgZW50cmllcy4gSSBjYW4gc2VlIGl0JiMzOTtzIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBDUUUgcmluZyBidWZmZXIsIGV4dHJhY3RpbmcgZGF0YSBmcm9tIGVhY2ggZW50cnkgYW5kIHByaW50aW5nIGl0IG91dC4gVGhlIGxvb3AmIzM5O3MgbGltaXQgaXMgZGVmaW5lZCBieSB0aGUgYGNxX3RhaWxgIGFuZCBgY3FfaGVhZGAgdmFyaWFibGVzLCBhbmQgaW1wb3J0YW50bHkgaXQmIzM5O3MgY2FwcGVkIGJ5IGBjdHgtJmd0O2NxX2VudHJpZXNgLiBUaGlzIGlzIGEgY2xhc3NpYyByaW5nIGJ1ZmZlciB0cmF2ZXJzYWwuCgpOb3csIEkgc3BvdCBhIGNvbmRpdGlvbmFsIGJsb2NrIGludm9sdmluZyBgSU9SSU5HX0NRRV9GXzMyYCBhbmQgYGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0NRRTMyYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBjdXJyZW50IENRRSBpcyB1c2luZyBhIDMyLWJpdCBsYXlvdXQuIElmIHRoaXMgaXMgdGhlIGNhc2UsIGl0IHNldHMgYGNxZTMyYCB0byB0cnVlLiBJbnNpZGUgdGhlIGxvb3AsIEkgc2VlIHRoZSB0eXBpY2FsIGB1c2VyX2RhdGFgLCBgcmVzYCwgYW5kIGBmbGFnc2AgYmVpbmcgcHJpbnRlZCB1c2luZyBgc2VxX3ByaW50ZmAuIFRoZW4sIGlmIGBjcWUzMmAgaXMgdHJ1ZSwgaXQgYWxzbyBwcmludHMgYGV4dHJhMWAgYW5kIGBleHRyYTJgLCB3aGljaCBpbiB0aGlzIGNvbnRleHQgbWVhbnMgYGNxZS0mZ3Q7YmlnX2NxZVswXWAgYW5kIGBjcWUtJmd0O2JpZ19jcWVbMV1gLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgY3FlLSZndDtiaWdfY3FlWzBdYCBhbmQgYGNxZS0mZ3Q7YmlnX2NxZVsxXWA/IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgdGhvc2UgbWVtYmVycyBleHBsaWNpdGx5IGluIHRoZSBzdGFuZGFyZCBDUUUgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpb191cmluZ19jcWVgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dHJhIGZpZWxkcyBhcmUgYmVpbmcgdXNlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXkmIzM5O3JlIHByZXNlbnQuIFRpbWUgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcyBmb3IgdGhlIGlvX3VyaW5nIGRlZmluaXRpb25zLCBhbmQgZmlndXJlIG91dCB3aGF0IHRoZSBrZXJuZWwmIzM5O3MgYWN0dWFsbHkgZG9pbmcuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIHN0cnVjdCYjMzk7cyBkZWZpbml0aW9uIHRvIGZpbmQgb3V0IHdoYXQgdGhlc2UgYGJpZ19jcWVgIGZpZWxkcyBhY3R1YWxseSByZXByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpb191cmluZ19jcWUgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTQ2Mz1lbnVtIGlvX3VyaW5nX21zZ19yaW5nX2ZsYWdzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC00OTktICovXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDo1MDA6c3RydWN0IGlvX3VyaW5nX2NxZSB7XG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC01MDEtXHRfX3U2NFx0dXNlcl9kYXRhO1x0Lyogc3FlLVx1MDAzZXVzZXJfZGF0YSB2YWx1ZSBwYXNzZWQgYmFjayAqL1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTM3ND1lbnVtIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC0zOTEtICovXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDozOTI6c3RydWN0IGlvX3VyaW5nX2NxZSB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC0zOTMtXHRfX3U2NFx0dXNlcl9kYXRhO1x0Lyogc3FlLVx1MDAzZWRhdGEgc3VibWlzc2lvbiBwYXNzZWQgYmFjayAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjUzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpb191cmluZy5oOiBBcm91bmQgTGluZSA1MDAqKgoKT2theSwgdGltZSB0byBnZXQgYSBiaXQgbW9yZSBncmFudWxhci4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaGAgcmlnaHQgYXJvdW5kIGxpbmUgNTAwLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgcHJvYmFibHkgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSByaW5nIGJ1ZmZlcnMgb3IgdGhlIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzLiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciBzcGVjaWZpY3Mgb24gZGF0YSBsYXlvdXRzLCBmbGFncywgb3IgZmllbGQgbWVhbmluZ3MuIE1heWJlIEkmIzM5O20gdHJ5aW5nIHRvIGNyb3NzLXJlZmVyZW5jZSBzb21lIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nIHdpdGggc29tZSB0cmFjZSBvdXRwdXQsIGFuZCBuZWVkIHRvIHBpbnBvaW50IGEgc3BlY2lmaWMgYml0ZmllbGQgb3Igc3RydWN0IG1lbWJlciByZXNwb25zaWJsZS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIHN1YnRsZSBnb3RjaGFzIGluIHRoZSBtZW1vcnkgb3JkZXJpbmcgb3IgcGFkZGluZy4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSBJJiMzOTttIGludmVzdGlnYXRpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpYywgbGlrZSBhIHBhcnRpY3VsYXIgbGF0ZW5jeSBhbm9tYWx5LCBhbmQgSSB0aGluayB0aGF0IGxpbmUgNTAwIHdpbGwgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyBhIGtleSBkZXNpZ24gZGVjaXNpb24gbWF5IGJlIHdvcmtpbmcuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHVzdWFsbHkgcHJldHR5IGdvb2QsIGJ1dCBJIGFsc28gZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgZGVncmVlIG9mIGltcGxpY2l0IGtub3dsZWRnZSBlbWJlZGRlZCBpbiB0aG9zZSBoZWFkZXJzLiBJIHdhbnQgdG8gYnVpbGQgYSBiZXR0ZXIgbW9kZWwgZm9yIHdoYXQgdGhlIGRldmVsb3BlcnMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5ODpcdCAqIElPIGNvbXBsZXRpb24gZGF0YSBzdHJ1Y3R1cmUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpXG4gNDk5Olx0ICovXG4gNTAwOlx0c3RydWN0IGlvX3VyaW5nX2NxZSB7XG4gNTAxOlx0XHRfX3U2NFx0dXNlcl9kYXRhO1x0Lyogc3FlLVx1MDAzZXVzZXJfZGF0YSB2YWx1ZSBwYXNzZWQgYmFjayAqL1xuIDUwMjpcdFx0X19zMzJcdHJlcztcdFx0LyogcmVzdWx0IGNvZGUgZm9yIHRoaXMgZXZlbnQgKi9cbiA1MDM6XHRcdF9fdTMyXHRmbGFncztcbiA1MDQ6XHRcbiA1MDU6XHRcdC8qXG4gNTA2Olx0XHQgKiBJZiB0aGUgcmluZyBpcyBpbml0aWFsaXplZCB3aXRoIElPUklOR19TRVRVUF9DUUUzMiwgdGhlbiB0aGlzIGZpZWxkXG4gNTA3Olx0XHQgKiBjb250YWlucyAxNi1ieXRlcyBvZiBwYWRkaW5nLCBkb3VibGluZyB0aGUgc2l6ZSBvZiB0aGUgQ1FFLlxuIDUwODpcdFx0ICovXG4gNTA5Olx0XHRfX3U2NCBiaWdfY3FlW107XG4gNTEwOlx0fTtcbiA1MTE6XHRcbiA1MTI6XHQvKlxuIDUxMzpcdCAqIGNxZS1cdTAwM2VmbGFnc1xuIDUxNDpcdCAqXG4gNTE1Olx0ICogSU9SSU5HX0NRRV9GX0JVRkZFUlx0SWYgc2V0LCB0aGUgdXBwZXIgMTYgYml0cyBhcmUgdGhlIGJ1ZmZlciBJRFxuIDUxNjpcdCAqIElPUklOR19DUUVfRl9NT1JFXHRJZiBzZXQsIHBhcmVudCBTUUUgd2lsbCBnZW5lcmF0ZSBtb3JlIENRRSBlbnRyaWVzXG4gNTE3Olx0ICogSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFlcdElmIHNldCwgbW9yZSBkYXRhIHRvIHJlYWQgYWZ0ZXIgc29ja2V0IHJlY3ZcbiA1MTg6XHQgKiBJT1JJTkdfQ1FFX0ZfTk9USUZcdFNldCBmb3Igbm90aWZpY2F0aW9uIENRRXMuIENhbiBiZSB1c2VkIHRvIGRpc3RpbmN0XG4gNTE5Olx0ICogXHRcdFx0dGhlbSBmcm9tIHNlbmRzLlxuIDUyMDpcdCAqIElPUklOR19DUUVfRl9CVUZfTU9SRSBJZiBzZXQsIHRoZSBidWZmZXIgSUQgc2V0IGluIHRoZSBjb21wbGV0aW9uIHdpbGwgZ2V0XG4gNTIxOlx0ICpcdFx0XHRtb3JlIGNvbXBsZXRpb25zLiBJbiBvdGhlciB3b3JkcywgdGhlIGJ1ZmZlciBpcyBiZWluZ1xuIDUyMjpcdCAqXHRcdFx0cGFydGlhbGx5IGNvbnN1bWVkLCBhbmQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwgZm9yXG4gNTIzOlx0ICpcdFx0XHRtb3JlIGNvbXBsZXRpb25zLiBUaGlzIGlzIG9ubHkgc2V0IGZvciBidWZmZXJzIHVzZWQgdmlhXG4gNTI0Olx0ICpcdFx0XHR0aGUgaW5jcmVtZW50YWwgYnVmZmVyIGNvbnN1bXB0aW9uLCBhcyBwcm92aWRlZCBieVxuIDUyNTpcdCAqXHRcdFx0YSByaW5nIGJ1ZmZlciBzZXR1cCB3aXRoIElPVV9QQlVGX1JJTkdfSU5DLiBGb3IgYW55XG4gNTI2Olx0ICpcdFx0XHRvdGhlciBwcm92aWRlZCBidWZmZXIgdHlwZSwgYWxsIGNvbXBsZXRpb25zIHdpdGggYVxuIDUyNzpcdCAqXHRcdFx0YnVmZmVyIHBhc3NlZCBiYWNrIGlzIGF1dG9tYXRpY2FsbHkgcmV0dXJuZWQgdG8gdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGlvX3VyaW5nIENRRSBNZW1vcnkgTGF5b3V0IGluIENRRTMyIE1vZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgaW9fdXJpbmdfY3FlYCBzdHJ1Y3R1cmUuIEEgc3RhbmRhcmQgb25lIGlzIDE2IGJ5dGVzOiB1c2VyIGRhdGEsIHJlc3VsdCwgZmxhZ3MsIGFuZCB0aGVuIHRoYXQgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBiaWdfY3FlW11gLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB3aGVuIENRRTMyIG1vZGUgaXMgZW5hYmxlZDsgaXQgYmVjb21lcyAzMiBieXRlcywgZWZmZWN0aXZlbHkgdGFraW5nIHVwIHR3byBzbG90cyBpbiB0aGUgYHItJmd0O2NxZXNbXWAgYXJyYXkuCgpOb3csIHRoZSBjb2RlIGFjY2Vzc2VzIHRoZSBDUUUgbGlrZSB0aGlzOiBgY3FlID0gJmFtcDtyLSZndDtjcWVzWyhjcV9oZWFkICZhbXA7IGNxX21hc2spXTtgIGFuZCBpbiBDUUUzMiBpdCB1c2VzIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYC4gU2luY2UgdGhlICpvcmlnaW5hbCogYHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfY3FlKWAgaXMgMTYgYnl0ZXMsIGBiaWdfY3FlWzBdYCAqc2hvdWxkKiBiZSBhdCBvZmZzZXQgMTYgd2l0aGluIHRoYXQgc3RydWN0dXJlLCBtYWtpbmcgaXRzIG1lbW9yeSBsb2NhdGlvbiBlcXVpdmFsZW50IHRvIGAmYW1wO3ItJmd0O2NxZXNbKGNxX2hlYWQgJmFtcDsgY3FfbWFzaykgJiM0MzsgMV1gLgoKSGVyZSYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGFyaXNlczogaWYgYChjcV9oZWFkICZhbXA7IGNxX21hc2spYCBwb2ludHMgdG8gdGhlICpsYXN0KiBlbGVtZW50IG9mIHRoZSBgci0mZ3Q7Y3Flc2AgYXJyYXkgKGkuZS4sIGBjcV9tYXNrYCksIHRoZW4gYCZhbXA7ci0mZ3Q7Y3Flc1tjcV9tYXNrICYjNDM7IDFdYCBpcyBkZWZpbml0ZWx5IG91dCBvZiBib3VuZHMuIEFjY2Vzc2luZyBtZW1vcnkgKmFmdGVyKiB0aGUgYXJyYXkgYm91bmRzIGlzIGFsd2F5cyBhIHByb2JsZW0uCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIFdoeSB3YXMgdGhhdCBhZGRlZD8gSXQgc2VlbXMgcmVsYXRlZCB0byB0aGlzIG91dC1vZi1ib3VuZHMgaXNzdWUuIFRoaXMgaXMgbGlrZWx5IHRoZSBjcnVjaWFsIHBpZWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayBpcyBpbiBwbGFjZS4KClRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBnaXQgaGlzdG9yeS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb21taXQgbWVzc2FnZXMgc2F5LiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgb3IgYElPUklOR19TRVRVUF9DUUUzMmAgdG8gZmluZCBvdXQgdGhlIHJlYXNvbiB0aGlzIHdhcyBjaGFuZ2VkLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4IG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBkb3VibGVkIHNpemUgb2YgQ1FFcyBpbiBDUUUzMiBtb2RlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRvIGJlIDEwMCUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9SSU5HX1NFVFVQX0NRRTMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvZmRpbmZvLmM9NjA9c3RhdGljIHZvaWQgX19pb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmlvX3VyaW5nL2ZkaW5mby5jLTE2MC1cdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG5pb191cmluZy9mZGluZm8uYzoxNjE6XHRcdGlmICgoY3FlLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFx1MDAyNlx1MDAyNlxuaW9fdXJpbmcvZmRpbmZvLmMtMTYyLVx0XHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NTE1PXN0YXRpYyB2b2lkIF9faW9fY3FyaW5nX292ZXJmbG93X2ZsdXNoKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGR5aW5nKVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTMyLVx0XHRpZiAob2NxZS1cdTAwM2VjcWUuZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1MzM6XHRcdCAgICBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzQtXHRcdFx0aXNfY3FlMzIgPSB0cnVlO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM2LVx0XHR9XG5pb191cmluZy9pb191cmluZy5jOjUzNzpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzgtXHRcdFx0aXNfY3FlMzIgPSBmYWxzZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTY1Mj1zdGF0aWMgc3RydWN0IGlvX292ZXJmbG93X2NxZSAqaW9fYWxsb2Nfb2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTY1OS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6NjYwOlx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9pb191cmluZy5jLTY2MS1cdFx0aXNfY3FlMzIgPSB0cnVlO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc0Ny1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzQ4Olx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9pb191cmluZy5jLTc0OS1cdFx0b2ZmIFx1MDAzY1x1MDAzYz0gMTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc2Mi1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlx0aWYgKFdBUk5fT05fT05DRSghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA0LVx0b2ZmID0gc3RydWN0X3NpemUocmluZ3MsIGNxZXMsIGNxX2VudHJpZXMpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTA1Olx0aWYgKGZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXG5pb191cmluZy9pb191cmluZy5jLTIxMDYtXHRcdG9mZiA9IHNpemVfbXVsKG9mZiwgMik7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzg4PXN0YXRpYyBpbnQgaW9fdXJpbmdfc2FuaXRpc2VfcGFyYW1zKHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnApXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVx0ICovXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XHRpZiAoKGZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSA9PVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3Olx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy9pb191cmluZy5jLTI4MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjUtXHRcdFx0SU9SSU5HX1NFVFVQX1NRRTEyOCB8XFxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NjY6XHRcdFx0SU9SSU5HX1NFVFVQX0NRRTMyIHxcXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC02Ny1cdFx0XHRJT1JJTkdfU0VUVVBfU0lOR0xFX0lTU1VFUiB8XFxcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZV9vdmVyZmxvdyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oLTI3MS1cdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MjcyOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG5pb191cmluZy9pb191cmluZy5oLTI3My1cdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMTAtXHRtZW1jcHkoY3FlLCBcdTAwMjZyZXEtXHUwMDNlY3FlLCBzaXplb2YoKmNxZSkpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaDozMTE6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIgfHwgaXNfY3FlMzIpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzEyLVx0XHRtZW1jcHkoY3FlLVx1MDAzZWJpZ19jcWUsIFx1MDAyNnJlcS1cdTAwM2ViaWdfY3FlLCBzaXplb2YoKmNxZSkpO1xuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmM9OTY9c3RhdGljIGludCBpb19tc2dfcmluZ19jcWVfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICp0YXJnZXRfY3R4LFxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA1LVx0aWYgKCgqZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMikgXHUwMDI2XHUwMDI2XG5pb191cmluZy9tc2dfcmluZy5jOjEwNjpcdCAgICAhKHRhcmdldF9jdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxuaW9fdXJpbmcvbXNnX3JpbmcuYy0xMDctXHRcdFx0XHQgICBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG4tLVxuaW9fdXJpbmcvbm9wLmM9Mjc9aW50IGlvX25vcF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4tLVxuaW9fdXJpbmcvbm9wLmMtNDktXG5pb191cmluZy9ub3AuYzo1MDpcdFx0aWYgKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL25vcC5jLTUxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDgwPXN0YXRpYyB2b2lkIGlvX3JlZ2lzdGVyX2ZyZWVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTQtI2RlZmluZSBDT1BZX0ZMQUdTXHQoSU9SSU5HX1NFVFVQX05PX1NRQVJSQVkgfCBJT1JJTkdfU0VUVVBfU1FFMTI4IHwgXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDk1Olx0XHRcdCBJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfTk9fTU1BUCB8IFxcXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ni1cdFx0XHQgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8IElPUklOR19TRVRVUF9TUUVfTUlYRUQpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy02NDktXHRcdGRzdF9tYXNrID0gcC1cdTAwM2VjcV9lbnRyaWVzIC0gMTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NjUwOlx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjUxLVx0XHRcdGluZGV4IFx1MDAzY1x1MDAzYz0gMTtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0yNDM9aW50IGlvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9TUUUxMjg7XG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy91cmluZ19jbWQuYy0yNjEtXHRcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTgzMT1zdGF0aWMgaW50IGltcG9ydF96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy04NDEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjg0MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtODQzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy05ODEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjk4MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtOTgzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGlvX3VyaW5nIENRRSBNaXhlZCBNb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYGlvX3VyaW5nL3JlZ2lzdGVyLmNgIGFuZCBgaW9fdXJpbmcvaW9fdXJpbmcuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSBoYW5kbGUgYElPUklOR19TRVRVUF9DUUVfTUlYRURgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGZsYWcgYWN0dWFsbHkgZG9lcy4gU28sIEkmIzM5O2xsIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBjb2RlYmFzZSBmb3IgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGFuZCBzZWUgaG93IGl0JiMzOTtzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9NzU4PXN0YXRpYyBib29sIGlvX2ZpbGxfY3FlX2F1eDMyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NjM6XHRpZiAoV0FSTl9PTl9PTkNFKCEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSkpXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIwODQtXG5pb191cmluZy9pb191cmluZy5jOjIwODU6XHRpZiAoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4Ni1cdFx0aWYgKGNxX2VudHJpZXMgXHUwMDNjIDIpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzg4PXN0YXRpYyBpbnQgaW9fdXJpbmdfc2FuaXRpc2VfcGFyYW1zKHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnApXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVx0ICovXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XHRpZiAoKGZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSA9PVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3Olx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy9pb191cmluZy5jLTI4MzgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzItXHRcdFx0SU9SSU5HX1NFVFVQX0hZQlJJRF9JT1BPTEwgfFxcXG5pb191cmluZy9pb191cmluZy5oOjczOlx0XHRcdElPUklOR19TRVRVUF9DUUVfTUlYRUQgfFxcXG5pb191cmluZy9pb191cmluZy5oLTc0LVx0XHRcdElPUklOR19TRVRVUF9TUUVfTUlYRUQgfFxcXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzMtXHRcdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjc0Olx0fSBlbHNlIGlmIChjcWUzMiBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSB7XG5pb191cmluZy9pb191cmluZy5oLTI3NS1cdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjg4PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19kZWZlcl9nZXRfdW5jb21taXRlZF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTMtXHRjdHgtXHUwMDNlc3VibWl0X3N0YXRlLmNxX2ZsdXNoID0gdHJ1ZTtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjk0Olx0cmV0dXJuIGlvX2dldF9jcWUoY3R4LCBjcWVfcmV0LCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTUtfVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzM2PXN0YXRpYyBpbmxpbmUgdTMyIGN0eF9jcWUzMl9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM3LXtcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzM4Olx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM5LVx0XHRyZXR1cm4gSU9SSU5HX0NRRV9GXzMyO1xuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmM9OTY9c3RhdGljIGludCBpb19tc2dfcmluZ19jcWVfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICp0YXJnZXRfY3R4LFxuLS1cbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA2LVx0ICAgICEodGFyZ2V0X2N0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8XG5pb191cmluZy9tc2dfcmluZy5jOjEwNzpcdFx0XHRcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy9ub3AuYz0yNz1pbnQgaW9fbm9wX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9ub3AuYy00OS1cbmlvX3VyaW5nL25vcC5jOjUwOlx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxuaW9fdXJpbmcvbm9wLmMtNTEtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5NS1cdFx0XHQgSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX05PX01NQVAgfCBcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTY6XHRcdFx0IElPUklOR19TRVRVUF9DUUVfTUlYRUQgfCBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTctXG4tLVxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MTUyPXZvaWQgX19pb191cmluZ19jbWRfZG9uZShzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsIHMzMiByZXQsIHU2NCByZXMyLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2Ni1cdGlmIChpc19jcWUzMikge1xuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY3Olx0XHRpZiAocmVxLVx1MDAzZWN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2OC1cdFx0XHRyZXEtXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcbi0tXG5pb191cmluZy91cmluZ19jbWQuYz0yNDM9aW50IGlvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cdFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9TUUUxMjg7XG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXG5pb191cmluZy91cmluZ19jbWQuYy0yNjEtXHRcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTgzMT1zdGF0aWMgaW50IGltcG9ydF96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy04NDEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjg0MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtODQzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy05ODEtXHRcdHJldHVybiAtRUlOVkFMO1xuaW9fdXJpbmcvemNyeC5jOjk4MjpcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXG5pb191cmluZy96Y3J4LmMtOTgzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5pb191cmluZy96Y3J4LmM9MTYyOD1zdGF0aWMgYm9vbCBpb196Y3J4X3F1ZXVlX2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IG5ldF9pb3YgKm5pb3YsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTE2NDItXHRjcWUtXHUwMDNlZmxhZ3MgPSBJT1JJTkdfQ1FFX0ZfTU9SRTtcbmlvX3VyaW5nL3pjcnguYzoxNjQzOlx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcbmlvX3VyaW5nL3pjcnguYy0xNjQ0LVx0XHRjcWUtXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENRRSBNaXhlZCBNb2RlKioKCk9rYXksIHNvIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBpcyB0aGUga2V5LCBsZXR0aW5nIHVzIHdvcmsgd2l0aCBib3RoIDE2LSBhbmQgMzItYnl0ZSBDb21wbGV0aW9uIFF1ZXVlIEVudHJpZXMgKENRRXMpLiBHb3QgaXQuIE5vdywgaW4gdGhpcyAmIzM0O21peGVkIG1vZGUsJiMzNDsgdGhlIGBjcWUtJmd0O2ZsYWdzICZhbXA7IElPUklOR19DUUVfRl8zMmAgYml0IGlzIHRoZSBjcnVjaWFsIGluZGljYXRvciDigJMgaXQgdGVsbHMgbWUgd2hldGhlciBJJiMzOTttIGxvb2tpbmcgYXQgYSAzMi1ieXRlIENRRSwgd2hpY2gsIG9mIGNvdXJzZSwgbWVhbnMgaXQmIzM5O3MgdGFraW5nIHVwIHR3byBjb25zZWN1dGl2ZSBzbG90cyBpbiB0aGUgcmluZy4KCkhtbSwgdGhhdCBpbW1lZGlhdGVseSBicmluZ3MgdXAgYSBjb3JuZXIgY2FzZSB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gSWYgSSBoYXZlIGEgMzItYnl0ZSBDUUUgc2l0dGluZyBhdCB0aGUgKnZlcnkqIGVuZCBvZiB0aGUgcmluZyBidWZmZXIsIGhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIHRoYXQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBpb19nZXRfY3FlYCBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGF0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2dldF9jcWVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cdFx0cmV0dXJuIGZhbHNlO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NjU6XHRpZiAodW5saWtlbHkoIWlvX2dldF9jcWUoY3R4LCBcdTAwMjZjcWUsIHRydWUpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NzM9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1NjQgdXNlcl9kYXRhLCBzMzIgcmVzLFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzc4LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3Nzk6XHRpZiAobGlrZWx5KGlvX2dldF9jcWUoY3R4LCBcdTAwMjZjcWUsIGNxZTMyKSkpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzgwLVx0XHRXUklURV9PTkNFKGNxZS1cdTAwM2V1c2VyX2RhdGEsIHVzZXJfZGF0YSk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yODEtXG5pb191cmluZy9pb191cmluZy5oOjI4MjpzdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX2NxZSAqKnJldCxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjgzLVx0XHRcdFx0Ym9vbCBjcWUzMilcbi0tXG5pb191cmluZy9pb191cmluZy5oPTI4OD1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZGVmZXJfZ2V0X3VuY29tbWl0ZWRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjkzLVx0Y3R4LVx1MDAzZXN1Ym1pdF9zdGF0ZS5jcV9mbHVzaCA9IHRydWU7XG5pb191cmluZy9pb191cmluZy5oOjI5NDpcdHJldHVybiBpb19nZXRfY3FlKGN0eCwgY3FlX3JldCwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjk1LX1cbi0tXG5pb191cmluZy9pb191cmluZy5oPTI5Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaW9fZmlsbF9jcWVfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzA2LVx0ICovXG5pb191cmluZy9pb191cmluZy5oOjMwNzpcdGlmICh1bmxpa2VseSghaW9fZ2V0X2NxZShjdHgsIFx1MDAyNmNxZSwgaXNfY3FlMzIpKSlcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzA4LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gYGlvX3VyaW5nLmhgIGF0IExpbmUgMjgyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBgaW9fdXJpbmdgLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlLCBgaW9fdXJpbmcuaGAuIEkmIzM5O3ZlIGhvbmVkIGluIG9uIGxpbmUgMjgyLiBUaGF0IHVzdWFsbHkgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIG9yIHBlcnRpbmVudCB0byBteSBjdXJyZW50IHByb2JsZW0gZGVmaW5lZCBvciByZWZlcmVuY2VkIGFyb3VuZCB0aGF0IGFyZWEuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxpbmUgcmV2ZWFscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3RydWN0cywgZW51bXMsIG1hY3Jvcywgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IG1pZ2h0IGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgW3RoZSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IC0gdGhpcyBwYXJ0IGlzIHVwIHRvIHRoZSB1c2VyJiMzOTtzIGV4cGVydGlzZSBhbmQgY29udGV4dC4gRXhhbXBsZTogcXVldWluZyBiZWhhdmlvciwgY29tcGxldGlvbiBoYW5kbGluZywgc3VibWlzc2lvbiBmbGFncywgbGlua2VkIHJlcXVlc3RzLCBldGNdLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBsaW5lIDI4MiBpcyBndWFyZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRcdFx0XHRcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqKnJldCxcbiAyNjE6XHRcdFx0XHRcdFx0Ym9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbiAyNjI6XHR7XG4gMjYzOlx0XHRpb19sb2NrZGVwX2Fzc2VydF9jcV9sb2NrZWQoY3R4KTtcbiAyNjQ6XHRcbiAyNjU6XHRcdGlmICh1bmxpa2VseShjdHgtXHUwMDNlY3FlX3NlbnRpbmVsIC0gY3R4LVx1MDAzZWNxZV9jYWNoZWQgXHUwMDNjIChjcWUzMiAmIzQzOyAxKSkpIHtcbiAyNjY6XHRcdFx0aWYgKHVubGlrZWx5KCFpb19jcWVfY2FjaGVfcmVmaWxsKGN0eCwgb3ZlcmZsb3csIGNxZTMyKSkpXG4gMjY3Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI2ODpcdFx0fVxuIDI2OTpcdFx0KnJldCA9IGN0eC1cdTAwM2VjcWVfY2FjaGVkO1xuIDI3MDpcdFx0Y3R4LVx1MDAzZWNhY2hlZF9jcV90YWlsJiM0MzsmIzQzOztcbiAyNzE6XHRcdGN0eC1cdTAwM2VjcWVfY2FjaGVkJiM0MzsmIzQzOztcbiAyNzI6XHRcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xuIDI3MzpcdFx0XHRjdHgtXHUwMDNlY3FlX2NhY2hlZCYjNDM7JiM0Mzs7XG4gMjc0Olx0XHR9IGVsc2UgaWYgKGNxZTMyIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcbiAyNzU6XHRcdFx0Y3R4LVx1MDAzZWNxZV9jYWNoZWQmIzQzOyYjNDM7O1xuIDI3NjpcdFx0XHRjdHgtXHUwMDNlY2FjaGVkX2NxX3RhaWwmIzQzOyYjNDM7O1xuIDI3NzpcdFx0fVxuIDI3ODpcdFx0V0FSTl9PTl9PTkNFKGN0eC1cdTAwM2VjcWVfY2FjaGVkIFx1MDAzZSBjdHgtXHUwMDNlY3FlX3NlbnRpbmVsKTtcbiAyNzk6XHRcdHJldHVybiB0cnVlO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX2NxZSAqKnJldCxcbiAyODM6XHRcdFx0XHRcdGJvb2wgY3FlMzIpXG4gMjg0Olx0e1xuIDI4NTpcdFx0cmV0dXJuIGlvX2dldF9jcWVfb3ZlcmZsb3coY3R4LCByZXQsIGZhbHNlLCBjcWUzMik7XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19kZWZlcl9nZXRfdW5jb21taXRlZF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gMjg5Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW9fdXJpbmdfY3FlICoqY3FlX3JldClcbiAyOTA6XHR7XG4gMjkxOlx0XHRpb19sb2NrZGVwX2Fzc2VydF9jcV9sb2NrZWQoY3R4KTtcbiAyOTI6XHRcbiAyOTM6XHRcdGN0eC1cdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xuIDI5NDpcdFx0cmV0dXJuIGlvX2dldF9jcWUoY3R4LCBjcWVfcmV0LCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xuIDI5NTpcdH1cbiAyOTY6XHRcbiAyOTc6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaW9fZmlsbF9jcWVfcmVxKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIDI5ODpcdFx0XHRcdFx0XHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gMjk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBzZWVpbmc6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIENRRSBPdmVyZmxvdyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgaW9fZ2V0X2NxZV9vdmVyZmxvd2AsIHNwZWNpZmljYWxseSwgdGhlIGNvbmRpdGlvbiB3aGVyZSB0aGUgQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSAoQ1FFKSBjYWNoZSBuZWVkcyByZWZpbGxpbmcuICBJIHNlZSB0aGF0IGl0IHRyaWdnZXJzIGBpb19jcWVfY2FjaGVfcmVmaWxsYCB3aGVuIGBjdHgtJmd0O2NxZV9zZW50aW5lbCAtIGN0eC0mZ3Q7Y3FlX2NhY2hlZGAgaXMgbGVzcyB0aGFuIGAoY3FlMzIgJiM0MzsgMSlgLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHRocmVzaG9sZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpbmVxdWFsaXR5IHNpZ25hbHMgYW4gb3ZlcmZsb3cgY29uZGl0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgbWFuYWdlZCBhbmQgcmVsYXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2VudGluZWwgYW5kIHRoZSBjYWNoZWQgZW50cnkgaXMgcHJvYmFibHkgaW5kaWNhdGluZyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IGluIHRoZSBjYWNoZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29kZSBhbnRpY2lwYXRlcyBhbiBpc3N1ZS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYGlvX2NxZV9jYWNoZV9yZWZpbGxgIGZ1bmN0aW9uIGluIGBpb191cmluZy9pb191cmluZy5jYCB0byBzZWUgaG93IGl0IHdvcmtzIGFuZCB3aGF0IHRyaWdnZXJzIGl0IHRvIGJlIG5lZWRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGxvZ2ljIHdpdGhpbiB0aGF0IHJlZmlsbCBmdW5jdGlvbiwgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIGNvcmUgQ1FFIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE1Olx0ICogY29udHJvbCBkZXBlbmRlbmN5IGlzIGVub3VnaCBhcyB3ZSYjMzk7cmUgdXNpbmcgV1JJVEVfT05DRSB0b1xuIDcxNjpcdCAqIGZpbGwgdGhlIGNxIGVudHJ5XG4gNzE3Olx0ICovXG4gNzE4Olx0Ym9vbCBpb19jcWVfY2FjaGVfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxuIDcxOTpcdHtcbiA3MjA6XHRcdHN0cnVjdCBpb19yaW5ncyAqcmluZ3MgPSBjdHgtXHUwMDNlcmluZ3M7XG4gNzIxOlx0XHR1bnNpZ25lZCBpbnQgb2ZmID0gY3R4LVx1MDAzZWNhY2hlZF9jcV90YWlsIFx1MDAyNiAoY3R4LVx1MDAzZWNxX2VudHJpZXMgLSAxKTtcbiA3MjI6XHRcdHVuc2lnbmVkIGludCBmcmVlLCBsZW47XG4gNzIzOlx0XG4gNzI0Olx0XHQvKlxuIDcyNTpcdFx0ICogUG9zdGluZyBpbnRvIHRoZSBDUSB3aGVuIHRoZXJlIGFyZSBwZW5kaW5nIG92ZXJmbG93ZWQgQ1FFcyBtYXkgYnJlYWtcbiA3MjY6XHRcdCAqIG9yZGVyaW5nIGd1YXJhbnRlZXMsIHdoaWNoIHdpbGwgYWZmZWN0IGxpbmtzLCBGX01PUkUgdXNlcnMgYW5kIG1vcmUuXG4gNzI3Olx0XHQgKiBGb3JjZSBvdmVyZmxvdyB0aGUgY29tcGxldGlvbi5cbiA3Mjg6XHRcdCAqL1xuIDcyOTpcdFx0aWYgKCFvdmVyZmxvdyBcdTAwMjZcdTAwMjYgKGN0eC1cdTAwM2VjaGVja19jcSBcdTAwMjYgQklUKElPX0NIRUNLX0NRX09WRVJGTE9XX0JJVCkpKVxuIDczMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzMxOlx0XG4gNzMyOlx0XHQvKlxuIDczMzpcdFx0ICogUG9zdCBkdW1teSBDUUUgaWYgYSAzMmIgQ1FFIGlzIG5lZWRlZCBhbmQgdGhlcmUmIzM5O3Mgb25seSByb29tIGZvciBhXG4gNzM0Olx0XHQgKiAxNmIgQ1FFIGJlZm9yZSB0aGUgcmluZyB3cmFwcy5cbiA3MzU6XHRcdCAqL1xuIDczNjpcdFx0aWYgKGNxZTMyIFx1MDAyNlx1MDAyNiBvZmYgJiM0MzsgMSA9PSBjdHgtXHUwMDNlY3FfZW50cmllcykge1xuIDczNzpcdFx0XHRpZiAoIWlvX2ZpbGxfbm9wX2NxZShjdHgsIG9mZikpXG4gNzM4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDczOTpcdFx0XHRvZmYgPSAwO1xuIDc0MDpcdFx0fVxuIDc0MTpcdFxuIDc0MjpcdFx0ZnJlZSA9IGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gaW9fY3FyaW5nX3F1ZXVlZChjdHgpO1xuIDc0MzpcdFx0Lyogd2UgbmVlZCBhIGNvbnRpZ3VvdXMgcmFuZ2UsIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGFycmF5IG9mZnNldCAqL1xuIDc0NDpcdFx0bGVuID0gbWluKGZyZWUsIGN0eC1cdTAwM2VjcV9lbnRyaWVzIC0gb2ZmKTtcbiA3NDU6XHRcdGlmIChsZW4gXHUwMDNjIChjcWUzMiAmIzQzOyAxKSlcbiA3NDY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc0NzpcdFxuIDc0ODpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XG4gNzQ5Olx0XHRcdG9mZiBcdTAwM2NcdTAwM2M9IDE7XG4gNzUwOlx0XHRcdGxlbiBcdTAwM2NcdTAwM2M9IDE7XG4gNzUxOlx0XHR9XG4gNzUyOlx0XG4gNzUzOlx0XHRjdHgtXHUwMDNlY3FlX2NhY2hlZCA9IFx1MDAyNnJpbmdzLVx1MDAzZWNxZXNbb2ZmXTtcbiA3NTQ6XHRcdGN0eC1cdTAwM2VjcWVfc2VudGluZWwgPSBjdHgtXHUwMDNlY3FlX2NhY2hlZCAmIzQzOyBsZW47XG4gNzU1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA3NTY6XHR9XG4gNzU3Olx0XG4gNzU4Olx0c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gNzU5Olx0XHRcdFx0ICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSBzcmNfY3FlWzJdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ1FFIFJpbmcgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgNzMyLTc0MCBvZiB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgZm9yIENRRSAoQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSkgcmluZyBidWZmZXIgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzICYjMzQ7ZHVtbXkgQ1FFJiMzNDsgaW5zZXJ0aW9uLiBUaGUgY29tbWVudCBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIGhhbmRsaW5nIDMyLWJpdCBDUUVzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIG5lYXJpbmcgaXRzIHdyYXAtYXJvdW5kIHBvaW50LCBidXQgb25seSBlbm91Z2ggc3BhY2UgZXhpc3RzIGZvciBhIDE2LWJpdCBDUUUuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGlvX2ZpbGxfbm9wX2NxZWAgZnVuY3Rpb24gb3BlcmF0ZXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzICYjMzQ7ZHVtbXkmIzM0OyBlbnRyeSBpcyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBpbnRvIHRoZSBidWZmZXIuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoZSByaW5nIGJ1ZmZlciBkb2VzbiYjMzk7dCBjb3JydXB0IGRhdGEgb3IgdHJpZ2dlciBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgQ1FFIHByb2Nlc3NpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZWl0aGVyIGluc2VydCBhIHNwZWNpYWwgJiMzOTtOT1AmIzM5OyAobm8gb3BlcmF0aW9uKSBDUUUsIHRvIHNpZ25hbCB0byBkb3duc3RyZWFtIGNvbnN1bWVycyB0aGF0IG5vdGhpbmcgaXMgYWN0dWFsbHkgcmVhZHksIG9yIG1heWJlIGV2ZW4gcGVyZm9ybSBhIGJ1ZmZlciByZXNldCwgZGVwZW5kaW5nIG9uIGNvbnRleHQuIEkgbmVlZCB0byBjaGVjayBleGFjdGx5IHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fZmlsbF9ub3BfY3FlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz02ODQ9c3RhdGljIHVuc2lnbmVkIGludCBpb19jcXJpbmdfcXVldWVkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtNjk4LSAqL1xuaW9fdXJpbmcvaW9fdXJpbmcuYzo2OTk6c3RhdGljIGJvb2wgaW9fZmlsbF9ub3BfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgb2ZmKVxuaW9fdXJpbmcvaW9fdXJpbmcuYy03MDAte1xuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcbi0tXG5pb191cmluZy9pb191cmluZy5jLTczNi1cdGlmIChjcWUzMiBcdTAwMjZcdTAwMjYgb2ZmICYjNDM7IDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXMpIHtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzM3Olx0XHRpZiAoIWlvX2ZpbGxfbm9wX2NxZShjdHgsIG9mZikpXG5pb191cmluZy9pb191cmluZy5jLTczOC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgaW9fdXJpbmcuYzogQSBTcGVjaWZpYyBDb2RlIEJsb2NrKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBpb191cmluZy9pb191cmluZy5jYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgNjk4IHRocm91Z2ggNzE1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24uIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBjb3JlIGFzcGVjdCBvZiB0aGUgc3VibWlzc2lvbiBvciBjb21wbGV0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBJL08gb3BlcmF0aW9ucy4gR2l2ZW4gdGhlIGZpbGUgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBgaW9fdXJpbmdgLCBJJiMzOTtkIGJldCBpdCYjMzk7cyBpbnZvbHZlZCBpbiBkaXNwYXRjaGluZyB3b3JrIHRvIHRoZSBrZXJuZWwgb3IgcmV0cmlldmluZyBjb21wbGV0ZWQgcmVxdWVzdHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBhc3NpZ25tZW50cyByZWxhdGVkIHRvIHJpbmcgYnVmZmVycywgY29tcGxldGlvbiBxdWV1ZXMsIGFuZCB0aGUgc3VibWlzc2lvbiBxdWV1ZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIGBpb191cmluZ19zdWJtaXQoKWAsIGBpb191cmluZ19jcV9lbnRlcigpYCwgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIG1lbW9yeSBiYXJyaWVyIGluc3RydWN0aW9ucyB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgY2hlY2tzIG9uIGZsYWdzIG9yIGVycm9yIGNvZGVzLiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBzb3VyY2UgY29kZS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgaG93IGlvX3VyaW5nIGVmZmljaWVudGx5IGhhbmRsZXMgSS9PLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5ODpcdCAqL1xuIDY5OTpcdHN0YXRpYyBib29sIGlvX2ZpbGxfbm9wX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG9mZilcbiA3MDA6XHR7XG4gNzAxOlx0XHRpZiAoaW9fY3FyaW5nX3F1ZXVlZChjdHgpIFx1MDAzYyBjdHgtXHUwMDNlY3FfZW50cmllcykge1xuIDcwMjpcdFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWUgPSBcdTAwMjZjdHgtXHUwMDNlcmluZ3MtXHUwMDNlY3Flc1tvZmZdO1xuIDcwMzpcdFxuIDcwNDpcdFx0XHRjcWUtXHUwMDNldXNlcl9kYXRhID0gMDtcbiA3MDU6XHRcdFx0Y3FlLVx1MDAzZXJlcyA9IDA7XG4gNzA2Olx0XHRcdGNxZS1cdTAwM2VmbGFncyA9IElPUklOR19DUUVfRl9TS0lQO1xuIDcwNzpcdFx0XHRjdHgtXHUwMDNlY2FjaGVkX2NxX3RhaWwmIzQzOyYjNDM7O1xuIDcwODpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA3MDk6XHRcdH1cbiA3MTA6XHRcdHJldHVybiBmYWxzZTtcbiA3MTE6XHR9XG4gNzEyOlx0XG4gNzEzOlx0LypcbiA3MTQ6XHQgKiB3cml0ZXMgdG8gdGhlIGNxIGVudHJ5IG5lZWQgdG8gY29tZSBhZnRlciByZWFkaW5nIGhlYWQ7IHRoZVxuIDcxNTpcdCAqIGNvbnRyb2wgZGVwZW5kZW5jeSBpcyBlbm91Z2ggYXMgd2UmIzM5O3JlIHVzaW5nIFdSSVRFX09OQ0UgdG9cbiA3MTY6XHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxuIDcxNzpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIGlvX3VyaW5nIENRRSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBtaXhlZCBtb2RlLCB3aXRoIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCwgdGhlIGNvZGUgc2VlbXMgdG8gaGF2ZSBhIHNwZWNpZmljIGhhbmRsaW5nIGZvciB0aGUgbGFzdCBzbG90IGJlZm9yZSB0aGUgQ1EgcmluZyB3cmFwcyBhcm91bmQuIFNwZWNpZmljYWxseSwgd2hlbiBgb2ZmICYjNDM7IDEgPT0gY3R4LSZndDtjcV9lbnRyaWVzYCwgaXQgbG9va3MgbGlrZSBhIGR1bW15IENRRSB3aXRoIGBJT1JJTkdfQ1FFX0ZfU0tJUGAgaXMgaW5zZXJ0ZWQuIFRoZW4sIGEgMzItYnl0ZSBDUUUgaXMgcGxhY2VkIHN0YXJ0aW5nIGF0IHRoZSBiZWdpbm5pbmcgKGBvZmYgPSAwYCkuIEJ1dCBoYW5nIG9uLi4uIHVzZXJzcGFjZSBoYXMgYWNjZXNzIHRvIHRoaXMgc2hhcmVkIG1lbW9yeSAobW1hcCEpLCBhbmQgdGhleSAqY291bGQqIHBvdGVudGlhbGx5IG1vZGlmeSB0aGUgQ1FFIGVudHJpZXMgaW4gdGhlIHNoYXJlZCByaW5nLgoKSSBzZWUgdGhhdCBgci0mZ3Q7Y3Flc2AgaXMgbWFwcGVkIGludG8gdXNlcnNwYWNlOyBhbmQgSSBoYXZlIGEgYmFkIGZlZWxpbmcgYWJvdXQgdGhpcywgdGhpcyBjb3VsZCBoYXZlIG1ham9yIGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIGxvb2sgYXQgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gLiBUaGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBDUSBlbnRyaWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjaGVjayBhbmQgdGhlIGNvbmRpdGlvbiB0aGF0IHNldHMgdGhlIGBjcWUzMmAgYm9vbGVhbi4KClRoZSBsaW5lIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoaXM6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gTm93LCBgY3FfaGVhZGAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGluY3JlbWVudHMuIFRoZSBpbmRleCB0byBhY2Nlc3MgYHItJmd0O2NxZXNgIGlzIGBjcV9oZWFkICZhbXA7IGNxX21hc2tgLiBXYWl0LCB3aGF0IGlzIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgZG9pbmc/IFdoeSBpcyB0aGVyZSBhIGRpcmVjdCBjb21wYXJpc29uIGJldHdlZW4gYGNxX2hlYWRgIGFuZCBgY3FfbWFza2AsIHJhdGhlciB0aGFuIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKSA9PSBjcV9tYXNrYD8KCk9rYXksIEkgdGhpbmsgSSYjMzk7bSBzdGFydGluZyB0byBzZWUgdGhlIGlzc3VlLiBXaGVuIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKWAgcG9pbnRzIHRvIHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgKmFuZCogYGNxZS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX0NRRV9GXzMyYCBpcyBzZXQgKHdoaWNoIGNvdWxkIGJlIG1hbGljaW91c2x5IHNldCBieSB1c2Vyc3BhY2UpLCB0aGUgY29kZSB3aWxsIHByb2NlZWQgdG8gYWNjZXNzIHRoZSBgY3FlLSZndDtiaWdfY3FlYCBhcnJheS4gIElmIHRoZSBsYXN0IGVsZW1lbnQgaXMgYWNjZXNzZWQsIGl0IG1heSBhdHRlbXB0IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBgci0mZ3Q7Y3Flc2AgYXJyYXkuIFRoaXMgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkIQoKSWYgdGhpcyBvY2N1cnMsIGNvdWxkIHRoaXMgYmUgZGV0ZWN0ZWQ/IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoaXMgc29ydCBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggbWVhbnMgYSBrZXJuZWwgcGFuaWMuIFdhaXQsIHdoYXQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IElzIHRoaXMgbWVtb3J5IGFmdGVyIGByLSZndDtjcWVzYCBhbGxvY2F0ZWQgb3Igbm90PyBJIG5lZWQgdG8gY2hlY2sgaG93IGByLSZndDtjcWVzYCBpcyBhbGxvY2F0ZWQgYW5kIHNpemVkIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gc2VhcmNoIGZvciBgcmluZ3Nfc2l6ZWAgYW5kIHdoZXJlIGByLSZndDtjcWVzYCBsaXZlcyEgSSBhbSBwcmV0dHkgc3VyZSB0aGlzIGlzIGEgcmVhbCB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBhIG1pc2NhbGN1bGF0aW9uIG9mIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JpbmdzX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTIwNjk9c3RhdGljIHZvaWQgaW9fcmluZ3NfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIwNzctXG5pb191cmluZy9pb191cmluZy5jOjIwNzg6c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXG5pb191cmluZy9pb191cmluZy5jLTIwNzktXHRcdCAgICAgIHVuc2lnbmVkIGludCBjcV9lbnRyaWVzLCBzdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0ICpybClcbi0tXG5pb191cmluZy9pb191cmluZy5jLTIxMjYtXG5pb191cmluZy9pb191cmluZy5jOjIxMjc6XHRybC1cdTAwM2VyaW5nc19zaXplID0gb2ZmO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTI4LVx0cmV0dXJuIDA7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzE3PXN0YXRpYyBfX2NvbGQgaW50IGlvX2FsbG9jYXRlX3NjcV91cmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzMwLVx0bWVtc2V0KFx1MDAyNnJkLCAwLCBzaXplb2YocmQpKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjczMTpcdHJkLnNpemUgPSBQQUdFX0FMSUdOKHJsLVx1MDAzZXJpbmdzX3NpemUpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzMyLVx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX05PX01NQVApIHtcbi0tXG5pb191cmluZy9pb191cmluZy5jPTI4OTQ9aW50IGlvX3ByZXBhcmVfY29uZmlnKHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTA2LVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTA3Olx0cmV0ID0gcmluZ3Nfc2l6ZShwLVx1MDAzZWZsYWdzLCBwLVx1MDAzZXNxX2VudHJpZXMsIHAtXHUwMDNlY3FfZW50cmllcyxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjkwOC1cdFx0XHQgXHUwMDI2Y29uZmlnLVx1MDAzZWxheW91dCk7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yMj1zdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0IHtcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjMtXHQvKiBzaXplIG9mIENRICYjNDM7IGhlYWRlcnMgJiM0MzsgU1Egb2Zmc2V0IGFycmF5ICovXG5pb191cmluZy9pb191cmluZy5oOjI0Olx0c2l6ZV90IHJpbmdzX3NpemU7XG5pb191cmluZy9pb191cmluZy5oLTI1LVx0c2l6ZV90IHNxX3NpemU7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MjYtXHRtZW1zZXQoXHUwMDI2cmQsIDAsIHNpemVvZihyZCkpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1Mjc6XHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cdTAwM2VyaW5nc19zaXplKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTI4LVx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQ0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgcmluZ3Nfc2l6ZWAgaW4gYGlvX3VyaW5nLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgYHJpbmdzX3NpemVgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJpbmcgYnVmZmVyIHNpemUgaXMgZGV0ZXJtaW5lZCBhbmQgaG93IGl0IGltcGFjdHMgcGVyZm9ybWFuY2UuIEkmIzM5O20gYXNzdW1pbmcsIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgc3RydWN0dXJlcywgdGhhdCB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgY2VudHJhbCB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbGF5b3V0IGFuZCB0aGUgYmFsYW5jZSBiZXR3ZWVuIENQVSB1dGlsaXphdGlvbiBhbmQgSS9PIGxhdGVuY3kuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBpbmZsdWVuY2VzIGZyb20gYm90aCBoYXJkd2FyZSBsaW1pdGF0aW9ucyAoY2FjaGUgbGluZSBzaXplcywgcGFnZSBzaXplcykgYW5kIHBvdGVudGlhbCB0dW5pbmcgcGFyYW1ldGVycyBleHBvc2VkIHRvIHRoZSB1c2VyLiBJIGFsc28gYW50aWNpcGF0ZSBpdCB3aWxsIGFmZmVjdCB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBwcm9jZXNzaW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBkeW5hbWljIGFkanVzdG1lbnRzIGFyZSBtYWRlIGR1cmluZyBydW50aW1lIGJhc2VkIG9uIHN5c3RlbSBsb2FkIG9yIG90aGVyIGZhY3RvcnMuIFRoZSBjb2RlIGluIGBpb191cmluZy5jYCB3aWxsIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLCBhbmQgSSYjMzk7bSByZWFkeSB0byBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDc4Olx0c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXG4yMDc5Olx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcV9lbnRyaWVzLCBzdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0ICpybClcbjIwODA6XHR7XG4yMDgxOlx0XHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzO1xuMjA4MjpcdFx0c2l6ZV90IHNxZV9zaXplO1xuMjA4MzpcdFx0c2l6ZV90IG9mZjtcbjIwODQ6XHRcbjIwODU6XHRcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xuMjA4NjpcdFx0XHRpZiAoY3FfZW50cmllcyBcdTAwM2MgMilcbjIwODc6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjIwODg6XHRcdH1cbjIwODk6XHRcdGlmIChmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRCkge1xuMjA5MDpcdFx0XHRpZiAoc3FfZW50cmllcyBcdTAwM2MgMilcbjIwOTE6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjIwOTI6XHRcdH1cbjIwOTM6XHRcbjIwOTQ6XHRcdHJsLVx1MDAzZXNxX2FycmF5X29mZnNldCA9IFNJWkVfTUFYO1xuMjA5NTpcdFxuMjA5NjpcdFx0c3FlX3NpemUgPSBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3NxZSk7XG4yMDk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpXG4yMDk4Olx0XHRcdHNxZV9zaXplICo9IDI7XG4yMDk5Olx0XG4yMTAwOlx0XHRybC1cdTAwM2VzcV9zaXplID0gYXJyYXlfc2l6ZShzcWVfc2l6ZSwgc3FfZW50cmllcyk7XG4yMTAxOlx0XHRpZiAocmwtXHUwMDNlc3Ffc2l6ZSA9PSBTSVpFX01BWClcbjIxMDI6XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4yMTAzOlx0XG4yMTA0Olx0XHRvZmYgPSBzdHJ1Y3Rfc2l6ZShyaW5ncywgY3FlcywgY3FfZW50cmllcyk7XG4yMTA1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbjIxMDY6XHRcdFx0b2ZmID0gc2l6ZV9tdWwob2ZmLCAyKTtcbjIxMDc6XHRcdGlmIChvZmYgPT0gU0laRV9NQVgpXG4yMTA4Olx0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuMjEwOTpcdFxuMjExMDpcdCNpZmRlZiBDT05GSUdfU01QXG4yMTExOlx0XHRvZmYgPSBBTElHTihvZmYsIFNNUF9DQUNIRV9CWVRFUyk7XG4yMTEyOlx0XHRpZiAob2ZmID09IDApXG4yMTEzOlx0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuMjExNDpcdCNlbmRpZlxuMjExNTpcdFxuMjExNjpcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSkge1xuMjExNzpcdFx0XHRzaXplX3Qgc3FfYXJyYXlfc2l6ZTtcbjIxMTg6XHRcbjIxMTk6XHRcdFx0cmwtXHUwMDNlc3FfYXJyYXlfb2Zmc2V0ID0gb2ZmO1xuMjEyMDpcdFxuMjEyMTpcdFx0XHRzcV9hcnJheV9zaXplID0gYXJyYXlfc2l6ZShzaXplb2YodTMyKSwgc3FfZW50cmllcyk7XG4yMTIyOlx0XHRcdG9mZiA9IHNpemVfYWRkKG9mZiwgc3FfYXJyYXlfc2l6ZSk7XG4yMTIzOlx0XHRcdGlmIChvZmYgPT0gU0laRV9NQVgpXG4yMTI0Olx0XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4yMTI1Olx0XHR9XG4yMTI2Olx0XG4yMTI3Olx0XHRybC1cdTAwM2VyaW5nc19zaXplID0gb2ZmO1xuMjEyODpcdFx0cmV0dXJuIDA7XG4yMTI5Olx0fVxuMjEzMDpcdFxuMjEzMTpcdHN0YXRpYyBfX2NvbGQgdm9pZCBfX2lvX3JlcV9jYWNoZXNfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbjIxMzI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEkvTyBSaW5nIENRRSBTaXppbmcgYW5kIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIEFjY2VzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBzaXplIG9mIHRoZSBJL08gcmluZyBpcyBjYWxjdWxhdGVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzIChDUUVzKS4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYHJpbmdzX3NpemVgIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIGByaW5nc2AsIGBjcWVzYCwgYW5kIGBjcV9lbnRyaWVzYC4gTm93LCBmb3IgdGhlIHN0YW5kYXJkIGNhc2UsIGV2ZXJ5dGhpbmcgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgb2JzZXJ2YXRpb24gaGVyZSBpcyBhYm91dCB0aGUgYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGZsYWcuIFdpdGggdGhpcywgdGhlIGNvZGUgKmRvZXNuJiMzOTt0KiBkb3VibGUgYGNxX2VudHJpZXNgLCB3aGljaCBpcyB3aGF0IG9uZSBtaWdodCBpbml0aWFsbHkgZXhwZWN0LiBJbnN0ZWFkLCBgY3FfZW50cmllc2AgcmVmbGVjdHMgdGhlIG51bWJlciBvZiAxNi1ieXRlIENRRSBzbG90cyBhbGxvY2F0ZWQgaW4gYHJpbmdzLSZndDtjcWVzYC4KClRoZSBpbXBsaWNhdGlvbj8gV2hlbiBhIDMyLWJ5dGUgQ1FFIGlzIHV0aWxpemVkIGluIG1peGVkIG1vZGUsIGl0IGNvbnN1bWVzICp0d28qIG9mIHRoZXNlIDE2LWJ5dGUgc2xvdHMuIEl0JiMzOTtzIHRoaXMgZGV0YWlsIHRoYXQgYnJpbmdzIHVwIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgc2VlIGEgcHJvYmxlbSBpZiB0aGUgKmxhc3QqIHNsb3QgaW4gdGhlIHJpbmcgKGBjcV9oZWFkICZhbXA7IGNxX21hc2sgPT0gY3FfbWFza2ApIGhhcyBgSU9SSU5HX0NRRV9GXzMyYCBzZXQuIFRoaXMgbWVhbnMgYSAzMi1ieXRlIENRRSBpcyBpbXBsaWVkLCBidXQgc2luY2UgaXQmIzM5O3MgdGhlIGZpbmFsIHNsb3QsIGl0IGNhbm5vdCBhY3R1YWxseSBiZSBhIDMyLWJ5dGUgQ1FFOyBpdCBpcyBvbmx5IGEgMTYgYnl0ZSBzbG90LiBSZWFkaW5nIGBjcWUtJmd0O2JpZ19jcWVbMF1gIGFuZCBgY3FlLSZndDtiaWdfY3FlWzFdYCB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyBiZXlvbmQgdGhlIGFsbG9jYXRlZCBgcmluZ3MtJmd0O2NxZXNbY3FfZW50cmllcyAtIDFdYCEKCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhhdCBsYXN0IGByaW5ncy0mZ3Q7Y3Flc2AgZWxlbWVudC4gQWgsIEkgc2VlOiB0aGVyZSYjMzk7cyBlaXRoZXIgcGFkZGluZyBmb3IgU01QIChpZiBgQ09ORklHX1NNUGAgaXMgZW5hYmxlZCkgb3IgcGFkZGluZyB0byBwYWdlIGFsaWdubWVudCBpZiBgSU9SSU5HX1NFVFVQX05PX1NRQVJSQVlgIGlzIHNldC4gU28sIGlmIHdlIHJlYWQgYmV5b25kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBDUUVzLCB3aWxsIHdlIGhpdCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igd2lsbCBpdCBiZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBoYXZlIHRvIGNoZWNrIGhvdyB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IGFsbG9jYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBnbyBsb29rIGF0IGhvdyBgaW9fYWxsb2NhdGVfc2NxX3VyaW5nc2Agd29ya3MuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3MTU6XHR9XG4yNzE2Olx0XG4yNzE3Olx0c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbjI3MTg6XHRcdFx0XHRcdFx0IHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXG4yNzE5Olx0e1xuMjcyMDpcdFx0c3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcCA9IFx1MDAyNmNvbmZpZy1cdTAwM2VwO1xuMjcyMTpcdFx0c3RydWN0IGlvX3JpbmdzX2xheW91dCAqcmwgPSBcdTAwMjZjb25maWctXHUwMDNlbGF5b3V0O1xuMjcyMjpcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjIHJkO1xuMjcyMzpcdFx0c3RydWN0IGlvX3JpbmdzICpyaW5ncztcbjI3MjQ6XHRcdGludCByZXQ7XG4yNzI1Olx0XG4yNzI2Olx0XHQvKiBtYWtlIHN1cmUgdGhlc2UgYXJlIHNhbmUsIGFzIHdlIGFscmVhZHkgYWNjb3VudGVkIHRoZW0gKi9cbjI3Mjc6XHRcdGN0eC1cdTAwM2VzcV9lbnRyaWVzID0gcC1cdTAwM2VzcV9lbnRyaWVzO1xuMjcyODpcdFx0Y3R4LVx1MDAzZWNxX2VudHJpZXMgPSBwLVx1MDAzZWNxX2VudHJpZXM7XG4yNzI5Olx0XG4yNzMwOlx0XHRtZW1zZXQoXHUwMDI2cmQsIDAsIHNpemVvZihyZCkpO1xuMjczMTpcdFx0cmQuc2l6ZSA9IFBBR0VfQUxJR04ocmwtXHUwMDNlcmluZ3Nfc2l6ZSk7XG4yNzMyOlx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfTk9fTU1BUCkge1xuMjczMzpcdFx0XHRyZC51c2VyX2FkZHIgPSBwLVx1MDAzZWNxX29mZi51c2VyX2FkZHI7XG4yNzM0Olx0XHRcdHJkLmZsYWdzIHw9IElPUklOR19NRU1fUkVHSU9OX1RZUEVfVVNFUjtcbjI3MzU6XHRcdH1cbjI3MzY6XHRcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlcmluZ19yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xuMjczNzpcdFx0aWYgKHJldClcbjI3Mzg6XHRcdFx0cmV0dXJuIHJldDtcbjI3Mzk6XHRcdGN0eC1cdTAwM2VyaW5ncyA9IHJpbmdzID0gaW9fcmVnaW9uX2dldF9wdHIoXHUwMDI2Y3R4LVx1MDAzZXJpbmdfcmVnaW9uKTtcbjI3NDA6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlcmluZ3NfcmN1LCByaW5ncyk7XG4yNzQxOlx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSlcbjI3NDI6XHRcdFx0Y3R4LVx1MDAzZXNxX2FycmF5ID0gKHUzMiAqKSgoY2hhciAqKXJpbmdzICYjNDM7IHJsLVx1MDAzZXNxX2FycmF5X29mZnNldCk7XG4yNzQzOlx0XG4yNzQ0Olx0XHRtZW1zZXQoXHUwMDI2cmQsIDAsIHNpemVvZihyZCkpO1xuMjc0NTpcdFx0cmQuc2l6ZSA9IFBBR0VfQUxJR04ocmwtXHUwMDNlc3Ffc2l6ZSk7XG4yNzQ2Olx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfTk9fTU1BUCkge1xuMjc0NzpcdFx0XHRyZC51c2VyX2FkZHIgPSBwLVx1MDAzZXNxX29mZi51c2VyX2FkZHI7XG4yNzQ4Olx0XHRcdHJkLmZsYWdzIHw9IElPUklOR19NRU1fUkVHSU9OX1RZUEVfVVNFUjtcbjI3NDk6XHRcdH1cbjI3NTA6XHRcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlc3FfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9TUUVTKTtcbjI3NTE6XHRcdGlmIChyZXQpIHtcbjI3NTI6XHRcdFx0aW9fcmluZ3NfZnJlZShjdHgpO1xuMjc1MzpcdFx0XHRyZXR1cm4gcmV0O1xuMjc1NDpcdFx0fVxuMjc1NTpcdFx0Y3R4LVx1MDAzZXNxX3NxZXMgPSBpb19yZWdpb25fZ2V0X3B0cihcdTAwMjZjdHgtXHUwMDNlc3FfcmVnaW9uKTtcbjI3NTY6XHRcbjI3NTc6XHRcdG1lbXNldChyaW5ncywgMCwgc2l6ZW9mKCpyaW5ncykpO1xuMjc1ODpcdFx0V1JJVEVfT05DRShyaW5ncy1cdTAwM2VzcV9yaW5nX21hc2ssIGN0eC1cdTAwM2VzcV9lbnRyaWVzIC0gMSk7XG4yNzU5Olx0XHRXUklURV9PTkNFKHJpbmdzLVx1MDAzZWNxX3JpbmdfbWFzaywgY3R4LVx1MDAzZWNxX2VudHJpZXMgLSAxKTtcbjI3NjA6XHRcdFdSSVRFX09OQ0UocmluZ3MtXHUwMDNlc3FfcmluZ19lbnRyaWVzLCBjdHgtXHUwMDNlc3FfZW50cmllcyk7XG4yNzYxOlx0XHRXUklURV9PTkNFKHJpbmdzLVx1MDAzZWNxX3JpbmdfZW50cmllcywgY3R4LVx1MDAzZWNxX2VudHJpZXMpO1xuMjc2MjpcdFx0cmV0dXJuIDA7XG4yNzYzOlx0fVxuMjc2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU3NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBpb19jcmVhdGVfcmVnaW9uYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgaW9fY3JlYXRlX3JlZ2lvbmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIHRoZXJlLiBJdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhpcyByZWdpb24gaXMgY29uc3RydWN0ZWQsIGFuZCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aWxsIGxpa2VseSByZXNpZGUgd2l0aGluIHRob3NlIGFsbG9jYXRpb24gcm91dGluZXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIGdvb2QsIGJ1dCBpdCYjMzk7cyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlIG9mIGBpb19jcmVhdGVfcmVnaW9uYCBpdHNlbGYgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgdGhpbmcgYWN0dWFsbHkgYnVpbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW9fdXJpbmcuYz0yNzE3PXN0YXRpYyBfX2NvbGQgaW50IGlvX2FsbG9jYXRlX3NjcV91cmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzM1LVx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzM2Olx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmN0eC1cdTAwM2VyaW5nX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XG5pb191cmluZy9pb191cmluZy5jLTI3MzctXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0OS1cdH1cbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mjc1MDpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZjdHgtXHUwMDNlc3FfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9TUUVTKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc1MS1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9rYnVmLmM9NjMwPWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTY3OC1cdH1cbmlvX3VyaW5nL2tidWYuYzo2Nzk6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2YmwtXHUwMDNlcmVnaW9uLCBcdTAwMjZyZCwgbW1hcF9vZmZzZXQpO1xuaW9fdXJpbmcva2J1Zi5jLTY4MC1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0yMDYtXG5pb191cmluZy9tZW1tYXAuYzoyMDc6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbmlvX3VyaW5nL21lbW1hcC5jLTIwOC1cdFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcbi0tXG5pb191cmluZy9tZW1tYXAuaD0yMD12b2lkIGlvX2ZyZWVfcmVnaW9uKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yKTtcbmlvX3VyaW5nL21lbW1hcC5oOjIxOmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG5pb191cmluZy9tZW1tYXAuaC0yMi1cdFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTUzMS1cdH1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTMyOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNm4ucmluZ19yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzMtXHRpZiAocmV0KVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYxLVx0fVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1NjI6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2bi5zcV9yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy01NjMtXHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03MDM9c3RhdGljIGludCBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqdWFyZylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTczMi1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzMzOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNnJlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19NQVBfT0ZGX1BBUkFNX1JFR0lPTik7XG5pb191cmluZy9yZWdpc3Rlci5jLTczNC1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvemNyeC5jPTQxND1zdGF0aWMgaW50IGlvX2FsbG9jYXRlX3JidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy96Y3J4LmMtNDMzLVxuaW9fdXJpbmcvemNyeC5jOjQzNDpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZpZnEtXHUwMDNlcnFfcmVnaW9uLCByZCwgbW1hcF9vZmZzZXQpO1xuaW9fdXJpbmcvemNyeC5jLTQzNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbWVtbWFwLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgYGlvX3VyaW5nL21lbW1hcC5jYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBtbWFwLXJlbGF0ZWQgYXNwZWN0cy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHVzZXItc3BhY2UgYW5kIGtlcm5lbC1zcGFjZSBtZW1vcnkgcmVnaW9ucyBoZXJlLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBzaGFyaW5nIG9mIG1lbW9yeSBidWZmZXJzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zIGFuZCBob3cgdGhhdCYjMzk7cyBoYW5kbGVkIHdpdGggbWVtb3J5IG1hcHBpbmcuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzIG9mIG1lbW9yeSBwcm90ZWN0aW9uLCBjYWNoaW5nLCBhbmQgc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSBlZmZpY2llbnQgYW5kIHNhZmUgZGF0YSB0cmFuc2ZlcnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IG9wdGltaXphdGlvbnMgdGhhdCBhcmUgdXNlZCBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhleSBjb3VsZCBiZSBpbXBsZW1lbnRlZCBvciBpbXByb3ZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NDpcdHN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiAxNzU6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcbiAxNzY6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG1tYXBfb2Zmc2V0LFxuIDE3NzpcdFx0XHRcdFx0ICAgIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbiAxNzg6XHR7XG4gMTc5Olx0XHRnZnBfdCBnZnAgPSBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOO1xuIDE4MDpcdFx0c2l6ZV90IHNpemUgPSBpb19yZWdpb25fc2l6ZShtcik7XG4gMTgxOlx0XHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZDtcbiAxODI6XHRcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gMTgzOlx0XG4gMTg0Olx0XHRwYWdlcyA9IGt2bWFsbG9jX29ianMoKnBhZ2VzLCBtci1cdTAwM2Vucl9wYWdlcywgZ2ZwKTtcbiAxODU6XHRcdGlmICghcGFnZXMpXG4gMTg2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE4NzpcdFxuIDE4ODpcdFx0aWYgKGlvX21lbV9hbGxvY19jb21wb3VuZChwYWdlcywgbXItXHUwMDNlbnJfcGFnZXMsIHNpemUsIGdmcCwgdXNlcikpIHtcbiAxODk6XHRcdFx0bXItXHUwMDNlZmxhZ3MgfD0gSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRjtcbiAxOTA6XHRcdFx0Z290byBkb25lO1xuIDE5MTpcdFx0fVxuIDE5MjpcdFxuIDE5MzpcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuIDE5NDpcdFx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4gMTk1Olx0XHRpZiAobnJfYWxsb2NhdGVkICE9IG1yLVx1MDAzZW5yX3BhZ2VzKSB7XG4gMTk2Olx0XHRcdGlmIChucl9hbGxvY2F0ZWQpXG4gMTk3Olx0XHRcdFx0cmVsZWFzZV9wYWdlcyhwYWdlcywgbnJfYWxsb2NhdGVkKTtcbiAxOTg6XHRcdFx0a3ZmcmVlKHBhZ2VzKTtcbiAxOTk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjAwOlx0XHR9XG4gMjAxOlx0ZG9uZTpcbiAyMDI6XHRcdHJlZy1cdTAwM2VtbWFwX29mZnNldCA9IG1tYXBfb2Zmc2V0O1xuIDIwMzpcdFx0bXItXHUwMDNlcGFnZXMgPSBwYWdlcztcbiAyMDQ6XHRcdHJldHVybiAwO1xuIDIwNTpcdH1cbiAyMDY6XHRcbiAyMDc6XHRpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuIDIwODpcdFx0XHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxuIDIwOTpcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbW1hcF9vZmZzZXQpXG4gMjEwOlx0e1xuIDIxMTpcdFx0aW50IG5yX3BhZ2VzLCByZXQ7XG4gMjEyOlx0XHR1NjQgZW5kO1xuIDIxMzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIGlvX3VyaW5nIENRRSBDb3JydXB0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaW9fdXJpbmdgIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYC4gIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtZW1vcnkgZm9yIHRoZSBDUUUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpIHN0cnVjdHVyZXMgaXMgemVyb2VkIG91dCBvbiBhbGxvY2F0aW9uIOKAkyBJJiMzOTttIHNlZWluZyBgX19HRlBfWkVST2AgdXNlZCwgYW5kIGBtZW1zZXRgIGlzIGNhbGxlZCBvbiBgcmluZ3NgLiBUaGlzIHNob3VsZCBtZWFuIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSwgc28gYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGFyZSBhIHJlZCBmbGFnLgoKTm93LCBJJiMzOTttIHJlLWV4YW1pbmluZyB0aGlzIHBhdGNoIGRpZmYuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyBhcm91bmQgdGhlIHByaW50aW5nIG9mIENRRSBpbmZvcm1hdGlvbiBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGFuZCB1c2luZyBpdCB3aGVuIHByaW50aW5nIENRRXMuIAoKSXQgc2VlbXMgdGhlIGNvZGUgaXMgdHJ5aW5nIHRvIGhhbmRsZSB0aGUgYElPUklOR19DUUVfRl8zMmAgZmxhZyBhbmQgYElPUklOR19TRVRVUF9DUUUzMmAgb3B0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byAzMi1iaXQgQ1FFIGhhbmRsaW5nLiBUaGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGEgY29uZGl0aW9uOiBpdCYjMzk7cyBjaGVja2luZyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgMzItYml0IENRRSwgZWl0aGVyIGV4cGxpY2l0bHkgaW4gdGhlIENRRSYjMzk7cyBmbGFncyBvciBpbXBsaWNpdGx5IHZpYSB0aGUgcmluZyBzZXR1cCwgKmFuZCogaWYgd2UgYXJlICpub3QqIGF0IHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgd2UgZXhlY3V0ZSB0aGlzIGNvbmRpdGlvbi4gVGhlIGVhcmxpZXIgY29uZGl0aW9uIHByaW50ZWQgdGhlIENRRSBpbmZvIGlmIGVpdGhlciBmbGFnIHdhcyBzZXQuIAoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHJlYWxseSByZWFkIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAxMjAtMTgwIGluIGBpb191cmluZy9mZGluZm8uY2AuIENvbnRleHQgaXMgZXZlcnl0aGluZywgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBDUUUgYXJyYXkgaXMgbWFuYWdlZCBhbmQgaG93IHRoaXMgYGlzX2xhc3RfY3FhcnJheV9zbG90YCB2YXJpYWJsZSBpcyBjYWxjdWxhdGVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2ggYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCBzZWVtcyBhcyB0aG91Z2ggdGhlIGlzc3VlIGhhcyB0byBkbyB3aXRoIHJlYWRpbmcgZnJvbSB0aGUgQ1FFIHdoZW4gd2UgYXJlIGF0IHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgYW5kIHdpdGggdGhlIGZsYWdzIGluZGljYXRpbmcgYSBgY3FlMzJgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgbW9yZSBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2ZkaW5mby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdFx0XHRcdGJyZWFrO1xuIDEyMTpcdFx0XHRcdH1cbiAxMjI6XHRcdFx0XHRpZiAoc3FfaWR4ID09IHNxX21hc2spIHtcbiAxMjM6XHRcdFx0XHRcdHNlcV9wcmludGYobSxcbiAxMjQ6XHRcdFx0XHRcdFx0XCYjMzQ7JTV1OiBjb3JydXB0ZWQgc3FlLCB3cmFwcGluZyAxMjhCIGVudHJ5XFxuXCYjMzQ7LFxuIDEyNTpcdFx0XHRcdFx0XHRzcV9pZHgpO1xuIDEyNjpcdFx0XHRcdFx0YnJlYWs7XG4gMTI3Olx0XHRcdFx0fVxuIDEyODpcdFx0XHRcdHNxX2hlYWQmIzQzOyYjNDM7O1xuIDEyOTpcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIDEzMDpcdFx0XHRcdHNxZTEyOCA9IHRydWU7XG4gMTMxOlx0XHRcdH1cbiAxMzI6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNXU6IG9wY29kZTolcywgZmQ6JWQsIGZsYWdzOiV4LCBvZmY6JWxsdSwgXCYjMzQ7XG4gMTMzOlx0XHRcdFx0ICAgICAgXCYjMzQ7YWRkcjoweCVsbHgsIHJ3X2ZsYWdzOjB4JXgsIGJ1Zl9pbmRleDolZCBcJiMzNDtcbiAxMzQ6XHRcdFx0XHQgICAgICBcJiMzNDt1c2VyX2RhdGE6JWxsdVwmIzM0OyxcbiAxMzU6XHRcdFx0XHQgICBzcV9pZHgsIGlvX3VyaW5nX2dldF9vcGNvZGUob3Bjb2RlKSwgc3FlLVx1MDAzZWZkLFxuIDEzNjpcdFx0XHRcdCAgIHNxZS1cdTAwM2VmbGFncywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3FlLVx1MDAzZW9mZixcbiAxMzc6XHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKSBzcWUtXHUwMDNlYWRkciwgc3FlLVx1MDAzZXJ3X2ZsYWdzLFxuIDEzODpcdFx0XHRcdCAgIHNxZS1cdTAwM2VidWZfaW5kZXgsIHNxZS1cdTAwM2V1c2VyX2RhdGEpO1xuIDEzOTpcdFx0XHRpZiAoc3FlMTI4KSB7XG4gMTQwOlx0XHRcdFx0dTY0ICpzcWViID0gKHZvaWQgKikgKHNxZSAmIzQzOyAxKTtcbiAxNDE6XHRcdFx0XHRpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfc3FlKSAvIHNpemVvZih1NjQpO1xuIDE0MjpcdFx0XHRcdGludCBqO1xuIDE0MzpcdFxuIDE0NDpcdFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHNpemU7IGomIzQzOyYjNDM7KSB7XG4gMTQ1Olx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OywgZSVkOjB4JWxseFwmIzM0OywgaixcbiAxNDY6XHRcdFx0XHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKSAqc3FlYik7XG4gMTQ3Olx0XHRcdFx0XHRzcWViJiM0MzsmIzQzOztcbiAxNDg6XHRcdFx0XHR9XG4gMTQ5Olx0XHRcdH1cbiAxNTA6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDtcXG5cJiMzNDspO1xuIDE1MTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7Q1FFczpcXHQldVxcblwmIzM0OywgY3FfdGFpbCAtIGNxX2hlYWQpO1xuIDE1NDpcdFx0Y3FfZW50cmllcyA9IG1pbihjcV90YWlsIC0gY3FfaGVhZCwgY3R4LVx1MDAzZWNxX2VudHJpZXMpO1xuIDE1NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3FfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiAxNTY6XHRcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlO1xuIDE1NzpcdFx0XHRib29sIGNxZTMyID0gZmFsc2U7XG4gMTU4Olx0XHRcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbiAxNTk6XHRcbiAxNjA6XHRcdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG4gMTYxOlx0XHRcdGlmICgoY3FlLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFx1MDAyNlx1MDAyNlxuIDE2MjpcdFx0XHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxuIDE2MzpcdFx0XHRcdGNxZTMyID0gdHJ1ZTtcbiAxNjQ6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCYjMzQ7LFxuIDE2NTpcdFx0XHRcdCAgIGNxX2hlYWQgXHUwMDI2IGNxX21hc2ssIGNxZS1cdTAwM2V1c2VyX2RhdGEsIGNxZS1cdTAwM2VyZXMsXG4gMTY2Olx0XHRcdFx0ICAgY3FlLVx1MDAzZWZsYWdzKTtcbiAxNjc6XHRcdFx0aWYgKGNxZTMyKVxuIDE2ODpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7LCBleHRyYTE6JWxsdSwgZXh0cmEyOiVsbHVcJiMzNDssXG4gMTY5Olx0XHRcdFx0XHRcdGNxZS1cdTAwM2ViaWdfY3FlWzBdLCBjcWUtXHUwMDNlYmlnX2NxZVsxXSk7XG4gMTcwOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiAxNzE6XHRcdFx0Y3FfaGVhZCYjNDM7JiM0Mzs7XG4gMTcyOlx0XHRcdGlmIChjcWUzMikge1xuIDE3MzpcdFx0XHRcdGNxX2hlYWQmIzQzOyYjNDM7O1xuIDE3NDpcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIDE3NTpcdFx0XHR9XG4gMTc2Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDE3NzpcdFx0fVxuIDE3ODpcdFxuIDE3OTpcdFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX1NRUE9MTCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTYxNwoJCQkJCQkJb3V0cHV0OiAyNjAKCQkJCQkJCXRob3VnaHRzOiAxNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBpb191cmluZyBwYXRjaCwgYW5kIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgc2NlbmFyaW8gaXMgdGhpczogd2hlbiBwcmludGluZyB0aGUgQ1FFIChDb21wbGV0aW9uIFF1ZXVlIEVudHJ5KSBpbmZvcm1hdGlvbiwgdGhlcmUmIzM5O3MgYSBwb3NzaWJpbGl0eSBvZiB0cnlpbmcgdG8gYWNjZXNzIGBjcWUtJmd0O2JpZ19jcWVgIHdoZW4gYGNxZWAgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgcmluZyBidWZmZXIgKGByLSZndDtjcWVzYCkuIFRoaXMgd291bGQgYmUgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgY29uZGl0aW9uOiBgY3FfaGVhZCAmYW1wOyBjcV9tYXNrID09IGNxX21hc2tgLCB3aGljaCBzaWduaWZpZXMgdGhhdCB3ZSYjMzk7cmUgYXQgdGhlIGVuZCBvZiB0aGUgQ1FFIGFycmF5LiBJZiwgdW5kZXIgdGhhdCBjb25kaXRpb24sIGBjcWUzMmAgaXMgdHJ1ZSwgdGhlbiB3ZSBoYXZlIGFuIE9PQi4KClRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcywgYWRkaW5nIGEgYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIGNoZWNrLiBUaG91Z2ggdGhlIGJpdG1hc2tpbmcgb3BlcmF0aW9uIGAoY3FfaGVhZCAmYW1wOyBjcV9tYXNrKWAgaW1wbGllcyB0aGF0IHRoZSBhY3R1YWwgaW1wbGVtZW50ZWQgY29uZGl0aW9uIGAoY3FfaGVhZCA9PSBjcV9tYXNrKWAgY2FuIGJlIGJ1Z2d5IChpdCBzaG91bGQgYmUgYChjcV9oZWFkICZhbXA7IGNxX21hc2spID09IGNxX21hc2tgKSBidXQgaW4gdGhpcyBhbmFseXNpcywgdGhhdCBpcyBub3QgaW1wb3J0YW50LgoKTm93LCBteSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIG5lY2Vzc2l0YXRlIHNldHRpbmcgYE5lZWRzS01TQU49dHJ1ZWAuIExldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLgoKRmlyc3RseSwgSSBjaGVja2VkIGlmIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHVzZWQuIFRoZSBrZXkgdmFyaWFibGVzLCBgY3FfaGVhZGAsIGBjcV9tYXNrYCwgYW5kIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGFyZSBhbGwgaW5pdGlhbGl6ZWQuIFRoZSBgY3FlMzJgIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlLgoKU2Vjb25kbHksIEkgY29uc2lkZXJlZCBpZiB0aGUgcGF0Y2ggYWxsb3dzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFjdHVhbGx5LCB0aGlzIHBhdGNoICoqcHJldmVudHMqKiByZWFkaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5IHByZXZlbnRpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGludG8gd2hhdGV2ZXIgZm9sbG93cyB0aGUgcmluZyBhcnJheS4KClRoaXJkbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNlcV9wcmludGZgIG91dHB1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHZhbHVlcyBlaXRoZXIgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgb3IgdXNlcnNwYWNlLgoKRmluYWxseSwgZG9lcyB0aGUgcGF0Y2ggY2hhbmdlIHRoZSBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcz8gTm8uIEl0IG9ubHkgbW9kaWZpZXMgYHNob3dfZmRpbmZvYCYjMzk7cyBkaWFnbm9zdGljIG91dHB1dC4gVGhlIGNvcmUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBpcyBzb21ldGhpbmcgS0FTQU4gY2F0Y2hlcy4KClRvIGJlIGV4dHJhIHN1cmUsIEkgbWV0aWN1bG91c2x5IHJlLWV2YWx1YXRlZCB0aGUgS01TQU4gY3JpdGVyaWE6CgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4KKiAgIE5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoqICAgTm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KKiAgIE5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgYWx0ZXJhdGlvbnMgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaXNzdWUgdGhhdCBLQVNBTiBkZXRlY3RzLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYm91bmRhcnkgY2hlY2tzIGFuZCBhcnJheSBpbmRleGluZywgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLgoKKipDb25jbHVzaW9uOiBOZWVkc0tNU0FOID0gZmFsc2UuKiogTm93IEkmIzM5O2xsIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXHUwMDNlY3Flc1tdYC5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXHUwMDNlY3Flc1tdYC5cblxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjozMy44MTE4MjY0NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA3ODE2MDYxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvX3VyaW5nX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJpb191cmluZ19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm8oKWAgaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB0byBwcmV2ZW50IHRyZWF0aW5nIHRoZSBsYXN0IHNsb3Qgb2YgdGhlIENRIHJpbmcgYXJyYXkgYXMgYSAzMi1ieXRlIENRRSAoYGNxZTMyYCkuIFdpdGhvdXQgcHJvcGVyIGJvdW5kYXJ5IGhhbmRsaW5nLCBhdHRlbXB0aW5nIHRvIGFjY2VzcyBgY3FlLVxcdTAwM2ViaWdfY3FlWzBdYCBhbmQgYGNxZS1cXHUwMDNlYmlnX2NxZVsxXWAgb24gdGhlIGxhc3QgZW50cnkgb2YgdGhlIHJpbmcgYXJyYXkgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIChPT0IpIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiBgci1cXHUwMDNlY3Flc1tdYC5cXG5cXG5UaGlzIGlzc3VlIGlzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzLCB3aGljaCBpcyB0cmFja2VkIGFuZCBjYXVnaHQgYnkgS0FTQU4uIFRoZSB1bmRlcmx5aW5nIENRIHJpbmcgcGFnZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIChgX19HRlBfWkVST2AgLyBgbWVtc2V0YCksIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGBjcWUzMmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBhcHByb3ByaWF0ZSBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBDUUUgZm9ybWF0dGluZyBsb2dpYyBpbiBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKCkgd2l0aGluIGlvX3VyaW5nL2ZkaW5mby5jLCB3aGljaCBpcyByZWFjaGFibGUgYnkgcmVhZGluZyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9mZGluZm8vXFx1MDAzY2lvX3VyaW5nX2ZkXFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVxcdTAwM2ViaWdfY3FlIG9uIHdyYXBwZWQgcmluZ3MuIEZ1enppbmcgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIHBhdGggYW5kIHZlcmlmeSBtZW1vcnkgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjozMy44MTE4MzI5MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTE2MDQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyMTMxMTAwY2UxNjdjNDhkM2IxNDlhMWNkODM4YjJiMDNiNDBhMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTY6MjI6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZmRpbmZvLmMgYi9pb191cmluZy9mZGluZm8uY1xcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvZmRpbmZvLmNcXG4rKysgYi9pb191cmluZy9mZGluZm8uY1xcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XFxuIFxcdFxcdGJvb2wgY3FlMzIgPSBmYWxzZTtcXG4rXFx0XFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xcbiBcXG4gXFx0XFx0Y3FlID0gXFx1MDAyNnItXFx1MDAzZWNxZXNbKGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrKV07XFxuLVxcdFxcdGlmIChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXFxuK1xcdFxcdGlmICgoY3FlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxcbiBcXHRcXHRcXHRjcWUzMiA9IHRydWU7XFxuIFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU1dTogdXNlcl9kYXRhOiVsbHUsIHJlczolZCwgZmxhZ3M6JXhcXFwiLFxcbiBcXHRcXHRcXHQgICBjcV9oZWFkIFxcdTAwMjYgY3FfbWFzaywgY3FlLVxcdTAwM2V1c2VyX2RhdGEsIGNxZS1cXHUwMDNlcmVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjozNC4zMjc2ODk1OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNzM1NjMxODA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9fdXJpbmdfc2hvd19mZGluZm9cIixcbiAgICBcImlvX3VyaW5nX3Nob3dfZmRpbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBDUUUgZm9ybWF0dGluZyBsb2dpYyBpbiBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKCkgd2l0aGluIGlvX3VyaW5nL2ZkaW5mby5jLCB3aGljaCBpcyByZWFjaGFibGUgYnkgcmVhZGluZyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9mZGluZm8vXFx1MDAzY2lvX3VyaW5nX2ZkXFx1MDAzZS4gVGhlIGNoZWNrIGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzaylgIGZhaWxzIHRvIG1hc2sgY3FfaGVhZCBhZ2FpbnN0IGNxX21hc2ssIG1lYW5pbmcgd2hlbiBjcV9oZWFkIGFkdmFuY2VzIHBhc3QgY3FfbWFzaywgdGhlIGJvdW5kYXJ5IGNoZWNrIGJlY29tZXMgZmFsc2UgYW5kIGNhbiBhbGxvdyBvdXQtb2YtYm91bmRzIHJlYWRzIGludG8gY3FlLVxcdTAwM2ViaWdfY3FlIG9uIHdyYXBwZWQgcmluZ3MuIEZ1enppbmcgY2FuIGVhc2lseSBleGVyY2lzZSB0aGlzIHBhdGggYW5kIHZlcmlmeSBtZW1vcnkgc2FmZXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMTMxMTAwY2UxNjdjNDhkM2IxNDlhMWNkODM4YjJiMDNiNDBhMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNjoyMjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2ZkaW5mby5jIGIvaW9fdXJpbmcvZmRpbmZvLmNcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mZGluZm8uY1xuKysrIGIvaW9fdXJpbmcvZmRpbmZvLmNcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbitcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIFxuIFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbi1cdFx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuK1x0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCIsXG4gXHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjM0LjMyNzY5MTQ5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNDQ1OTg0MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSU9fVVJJTkcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgaGFzIHRvdWNoZWQgYGlvX3VyaW5nL2ZkaW5mby5jYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Q7IGFueXRoaW5nIHRoYXQgZGVhbHMgd2l0aCBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhc3NvY2lhdGVkIGdpdCBjb21taXQgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBzb21lIGltbWVkaWF0ZSBjb250ZXh0LiBMZXQncyB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiBhIHNuaXBwZXQgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYCBhcm91bmQgbGluZSAxNTUg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhbmQgc2VlIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbXBhY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjI6NDUuNzczNjc4Mzc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvZmRpbmZvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdFxcdFxcdHU2NCAqc3FlYiA9ICh2b2lkICopIChzcWUgKyAxKTtcXG4gMTQxOlxcdFxcdFxcdFxcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XFxuIDE0MjpcXHRcXHRcXHRcXHRpbnQgajtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHNpemU7IGorKykge1xcbiAxNDU6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLCBlJWQ6MHglbGx4XFxcIiwgaixcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdHNxZWIrKztcXG4gMTQ4OlxcdFxcdFxcdFxcdH1cXG4gMTQ5OlxcdFxcdFxcdH1cXG4gMTUwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE1MTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIkNRRXM6XFxcXHQldVxcXFxuXFxcIiwgY3FfdGFpbCAtIGNxX2hlYWQpO1xcbiAxNTQ6XFx0XFx0Y3FfZW50cmllcyA9IG1pbihjcV90YWlsIC0gY3FfaGVhZCwgY3R4LVxcdTAwM2VjcV9lbnRyaWVzKTtcXG4gMTU1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjcV9lbnRyaWVzOyBpKyspIHtcXG4gMTU2OlxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcXG4gMTU3OlxcdFxcdFxcdGJvb2wgY3FlMzIgPSBmYWxzZTtcXG4gMTU4OlxcdFxcdFxcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0XFx0Y3FlID0gXFx1MDAyNnItXFx1MDAzZWNxZXNbKGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrKV07XFxuIDE2MTpcXHRcXHRcXHRpZiAoKGNxZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXFx1MDAyNlxcdTAwMjZcXG4gMTYyOlxcdFxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuIDE2MzpcXHRcXHRcXHRcXHRjcWUzMiA9IHRydWU7XFxuIDE2NDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XFxcIixcXG4gMTY1OlxcdFxcdFxcdFxcdCAgIGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrLCBjcWUtXFx1MDAzZXVzZXJfZGF0YSwgY3FlLVxcdTAwM2VyZXMsXFxuIDE2NjpcXHRcXHRcXHRcXHQgICBjcWUtXFx1MDAzZWZsYWdzKTtcXG4gMTY3OlxcdFxcdFxcdGlmIChjcWUzMilcXG4gMTY4OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiwgZXh0cmExOiVsbHUsIGV4dHJhMjolbGx1XFxcIixcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdGNxZS1cXHUwMDNlYmlnX2NxZVswXSwgY3FlLVxcdTAwM2ViaWdfY3FlWzFdKTtcXG4gMTcwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE3MTpcXHRcXHRcXHRjcV9oZWFkKys7XFxuIDE3MjpcXHRcXHRcXHRpZiAoY3FlMzIpIHtcXG4gMTczOlxcdFxcdFxcdFxcdGNxX2hlYWQrKztcXG4gMTc0OlxcdFxcdFxcdFxcdGkrKztcXG4gMTc1OlxcdFxcdFxcdH1cXG4gMTc2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUVBPTEwpIHtcXG4gMTgwOlxcdFxcdFxcdHN0cnVjdCBpb19zcV9kYXRhICpzcSA9IGN0eC1cXHUwMDNlc3FfZGF0YTtcXG4gMTgxOlxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDE4NDpcXHRcXHRcXHR0c2sgPSByY3VfZGVyZWZlcmVuY2Uoc3EtXFx1MDAzZXRocmVhZCk7XFxuIDE4NTpcXHRcXHRcXHQvKlxcbiAxODY6XFx0XFx0XFx0ICogc3EtXFx1MDAzZXRocmVhZCBtaWdodCBiZSBOVUxMIGlmIHdlIHJhY2VkIHdpdGggdGhlIHNxcG9sbFxcbiAxODc6XFx0XFx0XFx0ICogdGhyZWFkIHRlcm1pbmF0aW9uLlxcbiAxODg6XFx0XFx0XFx0ICovXFxuIDE4OTpcXHRcXHRcXHRpZiAodHNrKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjQ1Ljc3Mzc2Mjg3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MjUyNzMyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb2RlJ3MgRmxvdyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBoZXJlLiBCZWZvcmUgSSBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvbmNsdXNpb24sIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gem9vbSBpbiBvbiBsaW5lIDE0MCBhbmQgdW5kZXJzdGFuZCBpdHMgZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbGVhZGluZyB1cCB0byB0aGF0IHBvaW50LiBXaGF0J3MgdGhlIGZ1bmN0aW9uIGNvbnRleHQ/IFVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2UgaXMgY3JpdGljYWwuIElzIHRoaXMgcGFydCBvZiBhIGNvcmUgYWxnb3JpdGhtLCBhIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGVycm9yIGhhbmRsaW5nPyBLbm93aW5nIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGZyYW1ld29yayB3aXRoaW4gd2hpY2ggdG8gaW50ZXJwcmV0IHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBzcGVjaWZpYyBsaW5lLiBUaGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIG11Y2ggbW9yZSBhY2N1cmF0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjo0OC40OTkwMzk2OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9mZGluZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJOQVBJOlxcXFx0dW5rbm93biBtb2RlICgldSlcXFxcblxcXCIsIG1vZGUpO1xcbiAgNTE6XFx0XFx0fVxcbiAgNTI6XFx0fVxcbiAgNTM6XFx0I2Vsc2VcXG4gIDU0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4gIDU2OlxcdHtcXG4gIDU3OlxcdH1cXG4gIDU4OlxcdCNlbmRpZlxcbiAgNTk6XFx0XFxuICA2MDpcXHRzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlICpvY3FlO1xcbiAgNjM6XFx0XFx0c3RydWN0IGlvX3JpbmdzICpyID0gY3R4LVxcdTAwM2VyaW5ncztcXG4gIDY0OlxcdFxcdHVuc2lnbmVkIGludCBzcV9tYXNrID0gY3R4LVxcdTAwM2VzcV9lbnRyaWVzIC0gMSwgY3FfbWFzayA9IGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIDE7XFxuICA2NTpcXHRcXHR1bnNpZ25lZCBpbnQgc3FfaGVhZCA9IFJFQURfT05DRShyLVxcdTAwM2VzcS5oZWFkKTtcXG4gIDY2OlxcdFxcdHVuc2lnbmVkIGludCBzcV90YWlsID0gUkVBRF9PTkNFKHItXFx1MDAzZXNxLnRhaWwpO1xcbiAgNjc6XFx0XFx0dW5zaWduZWQgaW50IGNxX2hlYWQgPSBSRUFEX09OQ0Uoci1cXHUwMDNlY3EuaGVhZCk7XFxuICA2ODpcXHRcXHR1bnNpZ25lZCBpbnQgY3FfdGFpbCA9IFJFQURfT05DRShyLVxcdTAwM2VjcS50YWlsKTtcXG4gIDY5OlxcdFxcdHVuc2lnbmVkIGludCBzcV9zaGlmdCA9IDA7XFxuICA3MDpcXHRcXHR1bnNpZ25lZCBpbnQgY3FfZW50cmllcywgc3FfZW50cmllcztcXG4gIDcxOlxcdFxcdGludCBzcV9waWQgPSAtMSwgc3FfY3B1ID0gLTE7XFxuICA3MjpcXHRcXHR1NjQgc3FfdG90YWxfdGltZSA9IDAsIHNxX3dvcmtfdGltZSA9IDA7XFxuICA3MzpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFMTI4KVxcbiAgNzY6XFx0XFx0XFx0c3Ffc2hpZnQgPSAxO1xcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHQvKlxcbiAgNzk6XFx0XFx0ICogd2UgbWF5IGdldCBpbXByZWNpc2Ugc3FlIGFuZCBjcWUgaW5mbyBpZiB1cmluZyBpcyBhY3RpdmVseSBydW5uaW5nXFxuICA4MDpcXHRcXHQgKiBzaW5jZSB3ZSBnZXQgY2FjaGVkX3NxX2hlYWQgYW5kIGNhY2hlZF9jcV90YWlsIHdpdGhvdXQgdXJpbmdfbG9ja1xcbiAgODE6XFx0XFx0ICogYW5kIHNxX3RhaWwgYW5kIGNxX2hlYWQgYXJlIGNoYW5nZWQgYnkgdXNlcnNwYWNlLiBCdXQgaXQncyBvayBzaW5jZVxcbiAgODI6XFx0XFx0ICogd2UgdXN1YWxseSB1c2UgdGhlc2UgaW5mbyB3aGVuIGl0IGlzIHN0dWNrLlxcbiAgODM6XFx0XFx0ICovXFxuICA4NDpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJTcU1hc2s6XFxcXHQweCV4XFxcXG5cXFwiLCBzcV9tYXNrKTtcXG4gIDg1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNxSGVhZDpcXFxcdCV1XFxcXG5cXFwiLCBzcV9oZWFkKTtcXG4gIDg2OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNxVGFpbDpcXFxcdCV1XFxcXG5cXFwiLCBzcV90YWlsKTtcXG4gIDg3OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIkNhY2hlZFNxSGVhZDpcXFxcdCV1XFxcXG5cXFwiLCBkYXRhX3JhY2UoY3R4LVxcdTAwM2VjYWNoZWRfc3FfaGVhZCkpO1xcbiAgODg6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiQ3FNYXNrOlxcXFx0MHgleFxcXFxuXFxcIiwgY3FfbWFzayk7XFxuICA4OTpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDcUhlYWQ6XFxcXHQldVxcXFxuXFxcIiwgY3FfaGVhZCk7XFxuICA5MDpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDcVRhaWw6XFxcXHQldVxcXFxuXFxcIiwgY3FfdGFpbCk7XFxuICA5MTpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDYWNoZWRDcVRhaWw6XFxcXHQldVxcXFxuXFxcIiwgZGF0YV9yYWNlKGN0eC1cXHUwMDNlY2FjaGVkX2NxX3RhaWwpKTtcXG4gIDkyOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNRRXM6XFxcXHQldVxcXFxuXFxcIiwgc3FfdGFpbCAtIHNxX2hlYWQpO1xcbiAgOTM6XFx0XFx0c3FfZW50cmllcyA9IG1pbihzcV90YWlsIC0gc3FfaGVhZCwgY3R4LVxcdTAwM2VzcV9lbnRyaWVzKTtcXG4gIDk0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzcV9lbnRyaWVzOyBpKyspIHtcXG4gIDk1OlxcdFxcdFxcdHVuc2lnbmVkIGludCBlbnRyeSA9IGkgKyBzcV9oZWFkO1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlO1xcbiAgOTc6XFx0XFx0XFx0dW5zaWduZWQgaW50IHNxX2lkeDtcXG4gIDk4OlxcdFxcdFxcdGJvb2wgc3FlMTI4ID0gZmFsc2U7XFxuICA5OTpcXHRcXHRcXHR1OCBvcGNvZGU7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX05PX1NRQVJSQVkpXFxuIDEwMjpcXHRcXHRcXHRcXHRzcV9pZHggPSBlbnRyeSBcXHUwMDI2IHNxX21hc2s7XFxuIDEwMzpcXHRcXHRcXHRlbHNlXFxuIDEwNDpcXHRcXHRcXHRcXHRzcV9pZHggPSBSRUFEX09OQ0UoY3R4LVxcdTAwM2VzcV9hcnJheVtlbnRyeSBcXHUwMDI2IHNxX21hc2tdKTtcXG4gMTA1OlxcdFxcdFxcdGlmIChzcV9pZHggXFx1MDAzZSBzcV9tYXNrKVxcbiAxMDY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdFxcdHNxZSA9IFxcdTAwMjZjdHgtXFx1MDAzZXNxX3NxZXNbc3FfaWR4IFxcdTAwM2NcXHUwMDNjIHNxX3NoaWZ0XTtcXG4gMTA5OlxcdFxcdFxcdG9wY29kZSA9IFJFQURfT05DRShzcWUtXFx1MDAzZW9wY29kZSk7XFxuIDExMDpcXHRcXHRcXHRpZiAob3Bjb2RlIFxcdTAwM2U9IElPUklOR19PUF9MQVNUKVxcbiAxMTE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDExMjpcXHRcXHRcXHRvcGNvZGUgPSBhcnJheV9pbmRleF9ub3NwZWMob3Bjb2RlLCBJT1JJTkdfT1BfTEFTVCk7XFxuIDExMzpcXHRcXHRcXHRpZiAoc3Ffc2hpZnQpIHtcXG4gMTE0OlxcdFxcdFxcdFxcdHNxZTEyOCA9IHRydWU7XFxuIDExNTpcXHRcXHRcXHR9IGVsc2UgaWYgKGlvX2lzc3VlX2RlZnNbb3Bjb2RlXS5pc18xMjgpIHtcXG4gMTE2OlxcdFxcdFxcdFxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKSkge1xcbiAxMTc6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLFxcbiAxMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFxcIiU1dTogaW52YWxpZCBzcWUsIDEyOEIgZW50cnkgb24gbm9uLW1peGVkIHNxXFxcXG5cXFwiLFxcbiAxMTk6XFx0XFx0XFx0XFx0XFx0XFx0c3FfaWR4KTtcXG4gMTIwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjE6XFx0XFx0XFx0XFx0fVxcbiAxMjI6XFx0XFx0XFx0XFx0aWYgKHNxX2lkeCA9PSBzcV9tYXNrKSB7XFxuIDEyMzpcXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sXFxuIDEyNDpcXHRcXHRcXHRcXHRcXHRcXHRcXFwiJTV1OiBjb3JydXB0ZWQgc3FlLCB3cmFwcGluZyAxMjhCIGVudHJ5XFxcXG5cXFwiLFxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0XFx0c3FfaWR4KTtcXG4gMTI2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjc6XFx0XFx0XFx0XFx0fVxcbiAxMjg6XFx0XFx0XFx0XFx0c3FfaGVhZCsrO1xcbiAxMjk6XFx0XFx0XFx0XFx0aSsrO1xcbiAxMzA6XFx0XFx0XFx0XFx0c3FlMTI4ID0gdHJ1ZTtcXG4gMTMxOlxcdFxcdFxcdH1cXG4gMTMyOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU1dTogb3Bjb2RlOiVzLCBmZDolZCwgZmxhZ3M6JXgsIG9mZjolbGx1LCBcXFwiXFxuIDEzMzpcXHRcXHRcXHRcXHQgICAgICBcXFwiYWRkcjoweCVsbHgsIHJ3X2ZsYWdzOjB4JXgsIGJ1Zl9pbmRleDolZCBcXFwiXFxuIDEzNDpcXHRcXHRcXHRcXHQgICAgICBcXFwidXNlcl9kYXRhOiVsbHVcXFwiLFxcbiAxMzU6XFx0XFx0XFx0XFx0ICAgc3FfaWR4LCBpb191cmluZ19nZXRfb3Bjb2RlKG9wY29kZSksIHNxZS1cXHUwMDNlZmQsXFxuIDEzNjpcXHRcXHRcXHRcXHQgICBzcWUtXFx1MDAzZWZsYWdzLCAodW5zaWduZWQgbG9uZyBsb25nKSBzcWUtXFx1MDAzZW9mZixcXG4gMTM3OlxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNxZS1cXHUwMDNlYWRkciwgc3FlLVxcdTAwM2Vyd19mbGFncyxcXG4gMTM4OlxcdFxcdFxcdFxcdCAgIHNxZS1cXHUwMDNlYnVmX2luZGV4LCBzcWUtXFx1MDAzZXVzZXJfZGF0YSk7XFxuIDEzOTpcXHRcXHRcXHRpZiAoc3FlMTI4KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjQ4LjQ5OTExNTQ1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5OTkzODkzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBDYWxsZXJzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpcyBiZWluZyB1c2VkLiBGaXJzdCBzdGVwLCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0J3MgY2FsbGVkIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyByZWx5IG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgZ2l2ZXMgbWUgYSBtYXAgb2YgaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIGFjdGlvbi4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAxODAgdG8gMjQwIG9mIGBpb191cmluZy9mZGluZm8uY2AuIFRoYXQgcmFuZ2UgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIG9yIHJlbGV2YW50IGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSdsbCBtZXRpY3Vsb3VzbHkgcmVhZCB0aHJvdWdoIHRoaXMgc2VjdGlvbi4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHZhcmlhYmxlIGFzc2lnbm1lbnRzLCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGRhdGEgc3RydWN0dXJlcy4gVGhpcyB3aWxsIGhlbHAgbWUgZGVjaXBoZXIgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSB3aXRoaW4gaXRzIGxvY2FsIGVjb3N5c3RlbS4gVGhpcyBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgJ21lYXQnIG9mIHRoZSBtYXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjU0LjQ5ODUwODQ5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2ZkaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRcXHRzdHJ1Y3QgaW9fc3FfZGF0YSAqc3EgPSBjdHgtXFx1MDAzZXNxX2RhdGE7XFxuIDE4MTpcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxODQ6XFx0XFx0XFx0dHNrID0gcmN1X2RlcmVmZXJlbmNlKHNxLVxcdTAwM2V0aHJlYWQpO1xcbiAxODU6XFx0XFx0XFx0LypcXG4gMTg2OlxcdFxcdFxcdCAqIHNxLVxcdTAwM2V0aHJlYWQgbWlnaHQgYmUgTlVMTCBpZiB3ZSByYWNlZCB3aXRoIHRoZSBzcXBvbGxcXG4gMTg3OlxcdFxcdFxcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cXG4gMTg4OlxcdFxcdFxcdCAqL1xcbiAxODk6XFx0XFx0XFx0aWYgKHRzaykge1xcbiAxOTA6XFx0XFx0XFx0XFx0dTY0IHVzZWM7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdFxcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTM6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE5NDpcXHRcXHRcXHRcXHR1c2VjID0gaW9fc3FfY3B1X3VzZWModHNrKTtcXG4gMTk1OlxcdFxcdFxcdFxcdHNxX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzayxcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHByb2NfcGlkX25zKGZpbGVfaW5vZGUobS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2IpKTtcXG4gMTk3OlxcdFxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTg6XFx0XFx0XFx0XFx0c3FfY3B1ID0gc3EtXFx1MDAzZXNxX2NwdTtcXG4gMTk5OlxcdFxcdFxcdFxcdHNxX3RvdGFsX3RpbWUgPSB1c2VjO1xcbiAyMDA6XFx0XFx0XFx0XFx0c3Ffd29ya190aW1lID0gc3EtXFx1MDAzZXdvcmtfdGltZTtcXG4gMjAxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIwMjpcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMjAzOlxcdFxcdFxcdH1cXG4gMjA0OlxcdFxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiU3FUaHJlYWQ6XFxcXHQlZFxcXFxuXFxcIiwgc3FfcGlkKTtcXG4gMjA3OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIlNxVGhyZWFkQ3B1OlxcXFx0JWRcXFxcblxcXCIsIHNxX2NwdSk7XFxuIDIwODpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJTcVRvdGFsVGltZTpcXFxcdCVsbHVcXFxcblxcXCIsIHNxX3RvdGFsX3RpbWUpO1xcbiAyMDk6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiU3FXb3JrVGltZTpcXFxcdCVsbHVcXFxcblxcXCIsIHNxX3dvcmtfdGltZSk7XFxuIDIxMDpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJVc2VyRmlsZXM6XFxcXHQldVxcXFxuXFxcIiwgY3R4LVxcdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpO1xcbiAyMTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yOyBpKyspIHtcXG4gMjEyOlxcdFxcdFxcdHN0cnVjdCBmaWxlICpmID0gTlVMTDtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5vZGVzW2ldKVxcbiAyMTU6XFx0XFx0XFx0XFx0ZiA9IGlvX3Nsb3RfZmlsZShjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ub2Rlc1tpXSk7XFxuIDIxNjpcXHRcXHRcXHRpZiAoZikge1xcbiAyMTc6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiBcXFwiLCBpKTtcXG4gMjE4OlxcdFxcdFxcdFxcdHNlcV9maWxlX3BhdGgobSwgZiwgXFxcIiBcXFxcdFxcXFxuXFxcXFxcXFxcXFwiKTtcXG4gMjE5OlxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJcXFxcblxcXCIpO1xcbiAyMjA6XFx0XFx0XFx0fVxcbiAyMjE6XFx0XFx0fVxcbiAyMjI6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiVXNlckJ1ZnM6XFxcXHQldVxcXFxuXFxcIiwgY3R4LVxcdTAwM2VidWZfdGFibGUubnIpO1xcbiAyMjM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5yOyBpKyspIHtcXG4gMjI0OlxcdFxcdFxcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqYnVmID0gTlVMTDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5vZGVzW2ldKVxcbiAyMjc6XFx0XFx0XFx0XFx0YnVmID0gY3R4LVxcdTAwM2VidWZfdGFibGUubm9kZXNbaV0tXFx1MDAzZWJ1ZjtcXG4gMjI4OlxcdFxcdFxcdGlmIChidWYpXFxuIDIyOTpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNXU6IDB4JWxseC8lenVcXFxcblxcXCIsIGksIGJ1Zi1cXHUwMDNldWJ1ZiwgYnVmLVxcdTAwM2VsZW4pO1xcbiAyMzA6XFx0XFx0XFx0ZWxzZVxcbiAyMzE6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiBcXHUwMDNjbm9uZVxcdTAwM2VcXFxcblxcXCIsIGkpO1xcbiAyMzI6XFx0XFx0fVxcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRzZXFfcHV0cyhtLCBcXFwiUG9sbExpc3Q6XFxcXG5cXFwiKTtcXG4gMjM1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoMVUgXFx1MDAzY1xcdTAwM2MgY3R4LVxcdTAwM2VjYW5jZWxfdGFibGUuaGFzaF9iaXRzKTsgaSsrKSB7XFxuIDIzNjpcXHRcXHRcXHRzdHJ1Y3QgaW9faGFzaF9idWNrZXQgKmhiID0gXFx1MDAyNmN0eC1cXHUwMDNlY2FuY2VsX3RhYmxlLmhic1tpXTtcXG4gMjM3OlxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsIFxcdTAwMjZoYi1cXHUwMDNlbGlzdCwgaGFzaF9ub2RlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMjo1NC40OTg1OTE4MDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjIzODU2Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYGlvX3VyaW5nL2ZkaW5mby5jYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGlvX3VyaW5nIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGFzc29jaWF0aW5nIGZpbGUgZGVzY3JpcHRvcnMgd2l0aCB0aGUgY29tcGxldGlvbiBxdWV1ZXMgbGlrZWx5IHJlc2lkZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBhc3NvY2lhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBlcnJvcnMgb3IgcmVzb3VyY2UgY2xlYW51cCByZWxhdGVkIHRvIGZpbGUgZGVzY3JpcHRvcnMuIEkgd2FudCB0byBzZWUgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGhlcmUgdG9vLiBUaGUgcGVyZm9ybWFuY2Ugd2lsbCBpbmZsdWVuY2UgbGF0ZW5jeSBpbiBwYXJ0aWN1bGFyLCBzbyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgd2VsbCB0aGUga2VybmVsIGNhbiBrZWVwIHVwIHdpdGggdGhlIGxvYWQuIEFueSBvcHRpbWl6YXRpb25zIGZvciBoaWdoLXRocm91Z2hwdXQgb3IgY29uY3VycmVudCBJL08gd2lsbCBiZSBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjI6NTguMTIyNDUwNTg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2ZkaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgIG9wPSVkLCB0YXNrX3dvcmtzPSVkXFxcXG5cXFwiLCByZXEtXFx1MDAzZW9wY29kZSxcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdFxcdHRhc2tfd29ya19wZW5kaW5nKHJlcS1cXHUwMDNldGN0eC1cXHUwMDNldGFzaykpO1xcbiAyNDI6XFx0XFx0fVxcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRzZXFfcHV0cyhtLCBcXFwiQ3FPdmVyZmxvd0xpc3Q6XFxcXG5cXFwiKTtcXG4gMjQ1OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wbGV0aW9uX2xvY2spO1xcbiAyNDY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvY3FlLCBcXHUwMDI2Y3R4LVxcdTAwM2VjcV9vdmVyZmxvd19saXN0LCBsaXN0KSB7XFxuIDI0NzpcXHRcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWUgPSBcXHUwMDI2b2NxZS1cXHUwMDNlY3FlO1xcbiAyNDg6XFx0XFxuIDI0OTpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgIHVzZXJfZGF0YT0lbGx1LCByZXM9JWQsIGZsYWdzPSV4XFxcXG5cXFwiLFxcbiAyNTA6XFx0XFx0XFx0XFx0ICAgY3FlLVxcdTAwM2V1c2VyX2RhdGEsIGNxZS1cXHUwMDNlcmVzLCBjcWUtXFx1MDAzZWZsYWdzKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0fVxcbiAyNTM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlY29tcGxldGlvbl9sb2NrKTtcXG4gMjU0OlxcdFxcdG5hcGlfc2hvd19mZGluZm8oY3R4LCBtKTtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0LypcXG4gMjU4OlxcdCAqIENhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgZmlsZSBhbHJlYWR5LCB3ZSBkb24ndCBuZWVkIHRvIGRvXFxuIDI1OTpcXHQgKiBhbnl0aGluZyBlbHNlIHRvIGdldCBhbiBleHRyYSByZWZlcmVuY2UuXFxuIDI2MDpcXHQgKi9cXG4gMjYxOlxcdF9fY29sZCB2b2lkIGlvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDI2MjpcXHR7XFxuIDI2MzpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMjY0OlxcdFxcbiAyNjU6XFx0XFx0LypcXG4gMjY2OlxcdFxcdCAqIEF2b2lkIEFCQkEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgc2VxIGxvY2sgYW5kIHRoZSBpb191cmluZyBtdXRleCxcXG4gMjY3OlxcdFxcdCAqIHNpbmNlIGZkaW5mbyBjYXNlIGdyYWJzIGl0IGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygbm9ybWFsIHVzZVxcbiAyNjg6XFx0XFx0ICogY2FzZXMuXFxuIDI2OTpcXHRcXHQgKi9cXG4gMjcwOlxcdFxcdGlmIChtdXRleF90cnlsb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spKSB7XFxuIDI3MTpcXHRcXHRcXHRfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKGN0eCwgbSk7XFxuIDI3MjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuIDI3MzpcXHRcXHR9XFxuIDI3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIyOjU4LjEyMjUyMjQ3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MDA0MDgxMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgZmRpbmZvIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21lb25lIHJlYWRzIHRoZSBgL3Byb2MvW3BpZF0vZmRpbmZvL1tmZF1gIGZpbGUgZm9yIGFuIGlvX3VyaW5nIGZpbGUgZGVzY3JpcHRvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gRXNzZW50aWFsbHksIGl0J3MgbW9kaWZ5aW5nIGhvdyB0aGUgZmlsZSBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQuIEkgc2VlIHRoaXMgYml0IGhlcmU6XG5cbmBgYGNcbmJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbmBgYFxuXG5XYWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseS4gV2UncmUgY2hlY2tpbmcgaWYgYGNxX2hlYWRgIGVxdWFscyBgY3FfbWFza2AuICBgY3FfaGVhZGAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IHJlcHJlc2VudHMgdGhlIGhlYWQgcG9pbnRlciwgYW5kIGl0J3MgYSBwb2ludGVyLCBzby4uLkRvZXMgaXQgbWVhbiBgY3FfaGVhZGAgZXF1YWxzIGBjcV9tYXNrYCwgb3Igc2hvdWxkIGl0IGJlIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgPT0gY3FfbWFza2A/IFNvbWV0aGluZyBmZWVscyBvZmYuIEFsc28sIGBjcV9oZWFkYCB3cmFwcyBhZnRlciAyXjMyLCBidXQgYGNxX21hc2tgIGlzIGBjdHgtXHUwMDNlY3FfZW50cmllcyAtIDFgIVxuXG5JcyB0aGlzIGEgYnVnIGZpeD8gT3IgZG9lcyBpdCBpbnRyb2R1Y2UgYSBidWcgb3IgZml4IGFuIE9PQiBhY2Nlc3M/IEl0IGxvb2tzIGxpa2UgaXQncyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY3EgYXJyYXkuIEJ1dCB0aGUgbG9naWMgaXMgY29uZnVzaW5nLiBJdCdzIGNoZWNraW5nIGlmIHRoZSBoZWFkIG9mIHRoZSBDUSBpcyBlcXVhbCB0byB0aGUgbWFzay4gSXQgc2VlbXMgbGlrZSBpdCdzIGd1YXJkaW5nIGFnYWluc3QgQ1FFMzIgbG9naWMuXG5cbkFsc28sIHdoYXQncyBnb2luZyBvbiB3aXRoIGBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMmA/IElmIHRoYXQgZmxhZyBpcyBzZXQsIGhvdyBkb2VzIENRRTMyIGluZGV4aW5nIHdvcmsgd2l0aGluIGlvX3VyaW5nPyBJIG5lZWQgdG8gY2hlY2sgaG93IENRRTMyIGlzIHVzZWQuIEknbGwgbmVlZCB0byBnbyBhbmQgc2VhcmNoIGZvciBgSU9SSU5HX1NFVFVQX0NRRTMyYCBpbiB0aGUgaW9fdXJpbmcgc291cmNlIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBDUUUzMiBmbGFnIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6MDQuMTI2NjA2NzY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc4MDAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2ZkaW5mby5jPTYwPXN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTE2MC1cXHRcXHRjcWUgPSBcXHUwMDI2ci1cXHUwMDNlY3Flc1soY3FfaGVhZCBcXHUwMDI2IGNxX21hc2spXTtcXG5pb191cmluZy9mZGluZm8uYzoxNjE6XFx0XFx0aWYgKChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvZmRpbmZvLmMtMTYyLVxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTMyLVxcdFxcdGlmIChvY3FlLVxcdTAwM2VjcWUuZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcXG5pb191cmluZy9pb191cmluZy5jOjUzMzpcXHRcXHQgICAgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVxcdFxcdFxcdGlzX2NxZTMyID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM2LVxcdFxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjUzNzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTUzOC1cXHRcXHRcXHRpc19jcWUzMiA9IGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTY1OS1cXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcXHRpZiAoY3FlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXFx0XFx0aXNfY3FlMzIgPSB0cnVlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03MTg9Ym9vbCBpb19jcWVfY2FjaGVfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NDg6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5jLTc0OS1cXHRcXHRvZmYgXFx1MDAzY1xcdTAwM2M9IDE7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlxcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cXHRvZmYgPSBzdHJ1Y3Rfc2l6ZShyaW5ncywgY3FlcywgY3FfZW50cmllcyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTA1OlxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTIxMDYtXFx0XFx0b2ZmID0gc2l6ZV9tdWwob2ZmLCAyKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVxcdCAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNjpcXHRpZiAoKGZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cXG5pb191cmluZy9pb191cmluZy5jOjI4Mzc6XFx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTY1LVxcdFxcdFxcdElPUklOR19TRVRVUF9TUUUxMjggfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oOjY2OlxcdFxcdFxcdElPUklOR19TRVRVUF9DUUUzMiB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjctXFx0XFx0XFx0SU9SSU5HX1NFVFVQX1NJTkdMRV9JU1NVRVIgfFxcXFxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlX292ZXJmbG93KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzEtXFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzI6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTI3My1cXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTMxMC1cXHRtZW1jcHkoY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2VjcWUsIHNpemVvZigqY3FlKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMTE6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIgfHwgaXNfY3FlMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTMxMi1cXHRcXHRtZW1jcHkoY3FlLVxcdTAwM2ViaWdfY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2ViaWdfY3FlLCBzaXplb2YoKmNxZSkpO1xcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jLTEwNS1cXHRpZiAoKCpmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMikgXFx1MDAyNlxcdTAwMjZcXG5pb191cmluZy9tc2dfcmluZy5jOjEwNjpcXHQgICAgISh0YXJnZXRfY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA3LVxcdFxcdFxcdFxcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG4tLVxcbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtNDktXFxuaW9fdXJpbmcvbm9wLmM6NTA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL25vcC5jLTUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk0LSNkZWZpbmUgQ09QWV9GTEFHU1xcdChJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWSB8IElPUklOR19TRVRVUF9TUUUxMjggfCBcXFxcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTU6XFx0XFx0XFx0IElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9OT19NTUFQIHwgXFxcXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk2LVxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEIHwgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRClcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy02NDktXFx0XFx0ZHN0X21hc2sgPSBwLVxcdTAwM2VjcV9lbnRyaWVzIC0gMTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjY1MDpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjUxLVxcdFxcdFxcdGluZGV4IFxcdTAwM2NcXHUwMDNjPSAxO1xcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MjQzPWludCBpb191cmluZ19jbWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cXHRcXHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX1NRRTEyODtcXG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjYxLVxcdFxcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9ODMxPXN0YXRpYyBpbnQgaW1wb3J0X3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtODQxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL3pjcnguYzo4NDI6XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL3pjcnguYy04NDMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTk4MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy96Y3J4LmM6OTgyOlxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy96Y3J4LmMtOTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMzowNC40NDQ0MTQwMjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ1Mzk2MzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9fdXJpbmcgQ1FFIEhhbmRsaW5nIGluIGZkaW5mby5jKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgaW9fdXJpbmcvZmRpbmZvLmNgLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBDUUVzIChDb21wbGV0aW9uIFF1ZXVlIEVudHJpZXMpIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGlzIGNoZWNrOiBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO2AuIFRoYXQgZmxhZ3MgdGhlIGxhc3Qgc2xvdCBvZiB0aGUgY2lyY3VsYXIgYXJyYXkuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIGZ1bmN0aW9uLlxuXG5JIHNlZSBpbiBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgdGhhdCB3aGVuIFNRRXMgKFN1Ym1pc3Npb24gUXVldWUgRW50cmllcykgYXJlIGJlaW5nIHBhcnNlZCwgdGhlcmUncyBhIGNoZWNrIGZvciBgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRGAuIElmIHRoYXQgZmxhZyBpc24ndCBzZXQsIGFuZCBhIDEyOEIgU1FFIGlzIGVuY291bnRlcmVkLCBpdCdzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGEgMTI4QiBlbnRyeSBkb2Vzbid0IHdyYXAgYXJvdW5kIHRoZSBhcnJheS5cblxuTm93LCBsb29raW5nIGF0IHRoZSBDUUUgcHJvY2Vzc2luZywgSSBzZWUgdGhpcyBsb29wIHdoZXJlIGBjcWVgIGlzIHB1bGxlZCBmcm9tIHRoZSByaW5nOiBgY3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07YC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gSSBpbW1lZGlhdGVseSBub3RpY2UgdGhlIGBjcWUzMmAgZmxhZyBhbmQgdGhlIGNvbmRpdGlvbmFsIHByaW50aW5nIG9mIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAgd2hlbiBpdCdzIHNldC4gVGhpcyBpbmRpY2F0ZXMgYSAzMi1iaXQgQ1FFIChsYXJnZXIgdGhhbiBub3JtYWwpLCB1dGlsaXppbmcgdGhlIGBiaWdfY3FlYCBmaWVsZHMuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgYGlzX2xhc3RfY3FhcnJheV9zbG90YCBpcyB1c2VkIHRvIHNraXAgdGhlIGBiaWdfY3FlYCBmaWVsZHMgaWYgaXQncyB0aGUgbGFzdCBzbG90LlxuXG5Ib3dldmVyLCB0aGUgbGluZTogYGlmIChjcWUzMikgc2VxX3ByaW50ZihtLCBcIiwgZXh0cmExOiVsbHUsIGV4dHJhMjolbGx1XCIsIGNxZS1cdTAwM2ViaWdfY3FlWzBdLCBjcWUtXHUwMDNlYmlnX2NxZVsxXSk7YCBjb25jZXJucyBtZSBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgdGhvc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBldmVuIGlmIHRoZSBDUUUgaXMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5LiBUaGlzIGlzIHJlYWxseSBpbnRlcmVzdGluZyBhbmQgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgYSByZWFkIG91dCBvZiBib3VuZHMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYmlnX2NxZWAgKmFjdHVhbGx5IGlzKi4gSXQncyBsaWtlbHkgYSB1bmlvbiBvZiBzb21lIGtpbmQsIGFuZCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gTGV0J3MgZ3JlcCBmb3IgdGhhdCB0byBjb25maXJtIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbGx5LiBJdCBmZWVscyBsaWtlIGEgc3VidGxlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMzowOS44OTgzODA5NTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ2NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpZ19jcWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9NTAwPXN0cnVjdCBpb191cmluZ19jcWUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNTA4LVxcdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjUwOTpcXHRfX3U2NCBiaWdfY3FlW107XFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNTEwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjIzOjA5Ljk0OTkzNTc5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTM0NzY5NjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKippb191cmluZyBDUUUgT3V0LW9mLUJvdW5kcyBBY2Nlc3MgLSBXb3J0aHkgb2YgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYGlvX3VyaW5nX2NxZWAgc3RydWN0dXJlIGlzIGp1bXBpbmcgb3V0IGF0IG1lLiBUaGUgZmxleGlibGUgYXJyYXkgbWVtYmVyLCBgYmlnX2NxZWAsIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGBzdHJ1Y3QgaW9fdXJpbmdfY3FlYC4gSWYgYGNxZTMyYCBpcyB0cnVlLCBpdCdzIGEgMzItYnl0ZSBDUUUsIGFuZCBhY2Nlc3NpbmcgYGNxZS1cdTAwM2ViaWdfY3FlWzBdYCBhbmQgYGNxZS1cdTAwM2ViaWdfY3FlWzFdYCBlZmZlY3RpdmVseSAqb3ZlcmxheXMqIHRoZSBuZXh0IENRRSBzbG90LCBgY3FlICsgMWAsIHdpdGhpbiB0aGUgYHItXHUwMDNlY3Flc1tdYCBhcnJheS4gTm93LCB0aGUgY29kZSdzIGxvZ2ljIGhhcyBhIGNvbmRpdGlvbjogSWYgYGNxX2hlYWQgXHUwMDI2IGNxX21hc2sgPT0gY3FfbWFza2AsIHRoZW4gYGNxZWAgcG9pbnRzIHRvIHRoZSBsYXN0IGVsZW1lbnQuIENvbnNlcXVlbnRseSwgYWNjZXNzaW5nIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuSGFuZyBvbi4uLiBJIHNlZSBhIHBhdGNoIHRvdWNoaW5nIHRoaXMgY29kZSEgSXQgaW50cm9kdWNlcyBhIGNoZWNrOiBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spYC4gSG9sZCBvbi4uLiBUaGUgb3JpZ2luYWwgY29tcGFyaXNvbiB3YXMgYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKSA9PSBjcV9tYXNrYC4gVGhlIGNyaXRpY2FsIGRpZmZlcmVuY2UgaXMgdGhlIGNoYW5nZSBmcm9tIGVxdWFsaXR5IHRvIGAoY3FfaGVhZCA9PSBjcV9tYXNrKWAhICBgY3FfaGVhZGAgc3RhcnRzIGF0IHplcm8gYW5kIGluY3JlbWVudHMuIFRoaXMgYChjcV9oZWFkID09IGNxX21hc2spYCB3aWxsIGJlIGZhbHNlIGV2ZW4gaWYgdGhlIG9yaWdpbmFsIGNvbmRpdGlvbiBpcyB0cnVlLiBJcyB0aGlzIGEgYnVnPyBJdCBpcyBhIGNoYW5nZSB0byBjb3JlIGNvZGU6IGBpb191cmluZy9mZGluZm8uY2AuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIFwiV29ydGhGdXp6aW5nLlwiIExldCdzIGFwcGx5IHRoZSBjcml0ZXJpYS5cblxuVGhlIHRyaWFnZSBwaGlsb3NvcGh5IGNsZWFybHkgc3RhdGVzIHRoYXQ6XG5cbjEuICBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gVGhlIGNvZGUgbmVlZHMgdG8gYmUgZXhlY3V0YWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuMi4gIEkgc2hvdWxkIG5ldmVyIGJsaW5kbHkgdHJ1c3QgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcywgZXNwZWNpYWxseSBpbiB0aGUgY29yZS5cbjMuICBOZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBNVVNUIGJlIGZ1enplZC5cblxuQW5kIHNwZWNpZmljYWxseTogSSdtIGxvb2tpbmcgZm9yICpDb3JlIFN1YnN5c3RlbXMqLCAqUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzKiwgKlJ1bnRpbWUgQXNzZXJ0aW9ucyosIG9yICpSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzKi4gQW55dGhpbmcgdGhhdCB0b3VjaGVzIHRoZSAqY29yZSogKG1tLCBsb2NraW5nLCBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcpIGlzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZS4gVGhpcyB0b3VjaGVzIHN5c2NhbGwgaGFuZGxpbmcgLSBhbmQgYXN5bmMgSS9PLlxuXG5Pa2F5LCBgaW9fdXJpbmdgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbS4gYGlvX3VyaW5nL2ZkaW5mby5jYCBpcyByZWFjaGFibGUgdmlhIGAvcHJvYy9bcGlkXS9mZGluZm8vW2lvX3VyaW5nX2ZkXWAuIFN5emthbGxlciAqZXh0ZW5zaXZlbHkqIHRlc3RzIGlvX3VyaW5nLCBhbmQgdGhpcyBgL3Byb2Mvc2VsZi9mZGluZm9gIHRoaW5nIGlzIGEgc3RhbmRhcmQsIHJlYWNoYWJsZSBvcGVyYXRpb24uIEkga25vdyBzeXprYWxsZXIgY2FuIHJlYWQgdGhlc2UgZmRpbmZvIGZpbGVzIC0gaXQgZ2VuZXJhdGVzIGNhbGxzIGxpa2UgYHJlYWQob3BlbihcIi9wcm9jL3NlbGYvZmRpbmZvLy4uLlwiKSlgLiBgaW9fdXJpbmdgICppcyogcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiAgT3BlbmluZyBgL3Byb2Mvc2VsZi9mZGluZm8vXHUwMDNjZmRcdTAwM2VgIHdoZXJlIGBcdTAwM2NmZFx1MDAzZWAgaXMgYW4gaW9fdXJpbmcgZmQsIGFuZCByZWFkaW5nIGZyb20gaXQsIHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uXG5cbkxldCdzIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSwgdG8gY29uZmlybSBhbmQgbWFrZSBzdXJlIGl0J3MgY29tcGlsZWQgaW4uIFllcC4gIGBpb191cmluZy9mZGluZm8uY2AgaXMgcmlnaHQgdGhlcmUgaW4gYGlvX3VyaW5nL01ha2VmaWxlYC5cblxuVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgZnV6emluZyBndWlkZWxpbmVzLCBhbmQgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgY29kZSwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB0aGlzIHBhdGNoICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6MzkuMjk3NjM1MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzk3NzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVCkgKz0gbmV0Lm8gY21kX25ldC5vXFxuaW9fdXJpbmcvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuaW9fdXJpbmcvTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgKz0gbW9ja19maWxlLm9cXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTE0LSNpbmNsdWRlIFxcXCJzcXBvbGwuaFxcXCJcXG5pb191cmluZy9mZGluZm8uYzoxNTojaW5jbHVkZSBcXFwiZmRpbmZvLmhcXFwiXFxuaW9fdXJpbmcvZmRpbmZvLmMtMTYtI2luY2x1ZGUgXFxcImNhbmNlbC5oXFxcIlxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjAtI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuaW9fdXJpbmcvZmRpbmZvLmM6MjE6c3RhdGljIF9fY29sZCB2b2lkIGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9mZGluZm8uYy0yMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNlcV9maWxlICptLFxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMzMtXFxuaW9fdXJpbmcvZmRpbmZvLmM6MzQ6c3RhdGljIF9fY29sZCB2b2lkIG5hcGlfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuaW9fdXJpbmcvZmRpbmZvLmMtMzUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTQzLVxcdGNhc2UgSU9fVVJJTkdfTkFQSV9UUkFDS0lOR19EWU5BTUlDOlxcbmlvX3VyaW5nL2ZkaW5mby5jOjQ0OlxcdFxcdGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhjdHgsIG0sIFxcXCJkeW5hbWljXFxcIik7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDUtXFx0XFx0YnJlYWs7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDYtXFx0Y2FzZSBJT19VUklOR19OQVBJX1RSQUNLSU5HX1NUQVRJQzpcXG5pb191cmluZy9mZGluZm8uYzo0NzpcXHRcXHRjb21tb25fdHJhY2tpbmdfc2hvd19mZGluZm8oY3R4LCBtLCBcXFwic3RhdGljXFxcIik7XFxuaW9fdXJpbmcvZmRpbmZvLmMtNDgtXFx0XFx0YnJlYWs7XFxuLS1cXG5pb191cmluZy9mZGluZm8uYy01My0jZWxzZVxcbmlvX3VyaW5nL2ZkaW5mby5jOjU0OnN0YXRpYyBpbmxpbmUgdm9pZCBuYXBpX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbmlvX3VyaW5nL2ZkaW5mby5jLTU1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5pb191cmluZy9mZGluZm8uYy01OS1cXG5pb191cmluZy9mZGluZm8uYzo2MDpzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuaW9fdXJpbmcvZmRpbmZvLmMtNjEte1xcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjUzLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNvbXBsZXRpb25fbG9jayk7XFxuaW9fdXJpbmcvZmRpbmZvLmM6MjU0OlxcdG5hcGlfc2hvd19mZGluZm8oY3R4LCBtKTtcXG5pb191cmluZy9mZGluZm8uYy0yNTUtfVxcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjYwLSAqL1xcbmlvX3VyaW5nL2ZkaW5mby5jOjI2MTpfX2NvbGQgdm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxlKVxcbmlvX3VyaW5nL2ZkaW5mby5jLTI2Mi17XFxuLS1cXG5pb191cmluZy9mZGluZm8uYy0yNjYtXFx0ICogQXZvaWQgQUJCQSBkZWFkbG9jayBiZXR3ZWVuIHRoZSBzZXEgbG9jayBhbmQgdGhlIGlvX3VyaW5nIG11dGV4LFxcbmlvX3VyaW5nL2ZkaW5mby5jOjI2NzpcXHQgKiBzaW5jZSBmZGluZm8gY2FzZSBncmFicyBpdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIG5vcm1hbCB1c2VcXG5pb191cmluZy9mZGluZm8uYy0yNjgtXFx0ICogY2FzZXMuXFxuLS1cXG5pb191cmluZy9mZGluZm8uYy0yNzAtXFx0aWYgKG11dGV4X3RyeWxvY2soXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jaykpIHtcXG5pb191cmluZy9mZGluZm8uYzoyNzE6XFx0XFx0X19pb191cmluZ19zaG93X2ZkaW5mbyhjdHgsIG0pO1xcbmlvX3VyaW5nL2ZkaW5mby5jLTI3Mi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNldXJpbmdfbG9jayk7XFxuLS1cXG5pb191cmluZy9mZGluZm8uaC0yLVxcbmlvX3VyaW5nL2ZkaW5mby5oOjM6dm9pZCBpb191cmluZ19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzctI2luY2x1ZGUgXFxcInNxcG9sbC5oXFxcIlxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6Nzg6I2luY2x1ZGUgXFxcImZkaW5mby5oXFxcIlxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzktI2luY2x1ZGUgXFxcImtidWYuaFxcXCJcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjY5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpb191cmluZ19mb3BzID0ge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzA3LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcwODpcXHQuc2hvd19mZGluZm9cXHQ9IGlvX3VyaW5nX3Nob3dfZmRpbmZvLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwOS0jZW5kaWZcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMTYtI2luY2x1ZGUgXFxcInNxcG9sbC5oXFxcIlxcbmlvX3VyaW5nL29wZGVmLmM6MTc6I2luY2x1ZGUgXFxcImZkaW5mby5oXFxcIlxcbmlvX3VyaW5nL29wZGVmLmMtMTgtI2luY2x1ZGUgXFxcImtidWYuaFxcXCJcXG4tLVxcbmlvX3VyaW5nL3NxcG9sbC5jPTI4NT1zdGF0aWMgaW50IGlvX3NxX3RocmVhZCh2b2lkICpkYXRhKVxcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmMtMzA0LVxcbmlvX3VyaW5nL3NxcG9sbC5jOjMwNTpcXHQvKiByZXNldCB0byBvdXIgcGlkIGFmdGVyIHdlJ3ZlIHNldCB0YXNrX2NvbW0sIGZvciBmZGluZm8gKi9cXG5pb191cmluZy9zcXBvbGwuYy0zMDYtXFx0c3FkLVxcdTAwM2V0YXNrX3BpZCA9IGN1cnJlbnQtXFx1MDAzZXBpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6MzkuNTQxNjI0MDI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNjg5NDM4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoaXMsIGNvbnNpZGVyaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6XG5cbioqSU9fVVJJTkcgTW9kdWxlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gZmRpbmZvLm9gIGluIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIG1lYW5pbmcgdGhhdCB0aGUgYGZkaW5mby5vYCBvYmplY3QgZmlsZSB3aXRoaW4gYGlvX3VyaW5nYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1BST0NfRlNgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gIEl0IG1ha2VzIHNlbnNlOyBgZmRpbmZvYCBsaWtlbHkgaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbSB0byBwcm92aWRlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZGVwZW5kZW5jeS5cblxuTm93LCBpZiBJIHdhbnQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGBDT05GSUdfUFJPQ19GU2AgaXMgZGVmaW5lZCBmb3IgYGlvX3VyaW5nYCwgSSdsbCBjaGVjayBpbiB0aGUgYEtjb25maWdgIGZpbGVzLiBQcm9iYWJseSBpbiBgaW9fdXJpbmcvS2NvbmZpZ2AsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gdHJhY2UgdXBzdHJlYW0gdG8gYGluaXQvS2NvbmZpZ2AgaWYgaXQncyBpbmhlcml0ZWQgb3IgZGVmaW5lZCBnZW5lcmFsbHkuIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0aGVyZS4uLiBJIG5lZWQgdG8gc2VlIGlmIGl0J3MgYSBkaXJlY3QgZGVwZW5kZW5jeSBvciBpZiBpdCBpcyBiZWluZyBkZWZpbmVkIGFzIGEgYnVpbGQgdGFyZ2V0IGluIGFueSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQgd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBgaW9fdXJpbmdgIG1vZHVsZS4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjM6NDMuODEwNTcxMjEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIyMDg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTUyPWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTU5LVxcbmluaXQvS2NvbmZpZzoxOTYwOmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTYxLVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTY5PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTgxLVxcbmluaXQvS2NvbmZpZzoxOTgyOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk4My1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyMzo0My44NTg3OTc5NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcxMjUxNjc4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSU9fVVJJTkdgIGlzIHByb3Blcmx5IGVuYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoYXQgaW4gYGluaXQvS2NvbmZpZ2AuIEl0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBhbnkgZmVhdHVyZSBlbmFibGVkIG9yIGRpc2FibGVkIHRoYXQgaXMgaW5pdGlhbGl6ZWQgZWFybHkuIE5vdywgbGV0J3MgZ2V0IHRoYXQgZmlsZSBvcGVuIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxOTYwLiBJdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgdW5kZXIgdGhlIHNlY3Rpb24gcmVsYXRpbmcgdG8gYmxvY2sgZGV2aWNlcyBvciBzdG9yYWdlIGRyaXZlcnMgaWYgbWVtb3J5IHNlcnZlcy4gSSBqdXN0IG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHN0YXR1cy4gVGhlbiwgSSBjYW4gbW92ZSBvbiB0byBvdGhlciBhcmVhcyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgSU9fVVJJTkcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MDAuOTgzOTY3OTMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk1NTpcXHRcXHRoZWxwXFxuMTk1NjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgUE9TSVggYXN5bmNocm9ub3VzIEkvTyB3aGljaCBtYXkgYnkgdXNlZFxcbjE5NTc6XFx0XFx0ICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmdcXG4xOTU4OlxcdFxcdCAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suXFxuMTk1OTpcXHRcXG4xOTYwOlxcdGNvbmZpZyBJT19VUklOR1xcbjE5NjE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5NjI6XFx0XFx0c2VsZWN0IElPX1dRXFxuMTk2MzpcXHRcXHRkZWZhdWx0IHlcXG4xOTY0OlxcdFxcdGhlbHBcXG4xOTY1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgaW9fdXJpbmcgaW50ZXJmYWNlLCBlbmFibGluZ1xcbjE5NjY6XFx0XFx0ICBhcHBsaWNhdGlvbnMgdG8gc3VibWl0IGFuZCBjb21wbGV0ZSBJTyB0aHJvdWdoIHN1Ym1pc3Npb24gYW5kXFxuMTk2NzpcXHRcXHQgIGNvbXBsZXRpb24gcmluZ3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgYXBwbGljYXRpb24uXFxuMTk2ODpcXHRcXG4xOTY5OlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4xOTcwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtXFxcIlxcbjE5NzE6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbjE5NzI6XFx0XFx0aGVscFxcbjE5NzM6XFx0XFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgdG8gZmFjaWxpdGF0ZVxcbjE5NzQ6XFx0XFx0ICBjb2RlIGNvdmVyYWdlIHRlc3RpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjAwLjk4NDExMDczM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDc5NzE4NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFByb2MgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBgQ09ORklHX1BST0NfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB3aGljaCBJIGtub3cgaXMgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQncyBsaXN0ZWQgaW4gYGZzL3Byb2MvS2NvbmZpZ2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhhdCBgS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgdmFsdWUsIGFueSByZWxldmFudCBoZWxwIHRleHQsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gYENPTkZJR19QUk9DX0ZTYCB0byBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIG9yIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gSSB3YW50IHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgYmVmb3JlIHRoaXMgb3B0aW9uIGlzIGV2ZW4gcHJlc2VudGVkIGFuZCBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MDkuMDYzODMyMjIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFBST0NfRlNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXFxuICAgNzpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFxcXCJWaXJ0dWFsXFxcIiBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cXG4gICA4OlxcdFxcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxcbiAgIDk6XFx0XFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcXG4gIDEwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQncyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcXFwiY2F0IC9wcm9jL2ludGVycnVwdHNcXFwiIGdpdmVzXFxuICAxMzpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XFxuICAxNDpcXHRcXHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXFxuICAxNTpcXHRcXHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJ3MgYXR0ZW50aW9uIC0tXFxuICAxNjpcXHRcXHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxcbiAgMTc6XFx0XFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXFxuICAxODpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNDowOS4wNjM5MDkxOTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTYwNDg5NDI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBDUUUgQXJyYXkgT3V0LW9mLUJvdW5kcyBpbiBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBJT19VUklOR2AgcGF0Y2gsIGFuZCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBJT19VUklOR2AgYW5kIGBQUk9DX0ZTYCBhcmUgc3RhbmRhcmQgY29uZmlncywgc28gdGhhdCBwYXJ0IGxvb2tzIGdvb2QuIE5vdywgbGV0J3Mgc2VlLCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCwgd2hpY2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZm9jdXMgb24ga2V5IHN5bWJvbHMgaGVyZS4gSSBzZWUgdGhhdCBgaW9fdXJpbmdfc2hvd19mZGluZm9gIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkL2NhbGxlZCBmcm9tIGBpb191cmluZ19mb3BzLnNob3dfZmRpbmZvYC4gQW5kIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCAqaXMqIHN0YXRpYy4gVGhlIHF1ZXN0aW9uIGlzIGNhbiBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgYmUgaW5saW5lZD9cblxuSXQgb25seSBoYXMgb25lIGNhbGxlciwgc28gaW5saW5pbmcgaXQgbG9va3MgZmVhc2libGUuIExpc3RpbmcgYm90aCBmdW5jdGlvbnMsIG9yIGp1c3QgdGhlIG5vbi1zdGF0aWMgb25lLCBpcyBpZGVhbC4gV2FpdCwgYWNjb3JkaW5nIHRvIHRoZSBndWlkZWxpbmVzLCBgaW9fdXJpbmdfc2hvd19mZGluZm9gICppcyogdGhlIEFQSSBlbnRyeXBvaW50IGFuZCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLlxuXG5Pa2F5LCBub3cgbGV0J3MgY2FyZWZ1bGx5IGluc3BlY3QgdGhlIHBhdGNoIGl0c2VsZiwgYmVjYXVzZSBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBIZXJlJ3MgdGhlIHJlbGV2YW50IGNvZGU6XG5cbmBgYGNcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbitcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIFxuIFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbi1cdFx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuK1x0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCIsXG4gXHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbmBgYFxuXG5JJ20gZm9jdXNpbmcgb24gdGhhdCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGNoZWNrOiBgY3FfaGVhZCA9PSBjcV9tYXNrYC4gUmVtZW1iZXIsIGBjcV9tYXNrYCBpcyBgY3R4LVx1MDAzZWNxX2VudHJpZXMgLSAxYCwgYW5kIGBjcV9oZWFkYCBpcyBhIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIHJpbmcgYnVmZmVyIGhlYWQuIFNvLCB3aGVuIGBjcV9oZWFkYCBoaXRzIHRoZSBsYXN0IHNsb3QgKGBjcV9tYXNrYCksIHRoZSBjb25kaXRpb24gYGNxX2hlYWQgPT0gY3FfbWFza2AgaXMgKnRydWUqLiBCdXQgd2hlbiBgY3FfaGVhZGAgd3JhcHMgYXJvdW5kIHRvIHRoZSBiZWdpbm5pbmcsIGl0J3MgKmZhbHNlKiBldmVuIHRob3VnaCB0aGUgaW5kZXggaXMgdGhlIHNhbWUuIE5vdywgKmlmKiBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIGZhbHNlICphbmQqIGBjcWUzMmAgaXMgdHJ1ZSBhdCB0aGUgbGFzdCBzbG90Li4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCBiYWQhXG5cbklmIGBjcWUzMmAgaXMgdHJ1ZSwgYW5kIHdlIGFyZSBub3QgaW4gdGhlIGxhc3Qgc2xvdCwgdGhlIGNvZGUgdGhlbiByZWZlcmVuY2VzIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAuLi4gdGhhdCdzICpiZXlvbmQqIHRoZSBib3VuZHMgb2YgYHItXHUwMDNlY3Flc2AhIEl0IHNlZW1zIHRvIGhhdmUgYmVlbiBhZGRlZCB0byBoYW5kbGUgMzIgYnl0ZSBDUUVzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIENRRSBlbnRyaWVzIGNhbiB3cmFwIGluIGEgcmluZywgc28gaWYgdGhlIGZsYWcgaXMgc2V0IGFuZCB3ZSBhcmUgYXQgdGhlIGxhc3QgYXJyYXkgc2xvdCwgd2UgYXJlICpub3QqIGdvaW5nIHRvIHNldCBjcWUzMiB0byB0cnVlLCBzbyB3ZSBhcmUgb2ssIGJ1dCBpZiB3ZSBhcmUgKm5vdCogYXQgdGhlIGxhc3QgYXJyYXkgc2xvdCwgYW5kIGl0IGlzIDMyIGJ5dGVzLi4uXG5cbk5vdyB3YWl0IGEgbWludXRlISBJZiBgY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzJgLCB0aGUgQ1FFIFdBUyAzMiBieXRlcywgcmlnaHQ/IEJ1dCBob2xkIG9uLCBjYW4gaW9fdXJpbmcgQ1FFMzIgZW50cmllcyAqd3JhcCogaW4gdGhlIHJpbmc/IEFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQgb24gQ1FFIGFsbG9jYXRpb24gaW4gYGlvX2NxZV9jYWNoZV9yZWZpbGxgIG9yIGVsc2V3aGVyZT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBDUUUzMiBpcyBoYW5kbGVkIHdoZW4gYWxsb2NhdGluZyBlbnRyaWVzLCB0aGF0J3Mga2V5LiBXZSd2ZSBnb3QgYSBsaWtlbHkgYXJyYXkgb3V0LW9mLWJvdW5kcyBzaXR1YXRpb24gaGVyZSwgYW5kIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBDUUUgYWxsb2NhdGlvbiBhbmQgcmluZyBidWZmZXIgbWVjaGFuaWNzIGluIGBpb191cmluZy5jYFxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MjUuMTEyODUzOTQxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU2ODI0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz01MTU9c3RhdGljIHZvaWQgX19pb19jcXJpbmdfb3ZlcmZsb3dfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgZHlpbmcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTUzMi1cXHRcXHRpZiAob2NxZS1cXHUwMDNlY3FlLmZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1MzM6XFx0XFx0ICAgIGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5jLTUzNC1cXHRcXHRcXHRpc19jcWUzMiA9IHRydWU7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTUzNi1cXHRcXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo1Mzc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy01MzgtXFx0XFx0XFx0aXNfY3FlMzIgPSBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NjUyPXN0YXRpYyBzdHJ1Y3QgaW9fb3ZlcmZsb3dfY3FlICppb19hbGxvY19vY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NTktXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo2NjA6XFx0aWYgKGNxZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNjYxLVxcdFxcdGlzX2NxZTMyID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzQ3LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzQ4OlxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDktXFx0XFx0b2ZmIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTc2Mi1cXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTIxMDQtXFx0b2ZmID0gc3RydWN0X3NpemUocmluZ3MsIGNxZXMsIGNxX2VudHJpZXMpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEwNTpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTA2LVxcdFxcdG9mZiA9IHNpemVfbXVsKG9mZiwgMik7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI3ODg9c3RhdGljIGludCBpb191cmluZ19zYW5pdGlzZV9wYXJhbXMoc3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XFx0aWYgKChmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpID09XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3OlxcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6MjUuNDI4NTQ4NDU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5ODQ1NDY0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJpbmcgQnVmZmVyIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHJpbmcgYnVmZmVyIGFsbG9jYXRpb24gbG9naWMuIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYHJpbmdzX3NpemVgIGlzIGNhbGN1bGF0ZWQuIFNwZWNpZmljYWxseSwgaWYgYElPUklOR19TRVRVUF9DUUUzMmAgaXMgc2V0LCB0aGUgYHJpbmdzYCBidWZmZXIgZWZmZWN0aXZlbHkgZG91YmxlcyBpdHMgc2l6ZSBmb3IgdGhlIGBjcWVzYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGhhZG4ndCBleHBsaWNpdGx5IHRob3VnaHQgYWJvdXQgdGhhdCwgYnV0IGl0IG1ha2VzIHNlbnNlIOKAkyBpdCdzIGFsbG9jYXRpbmcgc3BhY2UgZm9yIDMyLWJpdCBDUUVzIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCA2NC1iaXQgb25lcywgd2hpY2ggbWVhbnMgbW9yZSBlbnRyaWVzIGluIHRoZSBDUSByaW5nIGNhbiBiZSB0cmFja2VkLlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGFib3V0IGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYD8gVGhhdCBzZXR1cCBvcHRpb24gaW5kaWNhdGVzIENRRXMgYXJlIG9mIG1peGVkIHNpemVzLiBUaGF0IG1lYW5zIHRoZSBkb3VibGluZyBpcyBjb250aW5nZW50IG9uIHRoZSBmbGFnICpub3QqIGJlaW5nIG1peGVkIHNpemVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzIGluIHRoYXQgc2NlbmFyaW8sIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgZm9yIG9jY3VycmVuY2VzIG9mIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gaXMgbW9kaWZpZWQgd2hlbiBtaXhlZCBDUUUgc2l6ZXMgYXJlIGVuYWJsZWQgc28gSSBkb24ndCBpbnRyb2R1Y2UgZXJyb3JzIGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjI5LjQxMzA5NzEzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NTcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRV9NSVhFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlxcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4NC1cXG5pb191cmluZy9pb191cmluZy5jOjIwODU6XFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4Ni1cXHRcXHRpZiAoY3FfZW50cmllcyBcXHUwMDNjIDIpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI3ODg9c3RhdGljIGludCBpb191cmluZ19zYW5pdGlzZV9wYXJhbXMoc3RydWN0IGlvX3VyaW5nX3BhcmFtcyAqcClcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzNS1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5jOjI4MzY6XFx0aWYgKChmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpID09XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM3OlxcdCAgICAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjgzOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzA9c3RydWN0IGlvX2N0eF9jb25maWcge1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC03Mi1cXHRcXHRcXHRJT1JJTkdfU0VUVVBfSFlCUklEX0lPUE9MTCB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6NzM6XFx0XFx0XFx0SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzQtXFx0XFx0XFx0SU9SSU5HX1NFVFVQX1NRRV9NSVhFRCB8XFxcXFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWVfb3ZlcmZsb3coc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTI3My1cXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG5pb191cmluZy9pb191cmluZy5oOjI3NDpcXHR9IGVsc2UgaWYgKGNxZTMyIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzUtXFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTI4OD1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZGVmZXJfZ2V0X3VuY29tbWl0ZWRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTMtXFx0Y3R4LVxcdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjk0OlxcdHJldHVybiBpb19nZXRfY3FlKGN0eCwgY3FlX3JldCwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjk1LX1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MzM2PXN0YXRpYyBpbmxpbmUgdTMyIGN0eF9jcWUzMl9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG5pb191cmluZy9pb191cmluZy5oLTMzNy17XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMzg6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzM5LVxcdFxcdHJldHVybiBJT1JJTkdfQ1FFX0ZfMzI7XFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jPTk2PXN0YXRpYyBpbnQgaW9fbXNnX3JpbmdfY3FlX2ZsYWdzKHN0cnVjdCBpb19yaW5nX2N0eCAqdGFyZ2V0X2N0eCxcXG4tLVxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA2LVxcdCAgICAhKHRhcmdldF9jdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8XFxuaW9fdXJpbmcvbXNnX3JpbmcuYzoxMDc6XFx0XFx0XFx0XFx0ICAgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvbm9wLmM9Mjc9aW50IGlvX25vcF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9ub3AuYy00OS1cXG5pb191cmluZy9ub3AuYzo1MDpcXHRcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXFxuaW9fdXJpbmcvbm9wLmMtNTEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTUtXFx0XFx0XFx0IElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9OT19NTUFQIHwgXFxcXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDk2OlxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEIHwgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRClcXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ny1cXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTE1Mj12b2lkIF9faW9fdXJpbmdfY21kX2RvbmUoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLCBzMzIgcmV0LCB1NjQgcmVzMixcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2Ni1cXHRpZiAoaXNfY3FlMzIpIHtcXG5pb191cmluZy91cmluZ19jbWQuYzoxNjc6XFx0XFx0aWYgKHJlcS1cXHUwMDNlY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMTY4LVxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzIHw9IElPUklOR19DUUVfRl8zMjtcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTI0Mz1pbnQgaW9fdXJpbmdfY21kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0yNTktXFx0XFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9TUUUxMjg7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MjYwOlxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9DUUVfTUlYRUQpKVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI2MS1cXHRcXHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX0NRRTMyO1xcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTgzMT1zdGF0aWMgaW50IGltcG9ydF96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTg0MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy96Y3J4LmM6ODQyOlxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy96Y3J4LmMtODQzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvemNyeC5jPTk2MT1pbnQgaW9fcmVnaXN0ZXJfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy05ODEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvemNyeC5jOjk4MjpcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXFxuaW9fdXJpbmcvemNyeC5jLTk4My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0xNjI4PXN0YXRpYyBib29sIGlvX3pjcnhfcXVldWVfY3FlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdixcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xNjQyLVxcdGNxZS1cXHUwMDNlZmxhZ3MgPSBJT1JJTkdfQ1FFX0ZfTU9SRTtcXG5pb191cmluZy96Y3J4LmM6MTY0MzpcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpXFxuaW9fdXJpbmcvemNyeC5jLTE2NDQtXFx0XFx0Y3FlLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjI5LjQ2MDc1OTc4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzI2OTY5NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgaW9fY3FlX2NhY2hlX3JlZmlsbCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgY2xvc2VyIGxvb2sgYXQgYGlvX2NxZV9jYWNoZV9yZWZpbGxgLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBjb2RlYmFzZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW5zaWRlIGFuZCBvdXQuIExldCdzIHB1bGwgdXAgYGlvX3VyaW5nL2lvX3VyaW5nLmNgIOKAkyBzcGVjaWZpY2FsbHkgbGluZXMgNzE1IHRocm91Z2ggNzU1LiBUaGF0IHNob3VsZCBiZSB0aGUgcmVsZXZhbnQgYmxvY2sgb2YgY29kZSBJJ20gYWZ0ZXIuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IChDUUUpIGNhY2hlIGlzIG1hbmFnZWQgYW5kIHJlcGxlbmlzaGVkLiBJJ20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIHBvdGVudGlhbGx5IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGhlcmUuIEhvcGVmdWxseSwgSSdsbCBiZSBhYmxlIHRvIHNwb3QgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGJ5IGZvY3VzaW5nIG9uIHRoaXMgc2VjdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjMzLjc4NzczMTk2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTU6XFx0ICogY29udHJvbCBkZXBlbmRlbmN5IGlzIGVub3VnaCBhcyB3ZSdyZSB1c2luZyBXUklURV9PTkNFIHRvXFxuIDcxNjpcXHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxcbiA3MTc6XFx0ICovXFxuIDcxODpcXHRib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXFxuIDcxOTpcXHR7XFxuIDcyMDpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzID0gY3R4LVxcdTAwM2VyaW5ncztcXG4gNzIxOlxcdFxcdHVuc2lnbmVkIGludCBvZmYgPSBjdHgtXFx1MDAzZWNhY2hlZF9jcV90YWlsIFxcdTAwMjYgKGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIDEpO1xcbiA3MjI6XFx0XFx0dW5zaWduZWQgaW50IGZyZWUsIGxlbjtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0LypcXG4gNzI1OlxcdFxcdCAqIFBvc3RpbmcgaW50byB0aGUgQ1Egd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBvdmVyZmxvd2VkIENRRXMgbWF5IGJyZWFrXFxuIDcyNjpcXHRcXHQgKiBvcmRlcmluZyBndWFyYW50ZWVzLCB3aGljaCB3aWxsIGFmZmVjdCBsaW5rcywgRl9NT1JFIHVzZXJzIGFuZCBtb3JlLlxcbiA3Mjc6XFx0XFx0ICogRm9yY2Ugb3ZlcmZsb3cgdGhlIGNvbXBsZXRpb24uXFxuIDcyODpcXHRcXHQgKi9cXG4gNzI5OlxcdFxcdGlmICghb3ZlcmZsb3cgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2hlY2tfY3EgXFx1MDAyNiBCSVQoSU9fQ0hFQ0tfQ1FfT1ZFUkZMT1dfQklUKSkpXFxuIDczMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdC8qXFxuIDczMzpcXHRcXHQgKiBQb3N0IGR1bW15IENRRSBpZiBhIDMyYiBDUUUgaXMgbmVlZGVkIGFuZCB0aGVyZSdzIG9ubHkgcm9vbSBmb3IgYVxcbiA3MzQ6XFx0XFx0ICogMTZiIENRRSBiZWZvcmUgdGhlIHJpbmcgd3JhcHMuXFxuIDczNTpcXHRcXHQgKi9cXG4gNzM2OlxcdFxcdGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBvZmYgKyAxID09IGN0eC1cXHUwMDNlY3FfZW50cmllcykge1xcbiA3Mzc6XFx0XFx0XFx0aWYgKCFpb19maWxsX25vcF9jcWUoY3R4LCBvZmYpKVxcbiA3Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3Mzk6XFx0XFx0XFx0b2ZmID0gMDtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0ZnJlZSA9IGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIGlvX2NxcmluZ19xdWV1ZWQoY3R4KTtcXG4gNzQzOlxcdFxcdC8qIHdlIG5lZWQgYSBjb250aWd1b3VzIHJhbmdlLCBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBhcnJheSBvZmZzZXQgKi9cXG4gNzQ0OlxcdFxcdGxlbiA9IG1pbihmcmVlLCBjdHgtXFx1MDAzZWNxX2VudHJpZXMgLSBvZmYpO1xcbiA3NDU6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIChjcWUzMiArIDEpKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbiA3NDk6XFx0XFx0XFx0b2ZmIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTA6XFx0XFx0XFx0bGVuIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQgPSBcXHUwMDI2cmluZ3MtXFx1MDAzZWNxZXNbb2ZmXTtcXG4gNzU0OlxcdFxcdGN0eC1cXHUwMDNlY3FlX3NlbnRpbmVsID0gY3R4LVxcdTAwM2VjcWVfY2FjaGVkICsgbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNDozMy43ODc4ODMxOTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE2MDI5MjU0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBEZWVwIERpdmUgaW50byBhIFBvdGVudGlhbCBpb191cmluZyBPdXQtb2YtQm91bmRzIFJlYWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgSSBub3RpY2VkIHNvbWV0aGluZyBhYm91dCBob3cgdGhlIENvbXBsZXRpb24gUXVldWUgRW50cmllcyAoQ1FFcykgYXJlIGhhbmRsZWQgd2hlbiBgSU9SSU5HX1NFVFVQX0NRRTMyYCBpcyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIHRoZSByaW5nIHNpemUgZG91YmxlcyBiZWNhdXNlIHRoZSBpbmRleCBtYXRoIGBvZmYgPSBzaXplX211bChvZmYsIDIpO2Agc3VnZ2VzdHMgYHJpbmdzLVx1MDAzZWNxZXNgIGhhcyB0d2ljZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXMgYGNxX2VudHJpZXNgLiBUaGVuLCB0aGUgaW5kZXhpbmcgdXNlcyBgY3FfaGVhZCBcdTAwM2NcdTAwM2MgMWAuIEJ1dCB0aGVuIEkgbm90aWNlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHdoZW4gbG9va2luZyBhdCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AuIEl0IGRvZXNuJ3QgdXNlIHRoZSBgXHUwMDNjXHUwMDNjIDFgIHNoaWZ0LCB1c2luZyBgXHUwMDI2IGNxX21hc2tgIGZvciBpbmRleGluZy4gVGhhdCBzdG9vZCBvdXQuXG5cblRoZW4gSSByZWNhbGxlZCB0aGF0IGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCB1c2VzIGBjcV9lbnRyaWVzYCBub3QgYDIgKiBjcV9lbnRyaWVzYC4gT2theSwgc28gYSAzMi1iaXQgQ1FFLCBpbmRpY2F0ZWQgYnkgYGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyYCwgb2NjdXBpZXMgdHdvIHNsb3RzLiBOb3csIGxpbmUgNzM2IGluIHRoZSBjb2RlIHNob3dzIGEgY2hlY2sgdGhhdCBpcyBjcnVjaWFsLiBJZiBhIDMyYiBDUUUgaXMgbmVlZGVkLCBhbmQgYG9mZiArIDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXNgIChpLmUuIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSByaW5nKSwgdGhlIGNvZGUgZmlsbHMgYSBOT1AgQ1FFIGFuZCB3cmFwcyBhcm91bmQuIFRoaXMgbWVhbnMsIGEgMzJiIENRRSAqc2hvdWxkKiBuZXZlciBiZSBhdCB0aGUgdmVyeSBsYXN0IHNsb3QuIEEgTk9QIENRRSBzaG91bGQgYmUgdGhlcmUgaW5zdGVhZC5cblxuQnV0IGhlcmUncyB0aGUga2lja2VyOiBpZiBzb21laG93IGEgdXNlciBvciBjb3JydXB0aW9uLCBvciBhIHJhY2UsIG9yIGlmIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2lvX3VyaW5nX2ZkXHUwMDNlYCByZWFkcyB0aGUgd3JvbmcgdmFsdWUsIHB1dHMgYSAzMmIgQ1FFIGF0IGBjcV9tYXNrYCwgdGhlbiB0aGUgY29kZSB0cmllcyB0byByZWFkIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAuLi4gd2hpY2ggaXMgKm91dC1vZi1ib3VuZHMqIGJlY2F1c2UgaXQncyByZWFkaW5nIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBgci1cdTAwM2VjcWVzYCBhcnJheS5cblxuQW5kIHRoZW4gSSBzYXcgdGhlIGF1dGhvcidzIGNvZGU6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gSG9sZCBvbi4gYGNxX2hlYWRgIGlzbid0IG1hc2tlZCEgYGNxX2hlYWRgIGNhbiBiZSAxNiwgMzIsIDQ4Li4uIGFuZCBgY3FfbWFza2AgaXMgMTUgaW4gdGhpcyBjYXNlLiBUaGUgYXV0aG9yIHNob3VsZCBoYXZlIHdyaXR0ZW4gYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKSA9PSBjcV9tYXNrYCEgQmVjYXVzZSB0aGV5IGRpZG4ndCwgYGlzX2xhc3RfY3FhcnJheV9zbG90YCBpcyBmYWxzZSBvbiBzdWJzZXF1ZW50IHdyYXBzLiBTbyBvbiBzdWJzZXF1ZW50IHdyYXBzLCBgaXNfbGFzdF9jcWFycmF5X3Nsb3RgIGlzIGZhbHNlLCBgY3FlMzJgIGlzIHRydWUsIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIHJlYWRzIG91dCBvZiBib3VuZHMgYmV5b25kIGByLVx1MDAzZWNxZXNgISBJdCdzIGEgY2xhc3NpYyBidWcgaW50cm9kdWNlZCBieSBhIHBhdGNoLCBhbmQgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyIVxuXG5Ob3cgbGV0J3MgdmVyaWZ5LiBDYW4gd2UgYWN0dWFsbHkgcmVhY2ggdGhpcyBjb2RlPyBZZXMsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2lvX3VyaW5nX2ZkXHUwMDNlYCBpcyByZWFjaGFibGUuIERvZXMgaXQgdG91Y2ggYSBjb3JlIHN1YnN5c3RlbT8gWWVzLCBgaW9fdXJpbmdgLiBEb2VzIGl0IHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseSEgSXQncyBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgY29uZmlncyByZXF1aXJlZCBmb3IgZnV6emluZy4gV2UgbmVlZCBgSU9fVVJJTkdgIChsaWtlbHkgYWxyZWFkeSBlbmFibGVkKSwgYW5kIGBQUk9DX0ZTYCB0byByZWFkIGBmZGluZm9gLiBMb29raW5nIGF0IGBpb191cmluZy9NYWtlZmlsZWAsIGBmZGluZm8ub2AgaXMgYnVpbHQgd2l0aCBgQ09ORklHX1BST0NfRlNgLiBTbywgYFBST0NfRlNgIGlzIGEgcmVxdWlyZW1lbnQuIEFsc28gYENPTkZJR19JT19VUklOR2AgY29tcGlsZXMgdGhlIGVudGlyZSBgaW9fdXJpbmcvYCBkaXJlY3RvcnkuXG5cbldlIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bGwgYGlvX3VyaW5nL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNDo1NS4zOTA4MTE3MjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBpb191cmluZ1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX1VSSU5HXFxuICAgNjpcXHRHQ09WX1BST0ZJTEUgOj0geVxcbiAgIDc6XFx0ZW5kaWZcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdFxcdCs9IGlvX3VyaW5nLm8gb3BkZWYubyBrYnVmLm8gcnNyYy5vIG5vdGlmLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0XFx0XFx0dGN0eC5vIGZpbGV0YWJsZS5vIHJ3Lm8gcG9sbC5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdFxcdHR3Lm8gd2FpdC5vIGV2ZW50ZmQubyB1cmluZ19jbWQubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHRcXHRvcGVuY2xvc2UubyBzcXBvbGwubyB4YXR0ci5vIG5vcC5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdFxcdFxcdFxcdGZzLm8gc3BsaWNlLm8gc3luYy5vIG1zZ19yaW5nLm8gXFxcXFxcbiAgMTQ6XFx0XFx0XFx0XFx0XFx0XFx0YWR2aXNlLm8gb3BlbmNsb3NlLm8gc3RhdHgubyB0aW1lb3V0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0XFx0XFx0XFx0XFx0Y2FuY2VsLm8gd2FpdGlkLm8gcmVnaXN0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRcXHRcXHRcXHRcXHR0cnVuY2F0ZS5vIG1lbW1hcC5vIGFsbG9jX2NhY2hlLm8gXFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0XFx0cXVlcnkubyBsb29wLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX1pDUlgpXFx0Kz0gemNyeC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfSU9fV1EpXFx0XFx0Kz0gaW8td3Eub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0ZVVEVYKVxcdFxcdCs9IGZ1dGV4Lm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19FUE9MTClcXHRcXHQrPSBlcG9sbC5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXHQrPSBuYXBpLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORVQpICs9IG5ldC5vIGNtZF9uZXQub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IGZkaW5mby5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfTU9DS19GSUxFKSArPSBtb2NrX2ZpbGUub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgKz0gYnBmX2ZpbHRlci5vXFxuICAyODpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGX09QUykgKz0gYnBmLW9wcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjU1LjM5MDg3NDc0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODI5MTE0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgaW9fdXJpbmcgQnVpbGQgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZGl0aW9ucyBmb3IgdGhlIGBpb191cmluZy9gIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGlmIGBDT05GSUdfSU9fVVJJTkdgIGlzIGRlZmluZWQsIHRoZSBhc3NvY2lhdGVkIGNvZGUgKmFsd2F5cyogZ2V0cyBidWlsdC4gTm8gc25lYWt5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIEknbSBtaXNzaW5nLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IHRoZSBgcm9vdCBNYWtlZmlsZWAgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIFRoYXQncyB3aGVyZSB0aGUgdG9wLWxldmVsIGJ1aWxkIHJ1bGVzIHVzdWFsbHkgcmVzaWRlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgaXQsIGxvb2tpbmcgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBpb191cmluZy9gLiBJJ2xsIGJlIHNjYW5uaW5nIGZvciBleHBsaWNpdCBtZW50aW9ucywgb2YgY291cnNlLCBidXQgYWxzbyBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIG9yIGluY2x1ZGUgc3RhdGVtZW50cy5cblxuVGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBicm9hZGVuIHRoZSBzZWFyY2guIEknbGwgdXNlIGBncmVwYCB0byBodW50IGRvd24gKmFueSogaW5zdGFuY2VzIG9mIGBpb191cmluZy9gIHdpdGhpbiB0aGUgYE1ha2VmaWxlYCBhbmQgYW55IGBLYnVpbGRgIGZpbGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGUgYGlvX3VyaW5nL2AgZGlyZWN0b3J5IGlzIGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBpdHMgaW5jbHVzaW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU0MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjQ6NTkuMjE5OTkyODU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMTg1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI0OjU5LjI2ODczMzU3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzc2MTY2Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBLYnVpbGQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgS2J1aWxkYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBsaWVzLCB0aGUgbWFrZWZpbGVzIGFuZCBzY3JpcHRzIHRoYXQgZGljdGF0ZSBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBwYWNrYWdlZC4gVW5kZXJzdGFuZGluZyBgS2J1aWxkYCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsLiBJdOKAmXMgdGhlIG9yY2hlc3RyYXRvci4gSWYgSSdtIGdvaW5nIHRvIHVuZGVyc3RhbmQgb3IgZGVidWcgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgYnVpbGQsIGBLYnVpbGRgIGhhcyB0byBiZSB0aGUgZmlyc3Qgc3RvcC4gTGV0J3Mgc2VlIHdoYXQgaXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5MDAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI1OjAxLjY0NDkwMjUzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxODUxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiS2J1aWxkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIktidWlsZD0xMDc9b2JqLSQoQ09ORklHX0JMT0NLKVxcdCs9IGJsb2NrL1xcbktidWlsZDoxMDg6b2JqLSQoQ09ORklHX0lPX1VSSU5HKVxcdCs9IGlvX3VyaW5nL1xcbktidWlsZC0xMDktb2JqLSQoQ09ORklHX1JVU1QpXFx0Kz0gcnVzdC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjU6MDEuNjkzMDk5NTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTk5MTMwOTA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBmZGluZm8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgdGhlIGBLYnVpbGRgIGZpbGUgaW5jbHVkZXMgYGlvX3VyaW5nL2AgYW5kIHdpdGhpbiB0aGF0LCB0aGUgYE1ha2VmaWxlYCBjb25kaXRpb25hbGx5IGluY2x1ZGVzIGBmZGluZm8ub2AgYmFzZWQgb24gYFBST0NfRlNgLiBTbywgYElPX1VSSU5HYCBhbmQgYFBST0NfRlNgIGFyZSBib3RoIHByZXJlcXVpc2l0ZXMgaGVyZS5cblxuTXkgZm9jdXMgaXMgdGhlIGBpb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQncyB1c2VkIHdpdGggYC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjZmRcdTAwM2VgLiBUaGUgY29kZSBwYXRoIGlzOiBwcm9jZnMgY2FsbHMgYHNob3dfZmRpbmZvYCAobGlrZWx5IHZpYSBgc2VxX3JlYWRgIGFuZCBgc2VxX3Nob3dgLCBzb21ldGhpbmcgbGlrZSBgcHJvY19mZGluZm9fc2hvd2ApLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYGlvX3VyaW5nX3Nob3dfZmRpbmZvYCDigJMgdGhlIGZpbGUgb3BlcmF0aW9ucyBlbnRyeSBwb2ludCDigJMgYW5kIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCDigJMgd2hpY2ggKmNvbnRhaW5zKiB0aGUgYWN0dWFsIGxvZ2ljIGNoYW5nZS4gVGhhdCBzZWVtcyByaWdodCwgSSBldmVuIHZlcmlmaWVkIHRoYXQgdGhlIGBpb191cmluZ19zaG93X2ZkaW5mb2AgaXMgZGVmaW5lZCBpbiBgaW9fdXJpbmcvZmRpbmZvLmhgIGFuZCB1c2VkIGluIGBpb191cmluZy9pb191cmluZy5jYC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvYCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLCB3aGljaCwgaW1wb3J0YW50bHksIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgdGhlIGAvcHJvYy9bcGlkXS9mZGluZm8vW2ZkXWAgb2YgYW4gaW9fdXJpbmcgZmlsZSBkZXNjcmlwdG9yLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIGBjcWUtXHUwMDNlYmlnX2NxZWAgd2hlbiBkaXNwbGF5aW5nIDMyLWJ5dGUgQ1FFcyBhdCB0aGUgZW5kIG9mIHRoZSBDUSByaW5nIGFycmF5LiBIb3dldmVyLCB0aGUgY29uZGl0aW9uIGludHJvZHVjZWQgdG8gcHJldmVudCB0aGF0IG91dC1vZi1ib3VuZHMgcmVhZCBhcHBlYXJzIHRvIGJlIGZsYXdlZCwgbGlrZWx5IGZhaWxpbmcgdG8gdHJpZ2dlciB3aGVuIGBjcV9oZWFkYCB3cmFwcyBiZXlvbmQgYGNxX21hc2tgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBpbmNvcnJlY3QgZmRpbmZvIG91dHB1dCB1bmRlciB2YWxpZCByaW5nIHdyYXBwaW5nIHNjZW5hcmlvcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHJlcXVpcmVtZW50czogYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kOyB0aGUgcHJvYmxlbSBpcyB3ZWxsLWV4cGxhaW5lZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYElPX1VSSU5HYCBhbmQgYFBST0NfRlNgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQgYXMgYF9faW9fdXJpbmdfc2hvd19mZGluZm9gIGFuZCBgaW9fdXJpbmdfc2hvd19mZGluZm9gLlxuXG5JJ3ZlIGNvbmZpcm1lZDogdGhlIGNoYW5nZXMgYXJlIGFscmVhZHkgYXBwbGllZC4gUmVhY2hhYmlsaXR5IGlzIHZpYSBzdGFuZGFyZCAvcHJvYyByZWFkcywgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgYW5kIHRoZSBGb2N1c1N5bWJvbHMgYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIGFsdGVyZWQgZmVhdHVyZSBsb2dpYy4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIHRoZSBleHBlY3RlZCBvbmVzLlxuXG5UaGlzIGFsbCBjaGVja3Mgb3V0LiBUaGUgYW5hbHlzaXMgaXMgc29saWQsIGFuZCBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE0NSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6MDEuNjA2MTkzOTM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4MDY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb191cmluZ19zaG93X2ZkaW5mb1wiLFxuICAgIFwiaW9fdXJpbmdfc2hvd19mZGluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgdGhlIENRRSBmb3JtYXR0aW5nIGxvZ2ljIGluIF9faW9fdXJpbmdfc2hvd19mZGluZm8oKSB3aXRoaW4gaW9fdXJpbmcvZmRpbmZvLmMsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSByZWFkaW5nIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL2ZkaW5mby9cXHUwMDNjaW9fdXJpbmdfZmRcXHUwMDNlLiBUaGUgY2hlY2sgYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKWAgZmFpbHMgdG8gbWFzayBjcV9oZWFkIGFnYWluc3QgY3FfbWFzaywgbWVhbmluZyB3aGVuIGNxX2hlYWQgYWR2YW5jZXMgcGFzdCBjcV9tYXNrLCB0aGUgYm91bmRhcnkgY2hlY2sgYmVjb21lcyBmYWxzZSBhbmQgY2FuIGFsbG93IG91dC1vZi1ib3VuZHMgcmVhZHMgaW50byBjcWUtXFx1MDAzZWJpZ19jcWUgb24gd3JhcHBlZCByaW5ncy4gRnV6emluZyBjYW4gZWFzaWx5IGV4ZXJjaXNlIHRoaXMgcGF0aCBhbmQgdmVyaWZ5IG1lbW9yeSBzYWZldHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvX3VyaW5nX3Nob3dfZmRpbmZvXCIsXG4gICAgXCJpb191cmluZ19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyB0aGUgQ1FFIGZvcm1hdHRpbmcgbG9naWMgaW4gX19pb191cmluZ19zaG93X2ZkaW5mbygpIHdpdGhpbiBpb191cmluZy9mZGluZm8uYywgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHJlYWRpbmcgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2Npb191cmluZ19mZFxcdTAwM2UuIFRoZSBjaGVjayBgYm9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spYCBmYWlscyB0byBtYXNrIGNxX2hlYWQgYWdhaW5zdCBjcV9tYXNrLCBtZWFuaW5nIHdoZW4gY3FfaGVhZCBhZHZhbmNlcyBwYXN0IGNxX21hc2ssIHRoZSBib3VuZGFyeSBjaGVjayBiZWNvbWVzIGZhbHNlIGFuZCBjYW4gYWxsb3cgb3V0LW9mLWJvdW5kcyByZWFkcyBpbnRvIGNxZS1cXHUwMDNlYmlnX2NxZSBvbiB3cmFwcGVkIHJpbmdzLiBGdXp6aW5nIGNhbiBlYXNpbHkgZXhlcmNpc2UgdGhpcyBwYXRoIGFuZCB2ZXJpZnkgbWVtb3J5IHNhZmV0eS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6MDEuNjg0MDEzMTg0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5MDk0MDg0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjowMS42ODQ3NTU2MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjI5MDg2NjEwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKClgIGluIGBpb191cmluZy9mZGluZm8uY2AgdG8gcHJldmVudCB0cmVhdGluZyB0aGUgbGFzdCBzbG90IG9mIHRoZSBDUSByaW5nIGFycmF5IGFzIGEgMzItYnl0ZSBDUUUgKGBjcWUzMmApLiBXaXRob3V0IHByb3BlciBib3VuZGFyeSBoYW5kbGluZywgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNxZS1cXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXFx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXFx1MDAzZWNxZXNbXWAuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMTMxMTAwY2UxNjdjNDhkM2IxNDlhMWNkODM4YjJiMDNiNDBhMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNjoyMjozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2ZkaW5mby5jIGIvaW9fdXJpbmcvZmRpbmZvLmNcbmluZGV4IDNhZTQ4MDQ3NjViOTQuLjBiNjU2YTZjODQyOGQgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9mZGluZm8uY1xuKysrIGIvaW9fdXJpbmcvZmRpbmZvLmNcbkBAIC0xNTUsOSArMTU1LDExIEBAIHN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNxX2VudHJpZXM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XG4gXHRcdGJvb2wgY3FlMzIgPSBmYWxzZTtcbitcdFx0Ym9vbCBpc19sYXN0X2NxYXJyYXlfc2xvdCA9IChjcV9oZWFkID09IGNxX21hc2spO1xuIFxuIFx0XHRjcWUgPSBcdTAwMjZyLVx1MDAzZWNxZXNbKGNxX2hlYWQgXHUwMDI2IGNxX21hc2spXTtcbi1cdFx0aWYgKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKVxuK1x0XHRpZiAoKGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFpc19sYXN0X2NxYXJyYXlfc2xvdClcbiBcdFx0XHRjcWUzMiA9IHRydWU7XG4gXHRcdHNlcV9wcmludGYobSwgXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XCIsXG4gXHRcdFx0ICAgY3FfaGVhZCBcdTAwMjYgY3FfbWFzaywgY3FlLVx1MDAzZXVzZXJfZGF0YSwgY3FlLVx1MDAzZXJlcyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjAxLjY4NDc1NzEzNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzI2NjczNDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGlvX3VyaW5nL2ZkaW5mby5jKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgc3BlY2lmaWMgcGF0Y2ggaW4gYGlvX3VyaW5nL2ZkaW5mby5jYCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gd2l0aGluIHN5emthbGxlci4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyB3ZSBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBlYXJseS4gRXNzZW50aWFsbHksIEknbSBwZXJmb3JtaW5nIGEgcmlzayBhbmFseXNpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIGhpZ2hlciByaXNrIHByb2ZpbGUgZm9yIG1lbW9yeSBlcnJvcnMgdGhhdCBLQVNBTiBtaWdodCBtaXNzLiBJdCdzIGEgYmVuaWduIGFjdGlvbjsgYSBzdGFuZGFyZCBwYXJ0IG9mIG15IHdvcmtmbG93IGZvciByZXZpZXdpbmcgY2hhbmdlcy4gSSdtIG9wZXJhdGluZyBhcyBhIHNvcnQgb2YgZGVmZW5zaXZlIG1lY2hhbmlzbSwgYSBkZXZlbG9wZXIgUUEgdG9vbCwgZm9yIHN5emthbGxlciB0cmlhZ2UuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSBkb2VzLiBJJ20gbG9va2luZyBhdCB0aGUgZGlmZiwgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZSAxNTUsIHdoaWNoIEkndmUgYnJvdWdodCBpbnRvIHZpZXcgd2l0aCBgcmVhZC1maWxlYC4gXG5cbmBgYGRpZmZcbmRpZmYgLS1naXQgYS9pb191cmluZy9mZGluZm8uYyBiL2lvX3VyaW5nL2ZkaW5mby5jXG5pbmRleCAzYWU0ODA0NzY1Yjk0Li4wYjY1NmE2Yzg0MjhkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZmRpbmZvLmNcbisrKyBiL2lvX3VyaW5nL2ZkaW5mby5jXG5AQCAtMTU1LDkgKzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjcV9lbnRyaWVzOyBpKyspIHtcbiBcdFx0c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlO1xuIFx0XHRib29sIGNxZTMyID0gZmFsc2U7XG4rXHRcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcbiBcbiBcdFx0Y3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07XG4tXHRcdGlmIChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcbitcdFx0aWYgKChjcWUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXG4gXHRcdFx0Y3FlMzIgPSB0cnVlO1xuIFx0XHRzZXFfcHJpbnRmKG0sIFwiJTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleFwiLFxuIFx0XHRcdCAgIGNxX2hlYWQgXHUwMDI2IGNxX21hc2ssIGNxZS1cdTAwM2V1c2VyX2RhdGEsIGNxZS1cdTAwM2VyZXMsXG5gYGBcblxuSXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayBmb3IgYGlzX2xhc3RfY3FhcnJheV9zbG90YC4gVGhpcyBpcyBsaWtlbHkgYSBib3VuZGFyeSBjb25kaXRpb24gcmVsYXRlZCB0byBgSU9SSU5HX0NRRV9GXzMyYCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhpcyBuZXcgY29uZGl0aW9uYWwuIEFyZSB0aGVyZSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnM/IElzIHRoZXJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2ggdGhhdCBLQVNBTiB3b3VsZG4ndD8gVGhlIGFkZGl0aW9uIG9mIGAhaXNfbGFzdF9jcWFycmF5X3Nsb3RgIHN1Z2dlc3RzIGEgcG9zc2libGUgY29ycmVjdGlvbiB0byBhIHByZXZpb3VzIGlzc3VlLCBwb3NzaWJseSBhIG1lbW9yeSBhY2Nlc3MgdGhhdCBnb2VzIGJleW9uZCB0aGUgYm91bmRzIG9mIGEgYnVmZmVyIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIGxvZ2ljIGhlcmUgaW50cm9kdWNlcyBtb3JlIGNvbXBsZXggY29uZGl0aW9ucywgYW5kIHdoZXRoZXIgS01TQU4ncyBzdHJpY3RlciBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIHdvdWxkIHByb3ZpZGUgYWRkaXRpb25hbCB2YWx1ZS4gSSdsbCBmb2N1cyBvbiBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciBhY2Nlc3NlcyB0byBmcmVlZCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBjb3VsZCBhcmlzZSBiZWNhdXNlIG9mIHRoaXMgY2hlY2suIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6MTguOTUxNDk0NDkzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2ZkaW5mby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHRcXHRcXHR1NjQgKnNxZWIgPSAodm9pZCAqKSAoc3FlICsgMSk7XFxuIDE0MTpcXHRcXHRcXHRcXHRpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfc3FlKSAvIHNpemVvZih1NjQpO1xcbiAxNDI6XFx0XFx0XFx0XFx0aW50IGo7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBzaXplOyBqKyspIHtcXG4gMTQ1OlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiwgZSVkOjB4JWxseFxcXCIsIGosXFxuIDE0NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKSAqc3FlYik7XFxuIDE0NzpcXHRcXHRcXHRcXHRcXHRzcWViKys7XFxuIDE0ODpcXHRcXHRcXHRcXHR9XFxuIDE0OTpcXHRcXHRcXHR9XFxuIDE1MDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJcXFxcblxcXCIpO1xcbiAxNTE6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDE1MjpcXHRcXHR9XFxuIDE1MzpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJDUUVzOlxcXFx0JXVcXFxcblxcXCIsIGNxX3RhaWwgLSBjcV9oZWFkKTtcXG4gMTU0OlxcdFxcdGNxX2VudHJpZXMgPSBtaW4oY3FfdGFpbCAtIGNxX2hlYWQsIGN0eC1cXHUwMDNlY3FfZW50cmllcyk7XFxuIDE1NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY3FfZW50cmllczsgaSsrKSB7XFxuIDE1NjpcXHRcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfY3FlICpjcWU7XFxuIDE1NzpcXHRcXHRcXHRib29sIGNxZTMyID0gZmFsc2U7XFxuIDE1ODpcXHRcXHRcXHRib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdFxcdGNxZSA9IFxcdTAwMjZyLVxcdTAwM2VjcWVzWyhjcV9oZWFkIFxcdTAwMjYgY3FfbWFzayldO1xcbiAxNjE6XFx0XFx0XFx0aWYgKChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFxcdTAwMjZcXHUwMDI2XFxuIDE2MjpcXHRcXHRcXHQgICAgIWlzX2xhc3RfY3FhcnJheV9zbG90KVxcbiAxNjM6XFx0XFx0XFx0XFx0Y3FlMzIgPSB0cnVlO1xcbiAxNjQ6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiB1c2VyX2RhdGE6JWxsdSwgcmVzOiVkLCBmbGFnczoleFxcXCIsXFxuIDE2NTpcXHRcXHRcXHRcXHQgICBjcV9oZWFkIFxcdTAwMjYgY3FfbWFzaywgY3FlLVxcdTAwM2V1c2VyX2RhdGEsIGNxZS1cXHUwMDNlcmVzLFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgY3FlLVxcdTAwM2VmbGFncyk7XFxuIDE2NzpcXHRcXHRcXHRpZiAoY3FlMzIpXFxuIDE2ODpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIsIGV4dHJhMTolbGx1LCBleHRyYTI6JWxsdVxcXCIsXFxuIDE2OTpcXHRcXHRcXHRcXHRcXHRcXHRjcWUtXFx1MDAzZWJpZ19jcWVbMF0sIGNxZS1cXHUwMDNlYmlnX2NxZVsxXSk7XFxuIDE3MDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJcXFxcblxcXCIpO1xcbiAxNzE6XFx0XFx0XFx0Y3FfaGVhZCsrO1xcbiAxNzI6XFx0XFx0XFx0aWYgKGNxZTMyKSB7XFxuIDE3MzpcXHRcXHRcXHRcXHRjcV9oZWFkKys7XFxuIDE3NDpcXHRcXHRcXHRcXHRpKys7XFxuIDE3NTpcXHRcXHRcXHR9XFxuIDE3NjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTc3OlxcdFxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FQT0xMKSB7XFxuIDE4MDpcXHRcXHRcXHRzdHJ1Y3QgaW9fc3FfZGF0YSAqc3EgPSBjdHgtXFx1MDAzZXNxX2RhdGE7XFxuIDE4MTpcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxODQ6XFx0XFx0XFx0dHNrID0gcmN1X2RlcmVmZXJlbmNlKHNxLVxcdTAwM2V0aHJlYWQpO1xcbiAxODU6XFx0XFx0XFx0LypcXG4gMTg2OlxcdFxcdFxcdCAqIHNxLVxcdTAwM2V0aHJlYWQgbWlnaHQgYmUgTlVMTCBpZiB3ZSByYWNlZCB3aXRoIHRoZSBzcXBvbGxcXG4gMTg3OlxcdFxcdFxcdCAqIHRocmVhZCB0ZXJtaW5hdGlvbi5cXG4gMTg4OlxcdFxcdFxcdCAqL1xcbiAxODk6XFx0XFx0XFx0aWYgKHRzaykge1xcbiAxOTA6XFx0XFx0XFx0XFx0dTY0IHVzZWM7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdFxcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTM6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE5NDpcXHRcXHRcXHRcXHR1c2VjID0gaW9fc3FfY3B1X3VzZWModHNrKTtcXG4gMTk1OlxcdFxcdFxcdFxcdHNxX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzayxcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHByb2NfcGlkX25zKGZpbGVfaW5vZGUobS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2IpKTtcXG4gMTk3OlxcdFxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbiAxOTg6XFx0XFx0XFx0XFx0c3FfY3B1ID0gc3EtXFx1MDAzZXNxX2NwdTtcXG4gMTk5OlxcdFxcdFxcdFxcdHNxX3RvdGFsX3RpbWUgPSB1c2VjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjoxOC45NTE1NjczNjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM2MDM0MjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXNzZWN0aW5nIHRoZSBpb191cmluZyBDb21wbGV0aW9uIFF1ZXVlIEVudHJ5IChDUUUpIERpc3BsYXkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24uIFNlZW1zIGxpa2UgaXQncyByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW9fdXJpbmcgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzLiBJIGNhbiBzZWUgaXQncyBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgQ1FFIHJpbmcgYnVmZmVyLCBleHRyYWN0aW5nIGRhdGEgZnJvbSBlYWNoIGVudHJ5IGFuZCBwcmludGluZyBpdCBvdXQuIFRoZSBsb29wJ3MgbGltaXQgaXMgZGVmaW5lZCBieSB0aGUgYGNxX3RhaWxgIGFuZCBgY3FfaGVhZGAgdmFyaWFibGVzLCBhbmQgaW1wb3J0YW50bHkgaXQncyBjYXBwZWQgYnkgYGN0eC1cdTAwM2VjcV9lbnRyaWVzYC4gVGhpcyBpcyBhIGNsYXNzaWMgcmluZyBidWZmZXIgdHJhdmVyc2FsLlxuXG5Ob3csIEkgc3BvdCBhIGNvbmRpdGlvbmFsIGJsb2NrIGludm9sdmluZyBgSU9SSU5HX0NRRV9GXzMyYCBhbmQgYGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyYC4gSXQgbG9va3MgbGlrZSBpdCdzIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGN1cnJlbnQgQ1FFIGlzIHVzaW5nIGEgMzItYml0IGxheW91dC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgaXQgc2V0cyBgY3FlMzJgIHRvIHRydWUuIEluc2lkZSB0aGUgbG9vcCwgSSBzZWUgdGhlIHR5cGljYWwgYHVzZXJfZGF0YWAsIGByZXNgLCBhbmQgYGZsYWdzYCBiZWluZyBwcmludGVkIHVzaW5nIGBzZXFfcHJpbnRmYC4gVGhlbiwgaWYgYGNxZTMyYCBpcyB0cnVlLCBpdCBhbHNvIHByaW50cyBgZXh0cmExYCBhbmQgYGV4dHJhMmAsIHdoaWNoIGluIHRoaXMgY29udGV4dCBtZWFucyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWA/IEkgZG9uJ3QgcmVjYWxsIHNlZWluZyB0aG9zZSBtZW1iZXJzIGV4cGxpY2l0bHkgaW4gdGhlIHN0YW5kYXJkIENRRSBzdHJ1Y3R1cmUuIFRoYXQncyBhIGJpdCBvZGQuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpb191cmluZ19jcWVgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dHJhIGZpZWxkcyBhcmUgYmVpbmcgdXNlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXkncmUgcHJlc2VudC4gVGltZSB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGVzIGZvciB0aGUgaW9fdXJpbmcgZGVmaW5pdGlvbnMsIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGtlcm5lbCdzIGFjdHVhbGx5IGRvaW5nLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHN0cnVjdCdzIGRlZmluaXRpb24gdG8gZmluZCBvdXQgd2hhdCB0aGVzZSBgYmlnX2NxZWAgZmllbGRzIGFjdHVhbGx5IHJlcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjIzLjMxMTkxMjU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk2MDcxOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpb191cmluZ19jcWUgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmg9NDYzPWVudW0gaW9fdXJpbmdfbXNnX3JpbmdfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtNDk5LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oOjUwMDpzdHJ1Y3QgaW9fdXJpbmdfY3FlIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaC01MDEtXFx0X191NjRcXHR1c2VyX2RhdGE7XFx0Lyogc3FlLVxcdTAwM2V1c2VyX2RhdGEgdmFsdWUgcGFzc2VkIGJhY2sgKi9cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oPTM3ND1lbnVtIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oLTM5MS0gKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaDozOTI6c3RydWN0IGlvX3VyaW5nX2NxZSB7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgtMzkzLVxcdF9fdTY0XFx0dXNlcl9kYXRhO1xcdC8qIHNxZS1cXHUwMDNlZGF0YSBzdWJtaXNzaW9uIHBhc3NlZCBiYWNrICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjI1LjcwNzk5Mzc0NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDk0MjIyMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGlvX3VyaW5nLmg6IEFyb3VuZCBMaW5lIDUwMCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgYml0IG1vcmUgZ3JhbnVsYXIuIEknbSBnb2luZyB0byBwdWxsIHVwIGBpbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaGAgcmlnaHQgYXJvdW5kIGxpbmUgNTAwLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgcHJvYmFibHkgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSByaW5nIGJ1ZmZlcnMgb3IgdGhlIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHNwZWNpZmljcyBvbiBkYXRhIGxheW91dHMsIGZsYWdzLCBvciBmaWVsZCBtZWFuaW5ncy4gTWF5YmUgSSdtIHRyeWluZyB0byBjcm9zcy1yZWZlcmVuY2Ugc29tZSBiZWhhdmlvciBJJ20gc2VlaW5nIHdpdGggc29tZSB0cmFjZSBvdXRwdXQsIGFuZCBuZWVkIHRvIHBpbnBvaW50IGEgc3BlY2lmaWMgYml0ZmllbGQgb3Igc3RydWN0IG1lbWJlciByZXNwb25zaWJsZS4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWwgc3VidGxlIGdvdGNoYXMgaW4gdGhlIG1lbW9yeSBvcmRlcmluZyBvciBwYWRkaW5nLiBJdCdzIGFsc28gcG9zc2libGUgSSdtIGludmVzdGlnYXRpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpYywgbGlrZSBhIHBhcnRpY3VsYXIgbGF0ZW5jeSBhbm9tYWx5LCBhbmQgSSB0aGluayB0aGF0IGxpbmUgNTAwIHdpbGwgZ2l2ZSBtZSBzb21lIGNsdWVzIGFib3V0IGhvdyBhIGtleSBkZXNpZ24gZGVjaXNpb24gbWF5IGJlIHdvcmtpbmcuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHVzdWFsbHkgcHJldHR5IGdvb2QsIGJ1dCBJIGFsc28gZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgZGVncmVlIG9mIGltcGxpY2l0IGtub3dsZWRnZSBlbWJlZGRlZCBpbiB0aG9zZSBoZWFkZXJzLiBJIHdhbnQgdG8gYnVpbGQgYSBiZXR0ZXIgbW9kZWwgZm9yIHdoYXQgdGhlIGRldmVsb3BlcnMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjoyOC44MDIyMTkyOThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDk4LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDk4OlxcdCAqIElPIGNvbXBsZXRpb24gZGF0YSBzdHJ1Y3R1cmUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpXFxuIDQ5OTpcXHQgKi9cXG4gNTAwOlxcdHN0cnVjdCBpb191cmluZ19jcWUge1xcbiA1MDE6XFx0XFx0X191NjRcXHR1c2VyX2RhdGE7XFx0Lyogc3FlLVxcdTAwM2V1c2VyX2RhdGEgdmFsdWUgcGFzc2VkIGJhY2sgKi9cXG4gNTAyOlxcdFxcdF9fczMyXFx0cmVzO1xcdFxcdC8qIHJlc3VsdCBjb2RlIGZvciB0aGlzIGV2ZW50ICovXFxuIDUwMzpcXHRcXHRfX3UzMlxcdGZsYWdzO1xcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHQvKlxcbiA1MDY6XFx0XFx0ICogSWYgdGhlIHJpbmcgaXMgaW5pdGlhbGl6ZWQgd2l0aCBJT1JJTkdfU0VUVVBfQ1FFMzIsIHRoZW4gdGhpcyBmaWVsZFxcbiA1MDc6XFx0XFx0ICogY29udGFpbnMgMTYtYnl0ZXMgb2YgcGFkZGluZywgZG91YmxpbmcgdGhlIHNpemUgb2YgdGhlIENRRS5cXG4gNTA4OlxcdFxcdCAqL1xcbiA1MDk6XFx0XFx0X191NjQgYmlnX2NxZVtdO1xcbiA1MTA6XFx0fTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0LypcXG4gNTEzOlxcdCAqIGNxZS1cXHUwMDNlZmxhZ3NcXG4gNTE0OlxcdCAqXFxuIDUxNTpcXHQgKiBJT1JJTkdfQ1FFX0ZfQlVGRkVSXFx0SWYgc2V0LCB0aGUgdXBwZXIgMTYgYml0cyBhcmUgdGhlIGJ1ZmZlciBJRFxcbiA1MTY6XFx0ICogSU9SSU5HX0NRRV9GX01PUkVcXHRJZiBzZXQsIHBhcmVudCBTUUUgd2lsbCBnZW5lcmF0ZSBtb3JlIENRRSBlbnRyaWVzXFxuIDUxNzpcXHQgKiBJT1JJTkdfQ1FFX0ZfU09DS19OT05FTVBUWVxcdElmIHNldCwgbW9yZSBkYXRhIHRvIHJlYWQgYWZ0ZXIgc29ja2V0IHJlY3ZcXG4gNTE4OlxcdCAqIElPUklOR19DUUVfRl9OT1RJRlxcdFNldCBmb3Igbm90aWZpY2F0aW9uIENRRXMuIENhbiBiZSB1c2VkIHRvIGRpc3RpbmN0XFxuIDUxOTpcXHQgKiBcXHRcXHRcXHR0aGVtIGZyb20gc2VuZHMuXFxuIDUyMDpcXHQgKiBJT1JJTkdfQ1FFX0ZfQlVGX01PUkUgSWYgc2V0LCB0aGUgYnVmZmVyIElEIHNldCBpbiB0aGUgY29tcGxldGlvbiB3aWxsIGdldFxcbiA1MjE6XFx0ICpcXHRcXHRcXHRtb3JlIGNvbXBsZXRpb25zLiBJbiBvdGhlciB3b3JkcywgdGhlIGJ1ZmZlciBpcyBiZWluZ1xcbiA1MjI6XFx0ICpcXHRcXHRcXHRwYXJ0aWFsbHkgY29uc3VtZWQsIGFuZCB3aWxsIGJlIHVzZWQgYnkgdGhlIGtlcm5lbCBmb3JcXG4gNTIzOlxcdCAqXFx0XFx0XFx0bW9yZSBjb21wbGV0aW9ucy4gVGhpcyBpcyBvbmx5IHNldCBmb3IgYnVmZmVycyB1c2VkIHZpYVxcbiA1MjQ6XFx0ICpcXHRcXHRcXHR0aGUgaW5jcmVtZW50YWwgYnVmZmVyIGNvbnN1bXB0aW9uLCBhcyBwcm92aWRlZCBieVxcbiA1MjU6XFx0ICpcXHRcXHRcXHRhIHJpbmcgYnVmZmVyIHNldHVwIHdpdGggSU9VX1BCVUZfUklOR19JTkMuIEZvciBhbnlcXG4gNTI2OlxcdCAqXFx0XFx0XFx0b3RoZXIgcHJvdmlkZWQgYnVmZmVyIHR5cGUsIGFsbCBjb21wbGV0aW9ucyB3aXRoIGFcXG4gNTI3OlxcdCAqXFx0XFx0XFx0YnVmZmVyIHBhc3NlZCBiYWNrIGlzIGF1dG9tYXRpY2FsbHkgcmV0dXJuZWQgdG8gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjI4LjgwMjMxMjc3OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk5Mjg0NjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9fdXJpbmcgQ1FFIE1lbW9yeSBMYXlvdXQgaW4gQ1FFMzIgTW9kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBpb191cmluZ19jcWVgIHN0cnVjdHVyZS4gQSBzdGFuZGFyZCBvbmUgaXMgMTYgYnl0ZXM6IHVzZXIgZGF0YSwgcmVzdWx0LCBmbGFncywgYW5kIHRoZW4gdGhhdCBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYGJpZ19jcWVbXWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZW4gQ1FFMzIgbW9kZSBpcyBlbmFibGVkOyBpdCBiZWNvbWVzIDMyIGJ5dGVzLCBlZmZlY3RpdmVseSB0YWtpbmcgdXAgdHdvIHNsb3RzIGluIHRoZSBgci1cdTAwM2VjcWVzW11gIGFycmF5LlxuXG5Ob3csIHRoZSBjb2RlIGFjY2Vzc2VzIHRoZSBDUUUgbGlrZSB0aGlzOiBgY3FlID0gXHUwMDI2ci1cdTAwM2VjcWVzWyhjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKV07YCBhbmQgaW4gQ1FFMzIgaXQgdXNlcyBgY3FlLVx1MDAzZWJpZ19jcWVbMF1gIGFuZCBgY3FlLVx1MDAzZWJpZ19jcWVbMV1gLiBTaW5jZSB0aGUgKm9yaWdpbmFsKiBgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19jcWUpYCBpcyAxNiBieXRlcywgYGJpZ19jcWVbMF1gICpzaG91bGQqIGJlIGF0IG9mZnNldCAxNiB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUsIG1ha2luZyBpdHMgbWVtb3J5IGxvY2F0aW9uIGVxdWl2YWxlbnQgdG8gYFx1MDAyNnItXHUwMDNlY3Flc1soY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgKyAxXWAuXG5cbkhlcmUncyB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGFyaXNlczogaWYgYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKWAgcG9pbnRzIHRvIHRoZSAqbGFzdCogZWxlbWVudCBvZiB0aGUgYHItXHUwMDNlY3Flc2AgYXJyYXkgKGkuZS4sIGBjcV9tYXNrYCksIHRoZW4gYFx1MDAyNnItXHUwMDNlY3Flc1tjcV9tYXNrICsgMV1gIGlzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy4gQWNjZXNzaW5nIG1lbW9yeSAqYWZ0ZXIqIHRoZSBhcnJheSBib3VuZHMgaXMgYWx3YXlzIGEgcHJvYmxlbS5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUncyBgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIFdoeSB3YXMgdGhhdCBhZGRlZD8gSXQgc2VlbXMgcmVsYXRlZCB0byB0aGlzIG91dC1vZi1ib3VuZHMgaXNzdWUuIFRoaXMgaXMgbGlrZWx5IHRoZSBjcnVjaWFsIHBpZWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGVjayBpcyBpbiBwbGFjZS5cblxuVGltZSB0byBkaXZlIGludG8gdGhlIGdpdCBoaXN0b3J5LiBMZXQncyBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2VzIHNheS4gSSdsbCBzZWFyY2ggZm9yIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgb3IgYElPUklOR19TRVRVUF9DUUUzMmAgdG8gZmluZCBvdXQgdGhlIHJlYXNvbiB0aGlzIHdhcyBjaGFuZ2VkLiBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBidWcgZml4IG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBkb3VibGVkIHNpemUgb2YgQ1FFcyBpbiBDUUUzMiBtb2RlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRvIGJlIDEwMCUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjM5Ljc5NTE2MjAxN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDE4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9SSU5HX1NFVFVQX0NRRTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2ZkaW5mby5jPTYwPXN0YXRpYyB2b2lkIF9faW9fdXJpbmdfc2hvd19mZGluZm8oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmlvX3VyaW5nL2ZkaW5mby5jLTE2MC1cXHRcXHRjcWUgPSBcXHUwMDI2ci1cXHUwMDNlY3Flc1soY3FfaGVhZCBcXHUwMDI2IGNxX21hc2spXTtcXG5pb191cmluZy9mZGluZm8uYzoxNjE6XFx0XFx0aWYgKChjcWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX0NRRV9GXzMyIHx8IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIFxcdTAwMjZcXHUwMDI2XFxuaW9fdXJpbmcvZmRpbmZvLmMtMTYyLVxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTUxNT1zdGF0aWMgdm9pZCBfX2lvX2NxcmluZ19vdmVyZmxvd19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBkeWluZylcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTMyLVxcdFxcdGlmIChvY3FlLVxcdTAwM2VjcWUuZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHxcXG5pb191cmluZy9pb191cmluZy5jOjUzMzpcXHRcXHQgICAgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM0LVxcdFxcdFxcdGlzX2NxZTMyID0gdHJ1ZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNTM2LVxcdFxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjUzNzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTUzOC1cXHRcXHRcXHRpc19jcWUzMiA9IGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz02NTI9c3RhdGljIHN0cnVjdCBpb19vdmVyZmxvd19jcWUgKmlvX2FsbG9jX29jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTY1OS1cXG5pb191cmluZy9pb191cmluZy5jOjY2MDpcXHRpZiAoY3FlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMiB8fCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRTMyKSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02NjEtXFx0XFx0aXNfY3FlMzIgPSB0cnVlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03MTg9Ym9vbCBpb19jcWVfY2FjaGVfcmVmaWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NDctXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3NDg6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5jLTc0OS1cXHRcXHRvZmYgXFx1MDAzY1xcdTAwM2M9IDE7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzYyLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzYzOlxcdGlmIChXQVJOX09OX09OQ0UoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjEwNC1cXHRvZmYgPSBzdHJ1Y3Rfc2l6ZShyaW5ncywgY3FlcywgY3FfZW50cmllcyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTA1OlxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG5pb191cmluZy9pb191cmluZy5jLTIxMDYtXFx0XFx0b2ZmID0gc2l6ZV9tdWwob2ZmLCAyKTtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9Mjc4OD1zdGF0aWMgaW50IGlvX3VyaW5nX3Nhbml0aXNlX3BhcmFtcyhzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM1LVxcdCAqL1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNjpcXHRpZiAoKGZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkgPT1cXG5pb191cmluZy9pb191cmluZy5jOjI4Mzc6XFx0ICAgIChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yODM4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0zMD1zdHJ1Y3QgaW9fY3R4X2NvbmZpZyB7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTY1LVxcdFxcdFxcdElPUklOR19TRVRVUF9TUUUxMjggfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oOjY2OlxcdFxcdFxcdElPUklOR19TRVRVUF9DUUUzMiB8XFxcXFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNjctXFx0XFx0XFx0SU9SSU5HX1NFVFVQX1NJTkdMRV9JU1NVRVIgfFxcXFxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlX292ZXJmbG93KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzEtXFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzI6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTI3My1cXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTMxMC1cXHRtZW1jcHkoY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2VjcWUsIHNpemVvZigqY3FlKSk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDozMTE6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFMzIgfHwgaXNfY3FlMzIpIHtcXG5pb191cmluZy9pb191cmluZy5oLTMxMi1cXHRcXHRtZW1jcHkoY3FlLVxcdTAwM2ViaWdfY3FlLCBcXHUwMDI2cmVxLVxcdTAwM2ViaWdfY3FlLCBzaXplb2YoKmNxZSkpO1xcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jLTEwNS1cXHRpZiAoKCpmbGFncyBcXHUwMDI2IElPUklOR19DUUVfRl8zMikgXFx1MDAyNlxcdTAwMjZcXG5pb191cmluZy9tc2dfcmluZy5jOjEwNjpcXHQgICAgISh0YXJnZXRfY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxcbmlvX3VyaW5nL21zZ19yaW5nLmMtMTA3LVxcdFxcdFxcdFxcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG4tLVxcbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtNDktXFxuaW9fdXJpbmcvbm9wLmM6NTA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL25vcC5jLTUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk0LSNkZWZpbmUgQ09QWV9GTEFHU1xcdChJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWSB8IElPUklOR19TRVRVUF9TUUUxMjggfCBcXFxcXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTU6XFx0XFx0XFx0IElPUklOR19TRVRVUF9DUUUzMiB8IElPUklOR19TRVRVUF9OT19NTUFQIHwgXFxcXFxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk2LVxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEIHwgSU9SSU5HX1NFVFVQX1NRRV9NSVhFRClcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy02NDktXFx0XFx0ZHN0X21hc2sgPSBwLVxcdTAwM2VjcV9lbnRyaWVzIC0gMTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjY1MDpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNjUxLVxcdFxcdFxcdGluZGV4IFxcdTAwM2NcXHUwMDNjPSAxO1xcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmM9MjQzPWludCBpb191cmluZ19jbWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTI1OS1cXHRcXHRpc3N1ZV9mbGFncyB8PSBJT19VUklOR19GX1NRRTEyODtcXG5pb191cmluZy91cmluZ19jbWQuYzoyNjA6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyIHwgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjYxLVxcdFxcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfQ1FFMzI7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9ODMxPXN0YXRpYyBpbnQgaW1wb3J0X3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtODQxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL3pjcnguYzo4NDI6XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL3pjcnguYy04NDMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9OTYxPWludCBpb19yZWdpc3Rlcl96Y3J4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTk4MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5pb191cmluZy96Y3J4LmM6OTgyOlxcdGlmICghKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy96Y3J4LmMtOTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjozOS44NDM1NzEwMDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTU3ODU4MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBpb191cmluZyBDUUUgTWl4ZWQgTW9kZSoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AgYW5kIGBpb191cmluZy9pb191cmluZy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5IGhhbmRsZSBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZmxhZyBhY3R1YWxseSBkb2VzLiBTbywgSSdsbCBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBhbmQgc2VlIGhvdyBpdCdzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjQ1LjQyMjE1NjMyNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTI0NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPUklOR19TRVRVUF9DUUVfTUlYRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz03NTg9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4MzIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTc2Mi1cXG5pb191cmluZy9pb191cmluZy5jOjc2MzpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKSlcXG5pb191cmluZy9pb191cmluZy5jLTc2NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTIwODQtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDg1OlxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpIHtcXG5pb191cmluZy9pb191cmluZy5jLTIwODYtXFx0XFx0aWYgKGNxX2VudHJpZXMgXFx1MDAzYyAyKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzg4PXN0YXRpYyBpbnQgaW9fdXJpbmdfc2FuaXRpc2VfcGFyYW1zKHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnApXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI4MzUtXFx0ICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyODM2OlxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoSU9SSU5HX1NFVFVQX0NRRTMyfElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSA9PVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjgzNzpcXHQgICAgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcXG5pb191cmluZy9pb191cmluZy5jLTI4MzgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTMwPXN0cnVjdCBpb19jdHhfY29uZmlnIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtNzItXFx0XFx0XFx0SU9SSU5HX1NFVFVQX0hZQlJJRF9JT1BPTEwgfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oOjczOlxcdFxcdFxcdElPUklOR19TRVRVUF9DUUVfTUlYRUQgfFxcXFxcXG5pb191cmluZy9pb191cmluZy5oLTc0LVxcdFxcdFxcdElPUklOR19TRVRVUF9TUUVfTUlYRUQgfFxcXFxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlX292ZXJmbG93KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yNzMtXFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNzQ6XFx0fSBlbHNlIGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjc1LVxcdFxcdGN0eC1cXHUwMDNlY3FlX2NhY2hlZCsrO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yODg9c3RhdGljIGlubGluZSBib29sIGlvX2RlZmVyX2dldF91bmNvbW1pdGVkX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjkzLVxcdGN0eC1cXHUwMDNlc3VibWl0X3N0YXRlLmNxX2ZsdXNoID0gdHJ1ZTtcXG5pb191cmluZy9pb191cmluZy5oOjI5NDpcXHRyZXR1cm4gaW9fZ2V0X2NxZShjdHgsIGNxZV9yZXQsIGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKTtcXG5pb191cmluZy9pb191cmluZy5oLTI5NS19XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTMzNj1zdGF0aWMgaW5saW5lIHUzMiBjdHhfY3FlMzJfZmxhZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0zMzcte1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MzM4OlxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRClcXG5pb191cmluZy9pb191cmluZy5oLTMzOS1cXHRcXHRyZXR1cm4gSU9SSU5HX0NRRV9GXzMyO1xcbi0tXFxuaW9fdXJpbmcvbXNnX3JpbmcuYz05Nj1zdGF0aWMgaW50IGlvX21zZ19yaW5nX2NxZV9mbGFncyhzdHJ1Y3QgaW9fcmluZ19jdHggKnRhcmdldF9jdHgsXFxuLS1cXG5pb191cmluZy9tc2dfcmluZy5jLTEwNi1cXHQgICAgISh0YXJnZXRfY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfFxcbmlvX3VyaW5nL21zZ19yaW5nLmM6MTA3OlxcdFxcdFxcdFxcdCAgIElPUklOR19TRVRVUF9DUUVfTUlYRUQpKSlcXG5pb191cmluZy9tc2dfcmluZy5jLTEwOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL25vcC5jPTI3PWludCBpb19ub3BfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvbm9wLmMtNDktXFxuaW9fdXJpbmcvbm9wLmM6NTA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL25vcC5jLTUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00ODA9c3RhdGljIHZvaWQgaW9fcmVnaXN0ZXJfZnJlZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk1LVxcdFxcdFxcdCBJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfTk9fTU1BUCB8IFxcXFxcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5NjpcXHRcXHRcXHQgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCB8IElPUklOR19TRVRVUF9TUUVfTUlYRUQpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00OTctXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0xNTI9dm9pZCBfX2lvX3VyaW5nX2NtZF9kb25lKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCwgczMyIHJldCwgdTY0IHJlczIsXFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYy0xNjYtXFx0aWYgKGlzX2NxZTMyKSB7XFxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MTY3OlxcdFxcdGlmIChyZXEtXFx1MDAzZWN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTE2OC1cXHRcXHRcXHRyZXEtXFx1MDAzZWNxZS5mbGFncyB8PSBJT1JJTkdfQ1FFX0ZfMzI7XFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0yNDM9aW50IGlvX3VyaW5nX2NtZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMjU5LVxcdFxcdGlzc3VlX2ZsYWdzIHw9IElPX1VSSU5HX0ZfU1FFMTI4O1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjI2MDpcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzIgfCBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSlcXG5pb191cmluZy91cmluZ19jbWQuYy0yNjEtXFx0XFx0aXNzdWVfZmxhZ3MgfD0gSU9fVVJJTkdfRl9DUUUzMjtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz04MzE9c3RhdGljIGludCBpbXBvcnRfemNyeChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy04NDEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvemNyeC5jOjg0MjpcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKElPUklOR19TRVRVUF9DUUUzMnxJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSkpXFxuaW9fdXJpbmcvemNyeC5jLTg0My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz05NjE9aW50IGlvX3JlZ2lzdGVyX3pjcngoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtOTgxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmlvX3VyaW5nL3pjcnguYzo5ODI6XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IChJT1JJTkdfU0VUVVBfQ1FFMzJ8SU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkpKVxcbmlvX3VyaW5nL3pjcnguYy05ODMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTYyOD1zdGF0aWMgYm9vbCBpb196Y3J4X3F1ZXVlX2NxZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IG5ldF9pb3YgKm5pb3YsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtMTY0Mi1cXHRjcWUtXFx1MDAzZWZsYWdzID0gSU9SSU5HX0NRRV9GX01PUkU7XFxuaW9fdXJpbmcvemNyeC5jOjE2NDM6XFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKVxcbmlvX3VyaW5nL3pjcnguYy0xNjQ0LVxcdFxcdGNxZS1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX0NRRV9GXzMyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo0NS44OTMwODgwNTlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUwNDkxODM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIENRRSBNaXhlZCBNb2RlKipcblxuT2theSwgc28gYElPUklOR19TRVRVUF9DUUVfTUlYRURgIGlzIHRoZSBrZXksIGxldHRpbmcgdXMgd29yayB3aXRoIGJvdGggMTYtIGFuZCAzMi1ieXRlIENvbXBsZXRpb24gUXVldWUgRW50cmllcyAoQ1FFcykuIEdvdCBpdC4gTm93LCBpbiB0aGlzIFwibWl4ZWQgbW9kZSxcIiB0aGUgYGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyYCBiaXQgaXMgdGhlIGNydWNpYWwgaW5kaWNhdG9yIOKAkyBpdCB0ZWxscyBtZSB3aGV0aGVyIEknbSBsb29raW5nIGF0IGEgMzItYnl0ZSBDUUUsIHdoaWNoLCBvZiBjb3Vyc2UsIG1lYW5zIGl0J3MgdGFraW5nIHVwIHR3byBjb25zZWN1dGl2ZSBzbG90cyBpbiB0aGUgcmluZy5cblxuSG1tLCB0aGF0IGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBhIGNvcm5lciBjYXNlIHRoYXQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJZiBJIGhhdmUgYSAzMi1ieXRlIENRRSBzaXR0aW5nIGF0IHRoZSAqdmVyeSogZW5kIG9mIHRoZSByaW5nIGJ1ZmZlciwgaG93IGRvZXMgdGhlIHN5c3RlbSBoYW5kbGUgdGhhdD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYGlvX2dldF9jcWVgIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgdGhhdCBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo0OC4zOTgwMDg5NTNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTQ1MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2dldF9jcWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTc1OD1zdGF0aWMgYm9vbCBpb19maWxsX2NxZV9hdXgzMihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzY0LVxcdFxcdHJldHVybiBmYWxzZTtcXG5pb191cmluZy9pb191cmluZy5jOjc2NTpcXHRpZiAodW5saWtlbHkoIWlvX2dldF9jcWUoY3R4LCBcXHUwMDI2Y3FlLCB0cnVlKSkpXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NjYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz03NzM9c3RhdGljIGJvb2wgaW9fZmlsbF9jcWVfYXV4KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1NjQgdXNlcl9kYXRhLCBzMzIgcmVzLFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy03NzgtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo3Nzk6XFx0aWYgKGxpa2VseShpb19nZXRfY3FlKGN0eCwgXFx1MDAyNmNxZSwgY3FlMzIpKSkge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzgwLVxcdFxcdFdSSVRFX09OQ0UoY3FlLVxcdTAwM2V1c2VyX2RhdGEsIHVzZXJfZGF0YSk7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZ2V0X2NxZV9vdmVyZmxvdyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjgxLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MjgyOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19nZXRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfY3FlICoqcmV0LFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjgzLVxcdFxcdFxcdFxcdGJvb2wgY3FlMzIpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oPTI4OD1zdGF0aWMgaW5saW5lIGJvb2wgaW9fZGVmZXJfZ2V0X3VuY29tbWl0ZWRfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaC0yOTMtXFx0Y3R4LVxcdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmg6Mjk0OlxcdHJldHVybiBpb19nZXRfY3FlKGN0eCwgY3FlX3JldCwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUVfTUlYRUQpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMjk1LX1cXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9Mjk3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9pb191cmluZy5oLTMwNi1cXHQgKi9cXG5pb191cmluZy9pb191cmluZy5oOjMwNzpcXHRpZiAodW5saWtlbHkoIWlvX2dldF9jcWUoY3R4LCBcXHUwMDI2Y3FlLCBpc19jcWUzMikpKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMzA4LVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6MjY6NDguNDQ1MTU4OTIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNDc5MTcxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYGlvX3VyaW5nLmhgIGF0IExpbmUgMjgyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIGBpb191cmluZ2AsIGFuZCB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaGVhZGVyIGZpbGUsIGBpb191cmluZy5oYC4gSSd2ZSBob25lZCBpbiBvbiBsaW5lIDI4Mi4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoZXJlJ3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIG9yIHBlcnRpbmVudCB0byBteSBjdXJyZW50IHByb2JsZW0gZGVmaW5lZCBvciByZWZlcmVuY2VkIGFyb3VuZCB0aGF0IGFyZWEuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGF0IHRoYXQgbGluZSByZXZlYWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHN0cnVjdHMsIGVudW1zLCBtYWNyb3MsIG9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBtaWdodCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gSSdtIGludGVyZXN0ZWQgaW4uIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFyb3VuZCBbdGhlIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QgLSB0aGlzIHBhcnQgaXMgdXAgdG8gdGhlIHVzZXIncyBleHBlcnRpc2UgYW5kIGNvbnRleHQuIEV4YW1wbGU6IHF1ZXVpbmcgYmVoYXZpb3IsIGNvbXBsZXRpb24gaGFuZGxpbmcsIHN1Ym1pc3Npb24gZmxhZ3MsIGxpbmtlZCByZXF1ZXN0cywgZXRjXS4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBsaW5lIDI4MiBpcyBndWFyZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo1MC41OTMwNzg0OTJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKipyZXQsXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHRcXHRib29sIG92ZXJmbG93LCBib29sIGNxZTMyKVxcbiAyNjI6XFx0e1xcbiAyNjM6XFx0XFx0aW9fbG9ja2RlcF9hc3NlcnRfY3FfbG9ja2VkKGN0eCk7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGlmICh1bmxpa2VseShjdHgtXFx1MDAzZWNxZV9zZW50aW5lbCAtIGN0eC1cXHUwMDNlY3FlX2NhY2hlZCBcXHUwMDNjIChjcWUzMiArIDEpKSkge1xcbiAyNjY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFpb19jcWVfY2FjaGVfcmVmaWxsKGN0eCwgb3ZlcmZsb3csIGNxZTMyKSkpXFxuIDI2NzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI2ODpcXHRcXHR9XFxuIDI2OTpcXHRcXHQqcmV0ID0gY3R4LVxcdTAwM2VjcWVfY2FjaGVkO1xcbiAyNzA6XFx0XFx0Y3R4LVxcdTAwM2VjYWNoZWRfY3FfdGFpbCsrO1xcbiAyNzE6XFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuIDI3MjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbiAyNzM6XFx0XFx0XFx0Y3R4LVxcdTAwM2VjcWVfY2FjaGVkKys7XFxuIDI3NDpcXHRcXHR9IGVsc2UgaWYgKGNxZTMyIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEKSB7XFxuIDI3NTpcXHRcXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQrKztcXG4gMjc2OlxcdFxcdFxcdGN0eC1cXHUwMDNlY2FjaGVkX2NxX3RhaWwrKztcXG4gMjc3OlxcdFxcdH1cXG4gMjc4OlxcdFxcdFdBUk5fT05fT05DRShjdHgtXFx1MDAzZWNxZV9jYWNoZWQgXFx1MDAzZSBjdHgtXFx1MDAzZWNxZV9zZW50aW5lbCk7XFxuIDI3OTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjgwOlxcdH1cXG4gMjgxOlxcdFxcbiAyODI6XFx0c3RhdGljIGlubGluZSBib29sIGlvX2dldF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ19jcWUgKipyZXQsXFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRib29sIGNxZTMyKVxcbiAyODQ6XFx0e1xcbiAyODU6XFx0XFx0cmV0dXJuIGlvX2dldF9jcWVfb3ZlcmZsb3coY3R4LCByZXQsIGZhbHNlLCBjcWUzMik7XFxuIDI4NjpcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19kZWZlcl9nZXRfdW5jb21taXRlZF9jcWUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSAqKmNxZV9yZXQpXFxuIDI5MDpcXHR7XFxuIDI5MTpcXHRcXHRpb19sb2NrZGVwX2Fzc2VydF9jcV9sb2NrZWQoY3R4KTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0Y3R4LVxcdTAwM2VzdWJtaXRfc3RhdGUuY3FfZmx1c2ggPSB0cnVlO1xcbiAyOTQ6XFx0XFx0cmV0dXJuIGlvX2dldF9jcWUoY3R4LCBjcWVfcmV0LCBjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCk7XFxuIDI5NTpcXHR9XFxuIDI5NjpcXHRcXG4gMjk3OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpb19maWxsX2NxZV9yZXEoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuIDI5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjUwLjU5MzE4MjgwMloiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjg0MTQwNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gc2VlaW5nOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIENRRSBPdmVyZmxvdyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGlvX2dldF9jcWVfb3ZlcmZsb3dgLCBzcGVjaWZpY2FsbHksIHRoZSBjb25kaXRpb24gd2hlcmUgdGhlIENvbXBsZXRpb24gUXVldWUgRW50cnkgKENRRSkgY2FjaGUgbmVlZHMgcmVmaWxsaW5nLiAgSSBzZWUgdGhhdCBpdCB0cmlnZ2VycyBgaW9fY3FlX2NhY2hlX3JlZmlsbGAgd2hlbiBgY3R4LVx1MDAzZWNxZV9zZW50aW5lbCAtIGN0eC1cdTAwM2VjcWVfY2FjaGVkYCBpcyBsZXNzIHRoYW4gYChjcWUzMiArIDEpYC4gVGhhdCdzIHRoZSBjcnVjaWFsIHRocmVzaG9sZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpbmVxdWFsaXR5IHNpZ25hbHMgYW4gb3ZlcmZsb3cgY29uZGl0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgbWFuYWdlZCBhbmQgcmVsYXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2VudGluZWwgYW5kIHRoZSBjYWNoZWQgZW50cnkgaXMgcHJvYmFibHkgaW5kaWNhdGluZyBob3cgbXVjaCBzcGFjZSBpcyBsZWZ0IGluIHRoZSBjYWNoZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29kZSBhbnRpY2lwYXRlcyBhbiBpc3N1ZS4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgaW9fY3FlX2NhY2hlX3JlZmlsbGAgZnVuY3Rpb24gaW4gYGlvX3VyaW5nL2lvX3VyaW5nLmNgIHRvIHNlZSBob3cgaXQgd29ya3MgYW5kIHdoYXQgdHJpZ2dlcnMgaXQgdG8gYmUgbmVlZGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbG9naWMgd2l0aGluIHRoYXQgcmVmaWxsIGZ1bmN0aW9uLCBhbmQgaG93IGl0IHRpZXMgaW50byB0aGUgY29yZSBDUUUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI2OjUzLjg3NzMyNjM2NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTU6XFx0ICogY29udHJvbCBkZXBlbmRlbmN5IGlzIGVub3VnaCBhcyB3ZSdyZSB1c2luZyBXUklURV9PTkNFIHRvXFxuIDcxNjpcXHQgKiBmaWxsIHRoZSBjcSBlbnRyeVxcbiA3MTc6XFx0ICovXFxuIDcxODpcXHRib29sIGlvX2NxZV9jYWNoZV9yZWZpbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgb3ZlcmZsb3csIGJvb2wgY3FlMzIpXFxuIDcxOTpcXHR7XFxuIDcyMDpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzID0gY3R4LVxcdTAwM2VyaW5ncztcXG4gNzIxOlxcdFxcdHVuc2lnbmVkIGludCBvZmYgPSBjdHgtXFx1MDAzZWNhY2hlZF9jcV90YWlsIFxcdTAwMjYgKGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIDEpO1xcbiA3MjI6XFx0XFx0dW5zaWduZWQgaW50IGZyZWUsIGxlbjtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0LypcXG4gNzI1OlxcdFxcdCAqIFBvc3RpbmcgaW50byB0aGUgQ1Egd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBvdmVyZmxvd2VkIENRRXMgbWF5IGJyZWFrXFxuIDcyNjpcXHRcXHQgKiBvcmRlcmluZyBndWFyYW50ZWVzLCB3aGljaCB3aWxsIGFmZmVjdCBsaW5rcywgRl9NT1JFIHVzZXJzIGFuZCBtb3JlLlxcbiA3Mjc6XFx0XFx0ICogRm9yY2Ugb3ZlcmZsb3cgdGhlIGNvbXBsZXRpb24uXFxuIDcyODpcXHRcXHQgKi9cXG4gNzI5OlxcdFxcdGlmICghb3ZlcmZsb3cgXFx1MDAyNlxcdTAwMjYgKGN0eC1cXHUwMDNlY2hlY2tfY3EgXFx1MDAyNiBCSVQoSU9fQ0hFQ0tfQ1FfT1ZFUkZMT1dfQklUKSkpXFxuIDczMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdC8qXFxuIDczMzpcXHRcXHQgKiBQb3N0IGR1bW15IENRRSBpZiBhIDMyYiBDUUUgaXMgbmVlZGVkIGFuZCB0aGVyZSdzIG9ubHkgcm9vbSBmb3IgYVxcbiA3MzQ6XFx0XFx0ICogMTZiIENRRSBiZWZvcmUgdGhlIHJpbmcgd3JhcHMuXFxuIDczNTpcXHRcXHQgKi9cXG4gNzM2OlxcdFxcdGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBvZmYgKyAxID09IGN0eC1cXHUwMDNlY3FfZW50cmllcykge1xcbiA3Mzc6XFx0XFx0XFx0aWYgKCFpb19maWxsX25vcF9jcWUoY3R4LCBvZmYpKVxcbiA3Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3Mzk6XFx0XFx0XFx0b2ZmID0gMDtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0ZnJlZSA9IGN0eC1cXHUwMDNlY3FfZW50cmllcyAtIGlvX2NxcmluZ19xdWV1ZWQoY3R4KTtcXG4gNzQzOlxcdFxcdC8qIHdlIG5lZWQgYSBjb250aWd1b3VzIHJhbmdlLCBsaW1pdCBiYXNlZCBvbiB0aGUgY3VycmVudCBhcnJheSBvZmZzZXQgKi9cXG4gNzQ0OlxcdFxcdGxlbiA9IG1pbihmcmVlLCBjdHgtXFx1MDAzZWNxX2VudHJpZXMgLSBvZmYpO1xcbiA3NDU6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIChjcWUzMiArIDEpKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikge1xcbiA3NDk6XFx0XFx0XFx0b2ZmIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTA6XFx0XFx0XFx0bGVuIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRjdHgtXFx1MDAzZWNxZV9jYWNoZWQgPSBcXHUwMDI2cmluZ3MtXFx1MDAzZWNxZXNbb2ZmXTtcXG4gNzU0OlxcdFxcdGN0eC1cXHUwMDNlY3FlX3NlbnRpbmVsID0gY3R4LVxcdTAwM2VjcWVfY2FjaGVkICsgbGVuO1xcbiA3NTU6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDc1NjpcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdHN0YXRpYyBib29sIGlvX2ZpbGxfY3FlX2F1eDMyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiA3NTk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSBzcmNfY3FlWzJdKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNjo1My44Nzc1MjM1OTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg4MzEyNDg1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENRRSBSaW5nIEJ1ZmZlciBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSdtIGZvY3VzaW5nIG9uIGxpbmVzIDczMi03NDAgb2YgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBDUUUgKENvbXBsZXRpb24gUXVldWUgRW50cnkpIHJpbmcgYnVmZmVyIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBcImR1bW15IENRRVwiIGluc2VydGlvbi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIGhhbmRsaW5nIDMyLWJpdCBDUUVzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIG5lYXJpbmcgaXRzIHdyYXAtYXJvdW5kIHBvaW50LCBidXQgb25seSBlbm91Z2ggc3BhY2UgZXhpc3RzIGZvciBhIDE2LWJpdCBDUUUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaW9fZmlsbF9ub3BfY3FlYCBmdW5jdGlvbiBvcGVyYXRlcy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgXCJkdW1teVwiIGVudHJ5IGlzIGNyZWF0ZWQgYW5kIGluc2VydGVkIGludG8gdGhlIGJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhlIHJpbmcgYnVmZmVyIGRvZXNuJ3QgY29ycnVwdCBkYXRhIG9yIHRyaWdnZXIgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIENRRSBwcm9jZXNzaW5nLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZWl0aGVyIGluc2VydCBhIHNwZWNpYWwgJ05PUCcgKG5vIG9wZXJhdGlvbikgQ1FFLCB0byBzaWduYWwgdG8gZG93bnN0cmVhbSBjb25zdW1lcnMgdGhhdCBub3RoaW5nIGlzIGFjdHVhbGx5IHJlYWR5LCBvciBtYXliZSBldmVuIHBlcmZvcm0gYSBidWZmZXIgcmVzZXQsIGRlcGVuZGluZyBvbiBjb250ZXh0LiBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGl0IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MTIuNzA4Nzc1MTc0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUxMTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19maWxsX25vcF9jcWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz02ODQ9c3RhdGljIHVuc2lnbmVkIGludCBpb19jcXJpbmdfcXVldWVkKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy02OTgtICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzo2OTk6c3RhdGljIGJvb2wgaW9fZmlsbF9ub3BfY3FlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgb2ZmKVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzAwLXtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM9NzE4PWJvb2wgaW9fY3FlX2NhY2hlX3JlZmlsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBvdmVyZmxvdywgYm9vbCBjcWUzMilcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtNzM2LVxcdGlmIChjcWUzMiBcXHUwMDI2XFx1MDAyNiBvZmYgKyAxID09IGN0eC1cXHUwMDNlY3FfZW50cmllcykge1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6NzM3OlxcdFxcdGlmICghaW9fZmlsbF9ub3BfY3FlKGN0eCwgb2ZmKSlcXG5pb191cmluZy9pb191cmluZy5jLTczOC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI3OjEyLjc1ODI5MzA2M1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1Mzg0OTU1NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBpb191cmluZy5jOiBBIFNwZWNpZmljIENvZGUgQmxvY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgaW9fdXJpbmcvaW9fdXJpbmcuY2AuIExldCdzIHplcm8gaW4gb24gbGluZXMgNjk4IHRocm91Z2ggNzE1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGluIHRoaXMgc2VjdGlvbi4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgY29yZSBhc3BlY3Qgb2YgdGhlIHN1Ym1pc3Npb24gb3IgY29tcGxldGlvbiBwcm9jZXNzLCBvciBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gSS9PIG9wZXJhdGlvbnMuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgYGlvX3VyaW5nYCwgSSdkIGJldCBpdCdzIGludm9sdmVkIGluIGRpc3BhdGNoaW5nIHdvcmsgdG8gdGhlIGtlcm5lbCBvciByZXRyaWV2aW5nIGNvbXBsZXRlZCByZXF1ZXN0cy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgYXNzaWdubWVudHMgcmVsYXRlZCB0byByaW5nIGJ1ZmZlcnMsIGNvbXBsZXRpb24gcXVldWVzLCBhbmQgdGhlIHN1Ym1pc3Npb24gcXVldWUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIGBpb191cmluZ19zdWJtaXQoKWAsIGBpb191cmluZ19jcV9lbnRlcigpYCwgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIG1lbW9yeSBiYXJyaWVyIGluc3RydWN0aW9ucyB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSBjaGVja3Mgb24gZmxhZ3Mgb3IgZXJyb3IgY29kZXMuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIHNvdXJjZSBjb2RlLiBNeSBnb2FsIGlzIHRvIGdyYXNwIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzY29wZSBvZiBob3cgaW9fdXJpbmcgZWZmaWNpZW50bHkgaGFuZGxlcyBJL08uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MTguMTQzMjUyMTc2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5ODpcXHQgKi9cXG4gNjk5OlxcdHN0YXRpYyBib29sIGlvX2ZpbGxfbm9wX2NxZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgaW50IG9mZilcXG4gNzAwOlxcdHtcXG4gNzAxOlxcdFxcdGlmIChpb19jcXJpbmdfcXVldWVkKGN0eCkgXFx1MDAzYyBjdHgtXFx1MDAzZWNxX2VudHJpZXMpIHtcXG4gNzAyOlxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZSA9IFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdzLVxcdTAwM2VjcWVzW29mZl07XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdFxcdGNxZS1cXHUwMDNldXNlcl9kYXRhID0gMDtcXG4gNzA1OlxcdFxcdFxcdGNxZS1cXHUwMDNlcmVzID0gMDtcXG4gNzA2OlxcdFxcdFxcdGNxZS1cXHUwMDNlZmxhZ3MgPSBJT1JJTkdfQ1FFX0ZfU0tJUDtcXG4gNzA3OlxcdFxcdFxcdGN0eC1cXHUwMDNlY2FjaGVkX2NxX3RhaWwrKztcXG4gNzA4OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA3MDk6XFx0XFx0fVxcbiA3MTA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MTE6XFx0fVxcbiA3MTI6XFx0XFxuIDcxMzpcXHQvKlxcbiA3MTQ6XFx0ICogd3JpdGVzIHRvIHRoZSBjcSBlbnRyeSBuZWVkIHRvIGNvbWUgYWZ0ZXIgcmVhZGluZyBoZWFkOyB0aGVcXG4gNzE1OlxcdCAqIGNvbnRyb2wgZGVwZW5kZW5jeSBpcyBlbm91Z2ggYXMgd2UncmUgdXNpbmcgV1JJVEVfT05DRSB0b1xcbiA3MTY6XFx0ICogZmlsbCB0aGUgY3EgZW50cnlcXG4gNzE3OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzoxOC4xNDM0NjM5NDZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzUxMzA5NzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIGlvX3VyaW5nIENRRSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gbWl4ZWQgbW9kZSwgd2l0aCBgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRGAsIHRoZSBjb2RlIHNlZW1zIHRvIGhhdmUgYSBzcGVjaWZpYyBoYW5kbGluZyBmb3IgdGhlIGxhc3Qgc2xvdCBiZWZvcmUgdGhlIENRIHJpbmcgd3JhcHMgYXJvdW5kLiBTcGVjaWZpY2FsbHksIHdoZW4gYG9mZiArIDEgPT0gY3R4LVx1MDAzZWNxX2VudHJpZXNgLCBpdCBsb29rcyBsaWtlIGEgZHVtbXkgQ1FFIHdpdGggYElPUklOR19DUUVfRl9TS0lQYCBpcyBpbnNlcnRlZC4gVGhlbiwgYSAzMi1ieXRlIENRRSBpcyBwbGFjZWQgc3RhcnRpbmcgYXQgdGhlIGJlZ2lubmluZyAoYG9mZiA9IDBgKS4gQnV0IGhhbmcgb24uLi4gdXNlcnNwYWNlIGhhcyBhY2Nlc3MgdG8gdGhpcyBzaGFyZWQgbWVtb3J5IChtbWFwISksIGFuZCB0aGV5ICpjb3VsZCogcG90ZW50aWFsbHkgbW9kaWZ5IHRoZSBDUUUgZW50cmllcyBpbiB0aGUgc2hhcmVkIHJpbmcuXG5cbkkgc2VlIHRoYXQgYHItXHUwMDNlY3Flc2AgaXMgbWFwcGVkIGludG8gdXNlcnNwYWNlOyBhbmQgSSBoYXZlIGEgYmFkIGZlZWxpbmcgYWJvdXQgdGhpcywgdGhpcyBjb3VsZCBoYXZlIG1ham9yIGltcGxpY2F0aW9ucy4gTGV0J3MgbG9vayBhdCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggdGhlIENRIGVudHJpZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgY2hlY2sgYW5kIHRoZSBjb25kaXRpb24gdGhhdCBzZXRzIHRoZSBgY3FlMzJgIGJvb2xlYW4uXG5cblRoZSBsaW5lIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoaXM6IGBib29sIGlzX2xhc3RfY3FhcnJheV9zbG90ID0gKGNxX2hlYWQgPT0gY3FfbWFzayk7YC4gTm93LCBgY3FfaGVhZGAgaXMgYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGluY3JlbWVudHMuIFRoZSBpbmRleCB0byBhY2Nlc3MgYHItXHUwMDNlY3Flc2AgaXMgYGNxX2hlYWQgXHUwMDI2IGNxX21hc2tgLiBXYWl0LCB3aGF0IGlzIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgZG9pbmc/IFdoeSBpcyB0aGVyZSBhIGRpcmVjdCBjb21wYXJpc29uIGJldHdlZW4gYGNxX2hlYWRgIGFuZCBgY3FfbWFza2AsIHJhdGhlciB0aGFuIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgPT0gY3FfbWFza2A/XG5cbk9rYXksIEkgdGhpbmsgSSdtIHN0YXJ0aW5nIHRvIHNlZSB0aGUgaXNzdWUuIFdoZW4gYChjcV9oZWFkIFx1MDAyNiBjcV9tYXNrKWAgcG9pbnRzIHRvIHRoZSBsYXN0IHNsb3QgaW4gdGhlIENRRSBhcnJheSwgKmFuZCogYGNxZS1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX0NRRV9GXzMyYCBpcyBzZXQgKHdoaWNoIGNvdWxkIGJlIG1hbGljaW91c2x5IHNldCBieSB1c2Vyc3BhY2UpLCB0aGUgY29kZSB3aWxsIHByb2NlZWQgdG8gYWNjZXNzIHRoZSBgY3FlLVx1MDAzZWJpZ19jcWVgIGFycmF5LiAgSWYgdGhlIGxhc3QgZWxlbWVudCBpcyBhY2Nlc3NlZCwgaXQgbWF5IGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGByLVx1MDAzZWNxZXNgIGFycmF5LiBUaGlzIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCFcblxuSWYgdGhpcyBvY2N1cnMsIGNvdWxkIHRoaXMgYmUgZGV0ZWN0ZWQ/IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHRoaXMgc29ydCBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggbWVhbnMgYSBrZXJuZWwgcGFuaWMuIFdhaXQsIHdoYXQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/IElzIHRoaXMgbWVtb3J5IGFmdGVyIGByLVx1MDAzZWNxZXNgIGFsbG9jYXRlZCBvciBub3Q/IEkgbmVlZCB0byBjaGVjayBob3cgYHItXHUwMDNlY3Flc2AgaXMgYWxsb2NhdGVkIGFuZCBzaXplZCB0byBjb25maXJtIHRoaXMgaHlwb3RoZXNpcy4gSSBuZWVkIHRvIHNlYXJjaCBmb3IgYHJpbmdzX3NpemVgIGFuZCB3aGVyZSBgci1cdTAwM2VjcWVzYCBsaXZlcyEgSSBhbSBwcmV0dHkgc3VyZSB0aGlzIGlzIGEgcmVhbCB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBhIG1pc2NhbGN1bGF0aW9uIG9mIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjUuNjU2NTYzOTEzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyNTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nc19zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9MjA2OT1zdGF0aWMgdm9pZCBpb19yaW5nc19mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDc3LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjA3ODpzdGF0aWMgaW50IHJpbmdzX3NpemUodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgc3FfZW50cmllcyxcXG5pb191cmluZy9pb191cmluZy5jLTIwNzktXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNxX2VudHJpZXMsIHN0cnVjdCBpb19yaW5nc19sYXlvdXQgKnJsKVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTI2LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjEyNzpcXHRybC1cXHUwMDNlcmluZ3Nfc2l6ZSA9IG9mZjtcXG5pb191cmluZy9pb191cmluZy5jLTIxMjgtXFx0cmV0dXJuIDA7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI3MTc9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjczMC1cXHRtZW1zZXQoXFx1MDAyNnJkLCAwLCBzaXplb2YocmQpKTtcXG5pb191cmluZy9pb191cmluZy5jOjI3MzE6XFx0cmQuc2l6ZSA9IFBBR0VfQUxJR04ocmwtXFx1MDAzZXJpbmdzX3NpemUpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjczMi1cXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XFxuLS1cXG5pb191cmluZy9pb191cmluZy5jPTI4OTQ9aW50IGlvX3ByZXBhcmVfY29uZmlnKHN0cnVjdCBpb19jdHhfY29uZmlnICpjb25maWcpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI5MDYtXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyOTA3OlxcdHJldCA9IHJpbmdzX3NpemUocC1cXHUwMDNlZmxhZ3MsIHAtXFx1MDAzZXNxX2VudHJpZXMsIHAtXFx1MDAzZWNxX2VudHJpZXMsXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yOTA4LVxcdFxcdFxcdCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VsYXlvdXQpO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuaD0yMj1zdHJ1Y3QgaW9fcmluZ3NfbGF5b3V0IHtcXG5pb191cmluZy9pb191cmluZy5oLTIzLVxcdC8qIHNpemUgb2YgQ1EgKyBoZWFkZXJzICsgU1Egb2Zmc2V0IGFycmF5ICovXFxuaW9fdXJpbmcvaW9fdXJpbmcuaDoyNDpcXHRzaXplX3QgcmluZ3Nfc2l6ZTtcXG5pb191cmluZy9pb191cmluZy5oLTI1LVxcdHNpemVfdCBzcV9zaXplO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTUyNi1cXHRtZW1zZXQoXFx1MDAyNnJkLCAwLCBzaXplb2YocmQpKTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjUyNzpcXHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cXHUwMDNlcmluZ3Nfc2l6ZSk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MjgtXFx0aWYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX05PX01NQVApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjUuNzAzOTkyODMyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MDI0ODQ4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHJpbmdzX3NpemVgIGluIGBpb191cmluZy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgYGlvX3VyaW5nYCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgcmluZ3Nfc2l6ZWAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmluZyBidWZmZXIgc2l6ZSBpcyBkZXRlcm1pbmVkIGFuZCBob3cgaXQgaW1wYWN0cyBwZXJmb3JtYW5jZS4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIHN0cnVjdHVyZXMsIHRoYXQgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNlbnRyYWwgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IGxheW91dCBhbmQgdGhlIGJhbGFuY2UgYmV0d2VlbiBDUFUgdXRpbGl6YXRpb24gYW5kIEkvTyBsYXRlbmN5LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBpbmZsdWVuY2VzIGZyb20gYm90aCBoYXJkd2FyZSBsaW1pdGF0aW9ucyAoY2FjaGUgbGluZSBzaXplcywgcGFnZSBzaXplcykgYW5kIHBvdGVudGlhbCB0dW5pbmcgcGFyYW1ldGVycyBleHBvc2VkIHRvIHRoZSB1c2VyLiBJIGFsc28gYW50aWNpcGF0ZSBpdCB3aWxsIGFmZmVjdCB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHRoZSBlZmZpY2llbmN5IG9mIHN1Ym1pc3Npb24vY29tcGxldGlvbiBxdWV1ZSBwcm9jZXNzaW5nLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IGR5bmFtaWMgYWRqdXN0bWVudHMgYXJlIG1hZGUgZHVyaW5nIHJ1bnRpbWUgYmFzZWQgb24gc3lzdGVtIGxvYWQgb3Igb3RoZXIgZmFjdG9ycy4gVGhlIGNvZGUgaW4gYGlvX3VyaW5nLmNgIHdpbGwgcHJvdmlkZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIsIGFuZCBJJ20gcmVhZHkgdG8gZmluZCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjguMzA2NDgwNjIyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9pb191cmluZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNzgsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNzg6XFx0c3RhdGljIGludCByaW5nc19zaXplKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNxX2VudHJpZXMsXFxuMjA3OTpcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3FfZW50cmllcywgc3RydWN0IGlvX3JpbmdzX2xheW91dCAqcmwpXFxuMjA4MDpcXHR7XFxuMjA4MTpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzO1xcbjIwODI6XFx0XFx0c2l6ZV90IHNxZV9zaXplO1xcbjIwODM6XFx0XFx0c2l6ZV90IG9mZjtcXG4yMDg0OlxcdFxcbjIwODU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9SSU5HX1NFVFVQX0NRRV9NSVhFRCkge1xcbjIwODY6XFx0XFx0XFx0aWYgKGNxX2VudHJpZXMgXFx1MDAzYyAyKVxcbjIwODc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjA4ODpcXHRcXHR9XFxuMjA4OTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT1JJTkdfU0VUVVBfU1FFX01JWEVEKSB7XFxuMjA5MDpcXHRcXHRcXHRpZiAoc3FfZW50cmllcyBcXHUwMDNjIDIpXFxuMjA5MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4yMDkyOlxcdFxcdH1cXG4yMDkzOlxcdFxcbjIwOTQ6XFx0XFx0cmwtXFx1MDAzZXNxX2FycmF5X29mZnNldCA9IFNJWkVfTUFYO1xcbjIwOTU6XFx0XFxuMjA5NjpcXHRcXHRzcWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfc3FlKTtcXG4yMDk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUUUxMjgpXFxuMjA5ODpcXHRcXHRcXHRzcWVfc2l6ZSAqPSAyO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRybC1cXHUwMDNlc3Ffc2l6ZSA9IGFycmF5X3NpemUoc3FlX3NpemUsIHNxX2VudHJpZXMpO1xcbjIxMDE6XFx0XFx0aWYgKHJsLVxcdTAwM2VzcV9zaXplID09IFNJWkVfTUFYKVxcbjIxMDI6XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjEwMzpcXHRcXG4yMTA0OlxcdFxcdG9mZiA9IHN0cnVjdF9zaXplKHJpbmdzLCBjcWVzLCBjcV9lbnRyaWVzKTtcXG4yMTA1OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMilcXG4yMTA2OlxcdFxcdFxcdG9mZiA9IHNpemVfbXVsKG9mZiwgMik7XFxuMjEwNzpcXHRcXHRpZiAob2ZmID09IFNJWkVfTUFYKVxcbjIxMDg6XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjEwOTpcXHRcXG4yMTEwOlxcdCNpZmRlZiBDT05GSUdfU01QXFxuMjExMTpcXHRcXHRvZmYgPSBBTElHTihvZmYsIFNNUF9DQUNIRV9CWVRFUyk7XFxuMjExMjpcXHRcXHRpZiAob2ZmID09IDApXFxuMjExMzpcXHRcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4yMTE0OlxcdCNlbmRpZlxcbjIxMTU6XFx0XFxuMjExNjpcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSkge1xcbjIxMTc6XFx0XFx0XFx0c2l6ZV90IHNxX2FycmF5X3NpemU7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdFxcdHJsLVxcdTAwM2VzcV9hcnJheV9vZmZzZXQgPSBvZmY7XFxuMjEyMDpcXHRcXG4yMTIxOlxcdFxcdFxcdHNxX2FycmF5X3NpemUgPSBhcnJheV9zaXplKHNpemVvZih1MzIpLCBzcV9lbnRyaWVzKTtcXG4yMTIyOlxcdFxcdFxcdG9mZiA9IHNpemVfYWRkKG9mZiwgc3FfYXJyYXlfc2l6ZSk7XFxuMjEyMzpcXHRcXHRcXHRpZiAob2ZmID09IFNJWkVfTUFYKVxcbjIxMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMjEyNTpcXHRcXHR9XFxuMjEyNjpcXHRcXG4yMTI3OlxcdFxcdHJsLVxcdTAwM2VyaW5nc19zaXplID0gb2ZmO1xcbjIxMjg6XFx0XFx0cmV0dXJuIDA7XFxuMjEyOTpcXHR9XFxuMjEzMDpcXHRcXG4yMTMxOlxcdHN0YXRpYyBfX2NvbGQgdm9pZCBfX2lvX3JlcV9jYWNoZXNfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcXG4yMTMyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MjguMzA2Njg4MzIyWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNjc2MjgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSS9PIFJpbmcgQ1FFIFNpemluZyBhbmQgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgQWNjZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIHNpemUgb2YgdGhlIEkvTyByaW5nIGlzIGNhbGN1bGF0ZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJpZXMgKENRRXMpLiBJJ20gc2VlaW5nIHRoYXQgdGhlIGByaW5nc19zaXplYCBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBgcmluZ3NgLCBgY3Flc2AsIGFuZCBgY3FfZW50cmllc2AuIE5vdywgZm9yIHRoZSBzdGFuZGFyZCBjYXNlLCBldmVyeXRoaW5nIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZSBjcnVjaWFsIG9ic2VydmF0aW9uIGhlcmUgaXMgYWJvdXQgdGhlIGBJT1JJTkdfU0VUVVBfQ1FFX01JWEVEYCBmbGFnLiBXaXRoIHRoaXMsIHRoZSBjb2RlICpkb2Vzbid0KiBkb3VibGUgYGNxX2VudHJpZXNgLCB3aGljaCBpcyB3aGF0IG9uZSBtaWdodCBpbml0aWFsbHkgZXhwZWN0LiBJbnN0ZWFkLCBgY3FfZW50cmllc2AgcmVmbGVjdHMgdGhlIG51bWJlciBvZiAxNi1ieXRlIENRRSBzbG90cyBhbGxvY2F0ZWQgaW4gYHJpbmdzLVx1MDAzZWNxZXNgLlxuXG5UaGUgaW1wbGljYXRpb24/IFdoZW4gYSAzMi1ieXRlIENRRSBpcyB1dGlsaXplZCBpbiBtaXhlZCBtb2RlLCBpdCBjb25zdW1lcyAqdHdvKiBvZiB0aGVzZSAxNi1ieXRlIHNsb3RzLiBJdCdzIHRoaXMgZGV0YWlsIHRoYXQgYnJpbmdzIHVwIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgc2VlIGEgcHJvYmxlbSBpZiB0aGUgKmxhc3QqIHNsb3QgaW4gdGhlIHJpbmcgKGBjcV9oZWFkIFx1MDAyNiBjcV9tYXNrID09IGNxX21hc2tgKSBoYXMgYElPUklOR19DUUVfRl8zMmAgc2V0LiBUaGlzIG1lYW5zIGEgMzItYnl0ZSBDUUUgaXMgaW1wbGllZCwgYnV0IHNpbmNlIGl0J3MgdGhlIGZpbmFsIHNsb3QsIGl0IGNhbm5vdCBhY3R1YWxseSBiZSBhIDMyLWJ5dGUgQ1FFOyBpdCBpcyBvbmx5IGEgMTYgYnl0ZSBzbG90LiBSZWFkaW5nIGBjcWUtXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXHUwMDNlYmlnX2NxZVsxXWAgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYHJpbmdzLVx1MDAzZWNxZXNbY3FfZW50cmllcyAtIDFdYCFcblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGltbWVkaWF0ZWx5IGFmdGVyIHRoYXQgbGFzdCBgcmluZ3MtXHUwMDNlY3Flc2AgZWxlbWVudC4gQWgsIEkgc2VlOiB0aGVyZSdzIGVpdGhlciBwYWRkaW5nIGZvciBTTVAgKGlmIGBDT05GSUdfU01QYCBpcyBlbmFibGVkKSBvciBwYWRkaW5nIHRvIHBhZ2UgYWxpZ25tZW50IGlmIGBJT1JJTkdfU0VUVVBfTk9fU1FBUlJBWWAgaXMgc2V0LiBTbywgaWYgd2UgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIENRRXMsIHdpbGwgd2UgaGl0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB3aWxsIGl0IGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gV2UgaGF2ZSB0byBjaGVjayBob3cgdGhlIG1lbW9yeSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEknbGwgbmVlZCB0byBnbyBsb29rIGF0IGhvdyBgaW9fYWxsb2NhdGVfc2NxX3VyaW5nc2Agd29ya3MuIFRoYXQncyB3aGVyZSB0aGUgYW5zd2VyIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MzMuMzc0MzIwMDRaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjcxNTpcXHR9XFxuMjcxNjpcXHRcXG4yNzE3OlxcdHN0YXRpYyBfX2NvbGQgaW50IGlvX2FsbG9jYXRlX3NjcV91cmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuMjcxODpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX2N0eF9jb25maWcgKmNvbmZpZylcXG4yNzE5OlxcdHtcXG4yNzIwOlxcdFxcdHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnAgPSBcXHUwMDI2Y29uZmlnLVxcdTAwM2VwO1xcbjI3MjE6XFx0XFx0c3RydWN0IGlvX3JpbmdzX2xheW91dCAqcmwgPSBcXHUwMDI2Y29uZmlnLVxcdTAwM2VsYXlvdXQ7XFxuMjcyMjpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgcmQ7XFxuMjcyMzpcXHRcXHRzdHJ1Y3QgaW9fcmluZ3MgKnJpbmdzO1xcbjI3MjQ6XFx0XFx0aW50IHJldDtcXG4yNzI1OlxcdFxcbjI3MjY6XFx0XFx0LyogbWFrZSBzdXJlIHRoZXNlIGFyZSBzYW5lLCBhcyB3ZSBhbHJlYWR5IGFjY291bnRlZCB0aGVtICovXFxuMjcyNzpcXHRcXHRjdHgtXFx1MDAzZXNxX2VudHJpZXMgPSBwLVxcdTAwM2VzcV9lbnRyaWVzO1xcbjI3Mjg6XFx0XFx0Y3R4LVxcdTAwM2VjcV9lbnRyaWVzID0gcC1cXHUwMDNlY3FfZW50cmllcztcXG4yNzI5OlxcdFxcbjI3MzA6XFx0XFx0bWVtc2V0KFxcdTAwMjZyZCwgMCwgc2l6ZW9mKHJkKSk7XFxuMjczMTpcXHRcXHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cXHUwMDNlcmluZ3Nfc2l6ZSk7XFxuMjczMjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XFxuMjczMzpcXHRcXHRcXHRyZC51c2VyX2FkZHIgPSBwLVxcdTAwM2VjcV9vZmYudXNlcl9hZGRyO1xcbjI3MzQ6XFx0XFx0XFx0cmQuZmxhZ3MgfD0gSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSO1xcbjI3MzU6XFx0XFx0fVxcbjI3MzY6XFx0XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XFxuMjczNzpcXHRcXHRpZiAocmV0KVxcbjI3Mzg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yNzM5OlxcdFxcdGN0eC1cXHUwMDNlcmluZ3MgPSByaW5ncyA9IGlvX3JlZ2lvbl9nZXRfcHRyKFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdfcmVnaW9uKTtcXG4yNzQwOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXFx1MDAzZXJpbmdzX3JjdSwgcmluZ3MpO1xcbjI3NDE6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19TUUFSUkFZKSlcXG4yNzQyOlxcdFxcdFxcdGN0eC1cXHUwMDNlc3FfYXJyYXkgPSAodTMyICopKChjaGFyICopcmluZ3MgKyBybC1cXHUwMDNlc3FfYXJyYXlfb2Zmc2V0KTtcXG4yNzQzOlxcdFxcbjI3NDQ6XFx0XFx0bWVtc2V0KFxcdTAwMjZyZCwgMCwgc2l6ZW9mKHJkKSk7XFxuMjc0NTpcXHRcXHRyZC5zaXplID0gUEFHRV9BTElHTihybC1cXHUwMDNlc3Ffc2l6ZSk7XFxuMjc0NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9OT19NTUFQKSB7XFxuMjc0NzpcXHRcXHRcXHRyZC51c2VyX2FkZHIgPSBwLVxcdTAwM2VzcV9vZmYudXNlcl9hZGRyO1xcbjI3NDg6XFx0XFx0XFx0cmQuZmxhZ3MgfD0gSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSO1xcbjI3NDk6XFx0XFx0fVxcbjI3NTA6XFx0XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbjI3NTE6XFx0XFx0aWYgKHJldCkge1xcbjI3NTI6XFx0XFx0XFx0aW9fcmluZ3NfZnJlZShjdHgpO1xcbjI3NTM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yNzU0OlxcdFxcdH1cXG4yNzU1OlxcdFxcdGN0eC1cXHUwMDNlc3Ffc3FlcyA9IGlvX3JlZ2lvbl9nZXRfcHRyKFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbik7XFxuMjc1NjpcXHRcXG4yNzU3OlxcdFxcdG1lbXNldChyaW5ncywgMCwgc2l6ZW9mKCpyaW5ncykpO1xcbjI3NTg6XFx0XFx0V1JJVEVfT05DRShyaW5ncy1cXHUwMDNlc3FfcmluZ19tYXNrLCBjdHgtXFx1MDAzZXNxX2VudHJpZXMgLSAxKTtcXG4yNzU5OlxcdFxcdFdSSVRFX09OQ0UocmluZ3MtXFx1MDAzZWNxX3JpbmdfbWFzaywgY3R4LVxcdTAwM2VjcV9lbnRyaWVzIC0gMSk7XFxuMjc2MDpcXHRcXHRXUklURV9PTkNFKHJpbmdzLVxcdTAwM2VzcV9yaW5nX2VudHJpZXMsIGN0eC1cXHUwMDNlc3FfZW50cmllcyk7XFxuMjc2MTpcXHRcXHRXUklURV9PTkNFKHJpbmdzLVxcdTAwM2VjcV9yaW5nX2VudHJpZXMsIGN0eC1cXHUwMDNlY3FfZW50cmllcyk7XFxuMjc2MjpcXHRcXHRyZXR1cm4gMDtcXG4yNzYzOlxcdH1cXG4yNzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozMy4zNzQ0NzAyOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTAzMjkwNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbiBpbiBgaW9fY3JlYXRlX3JlZ2lvbmAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBpb19jcmVhdGVfcmVnaW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQgdGhlcmUuIEl0J3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgcmVnaW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2lsbCBsaWtlbHkgcmVzaWRlIHdpdGhpbiB0aG9zZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBnb29kLCBidXQgaXQncyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUgb2YgYGlvX2NyZWF0ZV9yZWdpb25gIGl0c2VsZiBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyB0aGluZyBhY3R1YWxseSBidWlsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTc2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozNS44Nzc3NjQ2WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA0ODc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9MjcxNz1zdGF0aWMgX19jb2xkIGludCBpb19hbGxvY2F0ZV9zY3FfdXJpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzM1LVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjI3MzY6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXJpbmdfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzM3LVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9pb191cmluZy5jLTI3NDktXFx0fVxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6Mjc1MDpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNlc3FfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzUxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz02MzA9aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy02NzgtXFx0fVxcbmlvX3VyaW5nL2tidWYuYzo2Nzk6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZibC1cXHUwMDNlcmVnaW9uLCBcXHUwMDI2cmQsIG1tYXBfb2Zmc2V0KTtcXG5pb191cmluZy9rYnVmLmMtNjgwLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0xNzQ9c3RhdGljIGludCBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMjA2LVxcbmlvX3VyaW5nL21lbW1hcC5jOjIwNzppbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbmlvX3VyaW5nL21lbW1hcC5jLTIwOC1cXHRcXHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmg9MjA9dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcik7XFxuaW9fdXJpbmcvbWVtbWFwLmg6MjE6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG5pb191cmluZy9tZW1tYXAuaC0yMi1cXHRcXHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTUzMS1cXHR9XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1MzI6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZuLnJpbmdfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzMtXFx0aWYgKHJldClcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYxLVxcdH1cXG5pb191cmluZy9yZWdpc3Rlci5jOjU2MjpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNm4uc3FfcmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01NjMtXFx0aWYgKHJldCkge1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03MDM9c3RhdGljIGludCBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqdWFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzMyLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzMzOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2cmVnaW9uLCBcXHUwMDI2cmQsIElPUklOR19NQVBfT0ZGX1BBUkFNX1JFR0lPTik7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzQtXFx0aWYgKHJldClcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz00MTQ9c3RhdGljIGludCBpb19hbGxvY2F0ZV9yYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy96Y3J4LmMtNDMzLVxcbmlvX3VyaW5nL3pjcnguYzo0MzQ6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZpZnEtXFx1MDAzZXJxX3JlZ2lvbiwgcmQsIG1tYXBfb2Zmc2V0KTtcXG5pb191cmluZy96Y3J4LmMtNDM1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozNS45MjQ4MTgwMDlaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ2MDYxMjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbWVtbWFwLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiBgaW9fdXJpbmcvbWVtbWFwLmNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBpb191cmluZ2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbW1hcC1yZWxhdGVkIGFzcGVjdHMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGFuZCBrZXJuZWwtc3BhY2UgbWVtb3J5IHJlZ2lvbnMgaGVyZS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBzaGFyaW5nIG9mIG1lbW9yeSBidWZmZXJzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zIGFuZCBob3cgdGhhdCdzIGhhbmRsZWQgd2l0aCBtZW1vcnkgbWFwcGluZy4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIG51YW5jZXMgb2YgbWVtb3J5IHByb3RlY3Rpb24sIGNhY2hpbmcsIGFuZCBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIGVmZmljaWVudCBhbmQgc2FmZSBkYXRhIHRyYW5zZmVycy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHVzZWQgb3IgcG90ZW50aWFsIGFyZWFzIHdoZXJlIHRoZXkgY291bGQgYmUgaW1wbGVtZW50ZWQgb3IgaW1wcm92ZWQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6MzguMzg1NDMyOTg5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL21lbW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3NDpcXHRzdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlvX3VyaW5nX3JlZ2lvbl9kZXNjICpyZWcsXFxuIDE3NjpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBtbWFwX29mZnNldCxcXG4gMTc3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpXFxuIDE3ODpcXHR7XFxuIDE3OTpcXHRcXHRnZnBfdCBnZnAgPSBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOO1xcbiAxODA6XFx0XFx0c2l6ZV90IHNpemUgPSBpb19yZWdpb25fc2l6ZShtcik7XFxuIDE4MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZDtcXG4gMTgyOlxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXM7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdHBhZ2VzID0ga3ZtYWxsb2Nfb2JqcygqcGFnZXMsIG1yLVxcdTAwM2Vucl9wYWdlcywgZ2ZwKTtcXG4gMTg1OlxcdFxcdGlmICghcGFnZXMpXFxuIDE4NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0aWYgKGlvX21lbV9hbGxvY19jb21wb3VuZChwYWdlcywgbXItXFx1MDAzZW5yX3BhZ2VzLCBzaXplLCBnZnAsIHVzZXIpKSB7XFxuIDE4OTpcXHRcXHRcXHRtci1cXHUwMDNlZmxhZ3MgfD0gSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRjtcXG4gMTkwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMTkxOlxcdFxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbiAxOTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBtci1cXHUwMDNlbnJfcGFnZXMsIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGlmIChucl9hbGxvY2F0ZWQgIT0gbXItXFx1MDAzZW5yX3BhZ2VzKSB7XFxuIDE5NjpcXHRcXHRcXHRpZiAobnJfYWxsb2NhdGVkKVxcbiAxOTc6XFx0XFx0XFx0XFx0cmVsZWFzZV9wYWdlcyhwYWdlcywgbnJfYWxsb2NhdGVkKTtcXG4gMTk4OlxcdFxcdFxcdGt2ZnJlZShwYWdlcyk7XFxuIDE5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjAwOlxcdFxcdH1cXG4gMjAxOlxcdGRvbmU6XFxuIDIwMjpcXHRcXHRyZWctXFx1MDAzZW1tYXBfb2Zmc2V0ID0gbW1hcF9vZmZzZXQ7XFxuIDIwMzpcXHRcXHRtci1cXHUwMDNlcGFnZXMgPSBwYWdlcztcXG4gMjA0OlxcdFxcdHJldHVybiAwO1xcbiAyMDU6XFx0fVxcbiAyMDY6XFx0XFxuIDIwNzpcXHRpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbiAyMDg6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4gMjA5OlxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBtbWFwX29mZnNldClcXG4gMjEwOlxcdHtcXG4gMjExOlxcdFxcdGludCBucl9wYWdlcywgcmV0O1xcbiAyMTI6XFx0XFx0dTY0IGVuZDtcXG4gMjEzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyNzozOC4zODU1MDk5NTlaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcyODIyMDQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIGlvX3VyaW5nIENRRSBDb3JydXB0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGlvX3VyaW5nYCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgX19pb191cmluZ19zaG93X2ZkaW5mb2AuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgbWVtb3J5IGZvciB0aGUgQ1FFIChDb21wbGV0aW9uIFF1ZXVlIEVudHJ5KSBzdHJ1Y3R1cmVzIGlzIHplcm9lZCBvdXQgb24gYWxsb2NhdGlvbiDigJMgSSdtIHNlZWluZyBgX19HRlBfWkVST2AgdXNlZCwgYW5kIGBtZW1zZXRgIGlzIGNhbGxlZCBvbiBgcmluZ3NgLiBUaGlzIHNob3VsZCBtZWFuIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZSwgc28gYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGFyZSBhIHJlZCBmbGFnLlxuXG5Ob3csIEknbSByZS1leGFtaW5pbmcgdGhpcyBwYXRjaCBkaWZmLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHNvbWV0aGluZyBhcm91bmQgdGhlIHByaW50aW5nIG9mIENRRSBpbmZvcm1hdGlvbiBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAsIGFuZCB1c2luZyBpdCB3aGVuIHByaW50aW5nIENRRXMuIFxuXG5JdCBzZWVtcyB0aGUgY29kZSBpcyB0cnlpbmcgdG8gaGFuZGxlIHRoZSBgSU9SSU5HX0NRRV9GXzMyYCBmbGFnIGFuZCBgSU9SSU5HX1NFVFVQX0NRRTMyYCBvcHRpb24sIGxpa2VseSByZWxhdGVkIHRvIDMyLWJpdCBDUUUgaGFuZGxpbmcuIFRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhZGRpbmcgYSBjb25kaXRpb246IGl0J3MgY2hlY2tpbmcgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgMzItYml0IENRRSwgZWl0aGVyIGV4cGxpY2l0bHkgaW4gdGhlIENRRSdzIGZsYWdzIG9yIGltcGxpY2l0bHkgdmlhIHRoZSByaW5nIHNldHVwLCAqYW5kKiBpZiB3ZSBhcmUgKm5vdCogYXQgdGhlIGxhc3Qgc2xvdCBpbiB0aGUgQ1FFIGFycmF5LCB3ZSBleGVjdXRlIHRoaXMgY29uZGl0aW9uLiBUaGUgZWFybGllciBjb25kaXRpb24gcHJpbnRlZCB0aGUgQ1FFIGluZm8gaWYgZWl0aGVyIGZsYWcgd2FzIHNldC4gXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCByZWFsbHkgcmVhZCB0aGUgY29kZSBhcm91bmQgbGluZXMgMTIwLTE4MCBpbiBgaW9fdXJpbmcvZmRpbmZvLmNgLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgQ1FFIGFycmF5IGlzIG1hbmFnZWQgYW5kIGhvdyB0aGlzIGBpc19sYXN0X2NxYXJyYXlfc2xvdGAgdmFyaWFibGUgaXMgY2FsY3VsYXRlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhdGNoIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXQgc2VlbXMgYXMgdGhvdWdoIHRoZSBpc3N1ZSBoYXMgdG8gZG8gd2l0aCByZWFkaW5nIGZyb20gdGhlIENRRSB3aGVuIHdlIGFyZSBhdCB0aGUgbGFzdCBzbG90IGluIHRoZSBDUUUgYXJyYXksIGFuZCB3aXRoIHRoZSBmbGFncyBpbmRpY2F0aW5nIGEgYGNxZTMyYCwgc28gSSdsbCBuZWVkIHRvIHJlYWQgbW9yZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE2OjI3OjQzLjExMzczMzYwNFoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9mZGluZm8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyMTpcXHRcXHRcXHRcXHR9XFxuIDEyMjpcXHRcXHRcXHRcXHRpZiAoc3FfaWR4ID09IHNxX21hc2spIHtcXG4gMTIzOlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSxcXG4gMTI0OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCIlNXU6IGNvcnJ1cHRlZCBzcWUsIHdyYXBwaW5nIDEyOEIgZW50cnlcXFxcblxcXCIsXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRcXHRzcV9pZHgpO1xcbiAxMjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEyNzpcXHRcXHRcXHRcXHR9XFxuIDEyODpcXHRcXHRcXHRcXHRzcV9oZWFkKys7XFxuIDEyOTpcXHRcXHRcXHRcXHRpKys7XFxuIDEzMDpcXHRcXHRcXHRcXHRzcWUxMjggPSB0cnVlO1xcbiAxMzE6XFx0XFx0XFx0fVxcbiAxMzI6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTV1OiBvcGNvZGU6JXMsIGZkOiVkLCBmbGFnczoleCwgb2ZmOiVsbHUsIFxcXCJcXG4gMTMzOlxcdFxcdFxcdFxcdCAgICAgIFxcXCJhZGRyOjB4JWxseCwgcndfZmxhZ3M6MHgleCwgYnVmX2luZGV4OiVkIFxcXCJcXG4gMTM0OlxcdFxcdFxcdFxcdCAgICAgIFxcXCJ1c2VyX2RhdGE6JWxsdVxcXCIsXFxuIDEzNTpcXHRcXHRcXHRcXHQgICBzcV9pZHgsIGlvX3VyaW5nX2dldF9vcGNvZGUob3Bjb2RlKSwgc3FlLVxcdTAwM2VmZCxcXG4gMTM2OlxcdFxcdFxcdFxcdCAgIHNxZS1cXHUwMDNlZmxhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNxZS1cXHUwMDNlb2ZmLFxcbiAxMzc6XFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3FlLVxcdTAwM2VhZGRyLCBzcWUtXFx1MDAzZXJ3X2ZsYWdzLFxcbiAxMzg6XFx0XFx0XFx0XFx0ICAgc3FlLVxcdTAwM2VidWZfaW5kZXgsIHNxZS1cXHUwMDNldXNlcl9kYXRhKTtcXG4gMTM5OlxcdFxcdFxcdGlmIChzcWUxMjgpIHtcXG4gMTQwOlxcdFxcdFxcdFxcdHU2NCAqc3FlYiA9ICh2b2lkICopIChzcWUgKyAxKTtcXG4gMTQxOlxcdFxcdFxcdFxcdGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpb191cmluZ19zcWUpIC8gc2l6ZW9mKHU2NCk7XFxuIDE0MjpcXHRcXHRcXHRcXHRpbnQgajtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHNpemU7IGorKykge1xcbiAxNDU6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLCBlJWQ6MHglbGx4XFxcIiwgaixcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpICpzcWViKTtcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdHNxZWIrKztcXG4gMTQ4OlxcdFxcdFxcdFxcdH1cXG4gMTQ5OlxcdFxcdFxcdH1cXG4gMTUwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE1MTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIkNRRXM6XFxcXHQldVxcXFxuXFxcIiwgY3FfdGFpbCAtIGNxX2hlYWQpO1xcbiAxNTQ6XFx0XFx0Y3FfZW50cmllcyA9IG1pbihjcV90YWlsIC0gY3FfaGVhZCwgY3R4LVxcdTAwM2VjcV9lbnRyaWVzKTtcXG4gMTU1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjcV9lbnRyaWVzOyBpKyspIHtcXG4gMTU2OlxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19jcWUgKmNxZTtcXG4gMTU3OlxcdFxcdFxcdGJvb2wgY3FlMzIgPSBmYWxzZTtcXG4gMTU4OlxcdFxcdFxcdGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0XFx0Y3FlID0gXFx1MDAyNnItXFx1MDAzZWNxZXNbKGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrKV07XFxuIDE2MTpcXHRcXHRcXHRpZiAoKGNxZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfQ1FFX0ZfMzIgfHwgY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9DUUUzMikgXFx1MDAyNlxcdTAwMjZcXG4gMTYyOlxcdFxcdFxcdCAgICAhaXNfbGFzdF9jcWFycmF5X3Nsb3QpXFxuIDE2MzpcXHRcXHRcXHRcXHRjcWUzMiA9IHRydWU7XFxuIDE2NDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNXU6IHVzZXJfZGF0YTolbGx1LCByZXM6JWQsIGZsYWdzOiV4XFxcIixcXG4gMTY1OlxcdFxcdFxcdFxcdCAgIGNxX2hlYWQgXFx1MDAyNiBjcV9tYXNrLCBjcWUtXFx1MDAzZXVzZXJfZGF0YSwgY3FlLVxcdTAwM2VyZXMsXFxuIDE2NjpcXHRcXHRcXHRcXHQgICBjcWUtXFx1MDAzZWZsYWdzKTtcXG4gMTY3OlxcdFxcdFxcdGlmIChjcWUzMilcXG4gMTY4OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiwgZXh0cmExOiVsbHUsIGV4dHJhMjolbGx1XFxcIixcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdGNxZS1cXHUwMDNlYmlnX2NxZVswXSwgY3FlLVxcdTAwM2ViaWdfY3FlWzFdKTtcXG4gMTcwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlxcXFxuXFxcIik7XFxuIDE3MTpcXHRcXHRcXHRjcV9oZWFkKys7XFxuIDE3MjpcXHRcXHRcXHRpZiAoY3FlMzIpIHtcXG4gMTczOlxcdFxcdFxcdFxcdGNxX2hlYWQrKztcXG4gMTc0OlxcdFxcdFxcdFxcdGkrKztcXG4gMTc1OlxcdFxcdFxcdH1cXG4gMTc2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9TUVBPTEwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTY6Mjc6NDMuMTEzODIxNDg0WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNDc5NTcwNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgaW9fdXJpbmcgcGF0Y2gsIGFuZCB0aGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGluIHRoZSBgX19pb191cmluZ19zaG93X2ZkaW5mb2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIHNjZW5hcmlvIGlzIHRoaXM6IHdoZW4gcHJpbnRpbmcgdGhlIENRRSAoQ29tcGxldGlvbiBRdWV1ZSBFbnRyeSkgaW5mb3JtYXRpb24sIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiB0cnlpbmcgdG8gYWNjZXNzIGBjcWUtXHUwMDNlYmlnX2NxZWAgd2hlbiBgY3FlYCBpcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSByaW5nIGJ1ZmZlciAoYHItXHUwMDNlY3Flc2ApLiBUaGlzIHdvdWxkIGJlIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGNvbmRpdGlvbjogYGNxX2hlYWQgXHUwMDI2IGNxX21hc2sgPT0gY3FfbWFza2AsIHdoaWNoIHNpZ25pZmllcyB0aGF0IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIENRRSBhcnJheS4gSWYsIHVuZGVyIHRoYXQgY29uZGl0aW9uLCBgY3FlMzJgIGlzIHRydWUsIHRoZW4gd2UgaGF2ZSBhbiBPT0IuXG5cblRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcywgYWRkaW5nIGEgYGJvb2wgaXNfbGFzdF9jcWFycmF5X3Nsb3QgPSAoY3FfaGVhZCA9PSBjcV9tYXNrKTtgIGNoZWNrLiBUaG91Z2ggdGhlIGJpdG1hc2tpbmcgb3BlcmF0aW9uIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaylgIGltcGxpZXMgdGhhdCB0aGUgYWN0dWFsIGltcGxlbWVudGVkIGNvbmRpdGlvbiBgKGNxX2hlYWQgPT0gY3FfbWFzaylgIGNhbiBiZSBidWdneSAoaXQgc2hvdWxkIGJlIGAoY3FfaGVhZCBcdTAwMjYgY3FfbWFzaykgPT0gY3FfbWFza2ApIGJ1dCBpbiB0aGlzIGFuYWx5c2lzLCB0aGF0IGlzIG5vdCBpbXBvcnRhbnQuXG5cbk5vdywgbXkgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB3aGljaCB3b3VsZCBuZWNlc3NpdGF0ZSBzZXR0aW5nIGBOZWVkc0tNU0FOPXRydWVgLiBMZXQncyBzdGVwIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLlxuXG5GaXJzdGx5LCBJIGNoZWNrZWQgaWYgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhlIGtleSB2YXJpYWJsZXMsIGBjcV9oZWFkYCwgYGNxX21hc2tgLCBhbmQgYGlzX2xhc3RfY3FhcnJheV9zbG90YCwgYXJlIGFsbCBpbml0aWFsaXplZC4gVGhlIGBjcWUzMmAgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuXG5cblNlY29uZGx5LCBJIGNvbnNpZGVyZWQgaWYgdGhlIHBhdGNoIGFsbG93cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBY3R1YWxseSwgdGhpcyBwYXRjaCAqKnByZXZlbnRzKiogcmVhZGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBieSBwcmV2ZW50aW5nIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbnRvIHdoYXRldmVyIGZvbGxvd3MgdGhlIHJpbmcgYXJyYXkuXG5cblRoaXJkbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNlcV9wcmludGZgIG91dHB1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHZhbHVlcyBlaXRoZXIgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgb3IgdXNlcnNwYWNlLlxuXG5GaW5hbGx5LCBkb2VzIHRoZSBwYXRjaCBjaGFuZ2UgdGhlIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4gSXQgb25seSBtb2RpZmllcyBgc2hvd19mZGluZm9gJ3MgZGlhZ25vc3RpYyBvdXRwdXQuIFRoZSBjb3JlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgc29tZXRoaW5nIEtBU0FOIGNhdGNoZXMuXG5cblRvIGJlIGV4dHJhIHN1cmUsIEkgbWV0aWN1bG91c2x5IHJlLWV2YWx1YXRlZCB0aGUgS01TQU4gY3JpdGVyaWE6XG5cbiogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLlxuKiAgIE5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG4qICAgTm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyBhbHRlcmF0aW9ucyBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaXNzdWUgdGhhdCBLQVNBTiBkZXRlY3RzLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYm91bmRhcnkgY2hlY2tzIGFuZCBhcnJheSBpbmRleGluZywgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLlxuXG4qKkNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBOb3cgSSdsbCBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjE3LCJPdXRwdXRUb2tlbnMiOjI2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNjoyODowNC41OTMzOTUxMzFaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKClgIGluIGBpb191cmluZy9mZGluZm8uY2AgdG8gcHJldmVudCB0cmVhdGluZyB0aGUgbGFzdCBzbG90IG9mIHRoZSBDUSByaW5nIGFycmF5IGFzIGEgMzItYnl0ZSBDUUUgKGBjcWUzMmApLiBXaXRob3V0IHByb3BlciBib3VuZGFyeSBoYW5kbGluZywgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNxZS1cXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXFx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXFx1MDAzZWNxZXNbXWAuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX2lvX3VyaW5nX3Nob3dfZmRpbmZvKClgIGluIGBpb191cmluZy9mZGluZm8uY2AgdG8gcHJldmVudCB0cmVhdGluZyB0aGUgbGFzdCBzbG90IG9mIHRoZSBDUSByaW5nIGFycmF5IGFzIGEgMzItYnl0ZSBDUUUgKGBjcWUzMmApLiBXaXRob3V0IHByb3BlciBib3VuZGFyeSBoYW5kbGluZywgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNxZS1cXHUwMDNlYmlnX2NxZVswXWAgYW5kIGBjcWUtXFx1MDAzZWJpZ19jcWVbMV1gIG9uIHRoZSBsYXN0IGVudHJ5IG9mIHRoZSByaW5nIGFycmF5IGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSBtZW1vcnkgcmVhZCBwYXN0IHRoZSBlbmQgb2YgYHItXFx1MDAzZWNxZXNbXWAuXFxuXFxuVGhpcyBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzcywgd2hpY2ggaXMgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgdW5kZXJseWluZyBDUSByaW5nIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiAoYF9fR0ZQX1pFUk9gIC8gYG1lbXNldGApLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChgaXNfbGFzdF9jcWFycmF5X3Nsb3RgLCBgY3FlMzJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgYXBwcm9wcmlhdGUgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowjmc4j[1] Phase: Succeeded StartedAt: 2026-09-11 16:28:12 +0000 UTC FinishedAt: 2026-09-11 16:28:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 16:28:12 +0000 UTC FinishedAt: 2026-09-11 16:28:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2] Phase: Succeeded StartedAt: 2026-09-11 16:28:12 +0000 UTC FinishedAt: 2026-09-11 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:28:12 +0000 UTC FinishedAt: 2026-09-11 17:49:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:28:12 +0000 UTC FinishedAt: 2026-09-11 16:28:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:28:12 +0000 UTC FinishedAt: 2026-09-11 16:28:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"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-workflowjmc4j/series-workflowjmc4j-convert-artifact-772803223/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:28:22 +0000 UTC FinishedAt: 2026-09-11 16:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:28:22 +0000 UTC FinishedAt: 2026-09-11 16:44:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*52b38cb3-8e16-44fb-918a-36457c31eb92,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-workflowjmc4j/series-workflowjmc4j-convert-artifact-772803223/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": "e529255b-6df3-4f02-bcbe-b28595a1fb16", "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-workflowjmc4j/series-workflowjmc4j-build-action-4131571693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:28:22 +0000 UTC FinishedAt: 2026-09-11 16:44:14 +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:*52b38cb3-8e16-44fb-918a-36457c31eb92,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-workflowjmc4j/series-workflowjmc4j-convert-artifact-772803223/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": "e529255b-6df3-4f02-bcbe-b28595a1fb16", "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-workflowjmc4j/series-workflowjmc4j-build-action-4131571693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:44:24 +0000 UTC FinishedAt: 2026-09-11 16:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:44:24 +0000 UTC FinishedAt: 2026-09-11 16:44:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:44:24 +0000 UTC FinishedAt: 2026-09-11 16:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:44:24 +0000 UTC FinishedAt: 2026-09-11 16:44:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-workflowjmc4j/series-workflowjmc4j-convert-artifact-894069446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:44:35 +0000 UTC FinishedAt: 2026-09-11 16:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:44:35 +0000 UTC FinishedAt: 2026-09-11 16:46:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e529255b-6df3-4f02-bcbe-b28595a1fb16,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-workflowjmc4j/series-workflowjmc4j-build-action-4131571693/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-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:46:51 +0000 UTC FinishedAt: 2026-09-11 16:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:46:51 +0000 UTC FinishedAt: 2026-09-11 16:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:46:51 +0000 UTC FinishedAt: 2026-09-11 17:06:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:46:51 +0000 UTC FinishedAt: 2026-09-11 17:06:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*52b38cb3-8e16-44fb-918a-36457c31eb92,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-workflowjmc4j/series-workflowjmc4j-convert-artifact-894069446/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": "dc5ac160-8519-4fc0-bfba-1db92f3658ca", "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-workflowjmc4j/series-workflowjmc4j-build-action-1756818954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 16:46:51 +0000 UTC FinishedAt: 2026-09-11 17:06:05 +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:*52b38cb3-8e16-44fb-918a-36457c31eb92,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-workflowjmc4j/series-workflowjmc4j-convert-artifact-894069446/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": "dc5ac160-8519-4fc0-bfba-1db92f3658ca", "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-workflowjmc4j/series-workflowjmc4j-build-action-1756818954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:06:15 +0000 UTC FinishedAt: 2026-09-11 17:06:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:06:15 +0000 UTC FinishedAt: 2026-09-11 17:06:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:06:15 +0000 UTC FinishedAt: 2026-09-11 17:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:06:15 +0000 UTC FinishedAt: 2026-09-11 17:08:02 +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:*dc5ac160-8519-4fc0-bfba-1db92f3658ca,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-workflowjmc4j/series-workflowjmc4j-build-action-1756818954/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-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:49:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"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:*e529255b-6df3-4f02-bcbe-b28595a1fb16,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dc5ac160-8519-4fc0-bfba-1db92f3658ca,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-workflowjmc4j/series-workflowjmc4j-build-action-4131571693/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-workflowjmc4j/series-workflowjmc4j-build-action-1756818954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:08:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"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-workflowjmc4j/series-workflowjmc4j-convert-artifact-1735709835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:12 +0000 UTC FinishedAt: 2026-09-11 17:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:22 +0000 UTC FinishedAt: 2026-09-11 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjmc4j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"50d05c7c76c96b90462f24debacca971d2e86713","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["__io_uring_show_fdinfo","io_uring_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","PROC_FS"],"series_id":"e3c7e9ee-4bf1-4bc7-b2b0-9692018b9864","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-11 17:08:22 +0000 UTC FinishedAt: 2026-09-11 17:49:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e529255b-6df3-4f02-bcbe-b28595a1fb16,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dc5ac160-8519-4fc0-bfba-1db92f3658ca,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-workflowjmc4j/series-workflowjmc4j-build-action-4131571693/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-workflowjmc4j/series-workflowjmc4j-build-action-1756818954/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-workflowjmc4j/series-workflowjmc4j-convert-artifact-1735709835/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,}