Name: series-workflow6fbtb Phase: Succeeded StartedAt: 2026-09-01 23:56:01 +0000 UTC FinishedAt: 2026-09-02 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[0] Phase: Succeeded StartedAt: 2026-09-01 23:56:01 +0000 UTC FinishedAt: 2026-09-02 00:21:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 23:56:01 +0000 UTC FinishedAt: 2026-09-02 00:21:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "d1beda88-3df4-4814-b1a6-c7099cc0f3de" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__list_lru_init", "list_lru_destroy", "memcg_reparent_list_lrus", "set_shrinker_bit", "list_lru_walk_node" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19saXN0X2xydV9pbml0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O3NldF9zaHJpbmtlcl9iaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfd2Fsa19ub2RlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXHUwMDNlaWRgLCBhc3NpZ25pbmcgLTEgb3RoZXJ3aXNlLiBcblxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVx1MDAzZWZsYWdzYCwgYHNocmlua2VyLVx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcblxuVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQsIG5vIG1lbW9yeSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIGFuZCBubyBhbHRlcmVkIGRhdGEgbGVuZ3RoIG9yIGJvdW5kcyBjaGVjayBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY29tbWl0IG1vZGlmaWVzIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSBscnUtXHUwMDNlc2hyaW5rZXJfaWQgaXMgbm90IGFzc2lnbmVkIGFuIHVuaW5pdGlhbGl6ZWQgSUQgb2YgMCB3aGVuIGEgc2hyaW5rZXIgZmFsbHMgYmFjayB0byBub24tbWVtY2ctYXdhcmUgbW9kZSAoc3VjaCBhcyB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWQpLiBUaGlzIHByZXZlbnRzIHVuaW50ZW5kZWQgc2hyaW5rZXIgYml0IHVwZGF0ZXMgaW4gc2V0X3Nocmlua2VyX2JpdCgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTI0YmRjNmRjMWIzYWI5YzI5ZjQyMjQ4NDE0MTFmZDlmYzdjYzg1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLjk2ZDAyZWEyMDZhODggMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jXG5AQCAtNjY2LDcgJiM0Mzs2NjYsMTIgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcbiBcdGludCBpO1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdGlmIChzaHJpbmtlcilcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcbiYjNDM7XHQgKiBjZ3JvdXAubWVtb3J5PW5va21lbSksIGl0cyBpZCB3YXMgbmV2ZXIgYXNzaWduZWQgYW5kIGhvbGRzIGFcbiYjNDM7XHQgKiBzdGFsZSAwLiBEb24mIzM5O3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19saXN0X2xydV9pbml0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O3NldF9zaHJpbmtlcl9iaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfd2Fsa19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVx1MDAzZXNocmlua2VyX2lkIGlzIG5vdCBhc3NpZ25lZCBhbiB1bmluaXRpYWxpemVkIElEIG9mIDAgd2hlbiBhIHNocmlua2VyIGZhbGxzIGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIG1vZGUgKHN1Y2ggYXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkKS4gVGhpcyBwcmV2ZW50cyB1bmludGVuZGVkIHNocmlua2VyIGJpdCB1cGRhdGVzIGluIHNldF9zaHJpbmtlcl9iaXQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyNGJkYzZkYzFiM2FiOWMyOWY0MjI0ODQxNDExZmQ5ZmM3Y2M4NWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDAwOjIwOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmMKaW5kZXggMzY2NjJkMDJmZjk2My4uOTZkMDJlYTIwNmE4OCAxMDA2NDQKLS0tIGEvbW0vbGlzdF9scnUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jCkBAIC02NjYsNyAmIzQzOzY2NiwxMiBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocgogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX01FTUNHCi0JaWYgKHNocmlua2VyKQomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgc2hyaW5rZXIgZmVsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSAoZS5nLiB3aXRoCiYjNDM7CSAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYQomIzQzOwkgKiBzdGFsZSAwLiBEb24mIzM5O3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2hyaW5rZXIgJmFtcDsmYW1wOyAoc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX01FTUNHX0FXQVJFKSkKIAkJbHJ1LSZndDtzaHJpbmtlcl9pZCA9IHNocmlua2VyLSZndDtpZDsKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBsaXN0X2xydS5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBtbS9saXN0X2xydS5jYC4gRmlyc3QsIEkgc2VlIGEgc3RyYWlnaHRmb3J3YXJkIGRpZmYuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGxpc3RfbHJ1YCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzaHJpbmtlcmAgYXNzaWdubWVudC4gVGhlIHByZXZpb3VzIGNvZGUgc2ltcGx5IGFzc2lnbmVkIGBzaHJpbmtlci0mZ3Q7aWRgIGlmIGBzaHJpbmtlcmAgd2FzIG5vdCBudWxsLiBOb3csIHdlIGhhdmUgYW4gYWRkZWQgY29uZGl0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYENPTkZJR19NRU1DR2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhlIGFkZGVkIGNvbW1lbnQgaXMgaGVscGZ1bCDigJMgaXQgaW5kaWNhdGVzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHNocmlua2VyIG1pZ2h0IGZhbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUsIHBvc3NpYmx5IGR1ZSB0byBzb21ldGhpbmcgbGlrZSBgY2dyb3VwLm1lbW9yeT1ub2ttZW1gLiBJbiBzdWNoIGEgY2FzZSwgdGhlIHNocmlua2VyIElEIHdhc24mIzM5O3QgcHJvcGVybHkgYXNzaWduZWQsIGxlYXZpbmcgYSBzdGFsZSB2YWx1ZS4KClRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgY2hlY2s6IGAoc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX01FTUNHX0FXQVJFKWAuIFRoaXMgc3VnZ2VzdHMgdGhlIGludGVudGlvbiBpcyB0byBvbmx5IGFzc2lnbiB0aGUgYGxydS0mZ3Q7c2hyaW5rZXJfaWRgIHdoZW4gdGhlIHNocmlua2VyIGlzIGFjdHVhbGx5IG1lbWNnLWF3YXJlLiBJZiB0aGUgc2hyaW5rZXIgaGFzIGZhbGxlbiBiYWNrIGFuZCB0aGlzIGZsYWcgaXMgKm5vdCogc2V0LCB0aGUgSUQgcmVtYWlucyBzZXQgdG8gLTEuIFRoaXMgaXMgYSBzb3VuZCBhcHByb2FjaCBhbmQgcHJldmVudHMgcG90ZW50aWFsbHkgaW5jb3JyZWN0IHVzYWdlIG9mIGEgc3RhbGUgb3IgdW5kZWZpbmVkIHNocmlua2VyIElELgoKTm93LCBsZXQgbWUgcnVuIHRoaXMgcGF0Y2ggdGhyb3VnaCBvdXIgc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgaWYgYW55dGhpbmcgZmxhZ3MuIEkgYWxzbyB3YW50IHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBzaW1pbGFyIHBhdHRlcm5zIGFuZCBwb3NzaWJsZSByZWdyZXNzaW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBhIHNpbWlsYXIgY29uZGl0aW9uIG1pZ2h0IGFwcGx5IG9yIGFueSBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4gNjU1Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG4gNjU2Olx0e1xuIDY1NzpcdH1cbiA2NTg6XHRcbiA2NTk6XHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY2MDpcdHtcbiA2NjE6XHR9XG4gNjYyOlx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIDY2MzpcdFxuIDY2NDpcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4gNjY1Olx0e1xuIDY2NjpcdFx0aW50IGk7XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY2OTpcdFx0LypcbiA2NzA6XHRcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcbiA2NzE6XHRcdCAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYVxuIDY3MjpcdFx0ICogc3RhbGUgMC4gRG9uJiMzOTt0IGxldCBzZXRfc2hyaW5rZXJfYml0KCkgYWN0IG9uIGl0LlxuIDY3MzpcdFx0ICovXG4gNjc0Olx0XHRpZiAoc2hyaW5rZXIgXHUwMDI2XHUwMDI2IChzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxuIDY3NTpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbiA2NzY6XHRcdGVsc2VcbiA2Nzc6XHRcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gNjc4Olx0XG4gNjc5Olx0XHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4gNjgwOlx0XHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gNjgxOlx0I2VuZGlmXG4gNjgyOlx0XG4gNjgzOlx0XHRscnUtXHUwMDNlbm9kZSA9IGt6YWxsb2Nfb2JqcygqbHJ1LVx1MDAzZW5vZGUsIG5yX25vZGVfaWRzKTtcbiA2ODQ6XHRcdGlmICghbHJ1LVx1MDAzZW5vZGUpXG4gNjg1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDY4NjpcdFxuIDY4NzpcdFx0Zm9yX2VhY2hfbm9kZShpKVxuIDY4ODpcdFx0XHRpbml0X29uZV9scnUobHJ1LCBcdTAwMjZscnUtXHUwMDNlbm9kZVtpXS5scnUpO1xuIDY4OTpcdFxuIDY5MDpcdFx0bWVtY2dfaW5pdF9saXN0X2xydShscnUsIG1lbWNnX2F3YXJlKTtcbiA2OTE6XHRcdGxpc3RfbHJ1X3JlZ2lzdGVyKGxydSk7XG4gNjkyOlx0XG4gNjkzOlx0XHRyZXR1cm4gMDtcbiA2OTQ6XHR9XG4gNjk1Olx0RVhQT1JUX1NZTUJPTF9HUEwoX19saXN0X2xydV9pbml0KTtcbiA2OTY6XHRcbiA2OTc6XHR2b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gNjk4Olx0e1xuIDY5OTpcdFx0LyogQWxyZWFkeSBkZXN0cm95ZWQgb3Igbm90IHlldCBpbml0aWFsaXplZD8gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjIzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIGBzaHJpbmtlcmAgYW5kIGBsaXN0X2xydWAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBzaHJpbmtlcmAgbWVjaGFuaXNtIGFuZCB0aGUgYGxpc3RfbHJ1YCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgY3VyaW91cyBhYm91dCBob3cgdGhlIGBzaHJpbmtlcl9pZGAgdmFyaWFibGUgZmFjdG9ycyBpbnRvIHRoZWlyIGludGVycGxheS4gR2l2ZW4gdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBzaHJpbmtzIGNhY2hlIG9iamVjdHMgaW4gbGlzdCBMUlVzIGlzIHByZXR0eSBjcml0aWNhbC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSYjMzk7bGwgaGVhZCBzdHJhaWdodCBmb3IgYG1tL2xpc3RfbHJ1LmNgIGFuZCB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gc2VlIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBzaHJpbmtlcl9pZGAgYW5kIGBsaXN0X2xydWAgYXJlIHVzZWQgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QsIGZvY3VzZWQgdmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZXhwb3NlIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlIElEIGlzIHVzZWQgdG8gbWFuYWdlIGFuZCBpZGVudGlmeSBMUlUgZW50cmllcyBvciBzaHJpbmtlciBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgTFJVIGxpc3RzLiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IGhvdyBhIHNocmlua2VyIGlzIHJlZ2lzdGVyZWQgYW5kIGhvdyBlbnRyaWVzIGFyZSByZW1vdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rZXJfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYz01OT1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjgtXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy03MC17XG5tbS9saXN0X2xydS5jOjcxOlx0cmV0dXJuIGxydS1cdTAwM2VzaHJpbmtlcl9pZDtcbm1tL2xpc3RfbHJ1LmMtNzItfVxuLS1cbm1tL2xpc3RfbHJ1LmM9MTIwPXN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy0xMjMtXG5tbS9saXN0X2xydS5jOjEyNDpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcbi0tXG5tbS9saXN0X2xydS5jPTE5MD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMjAxLVx0XHRpZiAoIWwtXHUwMDNlbnJfaXRlbXMmIzQzOyYjNDM7KVxubW0vbGlzdF9scnUuYzoyMDI6XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XG5tbS9saXN0X2xydS5jLTIwMy1cdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubnJfaXRlbXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NTAxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTUxNS1cdFx0ZHN0LVx1MDAzZW5yX2l0ZW1zICYjNDM7PSBzcmMtXHUwMDNlbnJfaXRlbXM7XG5tbS9saXN0X2xydS5jOjUxNjpcdFx0c2V0X3Nocmlua2VyX2JpdChkc3RfbWVtY2csIG5pZCwgbHJ1X3Nocmlua2VyX2lkKGxydSkpO1xubW0vbGlzdF9scnUuYy01MTctXHR9XG4tLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY3NC1cdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG5tbS9saXN0X2xydS5jOjY3NTpcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG5tbS9saXN0X2xydS5jLTY3Ni1cdGVsc2Vcbm1tL2xpc3RfbHJ1LmM6Njc3Olx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbm1tL2xpc3RfbHJ1LmMtNjc4LVxuLS1cbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTcwOS0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jOjcxMDpcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xubW0vbGlzdF9scnUuYy03MTEtI2VuZGlmXG4tLVxubW0vc2hyaW5rZXIuYz0xNTk9c3RhdGljIGludCBleHBhbmRfc2hyaW5rZXJfaW5mbyhpbnQgbmV3X2lkKVxuLS1cbm1tL3Nocmlua2VyLmMtMTg5LVxubW0vc2hyaW5rZXIuYzoxOTA6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW50IHNocmlua2VyX2lkKVxubW0vc2hyaW5rZXIuYy0xOTEte1xubW0vc2hyaW5rZXIuYzoxOTI6XHRyZXR1cm4gc2hyaW5rZXJfaWQgLyBTSFJJTktFUl9VTklUX0JJVFM7XG5tbS9zaHJpbmtlci5jLTE5My19XG5tbS9zaHJpbmtlci5jLTE5NC1cbm1tL3Nocmlua2VyLmM6MTk1OnN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkX3RvX29mZnNldChpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTE5Ni17XG5tbS9zaHJpbmtlci5jOjE5NzpcdHJldHVybiBzaHJpbmtlcl9pZCAlIFNIUklOS0VSX1VOSVRfQklUUztcbm1tL3Nocmlua2VyLmMtMTk4LX1cbm1tL3Nocmlua2VyLmMtMTk5LVxubW0vc2hyaW5rZXIuYzoyMDA6c3RhdGljIGlubGluZSBpbnQgY2FsY19zaHJpbmtlcl9pZChpbnQgaW5kZXgsIGludCBvZmZzZXQpXG5tbS9zaHJpbmtlci5jLTIwMS17XG4tLVxubW0vc2hyaW5rZXIuYy0yMDQtXG5tbS9zaHJpbmtlci5jOjIwNTp2b2lkIHNldF9zaHJpbmtlcl9iaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkLCBpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTIwNi17XG5tbS9zaHJpbmtlci5jOjIwNzpcdGlmIChzaHJpbmtlcl9pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xubW0vc2hyaW5rZXIuYy0yMDgtXHRcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xuLS1cbm1tL3Nocmlua2VyLmMtMjExLVx0XHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjIxMjpcdFx0aWYgKCFXQVJOX09OX09OQ0Uoc2hyaW5rZXJfaWQgXHUwMDNlPSBpbmZvLVx1MDAzZW1hcF9ucl9tYXgpKSB7XG5tbS9zaHJpbmtlci5jLTIxMy1cdFx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xubW0vc2hyaW5rZXIuYy0yMTQtXG5tbS9zaHJpbmtlci5jOjIxNTpcdFx0XHR1bml0ID0gaW5mby1cdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyX2lkKV07XG5tbS9zaHJpbmtlci5jLTIxNi1cdFx0XHQvKiBQYWlycyB3aXRoIHNtcCBtYiBpbiBzaHJpbmtfc2xhYigpICovXG5tbS9zaHJpbmtlci5jLTIxNy1cdFx0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbm1tL3Nocmlua2VyLmM6MjE4Olx0XHRcdHNldF9iaXQoc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyX2lkKSwgdW5pdC1cdTAwM2VtYXApO1xubW0vc2hyaW5rZXIuYy0yMTktXHRcdH1cbi0tXG5tbS9zaHJpbmtlci5jLTIyMy1cbm1tL3Nocmlua2VyLmM6MjI0OnN0YXRpYyBERUZJTkVfSURSKHNocmlua2VyX2lkcik7XG5tbS9zaHJpbmtlci5jLTIyNS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIzNS1cdGd1YXJkKG11dGV4KShcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG5tbS9zaHJpbmtlci5jOjIzNjpcdGlkID0gaWRyX2FsbG9jKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXIsIDAsIDAsIEdGUF9LRVJORUwpO1xubW0vc2hyaW5rZXIuYy0yMzctXHRpZiAoaWQgXHUwMDNjIDApXG4tLVxubW0vc2hyaW5rZXIuYy0yNDEtXHRcdGlmIChleHBhbmRfc2hyaW5rZXJfaW5mbyhpZCkpIHtcbm1tL3Nocmlua2VyLmM6MjQyOlx0XHRcdGlkcl9yZW1vdmUoXHUwMDI2c2hyaW5rZXJfaWRyLCBpZCk7XG5tbS9zaHJpbmtlci5jLTI0My1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9zaHJpbmtlci5jPTI1MD1zdGF0aWMgdm9pZCBzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTI1Ny1cbm1tL3Nocmlua2VyLmM6MjU4Olx0aWRyX3JlbW92ZShcdTAwMjZzaHJpbmtlcl9pZHIsIGlkKTtcbm1tL3Nocmlua2VyLmMtMjU5LX1cbi0tXG5tbS9zaHJpbmtlci5jPTI2MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkX21lbWNnKGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0vc2hyaW5rZXIuYy0yNjktXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjI3MDpcdHVuaXQgPSBpbmZvLVx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXItXHUwMDNlaWQpXTtcbm1tL3Nocmlua2VyLmM6MjcxOlx0bnJfZGVmZXJyZWQgPSBhdG9taWNfbG9uZ194Y2hnKFx1MDAyNnVuaXQtXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVx1MDAzZWlkKV0sIDApO1xubW0vc2hyaW5rZXIuYy0yNzItXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9zaHJpbmtlci5jPTI3Nz1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTI4NS1cdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VzaHJpbmtlcl9pbmZvKTtcbm1tL3Nocmlua2VyLmM6Mjg2Olx0dW5pdCA9IGluZm8tXHUwMDNldW5pdFtzaHJpbmtlcl9pZF90b19pbmRleChzaHJpbmtlci1cdTAwM2VpZCldO1xubW0vc2hyaW5rZXIuYy0yODctXHRucl9kZWZlcnJlZCA9XG5tbS9zaHJpbmtlci5jOjI4ODpcdFx0YXRvbWljX2xvbmdfYWRkX3JldHVybihuciwgXHUwMDI2dW5pdC1cdTAwM2Vucl9kZWZlcnJlZFtzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXItXHUwMDNlaWQpXSk7XG5tbS9zaHJpbmtlci5jLTI4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3Nocmlua2VyLmM9Mjk0PXZvaWQgcmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Nocmlua2VyLmMtMzA2LVx0XHRwYXJlbnRfaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKHBhcmVudCwgbmlkKTtcbm1tL3Nocmlua2VyLmM6MzA3Olx0XHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGNoaWxkX2luZm8tXHUwMDNlbWFwX25yX21heCk7IGluZGV4JiM0MzsmIzQzOykge1xubW0vc2hyaW5rZXIuYy0zMDgtXHRcdFx0Y2hpbGRfdW5pdCA9IGNoaWxkX2luZm8tXHUwMDNldW5pdFtpbmRleF07XG4tLVxubW0vc2hyaW5rZXIuYz00NzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4tLVxubW0vc2hyaW5rZXIuYy01MDItXHQgKiAgICAgICAgICBSQ1UgbG9jay5cbm1tL3Nocmlua2VyLmM6NTAzOlx0ICogIHN0ZXAgMzogdHJhdmVyc2UgdGhlIGJpdG1hcCBhbmQgY2FsY3VsYXRlIHNocmlua2VyX2lkXG5tbS9zaHJpbmtlci5jLTUwNC1cdCAqICBzdGVwIDQ6IHVzZSByY3VfcmVhZF9sb2NrKCkgdG8gZ3VhcmFudGVlIGV4aXN0ZW5jZSBvZiB0aGUgc2hyaW5rZXIuXG5tbS9zaHJpbmtlci5jOjUwNTpcdCAqICBzdGVwIDU6IHVzZSBzaHJpbmtlcl9pZCB0byBmaW5kIHRoZSBzaHJpbmtlciwgdGhlbiB1c2Vcbm1tL3Nocmlua2VyLmMtNTA2LVx0ICogICAgICAgICAgc2hyaW5rZXJfdHJ5X2dldCgpIHRvIGd1YXJhbnRlZSBleGlzdGVuY2Ugb2YgdGhlIHNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmMtNTI2LVxubW0vc2hyaW5rZXIuYzo1Mjc6XHRpZiAoaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGluZm8tXHUwMDNlbWFwX25yX21heCkpIHtcbm1tL3Nocmlua2VyLmMtNTI4LVx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xuLS1cbm1tL3Nocmlua2VyLmMtNTQwLVx0XHRcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG5tbS9zaHJpbmtlci5jOjU0MTpcdFx0XHRpbnQgc2hyaW5rZXJfaWQgPSBjYWxjX3Nocmlua2VyX2lkKGluZGV4LCBvZmZzZXQpO1xubW0vc2hyaW5rZXIuYy01NDItXG5tbS9zaHJpbmtlci5jLTU0My1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9zaHJpbmtlci5jOjU0NDpcdFx0XHRzaHJpbmtlciA9IGlkcl9maW5kKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXJfaWQpO1xubW0vc2hyaW5rZXIuYy01NDUtXHRcdFx0aWYgKHVubGlrZWx5KCFzaHJpbmtlciB8fCAhc2hyaW5rZXJfdHJ5X2dldChzaHJpbmtlcikpKSB7XG4tLVxubW0vc2hyaW5rZXIuYy01ODItXHRcdFx0XHRlbHNlXG5tbS9zaHJpbmtlci5jOjU4MzpcdFx0XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBzaHJpbmtlcl9pZCk7XG5tbS9zaHJpbmtlci5jLTU4NC1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExSVSBJbml0aWFsaXphdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgX19saXN0X2xydV9pbml0YC4gUHJldmlvdXNseSwgd2hlbiBpbml0aWFsaXppbmcgdGhlIExSVSwgaXQgd291bGQgYXNzaWduIHRoZSBgc2hyaW5rZXJfaWRgIGJhc2VkIG9uIHdoZXRoZXIgYSBzaHJpbmtlciB3YXMgcHJlc2VudCwgYW5kIHVuZGVyIGBDT05GSUdfTUVNQ0dgLCB0aGlzIHdhcyBzdHJhaWdodGZvcndhcmQuIElmIGEgYHNocmlua2VyYCBleGlzdGVkLCBpdCBnb3QgdGhlIElELiBOb3csIGhvd2V2ZXIsIHRoZXJlJiMzOTtzIGFuIGFkZGVkIGNoZWNrOgoKYGBgYwoJaWYgKHNocmlua2VyICZhbXA7JmFtcDsgKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9NRU1DR19BV0FSRSkpCgkJbHJ1LSZndDtzaHJpbmtlcl9pZCA9IHNocmlua2VyLSZndDtpZDsKCWVsc2UKCQlscnUtJmd0O3Nocmlua2VyX2lkID0gLTE7CmBgYAoKSW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIG5vdyAqYWxzbyogY2hlY2tpbmcgdGhlIGBTSFJJTktFUl9NRU1DR19BV0FSRWAgZmxhZyBvbiB0aGUgYHNocmlua2VyYCBzdHJ1Y3QuIFRoZSBjb21tZW50IGlzIGNydWNpYWw7IGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBzY2VuYXJpbyB3aGVyZSBhIHNocmlua2VyIG1pZ2h0IGZhbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUsIHBlcmhhcHMgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBsaWtlIGBjZ3JvdXAubWVtb3J5PW5va21lbWAuIEluIHN1Y2ggYSBjYXNlLCB0aGUgYHNocmlua2VyLSZndDtpZGAgbWlnaHQgYmUgc3RhbGUgKDApLiBUaGlzIHByZXZlbnRzIGBzZXRfc2hyaW5rZXJfYml0KClgIGZyb20gYWN0aW5nIG9uIGFuIGludmFsaWQgYHNocmlua2VyX2lkYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgaXMgc2V0IGFuZCBob3cgYHNocmlua2VyLSZndDtpZGAgaXMgYXNzaWduZWQgYW5kIG1hbmFnZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBlc3BlY2lhbGx5IGlmIHRoZSBzaHJpbmtlciBpc24mIzM5O3QgbWVtY2ctYXdhcmUuIFRpbWUgdG8gZGlnIGludG8gYHNocmlua2VyX2FsbG9jYCBhbmQgYHNocmlua2VyX3JlZ2lzdGVyYCBpbiBgbW0vc2hyaW5rZXIuY2AuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhvc2UgdmFyaWFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NIUklOS0VSX01FTUNHX0FXQVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ni1cdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8XG5tbS9odWdlX21lbW9yeS5jOjEwNjc6XHRcdFx0XHRcdFx0IFNIUklOS0VSX01FTUNHX0FXQVJFLFxubW0vaHVnZV9tZW1vcnkuYy0xMDY4LVx0XHRcdFx0XHRcdCBcJiMzNDt0aHAtZGVmZXJyZWRfc3BsaXRcJiMzNDspO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NzMtXHQgKi9cbm1tL2xpc3RfbHJ1LmM6Njc0Olx0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbm1tL2xpc3RfbHJ1LmMtNjc1LVx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbi0tXG5tbS9zaHJpbmtlci5jPTM0MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0vc2hyaW5rZXIuYy0zNDktXHRpZiAoc2MtXHUwMDNlbWVtY2cgXHUwMDI2XHUwMDI2XG5tbS9zaHJpbmtlci5jOjM1MDpcdCAgICAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbm1tL3Nocmlua2VyLmMtMzUxLVx0XHRyZXR1cm4geGNoZ19ucl9kZWZlcnJlZF9tZW1jZyhuaWQsIHNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmM9MzU4PXN0YXRpYyBsb25nIGFkZF9ucl9kZWZlcnJlZChsb25nIG5yLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmMtMzY2LVx0aWYgKHNjLVx1MDAzZW1lbWNnIFx1MDAyNlx1MDAyNlxubW0vc2hyaW5rZXIuYzozNjc6XHQgICAgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG5tbS9zaHJpbmtlci5jLTM2OC1cdFx0cmV0dXJuIGFkZF9ucl9kZWZlcnJlZF9tZW1jZyhuciwgbmlkLCBzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jPTY4OD1zdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyX2FsbG9jKHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxubW0vc2hyaW5rZXIuYy03MDctXG5tbS9zaHJpbmtlci5jOjcwODpcdGlmIChmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpIHtcbm1tL3Nocmlua2VyLmMtNzA5LVx0XHRlcnIgPSBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzaHJpbmtlcik7XG4tLVxubW0vc2hyaW5rZXIuYy03MTEtXHRcdFx0LyogTWVtY2cgaXMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIHNocmlua2VyLiAqL1xubW0vc2hyaW5rZXIuYzo3MTI6XHRcdFx0c2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2PSB+U0hSSU5LRVJfTUVNQ0dfQVdBUkU7XG5tbS9zaHJpbmtlci5jLTcxMy1cdFx0XHRnb3RvIG5vbl9tZW1jZztcbi0tXG5tbS9zaHJpbmtlci5jPTc4MD12b2lkIHNocmlua2VyX2ZyZWUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTgxMi1cbm1tL3Nocmlua2VyLmM6ODEzOlx0aWYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSlcbm1tL3Nocmlua2VyLmMtODE0LVx0XHRzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc2hyaW5rZXIpO1xuLS1cbm1tL3Nocmlua2VyX2RlYnVnLmM9NDc9c3RhdGljIGludCBzaHJpbmtlcl9kZWJ1Z2ZzX2NvdW50X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Nocmlua2VyX2RlYnVnLmMtNTktXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjYwOlx0bWVtY2dfYXdhcmUgPSBzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkU7XG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTYxLVxuLS1cbm1tL3Nocmlua2VyX2RlYnVnLmM9MTAwPXN0YXRpYyBzc2l6ZV90IHNocmlua2VyX2RlYnVnZnNfc2Nhbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTEyNy1cbm1tL3Nocmlua2VyX2RlYnVnLmM6MTI4Olx0aWYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkge1xubW0vc2hyaW5rZXJfZGVidWcuYy0xMjktXHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChpZCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTc5Mz1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcbi0tXG5tbS93b3JraW5nc2V0LmMtODE5LVx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbm1tL3dvcmtpbmdzZXQuYzo4MjA6XHRcdFx0XHRcdFx0ICAgIFNIUklOS0VSX01FTUNHX0FXQVJFLFxubW0vd29ya2luZ3NldC5jLTgyMS1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7bW0tc2hhZG93XCYjMzQ7KTtcbi0tXG5tbS96c3dhcC5jPTEyNTE9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyNTUtXHRzaHJpbmtlciA9XG5tbS96c3dhcC5jOjEyNTY6XHRcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXCYjMzQ7bW0tenN3YXBcJiMzNDspO1xubW0venN3YXAuYy0xMjU3LVx0aWYgKCFzaHJpbmtlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExpc3QgTFJVIGFuZCBNZW1jZyBTaHJpbmtlciBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgc2hyaW5rZXJfYWxsb2NgLCBpZiB3ZSBlbmNvdW50ZXIgYC1FTk9TWVNgIGZyb20gYHNocmlua2VyX21lbWNnX2FsbG9jYCwgd2hpY2ggc2lnbmFscyB0aGF0IG1lbWNnIGlzbiYjMzk7dCBzdXBwb3J0ZWQgKG9yIGF0IGxlYXN0LCBrbWVtIGlzIGRpc2FibGVkKSwgdGhlIGNvZGUgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYSBub24tbWVtY2ctYXdhcmUgc2hyaW5rZXIuIFRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgaXMgY2xlYXJlZCwgd2hpY2ggaXMgZ29vZC4gSG93ZXZlciwgdGhlIGBzaHJpbmtlci0mZ3Q7aWRgIGZpZWxkIHJlbWFpbnMgdW5pbml0aWFsaXplZCDigJMgaXQmIzM5O3Mgc3R1Y2sgYXQgMCAodGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgYGt6YWxsb2NgKS4KClRoZSBwcm9ibGVtIHN1cmZhY2VzIGxhdGVyLCB3aGVuIGNvZGUgbGlrZSB0aGF0IGluIHN1cGVyYmxvY2tzIGluaXRpYWxpemVzIGEgYGxpc3RfbHJ1YCAoZm9yIGV4YW1wbGUgYHMtJmd0O3NfZGVudHJ5X2xydWApIGFuZCBwYXNzZXMgdGhlIHNocmlua2VyIHRvIGBfX2xpc3RfbHJ1X2luaXRgLiBCZWZvcmUgdGhpcyBwYXRjaCwgYF9fbGlzdF9scnVfaW5pdGAgd291bGQgc2ltcGx5IGNoZWNrIGZvciBhIG5vbi1OVUxMIHNocmlua2VyIGFuZCB0aGVuIGJsaW5kbHkgYXNzaWduIGBzaHJpbmtlci0mZ3Q7aWRgIHRvIGBscnUtJmd0O3Nocmlua2VyX2lkYC4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgdGhlIHNocmlua2VyIGlzbiYjMzk7dCBtZW1jZy1hd2FyZSwgYGxydS0mZ3Q7c2hyaW5rZXJfaWRgIGdldHMgc2V0IHRvIDAuCgpMYXRlciwgdGhlIGNvZGUgY2FsbHMgYHNldF9zaHJpbmtlcl9iaXRgIHdpdGggdGhpcyBwb3RlbnRpYWxseSBpbnZhbGlkIGBzaHJpbmtlcl9pZGAuIFRoZSBiaXRtYXNrIGZvciBtZW1jZyBzaHJpbmtlcnMgd291bGQgYmUgbW9kaWZpZWQgdXNpbmcgdGhpcyB2YWx1ZSBvZiAwLCBldmVuIHRob3VnaCB0aGUgc2hyaW5rZXIgaXNuJiMzOTt0IG1lbWNnLWF3YXJlIG9yIHZhbGlkICh3aGljaCBpcyBpbmNvcnJlY3QgYW5kIGlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMpLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZml4OiBpdCBhZGRzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGA6IGBpZiAoc2hyaW5rZXIgJmFtcDsmYW1wOyAoc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX01FTUNHX0FXQVJFKSlgLiBJZiB0aGUgc2hyaW5rZXIgaXNuJiMzOTt0IG1lbWNnLWF3YXJlLCBgbHJ1LSZndDtzaHJpbmtlcl9pZGAgZ2V0cyBzZXQgdG8gLTEuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljPyBBYnNvbHV0ZWx5LiBUaGUgYGxpc3RfbHJ1YCBhbmQgc2hyaW5rZXIgbG9naWMgYXJlIGZ1bmRhbWVudGFsIE1NIGNvbXBvbmVudHMuIFRoZSBwYXRjaCBlZmZlY3RpdmVseSBwcmV2ZW50cyBpbmNvcnJlY3Qgc2hyaW5rZXIgYml0IHVwZGF0ZXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkIChvciBpZiB3ZSBoYWQgYSBmYWxsYmFjayBzY2VuYXJpbykuIFRoZXJlZm9yZSwgdGhpcyBkZXNlcnZlcyBmdXJ0aGVyIHNjcnV0aW55LgoKR2l2ZW4gdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgaXMgd29ydGggZnV6emluZywgdGhpcyBwYXRjaCBjbGVhcmx5IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPXRydWVgLgoKRm9yIGZ1enppbmcsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgdGhlIHN1cnJvdW5kaW5nIGNhbGxzIGluIGBtbS9saXN0X2xydS5jYC4gVGhlc2UgYXJlIHRoZSBlbnRyeXBvaW50cyB0byBiZSBtb25pdG9yZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmM9MTkwPWJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0vbGlzdF9scnUuYy0yMDctfVxubW0vbGlzdF9scnUuYzoyMDg6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkKTtcbm1tL2xpc3RfbHJ1LmMtMjA5LVxuLS1cbm1tL2xpc3RfbHJ1LmM9MjQ3PWJvb2wgbGlzdF9scnVfYWRkX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcbi0tXG5tbS9saXN0X2xydS5jLTI2MS19XG5tbS9saXN0X2xydS5jOjI2MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGRfb2JqKTtcbm1tL2xpc3RfbHJ1LmMtMjYzLVxuLS1cbm1tL2xpc3RfbHJ1LmM9Mjc3PWJvb2wgbGlzdF9scnVfZGVsX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcbi0tXG5tbS9saXN0X2xydS5jLTI5MS19XG5tbS9saXN0X2xydS5jOjI5MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcbm1tL2xpc3RfbHJ1LmMtMjkzLVxubW0vbGlzdF9scnUuYz0yOTQ9dm9pZCBsaXN0X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXG4tLVxubW0vbGlzdF9scnUuYy0yOTgtfVxubW0vbGlzdF9scnUuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XG5tbS9saXN0X2xydS5jLTMwMC1cbm1tL2xpc3RfbHJ1LmM9MzAxPXZvaWQgbGlzdF9scnVfaXNvbGF0ZV9tb3ZlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxubW0vbGlzdF9scnUuYy0zMDYtfVxubW0vbGlzdF9scnUuYzozMDc6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZV9tb3ZlKTtcbm1tL2xpc3RfbHJ1LmMtMzA4LVxubW0vbGlzdF9scnUuYz0zMDk9dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbGlzdF9scnUuYy0zMjQtfVxubW0vbGlzdF9scnUuYzozMjU6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfY291bnRfb25lKTtcbm1tL2xpc3RfbHJ1LmMtMzI2LVxubW0vbGlzdF9scnUuYz0zMjc9dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMzMzLX1cbm1tL2xpc3RfbHJ1LmM6MzM0OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X25vZGUpO1xubW0vbGlzdF9scnUuYy0zMzUtXG4tLVxubW0vbGlzdF9scnUuYz0zOTU9bGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9saXN0X2xydS5jLTQwMS19XG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XG5tbS9saXN0X2xydS5jLTQwMy1cbi0tXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTQ0OC19XG5tbS9saXN0X2xydS5jOjQ0OTpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX25vZGUpO1xubW0vbGlzdF9scnUuYy00NTAtXG4tLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY5NC19XG5tbS9saXN0X2xydS5jOjY5NTpFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xubW0vbGlzdF9scnUuYy02OTYtXG5tbS9saXN0X2xydS5jPTY5Nz12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MTItfVxubW0vbGlzdF9scnUuYzo3MTM6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfZGVzdHJveSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDIyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19NRU1DR2AgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBtbS9saXN0X2xydS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgYGxpc3RfbHJ1LmNgIGlzIGNvbXBpbGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGdhdGluZyBpdHMgaW5jbHVzaW9uIG9yIHBvdGVudGlhbGx5IGd1YXJkaW5nIGFzcGVjdHMgb2YgYENPTkZJR19NRU1DR2AgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gY2VydGFpbiBLY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X2xydSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODIyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01Ni1cdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGU6NTc6XHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG5tbS9NYWtlZmlsZS01OC1cdFx0XHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxubW0vaHVnZV9tZW1vcnkuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcdTAwM2Vcbi0tXG5tbS9odWdlX21lbW9yeS5jPTcyPXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVmZXJyZWRfc3BsaXRfa2V5O1xubW0vaHVnZV9tZW1vcnkuYzo3MzpzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IGRlZmVycmVkX3NwbGl0X2xydTtcbm1tL2h1Z2VfbWVtb3J5LmMtNzQtc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXI7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zODI9c3RhdGljIGludCBfX2luaXQgaHVnZV96ZXJvX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4Ni1cdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG5tbS9odWdlX21lbW9yeS5jOjM4NzpcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xubW0vaHVnZV9tZW1vcnkuYy0zODgtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA1Nz1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNjAtXHRcdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYzoxMDYxOlx0cmV0dXJuIGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKGZvbGlvLCBcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDYyLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNzEtXG5tbS9odWdlX21lbW9yeS5jOjEwNzI6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy0xMDczLVx0XHRcdFx0ICAgIGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA4Nj1zdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwODgtXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA4OTpcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5MC1cdGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDgzPWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDk0LSAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xubW0vaHVnZV9tZW1vcnkuYzo0NDk1OiAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG5tbS9odWdlX21lbW9yeS5jLTQ0OTYtICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSYjMzk7cyB1bmxvY2tlZFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5OC0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDk5OiAqIFRoZSBsaXN0X2xydSBzdWJsaXN0IGlzIGRldGVybWluZWQgYnkgZm9saW8mIzM5O3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxubW0vaHVnZV9tZW1vcnkuYy00NTAwLSAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MDI9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDQtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5tbS9odWdlX21lbW9yeS5jOjQ1MDU6XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG5tbS9odWdlX21lbW9yeS5jLTQ1MDYtXHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTQtXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNTpcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNjpcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNy1cdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MjMtXHR9XG5tbS9odWdlX21lbW9yeS5jOjQ1MjQ6XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUyNS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUzMT12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMi17XG5tbS9odWdlX21lbW9yeS5jOjQ1MzM6XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG5tbS9odWdlX21lbW9yeS5jLTQ1MzQtXHRpbnQgbmlkO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2MS1cdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzo0NTYyOlx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy00NTYzLVx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1NzQtXHR9XG5tbS9odWdlX21lbW9yeS5jOjQ1NzU6XHRfX2xpc3RfbHJ1X2FkZChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCwgbWVtY2cpO1xubW0vaHVnZV9tZW1vcnkuYzo0NTc2Olx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcdTAwMjZmbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTQ1NzctXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTg0LVxubW0vaHVnZV9tZW1vcnkuYzo0NTg1Olx0Y291bnQgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBzYyk7XG5tbS9odWdlX21lbW9yeS5jLTQ1ODYtXHRyZXR1cm4gY291bnQgPzogU0hSSU5LX0VNUFRZO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYxNj1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2h1Z2VfbWVtb3J5LmM6NDYxNzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy00NjE4LVx0XHRcdFx0XHQgICAgICB2b2lkICpjYl9hcmcpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjI2LVxubW0vaHVnZV9tZW1vcnkuYzo0NjI3Olx0bGlzdF9scnVfaXNvbGF0ZV9tb3ZlKGxydSwgaXRlbSwgZnJlZWFibGUpO1xubW0vaHVnZV9tZW1vcnkuYy00NjI4LVx0cmV0dXJuIExSVV9SRU1PVkVEO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYzMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDYzOC1cbm1tL2h1Z2VfbWVtb3J5LmM6NDYzOTpcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXG5tbS9odWdlX21lbW9yeS5jLTQ2NDAtXHRcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcdTAwMjZkaXNwb3NlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2NzgtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubW0vaHVnZV9tZW1vcnkuYzo0Njc5Olx0XHRcdGxpc3RfbHJ1X2FkZF9pcnEoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy00NjgwLVx0XHRcdFx0XHQgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsXG4tLVxubW0vaW50ZXJuYWwuaD03MzI9c3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9pbnRlcm5hbC5oLTczOS1cdCAqIGRlZmVycmVkX2xpc3QuIElmIGZvbGlvIGlzIG5vdCBpbiBkZWZlcnJlZF9saXN0LCBpdCYjMzk7cyBzYWZlXG5tbS9pbnRlcm5hbC5oOjc0MDpcdCAqIHRvIGNoZWNrIHdpdGhvdXQgYWNxdWlyaW5nIHRoZSBsaXN0X2xydSBsb2NrLlxubW0vaW50ZXJuYWwuaC03NDEtXHQgKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTE0NzA9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKTtcbm1tL2ludGVybmFsLmg6MTQ3MTpleHRlcm4gc3RydWN0IGxpc3RfbHJ1IHNoYWRvd19ub2Rlcztcbm1tL2ludGVybmFsLmgtMTQ3Mi0jZGVmaW5lIG1hcHBpbmdfc2V0X3VwZGF0ZSh4YXMsIG1hcHBpbmcpIGRvIHtcdFx0XHRcXFxuLS1cbm1tL2xpc3RfbHJ1LmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxubW0vbGlzdF9scnUuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG5tbS9saXN0X2xydS5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuLS1cbm1tL2xpc3RfbHJ1LmMtMTctXG5tbS9saXN0X2xydS5jOjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIGJvb2wgaXJxLFxubW0vbGlzdF9scnUuYy0xOS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpXG4tLVxubW0vbGlzdF9scnUuYy0yOC1cbm1tL2xpc3RfbHJ1LmM6Mjk6c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXG5tbS9saXN0X2xydS5jLTMwLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDAtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYzo0MTpzdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XG5tbS9saXN0X2xydS5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmMtNDMtXG5tbS9saXN0X2xydS5jOjQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtNDUte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDgtXG5tbS9saXN0X2xydS5jOjQ5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy01MC17XG5tbS9saXN0X2xydS5jOjUxOlx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxubW0vbGlzdF9scnUuYy01Mi1cdFx0cmV0dXJuO1xubW0vbGlzdF9scnUuYy01My1cbm1tL2xpc3RfbHJ1LmM6NTQ6XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jOjU1Olx0bGlzdF9hZGQoXHUwMDI2bHJ1LVx1MDAzZWxpc3QsIFx1MDAyNm1lbWNnX2xpc3RfbHJ1cyk7XG5tbS9saXN0X2xydS5jOjU2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jLTU3LX1cbm1tL2xpc3RfbHJ1LmMtNTgtXG5tbS9saXN0X2xydS5jOjU5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTYwLXtcbm1tL2xpc3RfbHJ1LmM6NjE6XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG5tbS9saXN0X2xydS5jLTYyLVx0XHRyZXR1cm47XG5tbS9saXN0X2xydS5jLTYzLVxubW0vbGlzdF9scnUuYzo2NDpcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmMtNjUtXHRsaXN0X2RlbChcdTAwMjZscnUtXHUwMDNlbGlzdCk7XG5tbS9saXN0X2xydS5jOjY2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jLTY3LX1cbm1tL2xpc3RfbHJ1LmMtNjgtXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy03MC17XG4tLVxubW0vbGlzdF9scnUuYy03My1cbm1tL2xpc3RfbHJ1LmM6NzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbm1tL2xpc3RfbHJ1LmM6NzU6bGlzdF9scnVfZnJvbV9tZW1jZ19pZHgoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIGludCBpZHgpXG5tbS9saXN0X2xydS5jLTc2LXtcbm1tL2xpc3RfbHJ1LmM6Nzc6XHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSBcdTAwMjZcdTAwMjYgaWR4IFx1MDAzZT0gMCkge1xubW0vbGlzdF9scnUuYzo3ODpcdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG5tbS9saXN0X2xydS5jLTc5LVxuLS1cbm1tL2xpc3RfbHJ1LmMtODQtXG5tbS9saXN0X2xydS5jOjg1OnN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXG5tbS9saXN0X2xydS5jOjg2OmxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTg3LVx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXG4tLVxubW0vbGlzdF9scnUuYy04OS17XG5tbS9saXN0X2xydS5jOjkwOlx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcbm1tL2xpc3RfbHJ1LmMtOTEtXG4tLVxubW0vbGlzdF9scnUuYy05My1hZ2Fpbjpcbm1tL2xpc3RfbHJ1LmM6OTQ6XHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XG5tbS9saXN0X2xydS5jLTk1LVx0aWYgKGxpa2VseShsKSkge1xubW0vbGlzdF9scnUuYzo5NjpcdFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG5tbS9saXN0X2xydS5jLTk3LVx0XHRpZiAobGlrZWx5KFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcbi0tXG5tbS9saXN0X2xydS5jLTEwMC1cdFx0fVxubW0vbGlzdF9scnUuYzoxMDE6XHRcdHVubG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG5tbS9saXN0X2xydS5jLTEwMi1cdH1cbi0tXG5tbS9saXN0X2xydS5jLTEwNC1cdCAqIENhbGxlciBtYXkgc2ltcGx5IGJhaWwgb3V0IGlmIHJhY2VkIHdpdGggcmVwYXJlbnRpbmcgb3Jcbm1tL2xpc3RfbHJ1LmM6MTA1Olx0ICogbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdF9scnUgYW5kIGV4cGVjdCBlbXB0eSBzbG90cy5cbm1tL2xpc3RfbHJ1LmMtMTA2LVx0ICovXG4tLVxubW0vbGlzdF9scnUuYy0xMTUtI2Vsc2Vcbm1tL2xpc3RfbHJ1LmM6MTE2OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMTcte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTE5LVxubW0vbGlzdF9scnUuYzoxMjA6c3RhdGljIHZvaWQgbGlzdF9scnVfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtMTIxLXtcbi0tXG5tbS9saXN0X2xydS5jLTEyMy1cbm1tL2xpc3RfbHJ1LmM6MTI0OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMjUte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTI4LVxubW0vbGlzdF9scnUuYzoxMjk6c3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMzAte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTMzLVxubW0vbGlzdF9scnUuYzoxMzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbm1tL2xpc3RfbHJ1LmM6MTM1Omxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxubW0vbGlzdF9scnUuYy0xMzYte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTM5LVxubW0vbGlzdF9scnUuYzoxNDA6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbm1tL2xpc3RfbHJ1LmM6MTQxOmxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE0Mi1cdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csIGJvb2wgaXJxLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMTQ0LXtcbm1tL2xpc3RfbHJ1LmM6MTQ1Olx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbCA9IFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubHJ1O1xubW0vbGlzdF9scnUuYy0xNDYtXG5tbS9saXN0X2xydS5jOjE0NzpcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xubW0vbGlzdF9scnUuYy0xNDgtXG4tLVxubW0vbGlzdF9scnUuYy0xNTItXG5tbS9saXN0X2xydS5jOjE1MzpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYy0xNTQtXHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnKVxubW0vbGlzdF9scnUuYy0xNTUte1xubW0vbGlzdF9scnUuYzoxNTY6XHRyZXR1cm4gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgbWVtY2csIC8qaXJxPSovZmFsc2UsXG5tbS9saXN0X2xydS5jLTE1Ny1cdFx0XHRcdCAgICAgIC8qaXJxX2ZsYWdzPSovTlVMTCwgLypza2lwX2VtcHR5PSovZmFsc2UpO1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTU5LVxubW0vbGlzdF9scnUuYzoxNjA6dm9pZCBsaXN0X2xydV91bmxvY2soc3RydWN0IGxpc3RfbHJ1X29uZSAqbClcbm1tL2xpc3RfbHJ1LmMtMTYxLXtcbm1tL2xpc3RfbHJ1LmM6MTYyOlx0dW5sb2NrX2xpc3RfbHJ1KGwsIC8qaXJxX29mZj0qL2ZhbHNlLCAvKmlycV9mbGFncz0qL05VTEwpO1xubW0vbGlzdF9scnUuYy0xNjMtfVxubW0vbGlzdF9scnUuYy0xNjQtXG5tbS9saXN0X2xydS5jOjE2NTpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtMTY2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXG5tbS9saXN0X2xydS5jLTE2Ny17XG5tbS9saXN0X2xydS5jOjE2ODpcdHJldHVybiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBtZW1jZywgLyppcnE9Ki90cnVlLFxubW0vbGlzdF9scnUuYy0xNjktXHRcdFx0XHQgICAgICAvKmlycV9mbGFncz0qL05VTEwsIC8qc2tpcF9lbXB0eT0qL2ZhbHNlKTtcbi0tXG5tbS9saXN0X2xydS5jLTE3MS1cbm1tL2xpc3RfbHJ1LmM6MTcyOnZvaWQgbGlzdF9scnVfdW5sb2NrX2lycShzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy0xNzMte1xubW0vbGlzdF9scnUuYzoxNzQ6XHR1bmxvY2tfbGlzdF9scnUobCwgLyppcnFfb2ZmPSovdHJ1ZSwgLyppcnFfZmxhZ3M9Ki9OVUxMKTtcbm1tL2xpc3RfbHJ1LmMtMTc1LX1cbm1tL2xpc3RfbHJ1LmMtMTc2LVxubW0vbGlzdF9scnUuYzoxNzc6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnFzYXZlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYy0xNzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy0xODAte1xubW0vbGlzdF9scnUuYzoxODE6XHRyZXR1cm4gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgbWVtY2csIC8qaXJxPSovdHJ1ZSxcbm1tL2xpc3RfbHJ1LmMtMTgyLVx0XHRcdFx0ICAgICAgLyppcnFfZmxhZ3M9Ki9mbGFncywgLypza2lwX2VtcHR5PSovZmFsc2UpO1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTg0LVxubW0vbGlzdF9scnUuYzoxODU6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCB1bnNpZ25lZCBsb25nICpmbGFncylcbm1tL2xpc3RfbHJ1LmMtMTg2LXtcbm1tL2xpc3RfbHJ1LmM6MTg3Olx0dW5sb2NrX2xpc3RfbHJ1KGwsIC8qaXJxX29mZj0qL3RydWUsIC8qaXJxX2ZsYWdzPSovZmxhZ3MpO1xubW0vbGlzdF9scnUuYy0xODgtfVxubW0vbGlzdF9scnUuYy0xODktXG5tbS9saXN0X2xydS5jOjE5MDpib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0vbGlzdF9scnUuYy0xOTEtXHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMTk3LVx0XHQgKiBTZXQgc2hyaW5rZXIgYml0IG9uIHRoZSBtZW1jZyB0aGF0IG93bnMgdGhlIGxvY2tlZFxubW0vbGlzdF9scnUuYzoxOTg6XHRcdCAqIHN1Ymxpc3QgLSBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKCkgbWF5IGhhdmUgd2Fsa2VkIHVwXG5tbS9saXN0X2xydS5jLTE5OS1cdFx0ICogcGFzdCBhIGR5aW5nIG1lbWNnLCBhbmQgdGhlIGJpdCBtdXN0IGJlIHNldCB0aGVyZS5cbi0tXG5tbS9saXN0X2xydS5jLTIwNy19XG5tbS9saXN0X2xydS5jOjIwODpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGQpO1xubW0vbGlzdF9scnUuYy0yMDktXG5tbS9saXN0X2xydS5jOjIxMDpib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0vbGlzdF9scnUuYy0yMTEtXHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMjIyLS8qIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIG1lbWNnIGxpZmV0aW1lLiAqL1xubW0vbGlzdF9scnUuYzoyMjM6Ym9vbCBsaXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTIyNC1cdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9saXN0X2xydS5jLTIyNS17XG5tbS9saXN0X2xydS5jOjIyNjpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG5tbS9saXN0X2xydS5jLTIyNy1cdGJvb2wgcmV0O1xubW0vbGlzdF9scnUuYy0yMjgtXG5tbS9saXN0X2xydS5jOjIyOTpcdGwgPSBsaXN0X2xydV9sb2NrKGxydSwgbmlkLCBcdTAwMjZtZW1jZyk7XG5tbS9saXN0X2xydS5jOjIzMDpcdHJldCA9IF9fbGlzdF9scnVfYWRkKGxydSwgbCwgaXRlbSwgbmlkLCBtZW1jZyk7XG5tbS9saXN0X2xydS5jOjIzMTpcdGxpc3RfbHJ1X3VubG9jayhsKTtcbm1tL2xpc3RfbHJ1LmMtMjMyLVx0cmV0dXJuIHJldDtcbi0tXG5tbS9saXN0X2xydS5jLTIzNC1cbm1tL2xpc3RfbHJ1LmM6MjM1OmJvb2wgbGlzdF9scnVfYWRkX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2xpc3RfbHJ1LmMtMjM2LVx0XHQgICAgICBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9saXN0X2xydS5jLTIzNy17XG5tbS9saXN0X2xydS5jOjIzODpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG5tbS9saXN0X2xydS5jLTIzOS1cdGJvb2wgcmV0O1xubW0vbGlzdF9scnUuYy0yNDAtXG5tbS9saXN0X2xydS5jOjI0MTpcdGwgPSBsaXN0X2xydV9sb2NrX2lycShscnUsIG5pZCwgXHUwMDI2bWVtY2cpO1xubW0vbGlzdF9scnUuYzoyNDI6XHRyZXQgPSBfX2xpc3RfbHJ1X2FkZChscnUsIGwsIGl0ZW0sIG5pZCwgbWVtY2cpO1xubW0vbGlzdF9scnUuYzoyNDM6XHRsaXN0X2xydV91bmxvY2tfaXJxKGwpO1xubW0vbGlzdF9scnUuYy0yNDQtXHRyZXR1cm4gcmV0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjQ2LVxubW0vbGlzdF9scnUuYzoyNDc6Ym9vbCBsaXN0X2xydV9hZGRfb2JqKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtKVxubW0vbGlzdF9scnUuYy0yNDgte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjUxLVxubW0vbGlzdF9scnUuYzoyNTI6XHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xubW0vbGlzdF9scnUuYy0yNTMtXHRcdHJjdV9yZWFkX2xvY2soKTtcbm1tL2xpc3RfbHJ1LmM6MjU0Olx0XHRyZXQgPSBsaXN0X2xydV9hZGQobHJ1LCBpdGVtLCBuaWQsIG1lbV9jZ3JvdXBfZnJvbV92aXJ0KGl0ZW0pKTtcbm1tL2xpc3RfbHJ1LmMtMjU1LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbm1tL2xpc3RfbHJ1LmMtMjU2LVx0fSBlbHNlIHtcbm1tL2xpc3RfbHJ1LmM6MjU3Olx0XHRyZXQgPSBsaXN0X2xydV9hZGQobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xubW0vbGlzdF9scnUuYy0yNTgtXHR9XG4tLVxubW0vbGlzdF9scnUuYy0yNjEtfVxubW0vbGlzdF9scnUuYzoyNjI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XG5tbS9saXN0X2xydS5jLTI2My1cbm1tL2xpc3RfbHJ1LmMtMjY0LS8qIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIG1lbWNnIGxpZmV0aW1lLiAqL1xubW0vbGlzdF9scnUuYzoyNjU6Ym9vbCBsaXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTI2Ni1cdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9saXN0X2xydS5jLTI2Ny17XG5tbS9saXN0X2xydS5jOjI2ODpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG5tbS9saXN0X2xydS5jLTI2OS1cdGJvb2wgcmV0O1xubW0vbGlzdF9scnUuYy0yNzAtXG5tbS9saXN0X2xydS5jOjI3MTpcdGwgPSBsaXN0X2xydV9sb2NrKGxydSwgbmlkLCBcdTAwMjZtZW1jZyk7XG5tbS9saXN0X2xydS5jOjI3MjpcdHJldCA9IF9fbGlzdF9scnVfZGVsKGxydSwgbCwgaXRlbSwgbmlkKTtcbm1tL2xpc3RfbHJ1LmM6MjczOlx0bGlzdF9scnVfdW5sb2NrKGwpO1xubW0vbGlzdF9scnUuYy0yNzQtXHRyZXR1cm4gcmV0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjc2LVxubW0vbGlzdF9scnUuYzoyNzc6Ym9vbCBsaXN0X2xydV9kZWxfb2JqKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtKVxubW0vbGlzdF9scnUuYy0yNzgte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjgxLVxubW0vbGlzdF9scnUuYzoyODI6XHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xubW0vbGlzdF9scnUuYy0yODMtXHRcdHJjdV9yZWFkX2xvY2soKTtcbm1tL2xpc3RfbHJ1LmM6Mjg0Olx0XHRyZXQgPSBsaXN0X2xydV9kZWwobHJ1LCBpdGVtLCBuaWQsIG1lbV9jZ3JvdXBfZnJvbV92aXJ0KGl0ZW0pKTtcbm1tL2xpc3RfbHJ1LmMtMjg1LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbm1tL2xpc3RfbHJ1LmMtMjg2LVx0fSBlbHNlIHtcbm1tL2xpc3RfbHJ1LmM6Mjg3Olx0XHRyZXQgPSBsaXN0X2xydV9kZWwobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xubW0vbGlzdF9scnUuYy0yODgtXHR9XG4tLVxubW0vbGlzdF9scnUuYy0yOTEtfVxubW0vbGlzdF9scnUuYzoyOTI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfZGVsX29iaik7XG5tbS9saXN0X2xydS5jLTI5My1cbm1tL2xpc3RfbHJ1LmM6Mjk0OnZvaWQgbGlzdF9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtKVxubW0vbGlzdF9scnUuYy0yOTUte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjk4LX1cbm1tL2xpc3RfbHJ1LmM6Mjk5OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2lzb2xhdGUpO1xubW0vbGlzdF9scnUuYy0zMDAtXG5tbS9saXN0X2xydS5jOjMwMTp2b2lkIGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxubW0vbGlzdF9scnUuYy0zMDItXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5tbS9saXN0X2xydS5jLTMwNi19XG5tbS9saXN0X2xydS5jOjMwNzpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlX21vdmUpO1xubW0vbGlzdF9scnUuYy0zMDgtXG5tbS9saXN0X2xydS5jOjMwOTp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X2NvdW50X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbm1tL2xpc3RfbHJ1LmMtMzEwLVx0XHRcdFx0IGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL2xpc3RfbHJ1LmMtMzExLXtcbm1tL2xpc3RfbHJ1LmM6MzEyOlx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcbm1tL2xpc3RfbHJ1LmMtMzEzLVx0bG9uZyBjb3VudDtcbi0tXG5tbS9saXN0X2xydS5jLTMxNS1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL2xpc3RfbHJ1LmM6MzE2Olx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7XG5tbS9saXN0X2xydS5jLTMxNy1cdGNvdW50ID0gbCA/IFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSA6IDA7XG4tLVxubW0vbGlzdF9scnUuYy0zMjQtfVxubW0vbGlzdF9scnUuYzozMjU6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfY291bnRfb25lKTtcbm1tL2xpc3RfbHJ1LmMtMzI2LVxubW0vbGlzdF9scnUuYzozMjc6dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxubW0vbGlzdF9scnUuYy0zMjgte1xubW0vbGlzdF9scnUuYzozMjk6XHRzdHJ1Y3QgbGlzdF9scnVfbm9kZSAqbmxydTtcbm1tL2xpc3RfbHJ1LmMtMzMwLVxuLS1cbm1tL2xpc3RfbHJ1LmMtMzMzLX1cbm1tL2xpc3RfbHJ1LmM6MzM0OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X25vZGUpO1xubW0vbGlzdF9scnUuYy0zMzUtXG5tbS9saXN0X2xydS5jPTMzNj1zdGF0aWMgdW5zaWduZWQgbG9uZ1xubW0vbGlzdF9scnUuYzozMzc6X19saXN0X2xydV93YWxrX29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbGlzdF9scnUuYzozMzg6XHRcdCAgICBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcbm1tL2xpc3RfbHJ1LmMtMzM5LVx0XHQgICAgdW5zaWduZWQgbG9uZyAqbnJfdG9fd2FsaywgYm9vbCBpcnFfb2ZmKVxubW0vbGlzdF9scnUuYy0zNDAte1xubW0vbGlzdF9scnUuYzozNDE6XHRzdHJ1Y3QgbGlzdF9scnVfbm9kZSAqbmxydSA9IFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF07XG5tbS9saXN0X2xydS5jOjM0MjpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmwgPSBOVUxMO1xubW0vbGlzdF9scnUuYy0zNDMtXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCAqbjtcbi0tXG5tbS9saXN0X2xydS5jLTM0Ni1yZXN0YXJ0OlxubW0vbGlzdF9scnUuYzozNDc6XHRsID0gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgXHUwMDI2bWVtY2csIC8qaXJxPSovaXJxX29mZixcbm1tL2xpc3RfbHJ1LmMtMzQ4LVx0XHRcdFx0ICAgLyppcnFfZmxhZ3M9Ki9OVUxMLCAvKnNraXBfZW1wdHk9Ki90cnVlKTtcbi0tXG5tbS9saXN0X2xydS5jLTM4OC1cdH1cbm1tL2xpc3RfbHJ1LmM6Mzg5Olx0dW5sb2NrX2xpc3RfbHJ1KGwsIGlycV9vZmYsIE5VTEwpO1xubW0vbGlzdF9scnUuYy0zOTAtb3V0OlxuLS1cbm1tL2xpc3RfbHJ1LmM9Mzk0PXVuc2lnbmVkIGxvbmdcbm1tL2xpc3RfbHJ1LmM6Mzk1Omxpc3RfbHJ1X3dhbGtfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9saXN0X2xydS5jOjM5NjpcdFx0ICBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcbm1tL2xpc3RfbHJ1LmMtMzk3LVx0XHQgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspXG5tbS9saXN0X2xydS5jLTM5OC17XG5tbS9saXN0X2xydS5jOjM5OTpcdHJldHVybiBfX2xpc3RfbHJ1X3dhbGtfb25lKGxydSwgbmlkLCBtZW1jZywgaXNvbGF0ZSxcbm1tL2xpc3RfbHJ1LmMtNDAwLVx0XHRcdFx0ICAgY2JfYXJnLCBucl90b193YWxrLCBmYWxzZSk7XG5tbS9saXN0X2xydS5jLTQwMS19XG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XG5tbS9saXN0X2xydS5jLTQwMy1cbm1tL2xpc3RfbHJ1LmM9NDA0PXVuc2lnbmVkIGxvbmdcbm1tL2xpc3RfbHJ1LmM6NDA1Omxpc3RfbHJ1X3dhbGtfb25lX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbGlzdF9scnUuYzo0MDY6XHRcdCAgICAgIGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxubW0vbGlzdF9scnUuYy00MDctXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspXG5tbS9saXN0X2xydS5jLTQwOC17XG5tbS9saXN0X2xydS5jOjQwOTpcdHJldHVybiBfX2xpc3RfbHJ1X3dhbGtfb25lKGxydSwgbmlkLCBtZW1jZywgaXNvbGF0ZSxcbm1tL2xpc3RfbHJ1LmMtNDEwLVx0XHRcdFx0ICAgY2JfYXJnLCBucl90b193YWxrLCB0cnVlKTtcbi0tXG5tbS9saXN0X2xydS5jLTQxMi1cbm1tL2xpc3RfbHJ1LmM6NDEzOnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYzo0MTQ6XHRcdFx0XHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXG5tbS9saXN0X2xydS5jLTQxNS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nICpucl90b193YWxrKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDE4LVxubW0vbGlzdF9scnUuYzo0MTk6XHRpc29sYXRlZCAmIzQzOz0gbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIE5VTEwsIGlzb2xhdGUsIGNiX2FyZyxcbm1tL2xpc3RfbHJ1LmMtNDIwLVx0XHRcdFx0ICAgICAgbnJfdG9fd2Fsayk7XG4tLVxubW0vbGlzdF9scnUuYy00MjItI2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYzo0MjM6XHRpZiAoKm5yX3RvX3dhbGsgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcbm1tL2xpc3RfbHJ1LmM6NDI0Olx0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XG5tbS9saXN0X2xydS5jLTQyNS1cdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDM1LVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xubW0vbGlzdF9scnUuYzo0MzY6XHRcdFx0aXNvbGF0ZWQgJiM0Mzs9IF9fbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIG1lbWNnLFxubW0vbGlzdF9scnUuYy00MzctXHRcdFx0XHRcdFx0XHRpc29sYXRlLCBjYl9hcmcsXG4tLVxubW0vbGlzdF9scnUuYy00NDgtfVxubW0vbGlzdF9scnUuYzo0NDk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfd2Fsa19ub2RlKTtcbm1tL2xpc3RfbHJ1LmMtNDUwLVxubW0vbGlzdF9scnUuYzo0NTE6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy00NTIte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDYyLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmM6NDYzOnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG5tbS9saXN0X2xydS5jLTQ2NC17XG5tbS9saXN0X2xydS5jLTQ2NS1cdGludCBuaWQ7XG5tbS9saXN0X2xydS5jOjQ2NjpcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbm1tL2xpc3RfbHJ1LmMtNDY3LVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDc3LVxubW0vbGlzdF9scnUuYzo0Nzg6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG5tbS9saXN0X2xydS5jLTQ3OS17XG4tLVxubW0vbGlzdF9scnUuYy00ODQtXG5tbS9saXN0X2xydS5jOjQ4NTpzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy00ODYte1xubW0vbGlzdF9scnUuYy00ODctXHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG5tbS9saXN0X2xydS5jOjQ4ODpcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbm1tL2xpc3RfbHJ1LmMtNDg5LVxubW0vbGlzdF9scnUuYzo0OTA6XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG5tbS9saXN0X2xydS5jLTQ5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTAwLVxubW0vbGlzdF9scnUuYzo1MDE6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYzo1MDI6XHRcdFx0XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcbm1tL2xpc3RfbHJ1LmMtNTAzLVx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqZHN0X21lbWNnKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNTA1LVx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXHUwMDNla21lbWNnX2lkO1xubW0vbGlzdF9scnUuYzo1MDY6XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpkc3Q7XG5tbS9saXN0X2xydS5jLTUwNy1cbm1tL2xpc3RfbHJ1LmMtNTA4LVx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcmMtXHUwMDNlbG9jayk7XG5tbS9saXN0X2xydS5jOjUwOTpcdGRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTtcbm1tL2xpc3RfbHJ1LmMtNTEwLVx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTE3LVx0fVxubW0vbGlzdF9scnUuYzo1MTg6XHQvKiBNYXJrIHRoZSBsaXN0X2xydV9vbmUgZGVhZCAqL1xubW0vbGlzdF9scnUuYy01MTktXHRzcmMtXHUwMDNlbnJfaXRlbXMgPSBMT05HX01JTjtcbi0tXG5tbS9saXN0X2xydS5jLTUyNC1cbm1tL2xpc3RfbHJ1LmM6NTI1OnZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL2xpc3RfbHJ1LmMtNTI2LXtcbm1tL2xpc3RfbHJ1LmM6NTI3Olx0c3RydWN0IGxpc3RfbHJ1ICpscnU7XG5tbS9saXN0X2xydS5jLTUyOC1cdGludCBpO1xubW0vbGlzdF9scnUuYy01MjktXG5tbS9saXN0X2xydS5jOjUzMDpcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmM6NTMxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShscnUsIFx1MDAyNm1lbWNnX2xpc3RfbHJ1cywgbGlzdCkge1xubW0vbGlzdF9scnUuYzo1MzI6XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbm1tL2xpc3RfbHJ1LmMtNTMzLVxubW0vbGlzdF9scnUuYy01MzQtXHRcdC8qXG5tbS9saXN0X2xydS5jOjUzNTpcdFx0ICogY3NzX2lzX2R5aW5nKCkgY2hlY2sgaW4gbWVtY2dfbGlzdF9scnVfYWxsb2MoKSBhdm9pZHNcbm1tL2xpc3RfbHJ1LmMtNTM2LVx0XHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXG4tLVxubW0vbGlzdF9scnUuYy01NDUtXHRcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxubW0vbGlzdF9scnUuYzo1NDY6XHRcdCAqIGNvbmN1cnJlbnQgbGlzdF9scnVfZGVsKCkgbWF5IGNvcnJ1cHQgdGhlIGxpc3QgaWYgaXQgYXJyaXZlc1xubW0vbGlzdF9scnUuYy01NDctXHRcdCAqIGFmdGVyIHhhcnJheSBjbGVhciBidXQgYmVmb3JlIHJlcGFyZW50aW5nIGFzXG5tbS9saXN0X2xydS5jOjU0ODpcdFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50JiMzOTtzIGxvY2sgd2hpbGUgdGhlXG5tbS9saXN0X2xydS5jLTU0OS1cdFx0ICogaXRlbSBpcyBzdGlsbCBvbiBjaGlsZCYjMzk7cyBsaXN0LlxuLS1cbm1tL2xpc3RfbHJ1LmMtNTUxLVx0XHRmb3JfZWFjaF9ub2RlKGkpXG5tbS9saXN0X2xydS5jOjU1MjpcdFx0XHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XG5tbS9saXN0X2xydS5jLTU1My1cbi0tXG5tbS9saXN0X2xydS5jLTU1Ni1cdFx0Lypcbm1tL2xpc3RfbHJ1LmM6NTU3Olx0XHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXG5tbS9saXN0X2xydS5jLTU1OC1cdFx0ICogdG8gcmVtYWluIGVtcHR5LCB3ZSBjYW4gc2FmZWx5IGZyZWUgdGhpcyBscnUsIGFueSBmdXJ0aGVyXG5tbS9saXN0X2xydS5jOjU1OTpcdFx0ICogbWVtY2dfbGlzdF9scnVfYWxsb2MoKSBjYWxsIHdpbGwgc2ltcGx5IGJhaWwgb3V0LlxubW0vbGlzdF9scnUuYy01NjAtXHRcdCAqL1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTYyLVx0fVxubW0vbGlzdF9scnUuYzo1NjM6XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmMtNTY0LX1cbm1tL2xpc3RfbHJ1LmMtNTY1LVxubW0vbGlzdF9scnUuYzo1NjY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9saXN0X2xydS5jOjU2NzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjc1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgTUVNQ0cqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gTWVtb3J5IENvbnRyb2wgR3JvdXBzIChNRU1DRykuIFRoaXMgaXNuJiMzOTt0IGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBub3QgeWV0IGFueXdheSwgYnV0IGEgZmlyc3QtcGFzcyBjaGVjay4gSSB3YW50IHRvIHNlZSBpZiBNRU1DRyBpcyBldmVuICplbmFibGVkKiBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBjb25maWd1cmVkIGluIGEgc3BlY2lmaWMgd2F5IHRoYXQgY291bGQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBteSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlIG5lY2Vzc2FyeSBmZWF0dXJlcywgbGlrZSBtZW1vcnkgcmVzb3VyY2UgY29udHJvbCBhbmQgaGllcmFyY2hpY2FsIGNncm91cHMsIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbD8gV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGF2ZSBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb25zIGJlZW4gYXBwbGllZD8gVGhpcyBpcyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCB3YXN0aW5nIHRpbWUgZGVidWdnaW5nIGEgcHJvYmxlbSByb290ZWQgaW4gYSBkaXNhYmxlZCBvciBtaXNjb25maWd1cmVkIE1FTUNHIHNldHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg2LVxuaW5pdC9LY29uZmlnOjEwODc6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg4LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDItXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgQ29udHJvbCBHcm91cHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgTUVNQ0cuIFdoZXJlIHdvdWxkIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgYmU/IEhtbSwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgc2VlbXMgbGlrZSB0aGUgcmlnaHQgc3BvdC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUga2VybmVsLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZSB0byBNRU1DRy4gSSYjMzk7bSBob3BpbmcgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3Igc3Vic3lzdGVtcyBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBNRU1DRyBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVlcGVyIGFuYWx5c2lzIEkgbWlnaHQgbmVlZCB0byBkby4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlIGNsZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDc1Olx0XG4xMDc2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzc6XHRcbjEwNzg6XHRjb25maWcgTUVNQ0dcbjEwNzk6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODA6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODE6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDgyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDgzOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwODQ6XHRcdGhlbHBcbjEwODU6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA4NjpcdFxuMTA4NzpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDg4Olx0XHRib29sXG4xMDg5Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDkwOlx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDkxOlx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5MjpcdFx0ZGVmYXVsdCB5XG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgUmVsYXRpb25zaGlwIEJldHdlZW4gTUVNQ0cgYW5kIENHUk9VUFMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBNRU1DRyAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKSBhbmQgaG93IHRoZXkgZnVuY3Rpb24uIE15IGluaXRpYWwgaHVuY2gsIGFuZCBmcmFua2x5LCBteSB3b3JraW5nIGFzc3VtcHRpb24sIGlzIHRoYXQgTUVNQ0cgaXMgZnVuZGFtZW50YWxseSAqZGVwZW5kZW50KiBvbiBDR1JPVVBTLiBMZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBNRU1DRyByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgQ0dST1VQUyBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBhbmQgZW5zdXJlIEkmIzM5O20gc29saWQgb24gdGhlIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIGNsYXJpZnkgdGhlaXIgcm9sZXMgYW5kIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdFxuMTA2MTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDYyOlx0XG4xMDYzOlx0aWYgQ0dST1VQU1xuMTA2NDpcdFxuMTA2NTpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNjY6XHRcdGJvb2xcbjEwNjc6XHRcbjEwNjg6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNjk6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3MDpcdFx0aGVscFxuMTA3MTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzI6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA3MzpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwNzQ6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA1MQoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1FTUNHJiMzOTtzIExpc3QgTFJVIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgTUVNQ0dgIGludGVyYWN0cyB3aXRoIHRoZSBgbGlzdF9scnVgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiBgTUVNQ0dgJiMzOTtzIGludGVncmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBsaXN0X2xydWAgaW5pdGlhbGl6YXRpb24gYW5kIGFueXRoaW5nIHRoYXQgaXNuJiMzOTt0IG9uIHRoZSBob3QgcGF0aC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxpc3QsIHdoaWNoIEkmIzM5O3ZlIGdvdDogYF9fbGlzdF9scnVfaW5pdGAsIGBsaXN0X2xydV9kZXN0cm95YCwgYGxpc3RfbHJ1X2FkZGAsIGBsaXN0X2xydV9kZWxgLCBgbGlzdF9scnVfYWRkX29iamAsIGBsaXN0X2xydV9kZWxfb2JqYCwgYGxpc3RfbHJ1X2lzb2xhdGVgLCBgbGlzdF9scnVfaXNvbGF0ZV9tb3ZlYCwgYGxpc3RfbHJ1X3dhbGtfb25lYCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBhbmQgYHNldF9zaHJpbmtlcl9iaXRgLgoKTm93LCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBmaWxlczogYG1tL2xpc3RfbHJ1LmNgIGFuZCBgbW0vc2hyaW5rZXIuY2AuIEhtbSwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCB0aGUgc3ltYm9scyBmcm9tIGBtbS9saXN0X2xydS5jYCBhcmU6IGBfX2xpc3RfbHJ1X2luaXRgLCBgbGlzdF9scnVfZGVzdHJveWAsIGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGBzZXRfc2hyaW5rZXJfYml0YC4gVGhpcyBjb25maXJtcyBzb21lIG9mIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIGVuc3VyaW5nIEkgaGF2ZSBhbGwgdGhlIGtleSBwaWVjZXMuIEl0IGxvb2tzIGxpa2UgdGhpcyBjaGFuZ2UgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIGEgbm9uLWBtZW1jZ2AtYXdhcmUgc2hyaW5rZXIsIGxpa2Ugd2hlbiB3ZSYjMzk7cmUgZmFsbGluZyBiYWNrIGR1ZSB0byBjZ3JvdXAubWVtb3J5PW5va21lbSwga2VlcHMgdGhlIGBzaHJpbmtlcl9pZGAgYXQgMCBpbiBgbGlzdF9scnVgLiBUaGlzIGlzIGxlYWRpbmcgdG8gZXJyb25lb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBNeSBjb25maXJtZWQgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhcmU6IGBfX2xpc3RfbHJ1X2luaXRgLCBgbGlzdF9scnVfZGVzdHJveWAsIGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBgc2V0X3Nocmlua2VyX2JpdGAsIGFuZCBgbGlzdF9scnVfd2Fsa19ub2RlYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBlbmFibGUgdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiwgYW5kIHdpdGggdGhhdCwgSSBjYW4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19saXN0X2xydV9pbml0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O3NldF9zaHJpbmtlcl9iaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfd2Fsa19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVx1MDAzZXNocmlua2VyX2lkIGlzIG5vdCBhc3NpZ25lZCBhbiB1bmluaXRpYWxpemVkIElEIG9mIDAgd2hlbiBhIHNocmlua2VyIGZhbGxzIGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIG1vZGUgKHN1Y2ggYXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkKS4gVGhpcyBwcmV2ZW50cyB1bmludGVuZGVkIHNocmlua2VyIGJpdCB1cGRhdGVzIGluIHNldF9zaHJpbmtlcl9iaXQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttZW1jZ19yZXBhcmVudF9saXN0X2xydXMmIzM0OywKICAgICYjMzQ7c2V0X3Nocmlua2VyX2JpdCYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV93YWxrX25vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY29tbWl0IG1vZGlmaWVzIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSBscnUtXHUwMDNlc2hyaW5rZXJfaWQgaXMgbm90IGFzc2lnbmVkIGFuIHVuaW5pdGlhbGl6ZWQgSUQgb2YgMCB3aGVuIGEgc2hyaW5rZXIgZmFsbHMgYmFjayB0byBub24tbWVtY2ctYXdhcmUgbW9kZSAoc3VjaCBhcyB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWQpLiBUaGlzIHByZXZlbnRzIHVuaW50ZW5kZWQgc2hyaW5rZXIgYml0IHVwZGF0ZXMgaW4gc2V0X3Nocmlua2VyX2JpdCgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXHUwMDNlaWRgLCBhc3NpZ25pbmcgLTEgb3RoZXJ3aXNlLiBcblxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVx1MDAzZWZsYWdzYCwgYHNocmlua2VyLVx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcblxuVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQsIG5vIG1lbW9yeSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIGFuZCBubyBhbHRlcmVkIGRhdGEgbGVuZ3RoIG9yIGJvdW5kcyBjaGVjayBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTI0YmRjNmRjMWIzYWI5YzI5ZjQyMjQ4NDE0MTFmZDlmYzdjYzg1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuYwppbmRleCAzNjY2MmQwMmZmOTYzLi45NmQwMmVhMjA2YTg4IDEwMDY0NAotLS0gYS9tbS9saXN0X2xydS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmMKQEAgLTY2Niw3ICYjNDM7NjY2LDEyIEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyCiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKLQlpZiAoc2hyaW5rZXIpCiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGgKJiM0MzsJICogY2dyb3VwLm1lbW9yeT1ub2ttZW0pLCBpdHMgaWQgd2FzIG5ldmVyIGFzc2lnbmVkIGFuZCBob2xkcyBhCiYjNDM7CSAqIHN0YWxlIDAuIERvbiYjMzk7dCBsZXQgc2V0X3Nocmlua2VyX2JpdCgpIGFjdCBvbiBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChzaHJpbmtlciAmYW1wOyZhbXA7IChzaHJpbmtlci0mZ3Q7ZmxhZ3MgJmFtcDsgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKQogCQlscnUtJmd0O3Nocmlua2VyX2lkID0gc2hyaW5rZXItJmd0O2lkOwogCWVsc2UKIAkJbHJ1LSZndDtzaHJpbmtlcl9pZCA9IC0xOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBsaXN0X2xydS5jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbGlzdF9scnUuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb25hbCBjaGVjayB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBsb2dpYyBpcyB0aGVyZSB0byBoYW5kbGUgaG93IHRoZSBgc2hyaW5rZXJfaWRgIGlzIGFzc2lnbmVkLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtY2ctYXdhcmUgc2hyaW5rZXJzLiAKClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzaHJpbmtlciBpcyBhY3R1YWxseSBtZW1jZy1hd2FyZSBiZWZvcmUgYXNzaWduaW5nIGl0cyBJRCB0byBgbHJ1LSZndDtzaHJpbmtlcl9pZGAuIFRoaXMgaXMgY3J1Y2lhbC4gSWYgdGhlIHNocmlua2VyIGhhcyAmIzM0O2ZhbGxlbiBiYWNrJiMzNDsgdG8gYmVpbmcgbm9uLW1lbWNnIGF3YXJlIChhcyB0aGUgY29tbWVudCBzdWdnZXN0cywgcGVyaGFwcyBkdWUgdG8gc29tZXRoaW5nIGxpa2UgYGNncm91cC5tZW1vcnk9bm9rbWVtYCksIGl0cyBJRCBpcyBzdGFsZS4gQXR0ZW1wdGluZyB0byB1c2UgdGhpcyBzdGFsZSBJRCBjb3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvciwgc28gdGhlIGNoZWNrIHByZXZlbnRzIHRoaXMuCgpJJiMzOTtkIHdhbnQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGF0ZWQgYHNocmlua2VyYCBhbmQgYGxpc3RfbHJ1YCBjb2RlIGZvciBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGhlIGBzaHJpbmtlci0mZ3Q7ZmxhZ3MgJmFtcDsgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGJpdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmbGFnIGlzIHNldCBhbmQgd2hlbiBpdCBtaWdodCAqbm90KiBiZSBzZXQuIEl0IHNlZW1zIHRoZSBjb21taXQgYXV0aG9yIGlzIGNvcnJlY3RseSBoYW5kbGluZyBhbiBlZGdlIGNhc2UgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIE5vdyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBtb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY1MDpcdFx0cmVzID0gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xuIDY1MTpcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIDY1MjpcdFx0cmV0dXJuIHJlcztcbiA2NTM6XHR9XG4gNjU0Olx0I2Vsc2VcbiA2NTU6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbiA2NTY6XHR7XG4gNjU3Olx0fVxuIDY1ODpcdFxuIDY1OTpcdHN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gNjYwOlx0e1xuIDY2MTpcdH1cbiA2NjI6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gNjYzOlx0XG4gNjY0Olx0aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbiA2NjU6XHR7XG4gNjY2Olx0XHRpbnQgaTtcbiA2Njc6XHRcbiA2Njg6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjY5Olx0XHQvKlxuIDY3MDpcdFx0ICogSWYgdGhlIHNocmlua2VyIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGUuZy4gd2l0aFxuIDY3MTpcdFx0ICogY2dyb3VwLm1lbW9yeT1ub2ttZW0pLCBpdHMgaWQgd2FzIG5ldmVyIGFzc2lnbmVkIGFuZCBob2xkcyBhXG4gNjcyOlx0XHQgKiBzdGFsZSAwLiBEb24mIzM5O3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXG4gNjczOlx0XHQgKi9cbiA2NzQ6XHRcdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG4gNjc1Olx0XHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVx1MDAzZWlkO1xuIDY3NjpcdFx0ZWxzZVxuIDY3NzpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiA2Nzg6XHRcbiA2Nzk6XHRcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbiA2ODA6XHRcdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbiA2ODE6XHQjZW5kaWZcbiA2ODI6XHRcbiA2ODM6XHRcdGxydS1cdTAwM2Vub2RlID0ga3phbGxvY19vYmpzKCpscnUtXHUwMDNlbm9kZSwgbnJfbm9kZV9pZHMpO1xuIDY4NDpcdFx0aWYgKCFscnUtXHUwMDNlbm9kZSlcbiA2ODU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjg2Olx0XG4gNjg3Olx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gNjg4Olx0XHRcdGluaXRfb25lX2xydShscnUsIFx1MDAyNmxydS1cdTAwM2Vub2RlW2ldLmxydSk7XG4gNjg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNocmlua2VyYCBTdHJ1Y3R1cmUgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgc2hyaW5rZXItJmd0O2lkYCBhbmQgYHNocmlua2VyLSZndDtmbGFnc2AuIE15IHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hlcmUgdGhlc2UgbWVtYmVycyBhcmUgYm90aCBzZXQgdG8gYSB2YWx1ZSBhbmQgYWxzbyB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc3Vic2VxdWVudCB1dGlsaXphdGlvbiBvZiB0aGVzZSBmaWVsZHMuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgc2hyaW5rZXJgIG9iamVjdCBmdW5jdGlvbnMgYW5kIGhvdyBpdHMgc3RhdGUgaW1wYWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZWlyIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rZXJfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYz01OT1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjgtXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy03MC17XG5tbS9saXN0X2xydS5jOjcxOlx0cmV0dXJuIGxydS1cdTAwM2VzaHJpbmtlcl9pZDtcbm1tL2xpc3RfbHJ1LmMtNzItfVxuLS1cbm1tL2xpc3RfbHJ1LmM9MTIwPXN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy0xMjMtXG5tbS9saXN0X2xydS5jOjEyNDpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcbi0tXG5tbS9saXN0X2xydS5jPTE5MD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMjAxLVx0XHRpZiAoIWwtXHUwMDNlbnJfaXRlbXMmIzQzOyYjNDM7KVxubW0vbGlzdF9scnUuYzoyMDI6XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XG5tbS9saXN0X2xydS5jLTIwMy1cdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubnJfaXRlbXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NTAxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTUxNS1cdFx0ZHN0LVx1MDAzZW5yX2l0ZW1zICYjNDM7PSBzcmMtXHUwMDNlbnJfaXRlbXM7XG5tbS9saXN0X2xydS5jOjUxNjpcdFx0c2V0X3Nocmlua2VyX2JpdChkc3RfbWVtY2csIG5pZCwgbHJ1X3Nocmlua2VyX2lkKGxydSkpO1xubW0vbGlzdF9scnUuYy01MTctXHR9XG4tLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY3NC1cdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG5tbS9saXN0X2xydS5jOjY3NTpcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG5tbS9saXN0X2xydS5jLTY3Ni1cdGVsc2Vcbm1tL2xpc3RfbHJ1LmM6Njc3Olx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbm1tL2xpc3RfbHJ1LmMtNjc4LVxuLS1cbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTcwOS0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jOjcxMDpcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xubW0vbGlzdF9scnUuYy03MTEtI2VuZGlmXG4tLVxubW0vc2hyaW5rZXIuYz0xNTk9c3RhdGljIGludCBleHBhbmRfc2hyaW5rZXJfaW5mbyhpbnQgbmV3X2lkKVxuLS1cbm1tL3Nocmlua2VyLmMtMTg5LVxubW0vc2hyaW5rZXIuYzoxOTA6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW50IHNocmlua2VyX2lkKVxubW0vc2hyaW5rZXIuYy0xOTEte1xubW0vc2hyaW5rZXIuYzoxOTI6XHRyZXR1cm4gc2hyaW5rZXJfaWQgLyBTSFJJTktFUl9VTklUX0JJVFM7XG5tbS9zaHJpbmtlci5jLTE5My19XG5tbS9zaHJpbmtlci5jLTE5NC1cbm1tL3Nocmlua2VyLmM6MTk1OnN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkX3RvX29mZnNldChpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTE5Ni17XG5tbS9zaHJpbmtlci5jOjE5NzpcdHJldHVybiBzaHJpbmtlcl9pZCAlIFNIUklOS0VSX1VOSVRfQklUUztcbm1tL3Nocmlua2VyLmMtMTk4LX1cbm1tL3Nocmlua2VyLmMtMTk5LVxubW0vc2hyaW5rZXIuYzoyMDA6c3RhdGljIGlubGluZSBpbnQgY2FsY19zaHJpbmtlcl9pZChpbnQgaW5kZXgsIGludCBvZmZzZXQpXG5tbS9zaHJpbmtlci5jLTIwMS17XG4tLVxubW0vc2hyaW5rZXIuYy0yMDQtXG5tbS9zaHJpbmtlci5jOjIwNTp2b2lkIHNldF9zaHJpbmtlcl9iaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkLCBpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTIwNi17XG5tbS9zaHJpbmtlci5jOjIwNzpcdGlmIChzaHJpbmtlcl9pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xubW0vc2hyaW5rZXIuYy0yMDgtXHRcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xuLS1cbm1tL3Nocmlua2VyLmMtMjExLVx0XHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjIxMjpcdFx0aWYgKCFXQVJOX09OX09OQ0Uoc2hyaW5rZXJfaWQgXHUwMDNlPSBpbmZvLVx1MDAzZW1hcF9ucl9tYXgpKSB7XG5tbS9zaHJpbmtlci5jLTIxMy1cdFx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xubW0vc2hyaW5rZXIuYy0yMTQtXG5tbS9zaHJpbmtlci5jOjIxNTpcdFx0XHR1bml0ID0gaW5mby1cdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyX2lkKV07XG5tbS9zaHJpbmtlci5jLTIxNi1cdFx0XHQvKiBQYWlycyB3aXRoIHNtcCBtYiBpbiBzaHJpbmtfc2xhYigpICovXG5tbS9zaHJpbmtlci5jLTIxNy1cdFx0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbm1tL3Nocmlua2VyLmM6MjE4Olx0XHRcdHNldF9iaXQoc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyX2lkKSwgdW5pdC1cdTAwM2VtYXApO1xubW0vc2hyaW5rZXIuYy0yMTktXHRcdH1cbi0tXG5tbS9zaHJpbmtlci5jLTIyMy1cbm1tL3Nocmlua2VyLmM6MjI0OnN0YXRpYyBERUZJTkVfSURSKHNocmlua2VyX2lkcik7XG5tbS9zaHJpbmtlci5jLTIyNS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIzNS1cdGd1YXJkKG11dGV4KShcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG5tbS9zaHJpbmtlci5jOjIzNjpcdGlkID0gaWRyX2FsbG9jKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXIsIDAsIDAsIEdGUF9LRVJORUwpO1xubW0vc2hyaW5rZXIuYy0yMzctXHRpZiAoaWQgXHUwMDNjIDApXG4tLVxubW0vc2hyaW5rZXIuYy0yNDEtXHRcdGlmIChleHBhbmRfc2hyaW5rZXJfaW5mbyhpZCkpIHtcbm1tL3Nocmlua2VyLmM6MjQyOlx0XHRcdGlkcl9yZW1vdmUoXHUwMDI2c2hyaW5rZXJfaWRyLCBpZCk7XG5tbS9zaHJpbmtlci5jLTI0My1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9zaHJpbmtlci5jPTI1MD1zdGF0aWMgdm9pZCBzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTI1Ny1cbm1tL3Nocmlua2VyLmM6MjU4Olx0aWRyX3JlbW92ZShcdTAwMjZzaHJpbmtlcl9pZHIsIGlkKTtcbm1tL3Nocmlua2VyLmMtMjU5LX1cbi0tXG5tbS9zaHJpbmtlci5jPTI2MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkX21lbWNnKGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0vc2hyaW5rZXIuYy0yNjktXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjI3MDpcdHVuaXQgPSBpbmZvLVx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXItXHUwMDNlaWQpXTtcbm1tL3Nocmlua2VyLmM6MjcxOlx0bnJfZGVmZXJyZWQgPSBhdG9taWNfbG9uZ194Y2hnKFx1MDAyNnVuaXQtXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVx1MDAzZWlkKV0sIDApO1xubW0vc2hyaW5rZXIuYy0yNzItXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9zaHJpbmtlci5jPTI3Nz1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTI4NS1cdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VzaHJpbmtlcl9pbmZvKTtcbm1tL3Nocmlua2VyLmM6Mjg2Olx0dW5pdCA9IGluZm8tXHUwMDNldW5pdFtzaHJpbmtlcl9pZF90b19pbmRleChzaHJpbmtlci1cdTAwM2VpZCldO1xubW0vc2hyaW5rZXIuYy0yODctXHRucl9kZWZlcnJlZCA9XG5tbS9zaHJpbmtlci5jOjI4ODpcdFx0YXRvbWljX2xvbmdfYWRkX3JldHVybihuciwgXHUwMDI2dW5pdC1cdTAwM2Vucl9kZWZlcnJlZFtzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXItXHUwMDNlaWQpXSk7XG5tbS9zaHJpbmtlci5jLTI4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3Nocmlua2VyLmM9Mjk0PXZvaWQgcmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Nocmlua2VyLmMtMzA2LVx0XHRwYXJlbnRfaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKHBhcmVudCwgbmlkKTtcbm1tL3Nocmlua2VyLmM6MzA3Olx0XHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGNoaWxkX2luZm8tXHUwMDNlbWFwX25yX21heCk7IGluZGV4JiM0MzsmIzQzOykge1xubW0vc2hyaW5rZXIuYy0zMDgtXHRcdFx0Y2hpbGRfdW5pdCA9IGNoaWxkX2luZm8tXHUwMDNldW5pdFtpbmRleF07XG4tLVxubW0vc2hyaW5rZXIuYz00NzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4tLVxubW0vc2hyaW5rZXIuYy01MDItXHQgKiAgICAgICAgICBSQ1UgbG9jay5cbm1tL3Nocmlua2VyLmM6NTAzOlx0ICogIHN0ZXAgMzogdHJhdmVyc2UgdGhlIGJpdG1hcCBhbmQgY2FsY3VsYXRlIHNocmlua2VyX2lkXG5tbS9zaHJpbmtlci5jLTUwNC1cdCAqICBzdGVwIDQ6IHVzZSByY3VfcmVhZF9sb2NrKCkgdG8gZ3VhcmFudGVlIGV4aXN0ZW5jZSBvZiB0aGUgc2hyaW5rZXIuXG5tbS9zaHJpbmtlci5jOjUwNTpcdCAqICBzdGVwIDU6IHVzZSBzaHJpbmtlcl9pZCB0byBmaW5kIHRoZSBzaHJpbmtlciwgdGhlbiB1c2Vcbm1tL3Nocmlua2VyLmMtNTA2LVx0ICogICAgICAgICAgc2hyaW5rZXJfdHJ5X2dldCgpIHRvIGd1YXJhbnRlZSBleGlzdGVuY2Ugb2YgdGhlIHNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmMtNTI2LVxubW0vc2hyaW5rZXIuYzo1Mjc6XHRpZiAoaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGluZm8tXHUwMDNlbWFwX25yX21heCkpIHtcbm1tL3Nocmlua2VyLmMtNTI4LVx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xuLS1cbm1tL3Nocmlua2VyLmMtNTQwLVx0XHRcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG5tbS9zaHJpbmtlci5jOjU0MTpcdFx0XHRpbnQgc2hyaW5rZXJfaWQgPSBjYWxjX3Nocmlua2VyX2lkKGluZGV4LCBvZmZzZXQpO1xubW0vc2hyaW5rZXIuYy01NDItXG5tbS9zaHJpbmtlci5jLTU0My1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9zaHJpbmtlci5jOjU0NDpcdFx0XHRzaHJpbmtlciA9IGlkcl9maW5kKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXJfaWQpO1xubW0vc2hyaW5rZXIuYy01NDUtXHRcdFx0aWYgKHVubGlrZWx5KCFzaHJpbmtlciB8fCAhc2hyaW5rZXJfdHJ5X2dldChzaHJpbmtlcikpKSB7XG4tLVxubW0vc2hyaW5rZXIuYy01ODItXHRcdFx0XHRlbHNlXG5tbS9zaHJpbmtlci5jOjU4MzpcdFx0XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBzaHJpbmtlcl9pZCk7XG5tbS9zaHJpbmtlci5jLTU4NC1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBTaHJpbmtlciBMaWZlY3ljbGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBgc2hyaW5rZXJgIG9iamVjdCB3b3Jrcywgc3BlY2lmaWNhbGx5IGF0IGl0cyBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIHdlIGNhbGwgYHNocmlua2VyX2FsbG9jYD8gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkLiBUaGVuLCBzaW5jZSBhbGxvY2F0aW9uIGlzIHVzdWFsbHkgZm9sbG93ZWQgYnkgcmVnaXN0cmF0aW9uIG9mIHNvbWUgc29ydCwgSSBuZWVkIHRvIGxvb2sgaW50byBgc2hyaW5rZXJfcmVnaXN0ZXJgIGFzIHdlbGwuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0JiMzOTtzIGFsbCBhYm91dCB0cmFja2luZyB0aGUgbGlmZWN5Y2xlLCBhbmQgdGhvc2UgYXJlIHRoZSBwb2ludHMgSSBuZWVkIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtlcl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM4Mj1zdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy0zODMte1xubW0vaHVnZV9tZW1vcnkuYzozODQ6XHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDt0aHAtemVyb1wmIzM0Oyk7XG5tbS9odWdlX21lbW9yeS5jLTM4NS1cdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG5tbS9odWdlX21lbW9yeS5jLTEwNjUte1xubW0vaHVnZV9tZW1vcnkuYzoxMDY2Olx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ny1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4tLVxubW0vc2hyaW5rZXIuYz02MjQ9dW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYihnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Nocmlua2VyLmMtNjg3LVxubW0vc2hyaW5rZXIuYzo2ODg6c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxubW0vc2hyaW5rZXIuYy02ODkte1xuLS1cbm1tL3Nocmlua2VyLmMtNzQ2LX1cbm1tL3Nocmlua2VyLmM6NzQ3OkVYUE9SVF9TWU1CT0xfR1BMKHNocmlua2VyX2FsbG9jKTtcbm1tL3Nocmlua2VyLmMtNzQ4LVxubW0vc2hyaW5rZXIuYz03NDk9dm9pZCBzaHJpbmtlcl9yZWdpc3RlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbm1tL3Nocmlua2VyLmMtNzUxLVx0aWYgKHVubGlrZWx5KCEoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX0FMTE9DQVRFRCkpKSB7XG5tbS9zaHJpbmtlci5jOjc1MjpcdFx0cHJfd2FybihcJiMzNDtNdXN0IHVzZSBzaHJpbmtlcl9hbGxvYygpIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBzaHJpbmtlclwmIzM0Oyk7XG5tbS9zaHJpbmtlci5jLTc1My1cdFx0cmV0dXJuO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjI0ND12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIyODQtXG5tbS9zbGFiX2NvbW1vbi5jOjIyODU6XHRrZnJlZV9yY3Vfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDtzbGFiLWt2ZnJlZS1yY3VcJiMzNDspO1xubW0vc2xhYl9jb21tb24uYy0yMjg2LVx0aWYgKCFrZnJlZV9yY3Vfc2hyaW5rZXIpIHtcbi0tXG5tbS92bWFsbG9jLmM9NTU0Nz12b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbi0tXG5tbS92bWFsbG9jLmMtNTU5Ny1cbm1tL3ZtYWxsb2MuYzo1NTk4Olx0dm1hcF9ub2RlX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXCYjMzQ7dm1hcC1ub2RlXCYjMzQ7KTtcbm1tL3ZtYWxsb2MuYy01NTk5LVx0aWYgKCF2bWFwX25vZGVfc2hyaW5rZXIpIHtcbi0tXG5tbS93b3JraW5nc2V0LmM9NzkzPXN0YXRpYyBpbnQgX19pbml0IHdvcmtpbmdzZXRfaW5pdCh2b2lkKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy04MTgtXG5tbS93b3JraW5nc2V0LmM6ODE5Olx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbm1tL3dvcmtpbmdzZXQuYy04MjAtXHRcdFx0XHRcdFx0ICAgIFNIUklOS0VSX01FTUNHX0FXQVJFLFxuLS1cbm1tL3pzbWFsbG9jLmM9MjE4Mj1zdGF0aWMgaW50IHpzX3JlZ2lzdGVyX3Nocmlua2VyKHN0cnVjdCB6c19wb29sICpwb29sKVxubW0venNtYWxsb2MuYy0yMTgzLXtcbm1tL3pzbWFsbG9jLmM6MjE4NDpcdHBvb2wtXHUwMDNlc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDttbS16c3Bvb2w6JXNcJiMzNDssIHBvb2wtXHUwMDNlbmFtZSk7XG5tbS96c21hbGxvYy5jLTIxODUtXHRpZiAoIXBvb2wtXHUwMDNlc2hyaW5rZXIpXG4tLVxubW0venN3YXAuYz0xMjUxPXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXG4tLVxubW0venN3YXAuYy0xMjU1LVx0c2hyaW5rZXIgPVxubW0venN3YXAuYzoxMjU2Olx0XHRzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsIFwmIzM0O21tLXpzd2FwXCYjMzQ7KTtcbm1tL3pzd2FwLmMtMTI1Ny1cdGlmICghc2hyaW5rZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDY4NSB0aHJvdWdoIDc2NSBvZiBgbW0vc2hyaW5rZXIuY2AuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHNocmlua2VyIGZ1bmN0aW9uYWxpdHkuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIHByb2JhYmx5IGludm9sdmVzIHJlY2xhaW1pbmcgb3IgcmVsZWFzaW5nIGNhY2hlZCBwYWdlcyBmcm9tIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZSBvciBzb21lIG90aGVyIGtlcm5lbCBldmVudC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIHBhZ2UgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgY29uc2lkZXJhdGlvbnMgZm9yIGRpcnR5IHBhZ2VzLCBhbmQgcGVyaGFwcyBzb21lIGxvZ2ljIGFyb3VuZCB3aGF0IGtpbmQgb2YgcGFnZXMgYXJlIHRhcmdldGVkIGZvciBldmljdGlvbiAoZS5nLiwgZmlsZS1iYWNrZWQgdnMuIGFub255bW91cykuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlIHNocmlua2VyIHByaW9yaXRpemVzIHdoaWNoIHBhZ2VzIHRvIHJlY2xhaW0sIHRoZSBiYWxhbmNpbmcgYWN0IGJldHdlZW4gZnJlZWluZyBtZW1vcnkgYW5kIGF2b2lkaW5nIGV4Y2Vzc2l2ZSBJL08sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHN0cmF0ZWdpZXMgZW1wbG95ZWQgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLCB3aGljaCB3aWxsIGhlbHAgbWUgcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gYWxzbyByZWFkeSB0byBjcml0aWNhbGx5IGFzc2VzcyB0aGUgZGVzaWduIGNob2ljZXMgYW5kIGFudGljaXBhdGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaHJpbmtlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODU6XHRcdHJldHVybiBmcmVlZDtcbiA2ODY6XHR9XG4gNjg3Olx0XG4gNjg4Olx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIDY4OTpcdHtcbiA2OTA6XHRcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG4gNjkxOlx0XHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiA2OTI6XHRcdHZhX2xpc3QgYXA7XG4gNjkzOlx0XHRpbnQgZXJyO1xuIDY5NDpcdFxuIDY5NTpcdFx0c2hyaW5rZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2hyaW5rZXIpO1xuIDY5NjpcdFx0aWYgKCFzaHJpbmtlcilcbiA2OTc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjk4Olx0XG4gNjk5Olx0XHR2YV9zdGFydChhcCwgZm10KTtcbiA3MDA6XHRcdGVyciA9IHNocmlua2VyX2RlYnVnZnNfbmFtZV9hbGxvYyhzaHJpbmtlciwgZm10LCBhcCk7XG4gNzAxOlx0XHR2YV9lbmQoYXApO1xuIDcwMjpcdFx0aWYgKGVycilcbiA3MDM6XHRcdFx0Z290byBlcnJfbmFtZTtcbiA3MDQ6XHRcbiA3MDU6XHRcdHNocmlua2VyLVx1MDAzZWZsYWdzID0gZmxhZ3MgfCBTSFJJTktFUl9BTExPQ0FURUQ7XG4gNzA2Olx0XHRzaHJpbmtlci1cdTAwM2VzZWVrcyA9IERFRkFVTFRfU0VFS1M7XG4gNzA3Olx0XG4gNzA4Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSB7XG4gNzA5Olx0XHRcdGVyciA9IHNocmlua2VyX21lbWNnX2FsbG9jKHNocmlua2VyKTtcbiA3MTA6XHRcdFx0aWYgKGVyciA9PSAtRU5PU1lTKSB7XG4gNzExOlx0XHRcdFx0LyogTWVtY2cgaXMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIHNocmlua2VyLiAqL1xuIDcxMjpcdFx0XHRcdHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNj0gflNIUklOS0VSX01FTUNHX0FXQVJFO1xuIDcxMzpcdFx0XHRcdGdvdG8gbm9uX21lbWNnO1xuIDcxNDpcdFx0XHR9XG4gNzE1Olx0XG4gNzE2Olx0XHRcdGlmIChlcnIpXG4gNzE3Olx0XHRcdFx0Z290byBlcnJfZmxhZ3M7XG4gNzE4Olx0XG4gNzE5Olx0XHRcdHJldHVybiBzaHJpbmtlcjtcbiA3MjA6XHRcdH1cbiA3MjE6XHRcbiA3MjI6XHRub25fbWVtY2c6XG4gNzIzOlx0XHQvKlxuIDcyNDpcdFx0ICogVGhlIG5yX2RlZmVycmVkIGlzIGF2YWlsYWJsZSBvbiBwZXIgbWVtY2cgbGV2ZWwgZm9yIG1lbWNnIGF3YXJlXG4gNzI1Olx0XHQgKiBzaHJpbmtlcnMsIHNvIG9ubHkgYWxsb2NhdGUgbnJfZGVmZXJyZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiA3MjY6XHRcdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcbiA3Mjc6XHRcdCAqICAtICFDT05GSUdfTUVNQ0dcbiA3Mjg6XHRcdCAqICAtIG1lbWNnIGlzIGRpc2FibGVkIGJ5IGtlcm5lbCBjb21tYW5kIGxpbmVcbiA3Mjk6XHRcdCAqICAtIG5vbi1zbGFiIHNocmlua2Vyczogd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkXG4gNzMwOlx0XHQgKi9cbiA3MzE6XHRcdHNpemUgPSBzaXplb2YoKnNocmlua2VyLVx1MDAzZW5yX2RlZmVycmVkKTtcbiA3MzI6XHRcdGlmIChmbGFncyBcdTAwMjYgU0hSSU5LRVJfTlVNQV9BV0FSRSlcbiA3MzM6XHRcdFx0c2l6ZSAqPSBucl9ub2RlX2lkcztcbiA3MzQ6XHRcbiA3MzU6XHRcdHNocmlua2VyLVx1MDAzZW5yX2RlZmVycmVkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiA3MzY6XHRcdGlmICghc2hyaW5rZXItXHUwMDNlbnJfZGVmZXJyZWQpXG4gNzM3Olx0XHRcdGdvdG8gZXJyX2ZsYWdzO1xuIDczODpcdFxuIDczOTpcdFx0cmV0dXJuIHNocmlua2VyO1xuIDc0MDpcdFxuIDc0MTpcdGVycl9mbGFnczpcbiA3NDI6XHRcdHNocmlua2VyX2RlYnVnZnNfbmFtZV9mcmVlKHNocmlua2VyKTtcbiA3NDM6XHRlcnJfbmFtZTpcbiA3NDQ6XHRcdGtmcmVlKHNocmlua2VyKTtcbiA3NDU6XHRcdHJldHVybiBOVUxMO1xuIDc0NjpcdH1cbiA3NDc6XHRFWFBPUlRfU1lNQk9MX0dQTChzaHJpbmtlcl9hbGxvYyk7XG4gNzQ4Olx0XG4gNzQ5Olx0dm9pZCBzaHJpbmtlcl9yZWdpc3RlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuIDc1MDpcdHtcbiA3NTE6XHRcdGlmICh1bmxpa2VseSghKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9BTExPQ0FURUQpKSkge1xuIDc1MjpcdFx0XHRwcl93YXJuKFwmIzM0O011c3QgdXNlIHNocmlua2VyX2FsbG9jKCkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIHNocmlua2VyXCYjMzQ7KTtcbiA3NTM6XHRcdFx0cmV0dXJuO1xuIDc1NDpcdFx0fVxuIDc1NTpcdFxuIDc1NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gNzU3Olx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZzaHJpbmtlci1cdTAwM2VsaXN0LCBcdTAwMjZzaHJpbmtlcl9saXN0KTtcbiA3NTg6XHRcdHNocmlua2VyLVx1MDAzZWZsYWdzIHw9IFNIUklOS0VSX1JFR0lTVEVSRUQ7XG4gNzU5Olx0XHRzaHJpbmtlcl9kZWJ1Z2ZzX2FkZChzaHJpbmtlcik7XG4gNzYwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xuIDc2MTpcdFxuIDc2MjpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnNocmlua2VyLVx1MDAzZWRvbmUpO1xuIDc2MzpcdFx0LypcbiA3NjQ6XHRcdCAqIE5vdyB0aGUgc2hyaW5rZXIgaXMgZnVsbHkgc2V0IHVwLCB0YWtlIHRoZSBmaXJzdCByZWZlcmVuY2UgdG8gaXQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyNwoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiAxMDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBTaHJpbmtlciBJRCBJbml0aWFsaXphdGlvbiBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gd2hldGhlciBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGlzIG5lZWRlZCBoZXJlLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGBscnUtJmd0O3Nocmlua2VyX2lkYCBmaWVsZCB3aXRoaW4gdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlLCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHNldCBpbiByZWxhdGlvbiB0byBgc2hyaW5rZXJgIG9iamVjdHMsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcy4KCk15IHByaW1hcnkgY29uY2VybiBpcyB0aGlzOiB0aGUgcGF0Y2ggY2hhbmdlcyBob3cgYGxydS0mZ3Q7c2hyaW5rZXJfaWRgIGlzIHNldC4gUHJldmlvdXNseSwgaXQgd2FzIHNpbXBseSBgbHJ1LSZndDtzaHJpbmtlcl9pZCA9IHNocmlua2VyLSZndDtpZGAgaWYgYHNocmlua2VyYCB3YXMgbm90IE5VTEwuIEhvd2V2ZXIsIGlmIHRoZSBgc2hyaW5rZXJgIHdhcyBhbGxvY2F0ZWQgYnV0IHRoZW4gZmVsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSAoZHVlIHRvIHNvbWV0aGluZyBsaWtlIG1lbW9yeSBjZ3JvdXAgYmVpbmcgZGlzYWJsZWQpLCBpdHMgSUQgcmVtYWluZWQgYXQgdGhlIGRlZmF1bHQgemVybyAoYmVjYXVzZSBvZiBga3phbGxvY19vYmpgKS4gVGhlIHByb2JsZW1hdGljIGNvZGUgdXNlcyB0aGlzIHplcm8gdmFsdWUgYXMgYW4gYWN0dWFsIGlkIG9mIHNocmlua2VyLgoKVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGBzaHJpbmtlci0mZ3Q7aWRgIGlzIGdldHRpbmcgc2V0IHRvIHplcm8gYW5kIHRoZW4gaXQgZW5kcyB1cCBiZWluZyBhIHZhbGlkIGlkIGluIHRoZSBzeXN0ZW0uIFRoZSBmaXggaXMgdG8gYWRkIGEgY29uZGl0aW9uOiBgaWYgKHNocmlua2VyICZhbXA7JmFtcDsgKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9NRU1DR19BV0FSRSkpYC4gVGhpcyBlbnN1cmVzIHRoYXQgb25seSBtZW1jZy1hd2FyZSBzaHJpbmtlcnMgZ2V0IHRoZWlyIGBpZGAgYXNzaWduZWQuIE5vbi1tZW1jZyBhd2FyZSBzaHJpbmtlcnMgd2lsbCBoYXZlIHRoZWlyIGBscnUtJmd0O3Nocmlua2VyX2lkYCBzZXQgdG8gLTEsIHdoaWNoIHByZXZlbnRzIHRoZSBpbmNvcnJlY3QgdXNlIG9mIHRoZSB6ZXJvIElEIHZhbHVlLgoKU28sIGxldCYjMzk7cyBldmFsdWF0ZToKCjEuICAqKkRvZXMgdGhpcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vLiBUaGUgYHNocmlua2VyYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBieSBga3phbGxvY19vYmpgLCBhbmQgdGhlIGBzaHJpbmtlci0mZ3Q7ZmxhZ3NgIGZpZWxkIGlzIGV4cGxpY2l0bHkgc2V0IGFmdGVyd2FyZCBpbiBgc2hyaW5rZXJfYWxsb2MoKWAuIFRoZSB2YWx1ZSAwIG1pZ2h0IGJlICYjMzQ7c3RhbGUmIzM0OyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2VzbiYjMzk7dCByZXByZXNlbnQgYSB2YWxpZCBtZW1jZy1hd2FyZSBzaHJpbmtlciwgYnV0IGl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkLgoKMi4gICoqRG9lcyBpdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlPyoqIE5vLCB0aGVyZSBhcmUgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdGhlIHVzZXIgaW4gdGhpcyBjb2RlLgoKMy4gICoqRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYSBsb2dpY2FsIGNvbmRpdGlvbiB0byBjaGVjayBgc2hyaW5rZXItJmd0O2ZsYWdzYCBidXQgdGhlIG1lbW9yeSBpcyBub3QgdW5pbml0aWFsaXplZC4KCjQuICAqKkRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8uCgo1LiAgKipEb2VzIGl0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4/KiogTm8uCgpOb3csIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBLTVNBTiBhcHBsaWNhYmlsaXR5OgoKKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4KKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOb3BlLiBBbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoqICAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgcmVhZHM6KiogTm9wZS4KKiAgICoqQm91bmRzIGNoZWNrIGlzc3VlczoqKiBOb3BlLgoKVGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZyBpcyB0aGF0IHRoZSB6ZXJvIElEIHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGdvdCBwYXNzZWQgYXMgaWYgdmFsaWQuIFRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhpcyBhcyBhICYjMzQ7c3RhbGUgMCYjMzQ7LiBUaGlzIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIEtNU0FOJiMzOTtzIHBlcnNwZWN0aXZlOyBpdCYjMzk7cyBhICpsb2dpY2FsKiBlcnJvci4gVGhlIElEIDAgaXMgYSB2YWxpZCBJRCBmb3IgYW5vdGhlciBzaHJpbmtlci4KCk15IGNvbmNsdXNpb246IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMvc3RhdGUgY29uc2lzdGVuY3kgYnVnLiBLQVNBTiBhbmQgZ2VuZXJhbCBmdXp6aW5nIHNob3VsZCBiZSBhZGVxdWF0ZSB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpY2FsIGVycm9ycyByZXN1bHRpbmcgZnJvbSB0aGlzIGlzc3VlLiBLTVNBTiBpcyBub3QgcmVsZXZhbnQgaGVyZSBhcyB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAgaW4gYF9fbGlzdF9scnVfaW5pdCgpYCB0byBjaGVjayB3aGV0aGVyIHRoZSBzaHJpbmtlciBhY3R1YWxseSBoYXMgdGhlIGBTSFJJTktFUl9NRU1DR19BV0FSRWAgZmxhZyBzZXQgYmVmb3JlIHVzaW5nIGBzaHJpbmtlci1cdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxuXG5BbGwgcmVsZXZhbnQgc3RydWN0dXJlcyAoYHN0cnVjdCBzaHJpbmtlcmAgYW5kIGBzdHJ1Y3QgbGlzdF9scnVgKSBhcmUgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgYWxsb2NhdG9ycyAoYGt6YWxsb2Nfb2JqYCwgZXRjLiksIGFuZCBhbGwgZmllbGRzIGFjY2Vzc2VkIChgc2hyaW5rZXItXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXHUwMDNlaWRgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBkZWZhdWx0IHplcm8gdmFsdWUgKGBpZCA9IDBgKSBvZiBhIG5vbi1tZW1jZyBzaHJpbmtlciB3YXMgZXJyb25lb3VzbHkgaW50ZXJwcmV0ZWQgYXMgYSB2YWxpZCBJRCAoMCkgaW5zdGVhZCBvZiBhbiBpbnZhbGlkIElEICgtMSksIGxlYWRpbmcgdG8gc3B1cmlvdXMgY2FsbHMgdG8gYHNldF9zaHJpbmtlcl9iaXQoKWAuIFxuXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXHUwMDNlaWRgLCBhc3NpZ25pbmcgLTEgb3RoZXJ3aXNlLiBcblxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVx1MDAzZWZsYWdzYCwgYHNocmlua2VyLVx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcblxuVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQsIG5vIG1lbW9yeSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIGFuZCBubyBhbHRlcmVkIGRhdGEgbGVuZ3RoIG9yIGJvdW5kcyBjaGVjayBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MTQuMTYyOTIwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzE4OTM4MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCIsXG4gICAgXCJsaXN0X2xydV9kZXN0cm95XCIsXG4gICAgXCJtZW1jZ19yZXBhcmVudF9saXN0X2xydXNcIixcbiAgICBcInNldF9zaHJpbmtlcl9iaXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXFx1MDAzZXNocmlua2VyX2lkYCBpbiBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNocmlua2VyIGFjdHVhbGx5IGhhcyB0aGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIHNldCBiZWZvcmUgdXNpbmcgYHNocmlua2VyLVxcdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxcblxcbkFsbCByZWxldmFudCBzdHJ1Y3R1cmVzIChgc3RydWN0IHNocmlua2VyYCBhbmQgYHN0cnVjdCBsaXN0X2xydWApIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChga3phbGxvY19vYmpgLCBldGMuKSwgYW5kIGFsbCBmaWVsZHMgYWNjZXNzZWQgKGBzaHJpbmtlci1cXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXFx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcXG5cXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCBpcyBub3QgYXNzaWduZWQgYW4gdW5pbml0aWFsaXplZCBJRCBvZiAwIHdoZW4gYSBzaHJpbmtlciBmYWxscyBiYWNrIHRvIG5vbi1tZW1jZy1hd2FyZSBtb2RlIChzdWNoIGFzIHdoZW4gbWVtY2cga21lbSBpcyBkaXNhYmxlZCkuIFRoaXMgcHJldmVudHMgdW5pbnRlbmRlZCBzaHJpbmtlciBiaXQgdXBkYXRlcyBpbiBzZXRfc2hyaW5rZXJfYml0KCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjE0LjE2MjkyNTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDEwMzA0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMjRiZGM2ZGMxYjNhYjljMjlmNDIyNDg0MTQxMWZkOWZjN2NjODVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcXG5pbmRleCAzNjY2MmQwMmZmOTYzLi45NmQwMmVhMjA2YTg4IDEwMDY0NFxcbi0tLSBhL21tL2xpc3RfbHJ1LmNcXG4rKysgYi9tbS9saXN0X2xydS5jXFxuQEAgLTY2Niw3ICs2NjYsMTIgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcXG4gXFx0aW50IGk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01FTUNHXFxuLVxcdGlmIChzaHJpbmtlcilcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIHNocmlua2VyIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGUuZy4gd2l0aFxcbitcXHQgKiBjZ3JvdXAubWVtb3J5PW5va21lbSksIGl0cyBpZCB3YXMgbmV2ZXIgYXNzaWduZWQgYW5kIGhvbGRzIGFcXG4rXFx0ICogc3RhbGUgMC4gRG9uJ3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG4gXFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVxcdTAwM2VpZDtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjE0LjU2NDg0ODYzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDAxNDI2MzIwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xpc3RfbHJ1X2luaXRcIixcbiAgICBcImxpc3RfbHJ1X2Rlc3Ryb3lcIixcbiAgICBcIm1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c1wiLFxuICAgIFwic2V0X3Nocmlua2VyX2JpdFwiLFxuICAgIFwibGlzdF9scnVfd2Fsa19ub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY29tbWl0IG1vZGlmaWVzIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSBscnUtXFx1MDAzZXNocmlua2VyX2lkIGlzIG5vdCBhc3NpZ25lZCBhbiB1bmluaXRpYWxpemVkIElEIG9mIDAgd2hlbiBhIHNocmlua2VyIGZhbGxzIGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIG1vZGUgKHN1Y2ggYXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkKS4gVGhpcyBwcmV2ZW50cyB1bmludGVuZGVkIHNocmlua2VyIGJpdCB1cGRhdGVzIGluIHNldF9zaHJpbmtlcl9iaXQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTI0YmRjNmRjMWIzYWI5YzI5ZjQyMjQ4NDE0MTFmZDlmYzdjYzg1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uOTZkMDJlYTIwNmE4OCAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbisrKyBiL21tL2xpc3RfbHJ1LmNcbkBAIC02NjYsNyArNjY2LDEyIEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXG4gXHRpbnQgaTtcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4tXHRpZiAoc2hyaW5rZXIpXG4rXHQvKlxuK1x0ICogSWYgdGhlIHNocmlua2VyIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGUuZy4gd2l0aFxuK1x0ICogY2dyb3VwLm1lbW9yeT1ub2ttZW0pLCBpdHMgaWQgd2FzIG5ldmVyIGFzc2lnbmVkIGFuZCBob2xkcyBhXG4rXHQgKiBzdGFsZSAwLiBEb24ndCBsZXQgc2V0X3Nocmlua2VyX2JpdCgpIGFjdCBvbiBpdC5cbitcdCAqL1xuK1x0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MTQuNTY0ODUwNzAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMzOTMzMjEyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbGlzdF9scnUuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYG1tL2xpc3RfbHJ1LmNgLiBGaXJzdCwgSSBzZWUgYSBzdHJhaWdodGZvcndhcmQgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgYSBjb25kaXRpb25hbCBjaGVjayB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc2hyaW5rZXJgIGFzc2lnbm1lbnQuIFRoZSBwcmV2aW91cyBjb2RlIHNpbXBseSBhc3NpZ25lZCBgc2hyaW5rZXItXHUwMDNlaWRgIGlmIGBzaHJpbmtlcmAgd2FzIG5vdCBudWxsLiBOb3csIHdlIGhhdmUgYW4gYWRkZWQgY29uZGl0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBgQ09ORklHX01FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGUgYWRkZWQgY29tbWVudCBpcyBoZWxwZnVsIOKAkyBpdCBpbmRpY2F0ZXMgYSBzY2VuYXJpbyB3aGVyZSB0aGUgc2hyaW5rZXIgbWlnaHQgZmFsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSwgcG9zc2libHkgZHVlIHRvIHNvbWV0aGluZyBsaWtlIGBjZ3JvdXAubWVtb3J5PW5va21lbWAuIEluIHN1Y2ggYSBjYXNlLCB0aGUgc2hyaW5rZXIgSUQgd2Fzbid0IHByb3Blcmx5IGFzc2lnbmVkLCBsZWF2aW5nIGEgc3RhbGUgdmFsdWUuXG5cblRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgY2hlY2s6IGAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKWAuIFRoaXMgc3VnZ2VzdHMgdGhlIGludGVudGlvbiBpcyB0byBvbmx5IGFzc2lnbiB0aGUgYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAgd2hlbiB0aGUgc2hyaW5rZXIgaXMgYWN0dWFsbHkgbWVtY2ctYXdhcmUuIElmIHRoZSBzaHJpbmtlciBoYXMgZmFsbGVuIGJhY2sgYW5kIHRoaXMgZmxhZyBpcyAqbm90KiBzZXQsIHRoZSBJRCByZW1haW5zIHNldCB0byAtMS4gVGhpcyBpcyBhIHNvdW5kIGFwcHJvYWNoIGFuZCBwcmV2ZW50cyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgdXNhZ2Ugb2YgYSBzdGFsZSBvciB1bmRlZmluZWQgc2hyaW5rZXIgSUQuXG5cbk5vdywgbGV0IG1lIHJ1biB0aGlzIHBhdGNoIHRocm91Z2ggb3VyIHN0YXRpYyBhbmFseXNpcyB0b29scyBhbmQgc2VlIGlmIGFueXRoaW5nIGZsYWdzLiBJIGFsc28gd2FudCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3Igc2ltaWxhciBwYXR0ZXJucyBhbmQgcG9zc2libGUgcmVncmVzc2lvbnMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBhIHNpbWlsYXIgY29uZGl0aW9uIG1pZ2h0IGFwcGx5IG9yIGFueSBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDoyNy45NTgxNzQ5NTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1MDpcXHRcXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDY1MTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDY1MjpcXHRcXHRyZXR1cm4gcmVzO1xcbiA2NTM6XFx0fVxcbiA2NTQ6XFx0I2Vsc2VcXG4gNjU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA2NTY6XFx0e1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0fVxcbiA2NjI6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbiA2NjU6XFx0e1xcbiA2NjY6XFx0XFx0aW50IGk7XFxuIDY2NzpcXHRcXG4gNjY4OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjY5OlxcdFxcdC8qXFxuIDY3MDpcXHRcXHQgKiBJZiB0aGUgc2hyaW5rZXIgZmVsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSAoZS5nLiB3aXRoXFxuIDY3MTpcXHRcXHQgKiBjZ3JvdXAubWVtb3J5PW5va21lbSksIGl0cyBpZCB3YXMgbmV2ZXIgYXNzaWduZWQgYW5kIGhvbGRzIGFcXG4gNjcyOlxcdFxcdCAqIHN0YWxlIDAuIERvbid0IGxldCBzZXRfc2hyaW5rZXJfYml0KCkgYWN0IG9uIGl0LlxcbiA2NzM6XFx0XFx0ICovXFxuIDY3NDpcXHRcXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG4gNjc1OlxcdFxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cXHUwMDNlaWQ7XFxuIDY3NjpcXHRcXHRlbHNlXFxuIDY3NzpcXHRcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4gNjgwOlxcdFxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuIDY4MTpcXHQjZW5kaWZcXG4gNjgyOlxcdFxcbiA2ODM6XFx0XFx0bHJ1LVxcdTAwM2Vub2RlID0ga3phbGxvY19vYmpzKCpscnUtXFx1MDAzZW5vZGUsIG5yX25vZGVfaWRzKTtcXG4gNjg0OlxcdFxcdGlmICghbHJ1LVxcdTAwM2Vub2RlKVxcbiA2ODU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDY4NjpcXHRcXG4gNjg3OlxcdFxcdGZvcl9lYWNoX25vZGUoaSlcXG4gNjg4OlxcdFxcdFxcdGluaXRfb25lX2xydShscnUsIFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbaV0ubHJ1KTtcXG4gNjg5OlxcdFxcbiA2OTA6XFx0XFx0bWVtY2dfaW5pdF9saXN0X2xydShscnUsIG1lbWNnX2F3YXJlKTtcXG4gNjkxOlxcdFxcdGxpc3RfbHJ1X3JlZ2lzdGVyKGxydSk7XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdHJldHVybiAwO1xcbiA2OTQ6XFx0fVxcbiA2OTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19saXN0X2xydV9pbml0KTtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2OTg6XFx0e1xcbiA2OTk6XFx0XFx0LyogQWxyZWFkeSBkZXN0cm95ZWQgb3Igbm90IHlldCBpbml0aWFsaXplZD8gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MjcuOTU4MjU5OTYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1OTMzNTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIGBzaHJpbmtlcmAgYW5kIGBsaXN0X2xydWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgc2hyaW5rZXJgIG1lY2hhbmlzbSBhbmQgdGhlIGBsaXN0X2xydWAgZGF0YSBzdHJ1Y3R1cmUuIEknbSBzcGVjaWZpY2FsbHkgY3VyaW91cyBhYm91dCBob3cgdGhlIGBzaHJpbmtlcl9pZGAgdmFyaWFibGUgZmFjdG9ycyBpbnRvIHRoZWlyIGludGVycGxheS4gR2l2ZW4gdGhhdCBJJ20gd29ya2luZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIHNocmlua3MgY2FjaGUgb2JqZWN0cyBpbiBsaXN0IExSVXMgaXMgcHJldHR5IGNyaXRpY2FsLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbGwgaGVhZCBzdHJhaWdodCBmb3IgYG1tL2xpc3RfbHJ1LmNgIGFuZCB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gc2VlIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBzaHJpbmtlcl9pZGAgYW5kIGBsaXN0X2xydWAgYXJlIHVzZWQgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QsIGZvY3VzZWQgdmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZXhwb3NlIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgSUQgaXMgdXNlZCB0byBtYW5hZ2UgYW5kIGlkZW50aWZ5IExSVSBlbnRyaWVzIG9yIHNocmlua2VyIG9wZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBMUlUgbGlzdHMuIFdpdGggdGhhdCBpbmZvcm1hdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byByZWFzb24gYWJvdXQgaG93IGEgc2hyaW5rZXIgaXMgcmVnaXN0ZXJlZCBhbmQgaG93IGVudHJpZXMgYXJlIHJlbW92ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozMC4yMTc1OTc2OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTE5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rZXJfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2xpc3RfbHJ1LmM9NTk9c3RhdGljIHZvaWQgbGlzdF9scnVfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjgtXFxubW0vbGlzdF9scnUuYzo2OTpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTcwLXtcXG5tbS9saXN0X2xydS5jOjcxOlxcdHJldHVybiBscnUtXFx1MDAzZXNocmlua2VyX2lkO1xcbm1tL2xpc3RfbHJ1LmMtNzItfVxcbi0tXFxubW0vbGlzdF9scnUuYz0xMjA9c3RhdGljIHZvaWQgbGlzdF9scnVfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTIzLVxcbm1tL2xpc3RfbHJ1LmM6MTI0OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTkwPWJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS9saXN0X2xydS5jLTIwMS1cXHRcXHRpZiAoIWwtXFx1MDAzZW5yX2l0ZW1zKyspXFxubW0vbGlzdF9scnUuYzoyMDI6XFx0XFx0XFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XFxubW0vbGlzdF9scnUuYy0yMDMtXFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5ucl9pdGVtcyk7XFxuLS1cXG5tbS9saXN0X2xydS5jPTUwMT1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTUxNS1cXHRcXHRkc3QtXFx1MDAzZW5yX2l0ZW1zICs9IHNyYy1cXHUwMDNlbnJfaXRlbXM7XFxubW0vbGlzdF9scnUuYzo1MTY6XFx0XFx0c2V0X3Nocmlua2VyX2JpdChkc3RfbWVtY2csIG5pZCwgbHJ1X3Nocmlua2VyX2lkKGxydSkpO1xcbm1tL2xpc3RfbHJ1LmMtNTE3LVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY3NC1cXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG5tbS9saXN0X2xydS5jOjY3NTpcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXFx1MDAzZWlkO1xcbm1tL2xpc3RfbHJ1LmMtNjc2LVxcdGVsc2VcXG5tbS9saXN0X2xydS5jOjY3NzpcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxubW0vbGlzdF9scnUuYy02NzgtXFxuLS1cXG5tbS9saXN0X2xydS5jPTY5Nz12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTcwOS0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYzo3MTA6XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xcbm1tL2xpc3RfbHJ1LmMtNzExLSNlbmRpZlxcbi0tXFxubW0vc2hyaW5rZXIuYz0xNTk9c3RhdGljIGludCBleHBhbmRfc2hyaW5rZXJfaW5mbyhpbnQgbmV3X2lkKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0xODktXFxubW0vc2hyaW5rZXIuYzoxOTA6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW50IHNocmlua2VyX2lkKVxcbm1tL3Nocmlua2VyLmMtMTkxLXtcXG5tbS9zaHJpbmtlci5jOjE5MjpcXHRyZXR1cm4gc2hyaW5rZXJfaWQgLyBTSFJJTktFUl9VTklUX0JJVFM7XFxubW0vc2hyaW5rZXIuYy0xOTMtfVxcbm1tL3Nocmlua2VyLmMtMTk0LVxcbm1tL3Nocmlua2VyLmM6MTk1OnN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkX3RvX29mZnNldChpbnQgc2hyaW5rZXJfaWQpXFxubW0vc2hyaW5rZXIuYy0xOTYte1xcbm1tL3Nocmlua2VyLmM6MTk3OlxcdHJldHVybiBzaHJpbmtlcl9pZCAlIFNIUklOS0VSX1VOSVRfQklUUztcXG5tbS9zaHJpbmtlci5jLTE5OC19XFxubW0vc2hyaW5rZXIuYy0xOTktXFxubW0vc2hyaW5rZXIuYzoyMDA6c3RhdGljIGlubGluZSBpbnQgY2FsY19zaHJpbmtlcl9pZChpbnQgaW5kZXgsIGludCBvZmZzZXQpXFxubW0vc2hyaW5rZXIuYy0yMDEte1xcbi0tXFxubW0vc2hyaW5rZXIuYy0yMDQtXFxubW0vc2hyaW5rZXIuYzoyMDU6dm9pZCBzZXRfc2hyaW5rZXJfYml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCwgaW50IHNocmlua2VyX2lkKVxcbm1tL3Nocmlua2VyLmMtMjA2LXtcXG5tbS9zaHJpbmtlci5jOjIwNzpcXHRpZiAoc2hyaW5rZXJfaWQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xcbm1tL3Nocmlua2VyLmMtMjA4LVxcdFxcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xcbi0tXFxubW0vc2hyaW5rZXIuYy0yMTEtXFx0XFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZShtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbyk7XFxubW0vc2hyaW5rZXIuYzoyMTI6XFx0XFx0aWYgKCFXQVJOX09OX09OQ0Uoc2hyaW5rZXJfaWQgXFx1MDAzZT0gaW5mby1cXHUwMDNlbWFwX25yX21heCkpIHtcXG5tbS9zaHJpbmtlci5jLTIxMy1cXHRcXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xcbm1tL3Nocmlua2VyLmMtMjE0LVxcbm1tL3Nocmlua2VyLmM6MjE1OlxcdFxcdFxcdHVuaXQgPSBpbmZvLVxcdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyX2lkKV07XFxubW0vc2hyaW5rZXIuYy0yMTYtXFx0XFx0XFx0LyogUGFpcnMgd2l0aCBzbXAgbWIgaW4gc2hyaW5rX3NsYWIoKSAqL1xcbm1tL3Nocmlua2VyLmMtMjE3LVxcdFxcdFxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbm1tL3Nocmlua2VyLmM6MjE4OlxcdFxcdFxcdHNldF9iaXQoc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyX2lkKSwgdW5pdC1cXHUwMDNlbWFwKTtcXG5tbS9zaHJpbmtlci5jLTIxOS1cXHRcXHR9XFxuLS1cXG5tbS9zaHJpbmtlci5jLTIyMy1cXG5tbS9zaHJpbmtlci5jOjIyNDpzdGF0aWMgREVGSU5FX0lEUihzaHJpbmtlcl9pZHIpO1xcbm1tL3Nocmlua2VyLmMtMjI1LVxcbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjM1LVxcdGd1YXJkKG11dGV4KShcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbm1tL3Nocmlua2VyLmM6MjM2OlxcdGlkID0gaWRyX2FsbG9jKFxcdTAwMjZzaHJpbmtlcl9pZHIsIHNocmlua2VyLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG5tbS9zaHJpbmtlci5jLTIzNy1cXHRpZiAoaWQgXFx1MDAzYyAwKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0yNDEtXFx0XFx0aWYgKGV4cGFuZF9zaHJpbmtlcl9pbmZvKGlkKSkge1xcbm1tL3Nocmlua2VyLmM6MjQyOlxcdFxcdFxcdGlkcl9yZW1vdmUoXFx1MDAyNnNocmlua2VyX2lkciwgaWQpO1xcbm1tL3Nocmlua2VyLmMtMjQzLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0yNTA9c3RhdGljIHZvaWQgc2hyaW5rZXJfbWVtY2dfcmVtb3ZlKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTI1Ny1cXG5tbS9zaHJpbmtlci5jOjI1ODpcXHRpZHJfcmVtb3ZlKFxcdTAwMjZzaHJpbmtlcl9pZHIsIGlkKTtcXG5tbS9zaHJpbmtlci5jLTI1OS19XFxuLS1cXG5tbS9zaHJpbmtlci5jPTI2MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkX21lbWNnKGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTI2OS1cXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvKTtcXG5tbS9zaHJpbmtlci5jOjI3MDpcXHR1bml0ID0gaW5mby1cXHUwMDNldW5pdFtzaHJpbmtlcl9pZF90b19pbmRleChzaHJpbmtlci1cXHUwMDNlaWQpXTtcXG5tbS9zaHJpbmtlci5jOjI3MTpcXHRucl9kZWZlcnJlZCA9IGF0b21pY19sb25nX3hjaGcoXFx1MDAyNnVuaXQtXFx1MDAzZW5yX2RlZmVycmVkW3Nocmlua2VyX2lkX3RvX29mZnNldChzaHJpbmtlci1cXHUwMDNlaWQpXSwgMCk7XFxubW0vc2hyaW5rZXIuYy0yNzItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTI3Nz1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjg1LVxcdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZXNocmlua2VyX2luZm8pO1xcbm1tL3Nocmlua2VyLmM6Mjg2OlxcdHVuaXQgPSBpbmZvLVxcdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyLVxcdTAwM2VpZCldO1xcbm1tL3Nocmlua2VyLmMtMjg3LVxcdG5yX2RlZmVycmVkID1cXG5tbS9zaHJpbmtlci5jOjI4ODpcXHRcXHRhdG9taWNfbG9uZ19hZGRfcmV0dXJuKG5yLCBcXHUwMDI2dW5pdC1cXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVxcdTAwM2VpZCldKTtcXG5tbS9zaHJpbmtlci5jLTI4OS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9Mjk0PXZvaWQgcmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0zMDYtXFx0XFx0cGFyZW50X2luZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChwYXJlbnQsIG5pZCk7XFxubW0vc2hyaW5rZXIuYzozMDc6XFx0XFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2Mgc2hyaW5rZXJfaWRfdG9faW5kZXgoY2hpbGRfaW5mby1cXHUwMDNlbWFwX25yX21heCk7IGluZGV4KyspIHtcXG5tbS9zaHJpbmtlci5jLTMwOC1cXHRcXHRcXHRjaGlsZF91bml0ID0gY2hpbGRfaW5mby1cXHUwMDNldW5pdFtpbmRleF07XFxuLS1cXG5tbS9zaHJpbmtlci5jPTQ3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTAyLVxcdCAqICAgICAgICAgIFJDVSBsb2NrLlxcbm1tL3Nocmlua2VyLmM6NTAzOlxcdCAqICBzdGVwIDM6IHRyYXZlcnNlIHRoZSBiaXRtYXAgYW5kIGNhbGN1bGF0ZSBzaHJpbmtlcl9pZFxcbm1tL3Nocmlua2VyLmMtNTA0LVxcdCAqICBzdGVwIDQ6IHVzZSByY3VfcmVhZF9sb2NrKCkgdG8gZ3VhcmFudGVlIGV4aXN0ZW5jZSBvZiB0aGUgc2hyaW5rZXIuXFxubW0vc2hyaW5rZXIuYzo1MDU6XFx0ICogIHN0ZXAgNTogdXNlIHNocmlua2VyX2lkIHRvIGZpbmQgdGhlIHNocmlua2VyLCB0aGVuIHVzZVxcbm1tL3Nocmlua2VyLmMtNTA2LVxcdCAqICAgICAgICAgIHNocmlua2VyX3RyeV9nZXQoKSB0byBndWFyYW50ZWUgZXhpc3RlbmNlIG9mIHRoZSBzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTI2LVxcbm1tL3Nocmlua2VyLmM6NTI3OlxcdGlmIChpbmRleCBcXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGluZm8tXFx1MDAzZW1hcF9ucl9tYXgpKSB7XFxubW0vc2hyaW5rZXIuYy01MjgtXFx0XFx0c3RydWN0IHNocmlua2VyX2luZm9fdW5pdCAqdW5pdDtcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTQwLVxcdFxcdFxcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XFxubW0vc2hyaW5rZXIuYzo1NDE6XFx0XFx0XFx0aW50IHNocmlua2VyX2lkID0gY2FsY19zaHJpbmtlcl9pZChpbmRleCwgb2Zmc2V0KTtcXG5tbS9zaHJpbmtlci5jLTU0Mi1cXG5tbS9zaHJpbmtlci5jLTU0My1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vc2hyaW5rZXIuYzo1NDQ6XFx0XFx0XFx0c2hyaW5rZXIgPSBpZHJfZmluZChcXHUwMDI2c2hyaW5rZXJfaWRyLCBzaHJpbmtlcl9pZCk7XFxubW0vc2hyaW5rZXIuYy01NDUtXFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzaHJpbmtlciB8fCAhc2hyaW5rZXJfdHJ5X2dldChzaHJpbmtlcikpKSB7XFxuLS1cXG5tbS9zaHJpbmtlci5jLTU4Mi1cXHRcXHRcXHRcXHRlbHNlXFxubW0vc2hyaW5rZXIuYzo1ODM6XFx0XFx0XFx0XFx0XFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBzaHJpbmtlcl9pZCk7XFxubW0vc2hyaW5rZXIuYy01ODQtXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozMC4yNzEzNTQ0ODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI0Mzk3MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEluaXRpYWxpemF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgX19saXN0X2xydV9pbml0YC4gUHJldmlvdXNseSwgd2hlbiBpbml0aWFsaXppbmcgdGhlIExSVSwgaXQgd291bGQgYXNzaWduIHRoZSBgc2hyaW5rZXJfaWRgIGJhc2VkIG9uIHdoZXRoZXIgYSBzaHJpbmtlciB3YXMgcHJlc2VudCwgYW5kIHVuZGVyIGBDT05GSUdfTUVNQ0dgLCB0aGlzIHdhcyBzdHJhaWdodGZvcndhcmQuIElmIGEgYHNocmlua2VyYCBleGlzdGVkLCBpdCBnb3QgdGhlIElELiBOb3csIGhvd2V2ZXIsIHRoZXJlJ3MgYW4gYWRkZWQgY2hlY2s6XG5cbmBgYGNcblx0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcblx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcblx0ZWxzZVxuXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuYGBgXG5cbkludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHdlJ3JlIG5vdyAqYWxzbyogY2hlY2tpbmcgdGhlIGBTSFJJTktFUl9NRU1DR19BV0FSRWAgZmxhZyBvbiB0aGUgYHNocmlua2VyYCBzdHJ1Y3QuIFRoZSBjb21tZW50IGlzIGNydWNpYWw7IGl0J3MgYWRkcmVzc2luZyBhIHNjZW5hcmlvIHdoZXJlIGEgc2hyaW5rZXIgbWlnaHQgZmFsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSwgcGVyaGFwcyBkdWUgdG8gYSBjb25maWd1cmF0aW9uIGxpa2UgYGNncm91cC5tZW1vcnk9bm9rbWVtYC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBgc2hyaW5rZXItXHUwMDNlaWRgIG1pZ2h0IGJlIHN0YWxlICgwKS4gVGhpcyBwcmV2ZW50cyBgc2V0X3Nocmlua2VyX2JpdCgpYCBmcm9tIGFjdGluZyBvbiBhbiBpbnZhbGlkIGBzaHJpbmtlcl9pZGAuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgaXMgc2V0IGFuZCBob3cgYHNocmlua2VyLVx1MDAzZWlkYCBpcyBhc3NpZ25lZCBhbmQgbWFuYWdlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGVzcGVjaWFsbHkgaWYgdGhlIHNocmlua2VyIGlzbid0IG1lbWNnLWF3YXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBzaHJpbmtlcl9hbGxvY2AgYW5kIGBzaHJpbmtlcl9yZWdpc3RlcmAgaW4gYG1tL3Nocmlua2VyLmNgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRob3NlIHZhcmlhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozMy40OTU3NTM1NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjk0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0hSSU5LRVJfTUVNQ0dfQVdBUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY2LVxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8XFxubW0vaHVnZV9tZW1vcnkuYzoxMDY3OlxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcXG5tbS9odWdlX21lbW9yeS5jLTEwNjgtXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0aHAtZGVmZXJyZWRfc3BsaXRcXFwiKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY3My1cXHQgKi9cXG5tbS9saXN0X2xydS5jOjY3NDpcXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG5tbS9saXN0X2xydS5jLTY3NS1cXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXFx1MDAzZWlkO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0zNDE9c3RhdGljIGxvbmcgeGNoZ19ucl9kZWZlcnJlZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYy0zNDktXFx0aWYgKHNjLVxcdTAwM2VtZW1jZyBcXHUwMDI2XFx1MDAyNlxcbm1tL3Nocmlua2VyLmM6MzUwOlxcdCAgICAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxcbm1tL3Nocmlua2VyLmMtMzUxLVxcdFxcdHJldHVybiB4Y2hnX25yX2RlZmVycmVkX21lbWNnKG5pZCwgc2hyaW5rZXIsXFxuLS1cXG5tbS9zaHJpbmtlci5jPTM1OD1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWQobG9uZyBuciwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMzY2LVxcdGlmIChzYy1cXHUwMDNlbWVtY2cgXFx1MDAyNlxcdTAwMjZcXG5tbS9zaHJpbmtlci5jOjM2NzpcXHQgICAgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG5tbS9zaHJpbmtlci5jLTM2OC1cXHRcXHRyZXR1cm4gYWRkX25yX2RlZmVycmVkX21lbWNnKG5yLCBuaWQsIHNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYz02ODg9c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03MDctXFxubW0vc2hyaW5rZXIuYzo3MDg6XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpIHtcXG5tbS9zaHJpbmtlci5jLTcwOS1cXHRcXHRlcnIgPSBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzaHJpbmtlcik7XFxuLS1cXG5tbS9zaHJpbmtlci5jLTcxMS1cXHRcXHRcXHQvKiBNZW1jZyBpcyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byBub24tbWVtY2ctYXdhcmUgc2hyaW5rZXIuICovXFxubW0vc2hyaW5rZXIuYzo3MTI6XFx0XFx0XFx0c2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5TSFJJTktFUl9NRU1DR19BV0FSRTtcXG5tbS9zaHJpbmtlci5jLTcxMy1cXHRcXHRcXHRnb3RvIG5vbl9tZW1jZztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NzgwPXZvaWQgc2hyaW5rZXJfZnJlZShzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vc2hyaW5rZXIuYy04MTItXFxubW0vc2hyaW5rZXIuYzo4MTM6XFx0aWYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKVxcbm1tL3Nocmlua2VyLmMtODE0LVxcdFxcdHNocmlua2VyX21lbWNnX3JlbW92ZShzaHJpbmtlcik7XFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jPTQ3PXN0YXRpYyBpbnQgc2hyaW5rZXJfZGVidWdmc19jb3VudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Nocmlua2VyX2RlYnVnLmMtNTktXFxubW0vc2hyaW5rZXJfZGVidWcuYzo2MDpcXHRtZW1jZ19hd2FyZSA9IHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFO1xcbm1tL3Nocmlua2VyX2RlYnVnLmMtNjEtXFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jPTEwMD1zdGF0aWMgc3NpemVfdCBzaHJpbmtlcl9kZWJ1Z2ZzX3NjYW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTEyNy1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjEyODpcXHRpZiAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpIHtcXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTEyOS1cXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoaWQpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTc5Mz1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy04MTktXFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcXG5tbS93b3JraW5nc2V0LmM6ODIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBTSFJJTktFUl9NRU1DR19BV0FSRSxcXG5tbS93b3JraW5nc2V0LmMtODIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwibW0tc2hhZG93XFxcIik7XFxuLS1cXG5tbS96c3dhcC5jPTEyNTE9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI1NS1cXHRzaHJpbmtlciA9XFxubW0venN3YXAuYzoxMjU2OlxcdFxcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXFxcIm1tLXpzd2FwXFxcIik7XFxubW0venN3YXAuYy0xMjU3LVxcdGlmICghc2hyaW5rZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjMzLjU0Mzc5Njc2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAxODAwMjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBMaXN0IExSVSBhbmQgTWVtY2cgU2hyaW5rZXIgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBzaHJpbmtlcl9hbGxvY2AsIGlmIHdlIGVuY291bnRlciBgLUVOT1NZU2AgZnJvbSBgc2hyaW5rZXJfbWVtY2dfYWxsb2NgLCB3aGljaCBzaWduYWxzIHRoYXQgbWVtY2cgaXNuJ3Qgc3VwcG9ydGVkIChvciBhdCBsZWFzdCwga21lbSBpcyBkaXNhYmxlZCksIHRoZSBjb2RlIGNvcnJlY3RseSBmYWxscyBiYWNrIHRvIGEgbm9uLW1lbWNnLWF3YXJlIHNocmlua2VyLiBUaGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIGlzIGNsZWFyZWQsIHdoaWNoIGlzIGdvb2QuIEhvd2V2ZXIsIHRoZSBgc2hyaW5rZXItXHUwMDNlaWRgIGZpZWxkIHJlbWFpbnMgdW5pbml0aWFsaXplZCDigJMgaXQncyBzdHVjayBhdCAwICh0aGUgZGVmYXVsdCB2YWx1ZSBhZnRlciBga3phbGxvY2ApLlxuXG5UaGUgcHJvYmxlbSBzdXJmYWNlcyBsYXRlciwgd2hlbiBjb2RlIGxpa2UgdGhhdCBpbiBzdXBlcmJsb2NrcyBpbml0aWFsaXplcyBhIGBsaXN0X2xydWAgKGZvciBleGFtcGxlIGBzLVx1MDAzZXNfZGVudHJ5X2xydWApIGFuZCBwYXNzZXMgdGhlIHNocmlua2VyIHRvIGBfX2xpc3RfbHJ1X2luaXRgLiBCZWZvcmUgdGhpcyBwYXRjaCwgYF9fbGlzdF9scnVfaW5pdGAgd291bGQgc2ltcGx5IGNoZWNrIGZvciBhIG5vbi1OVUxMIHNocmlua2VyIGFuZCB0aGVuIGJsaW5kbHkgYXNzaWduIGBzaHJpbmtlci1cdTAwM2VpZGAgdG8gYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAuIFRoaXMgbWVhbnMgdGhhdCBldmVuIGlmIHRoZSBzaHJpbmtlciBpc24ndCBtZW1jZy1hd2FyZSwgYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAgZ2V0cyBzZXQgdG8gMC5cblxuTGF0ZXIsIHRoZSBjb2RlIGNhbGxzIGBzZXRfc2hyaW5rZXJfYml0YCB3aXRoIHRoaXMgcG90ZW50aWFsbHkgaW52YWxpZCBgc2hyaW5rZXJfaWRgLiBUaGUgYml0bWFzayBmb3IgbWVtY2cgc2hyaW5rZXJzIHdvdWxkIGJlIG1vZGlmaWVkIHVzaW5nIHRoaXMgdmFsdWUgb2YgMCwgZXZlbiB0aG91Z2ggdGhlIHNocmlua2VyIGlzbid0IG1lbWNnLWF3YXJlIG9yIHZhbGlkICh3aGljaCBpcyBpbmNvcnJlY3QgYW5kIGlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMpLlxuXG5UaGlzIHBhdGNoIGludHJvZHVjZXMgYSBmaXg6IGl0IGFkZHMgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgX19saXN0X2xydV9pbml0YDogYGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpYC4gSWYgdGhlIHNocmlua2VyIGlzbid0IG1lbWNnLWF3YXJlLCBgbHJ1LVx1MDAzZXNocmlua2VyX2lkYCBnZXRzIHNldCB0byAtMS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYz8gQWJzb2x1dGVseS4gVGhlIGBsaXN0X2xydWAgYW5kIHNocmlua2VyIGxvZ2ljIGFyZSBmdW5kYW1lbnRhbCBNTSBjb21wb25lbnRzLiBUaGUgcGF0Y2ggZWZmZWN0aXZlbHkgcHJldmVudHMgaW5jb3JyZWN0IHNocmlua2VyIGJpdCB1cGRhdGVzIHdoZW4gbWVtY2cga21lbSBpcyBkaXNhYmxlZCAob3IgaWYgd2UgaGFkIGEgZmFsbGJhY2sgc2NlbmFyaW8pLiBUaGVyZWZvcmUsIHRoaXMgZGVzZXJ2ZXMgZnVydGhlciBzY3J1dGlueS5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgaXMgd29ydGggZnV6emluZywgdGhpcyBwYXRjaCBjbGVhcmx5IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Gb3IgZnV6emluZywgSSBzaG91bGQgZm9jdXMgb24gdGhlIGBfX2xpc3RfbHJ1X2luaXRgIGZ1bmN0aW9uIGl0c2VsZiwgYXMgd2VsbCBhcyB0aGUgc3Vycm91bmRpbmcgY2FsbHMgaW4gYG1tL2xpc3RfbHJ1LmNgLiBUaGVzZSBhcmUgdGhlIGVudHJ5cG9pbnRzIHRvIGJlIG1vbml0b3JlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozOS41NjE4MDE5NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjI3Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbGlzdF9scnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9saXN0X2xydS5jPTE5MD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbi0tXFxubW0vbGlzdF9scnUuYy0yMDctfVxcbm1tL2xpc3RfbHJ1LmM6MjA4OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2FkZCk7XFxubW0vbGlzdF9scnUuYy0yMDktXFxuLS1cXG5tbS9saXN0X2xydS5jPTI0Nz1ib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxuLS1cXG5tbS9saXN0X2xydS5jLTI2MS19XFxubW0vbGlzdF9scnUuYzoyNjI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XFxubW0vbGlzdF9scnUuYy0yNjMtXFxuLS1cXG5tbS9saXN0X2xydS5jPTI3Nz1ib29sIGxpc3RfbHJ1X2RlbF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxuLS1cXG5tbS9saXN0X2xydS5jLTI5MS19XFxubW0vbGlzdF9scnUuYzoyOTI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfZGVsX29iaik7XFxubW0vbGlzdF9scnUuYy0yOTMtXFxubW0vbGlzdF9scnUuYz0yOTQ9dm9pZCBsaXN0X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxuLS1cXG5tbS9saXN0X2xydS5jLTI5OC19XFxubW0vbGlzdF9scnUuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XFxubW0vbGlzdF9scnUuYy0zMDAtXFxubW0vbGlzdF9scnUuYz0zMDE9dm9pZCBsaXN0X2xydV9pc29sYXRlX21vdmUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMzA2LX1cXG5tbS9saXN0X2xydS5jOjMwNzpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlX21vdmUpO1xcbm1tL2xpc3RfbHJ1LmMtMzA4LVxcbm1tL2xpc3RfbHJ1LmM9MzA5PXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbGlzdF9scnUuYy0zMjQtfVxcbm1tL2xpc3RfbHJ1LmM6MzI1OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X29uZSk7XFxubW0vbGlzdF9scnUuYy0zMjYtXFxubW0vbGlzdF9scnUuYz0zMjc9dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxcbi0tXFxubW0vbGlzdF9scnUuYy0zMzMtfVxcbm1tL2xpc3RfbHJ1LmM6MzM0OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X25vZGUpO1xcbm1tL2xpc3RfbHJ1LmMtMzM1LVxcbi0tXFxubW0vbGlzdF9scnUuYz0zOTU9bGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDAxLX1cXG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XFxubW0vbGlzdF9scnUuYy00MDMtXFxuLS1cXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDQ4LX1cXG5tbS9saXN0X2xydS5jOjQ0OTpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX25vZGUpO1xcbm1tL2xpc3RfbHJ1LmMtNDUwLVxcbi0tXFxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjk0LX1cXG5tbS9saXN0X2xydS5jOjY5NTpFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xcbm1tL2xpc3RfbHJ1LmMtNjk2LVxcbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzEyLX1cXG5tbS9saXN0X2xydS5jOjcxMzpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZXN0cm95KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MzkuNjEyNDMzNDA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDg2MDU5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTUVNQ0dgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgbW0vbGlzdF9scnUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IGBsaXN0X2xydS5jYCBpcyBjb21waWxlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBnYXRpbmcgaXRzIGluY2x1c2lvbiBvciBwb3RlbnRpYWxseSBndWFyZGluZyBhc3BlY3RzIG9mIGBDT05GSUdfTUVNQ0dgIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gY2VydGFpbiBLY29uZmlnIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDEuNTIxMDQyNDU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ2ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X2xydVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MjIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS01Ni1cXHRcXHRcXHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxcXFxubW0vTWFrZWZpbGU6NTc6XFx0XFx0XFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXFxcXG5tbS9NYWtlZmlsZS01OC1cXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcXHUwMDNlXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTcyPXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVmZXJyZWRfc3BsaXRfa2V5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzM6c3RhdGljIHN0cnVjdCBsaXN0X2xydSBkZWZlcnJlZF9zcGxpdF9scnU7XFxubW0vaHVnZV9tZW1vcnkuYy03NC1zdGF0aWMgc3RydWN0IHNocmlua2VyICpkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzgyPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4Ni1cXHRcXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM4NzpcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzg4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDU3PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDYwLVxcdFxcdHJldHVybiAwO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTA2MTpcXHRyZXR1cm4gZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MoZm9saW8sIFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Mi19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA3MS1cXG5tbS9odWdlX21lbW9yeS5jOjEwNzI6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxubW0vaHVnZV9tZW1vcnkuYy0xMDczLVxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA4Nj1zdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4OC1cXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jOjEwODk6XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcXG5tbS9odWdlX21lbW9yeS5jLTEwOTAtXFx0aHVnZV96ZXJvX3Nocmlua2VyX2V4aXQoKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ4Mz1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDk0LSAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ5NTogKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5Ni0gKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJ3MgdW5sb2NrZWRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5OC0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ5OTogKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMC0gKiBpbXBvcnRhbnQgdG8gdW5xdWV1ZSBkZWZlcnJlZCBzcGxpdCBiZWZvcmUgY2hhbmdpbmcgZm9saW8gbWVtY2cuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1MDI9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OlxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1MDYtXFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MTQtXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTE1OlxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MTY6XFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNy1cXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTIzLVxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjQ1MjQ6XFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUyNS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDUzMT12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG5tbS9odWdlX21lbW9yeS5jLTQ1MzIte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMzpcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxubW0vaHVnZV9tZW1vcnkuYy00NTM0LVxcdGludCBuaWQ7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NjEtXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTYyOlxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NjMtXFx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU3NC1cXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0NTc1OlxcdF9fbGlzdF9scnVfYWRkKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkLCBtZW1jZyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTc2OlxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NzctXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1ODQtXFxubW0vaHVnZV9tZW1vcnkuYzo0NTg1OlxcdGNvdW50ID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIHNjKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1ODYtXFx0cmV0dXJuIGNvdW50ID86IFNIUklOS19FTVBUWTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDYxNj1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG5tbS9odWdlX21lbW9yeS5jOjQ2MTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYxOC1cXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICpjYl9hcmcpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MjYtXFxubW0vaHVnZV9tZW1vcnkuYzo0NjI3OlxcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ2MjgtXFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MzgtXFxubW0vaHVnZV9tZW1vcnkuYzo0NjM5OlxcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIHNjLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY0MC1cXHRcXHRcXHRcXHRcXHQgICAgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSwgXFx1MDAyNmRpc3Bvc2UpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Njc4LVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ2Nzk6XFx0XFx0XFx0bGlzdF9scnVfYWRkX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY4MC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCxcXG4tLVxcbm1tL2ludGVybmFsLmg9NzMyPXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTczOS1cXHQgKiBkZWZlcnJlZF9saXN0LiBJZiBmb2xpbyBpcyBub3QgaW4gZGVmZXJyZWRfbGlzdCwgaXQncyBzYWZlXFxubW0vaW50ZXJuYWwuaDo3NDA6XFx0ICogdG8gY2hlY2sgd2l0aG91dCBhY3F1aXJpbmcgdGhlIGxpc3RfbHJ1IGxvY2suXFxubW0vaW50ZXJuYWwuaC03NDEtXFx0ICovXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTE0NzA9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKTtcXG5tbS9pbnRlcm5hbC5oOjE0NzE6ZXh0ZXJuIHN0cnVjdCBsaXN0X2xydSBzaGFkb3dfbm9kZXM7XFxubW0vaW50ZXJuYWwuaC0xNDcyLSNkZWZpbmUgbWFwcGluZ19zZXRfdXBkYXRlKHhhcywgbWFwcGluZykgZG8ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxubW0vbGlzdF9scnUuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9scnUuaFxcdTAwM2VcXG5tbS9saXN0X2xydS5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuLS1cXG5tbS9saXN0X2xydS5jLTE3LVxcbm1tL2xpc3RfbHJ1LmM6MTg6c3RhdGljIGlubGluZSB2b2lkIGxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnEsXFxubW0vbGlzdF9scnUuYy0xOS1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxcbi0tXFxubW0vbGlzdF9scnUuYy0yOC1cXG5tbS9saXN0X2xydS5jOjI5OnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxcbm1tL2xpc3RfbHJ1LmMtMzAtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxcbi0tXFxubW0vbGlzdF9scnUuYy00MC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYzo0MTpzdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XFxubW0vbGlzdF9scnUuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYy00My1cXG5tbS9saXN0X2xydS5jOjQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTQ1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDgtXFxubW0vbGlzdF9scnUuYzo0OTpzdGF0aWMgdm9pZCBsaXN0X2xydV9yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTUwLXtcXG5tbS9saXN0X2xydS5jOjUxOlxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG5tbS9saXN0X2xydS5jLTUyLVxcdFxcdHJldHVybjtcXG5tbS9saXN0X2xydS5jLTUzLVxcbm1tL2xpc3RfbHJ1LmM6NTQ6XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9scnVzX211dGV4KTtcXG5tbS9saXN0X2xydS5jOjU1OlxcdGxpc3RfYWRkKFxcdTAwMjZscnUtXFx1MDAzZWxpc3QsIFxcdTAwMjZtZW1jZ19saXN0X2xydXMpO1xcbm1tL2xpc3RfbHJ1LmM6NTY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbm1tL2xpc3RfbHJ1LmMtNTctfVxcbm1tL2xpc3RfbHJ1LmMtNTgtXFxubW0vbGlzdF9scnUuYzo1OTpzdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNjAte1xcbm1tL2xpc3RfbHJ1LmM6NjE6XFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxcbm1tL2xpc3RfbHJ1LmMtNjItXFx0XFx0cmV0dXJuO1xcbm1tL2xpc3RfbHJ1LmMtNjMtXFxubW0vbGlzdF9scnUuYzo2NDpcXHRtdXRleF9sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbm1tL2xpc3RfbHJ1LmMtNjUtXFx0bGlzdF9kZWwoXFx1MDAyNmxydS1cXHUwMDNlbGlzdCk7XFxubW0vbGlzdF9scnUuYzo2NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYy02Ny19XFxubW0vbGlzdF9scnUuYy02OC1cXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNzAte1xcbi0tXFxubW0vbGlzdF9scnUuYy03My1cXG5tbS9saXN0X2xydS5jOjc0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxubW0vbGlzdF9scnUuYzo3NTpsaXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcXG5tbS9saXN0X2xydS5jLTc2LXtcXG5tbS9saXN0X2xydS5jOjc3OlxcdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFxcdTAwMjZcXHUwMDI2IGlkeCBcXHUwMDNlPSAwKSB7XFxubW0vbGlzdF9scnUuYzo3ODpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnUgPSB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpZHgpO1xcbm1tL2xpc3RfbHJ1LmMtNzktXFxuLS1cXG5tbS9saXN0X2xydS5jLTg0LVxcbm1tL2xpc3RfbHJ1LmM6ODU6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcXG5tbS9saXN0X2xydS5jOjg2OmxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYy04Ny1cXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXFxuLS1cXG5tbS9saXN0X2xydS5jLTg5LXtcXG5tbS9saXN0X2xydS5jOjkwOlxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XFxubW0vbGlzdF9scnUuYy05MS1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtOTMtYWdhaW46XFxubW0vbGlzdF9scnUuYzo5NDpcXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XFxubW0vbGlzdF9scnUuYy05NS1cXHRpZiAobGlrZWx5KGwpKSB7XFxubW0vbGlzdF9scnUuYzo5NjpcXHRcXHRsb2NrX2xpc3RfbHJ1KGwsIGlycSwgaXJxX2ZsYWdzKTtcXG5tbS9saXN0X2xydS5jLTk3LVxcdFxcdGlmIChsaWtlbHkoUkVBRF9PTkNFKGwtXFx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTAwLVxcdFxcdH1cXG5tbS9saXN0X2xydS5jOjEwMTpcXHRcXHR1bmxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xcbm1tL2xpc3RfbHJ1LmMtMTAyLVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTA0LVxcdCAqIENhbGxlciBtYXkgc2ltcGx5IGJhaWwgb3V0IGlmIHJhY2VkIHdpdGggcmVwYXJlbnRpbmcgb3JcXG5tbS9saXN0X2xydS5jOjEwNTpcXHQgKiBtYXkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0X2xydSBhbmQgZXhwZWN0IGVtcHR5IHNsb3RzLlxcbm1tL2xpc3RfbHJ1LmMtMTA2LVxcdCAqL1xcbi0tXFxubW0vbGlzdF9scnUuYy0xMTUtI2Vsc2VcXG5tbS9saXN0X2xydS5jOjExNjpzdGF0aWMgdm9pZCBsaXN0X2xydV9yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTExNy17XFxuLS1cXG5tbS9saXN0X2xydS5jLTExOS1cXG5tbS9saXN0X2xydS5jOjEyMDpzdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTIxLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTIzLVxcbm1tL2xpc3RfbHJ1LmM6MTI0OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTI4LVxcbm1tL2xpc3RfbHJ1LmM6MTI5OnN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTEzMC17XFxuLS1cXG5tbS9saXN0X2xydS5jLTEzMy1cXG5tbS9saXN0X2xydS5jOjEzNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxcbm1tL2xpc3RfbHJ1LmM6MTM1Omxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxcbm1tL2xpc3RfbHJ1LmMtMTM2LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTM5LVxcbm1tL2xpc3RfbHJ1LmM6MTQwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxubW0vbGlzdF9scnUuYzoxNDE6bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTE0Mi1cXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE0NC17XFxubW0vbGlzdF9scnUuYzoxNDU6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbCA9IFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5scnU7XFxubW0vbGlzdF9scnUuYy0xNDYtXFxubW0vbGlzdF9scnUuYzoxNDc6XFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XFxubW0vbGlzdF9scnUuYy0xNDgtXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1Mi1cXG5tbS9saXN0X2xydS5jOjE1MzpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTU0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXFxubW0vbGlzdF9scnUuYy0xNTUte1xcbm1tL2xpc3RfbHJ1LmM6MTU2OlxcdHJldHVybiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBtZW1jZywgLyppcnE9Ki9mYWxzZSxcXG5tbS9saXN0X2xydS5jLTE1Ny1cXHRcXHRcXHRcXHQgICAgICAvKmlycV9mbGFncz0qL05VTEwsIC8qc2tpcF9lbXB0eT0qL2ZhbHNlKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTU5LVxcbm1tL2xpc3RfbHJ1LmM6MTYwOnZvaWQgbGlzdF9scnVfdW5sb2NrKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxubW0vbGlzdF9scnUuYy0xNjEte1xcbm1tL2xpc3RfbHJ1LmM6MTYyOlxcdHVubG9ja19saXN0X2xydShsLCAvKmlycV9vZmY9Ki9mYWxzZSwgLyppcnFfZmxhZ3M9Ki9OVUxMKTtcXG5tbS9saXN0X2xydS5jLTE2My19XFxubW0vbGlzdF9scnUuYy0xNjQtXFxubW0vbGlzdF9scnUuYzoxNjU6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYy0xNjYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXFxubW0vbGlzdF9scnUuYy0xNjcte1xcbm1tL2xpc3RfbHJ1LmM6MTY4OlxcdHJldHVybiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBtZW1jZywgLyppcnE9Ki90cnVlLFxcbm1tL2xpc3RfbHJ1LmMtMTY5LVxcdFxcdFxcdFxcdCAgICAgIC8qaXJxX2ZsYWdzPSovTlVMTCwgLypza2lwX2VtcHR5PSovZmFsc2UpO1xcbi0tXFxubW0vbGlzdF9scnUuYy0xNzEtXFxubW0vbGlzdF9scnUuYzoxNzI6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxubW0vbGlzdF9scnUuYy0xNzMte1xcbm1tL2xpc3RfbHJ1LmM6MTc0OlxcdHVubG9ja19saXN0X2xydShsLCAvKmlycV9vZmY9Ki90cnVlLCAvKmlycV9mbGFncz0qL05VTEwpO1xcbm1tL2xpc3RfbHJ1LmMtMTc1LX1cXG5tbS9saXN0X2xydS5jLTE3Ni1cXG5tbS9saXN0X2xydS5jOjE3NzpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrX2lycXNhdmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYy0xNzgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTgwLXtcXG5tbS9saXN0X2xydS5jOjE4MTpcXHRyZXR1cm4gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgbWVtY2csIC8qaXJxPSovdHJ1ZSxcXG5tbS9saXN0X2xydS5jLTE4Mi1cXHRcXHRcXHRcXHQgICAgICAvKmlycV9mbGFncz0qL2ZsYWdzLCAvKnNraXBfZW1wdHk9Ki9mYWxzZSk7XFxuLS1cXG5tbS9saXN0X2xydS5jLTE4NC1cXG5tbS9saXN0X2xydS5jOjE4NTp2b2lkIGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbm1tL2xpc3RfbHJ1LmMtMTg2LXtcXG5tbS9saXN0X2xydS5jOjE4NzpcXHR1bmxvY2tfbGlzdF9scnUobCwgLyppcnFfb2ZmPSovdHJ1ZSwgLyppcnFfZmxhZ3M9Ki9mbGFncyk7XFxubW0vbGlzdF9scnUuYy0xODgtfVxcbm1tL2xpc3RfbHJ1LmMtMTg5LVxcbm1tL2xpc3RfbHJ1LmM6MTkwOmJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0xOTEtXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE5Ny1cXHRcXHQgKiBTZXQgc2hyaW5rZXIgYml0IG9uIHRoZSBtZW1jZyB0aGF0IG93bnMgdGhlIGxvY2tlZFxcbm1tL2xpc3RfbHJ1LmM6MTk4OlxcdFxcdCAqIHN1Ymxpc3QgLSBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKCkgbWF5IGhhdmUgd2Fsa2VkIHVwXFxubW0vbGlzdF9scnUuYy0xOTktXFx0XFx0ICogcGFzdCBhIGR5aW5nIG1lbWNnLCBhbmQgdGhlIGJpdCBtdXN0IGJlIHNldCB0aGVyZS5cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjA3LX1cXG5tbS9saXN0X2xydS5jOjIwODpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGQpO1xcbm1tL2xpc3RfbHJ1LmMtMjA5LVxcbm1tL2xpc3RfbHJ1LmM6MjEwOmJvb2wgX19saXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0yMTEtXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXFxuLS1cXG5tbS9saXN0X2xydS5jLTIyMi0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjIyMzpib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTIyNC1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTIyNS17XFxubW0vbGlzdF9scnUuYzoyMjY6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTIyNy1cXHRib29sIHJldDtcXG5tbS9saXN0X2xydS5jLTIyOC1cXG5tbS9saXN0X2xydS5jOjIyOTpcXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjIzMDpcXHRyZXQgPSBfX2xpc3RfbHJ1X2FkZChscnUsIGwsIGl0ZW0sIG5pZCwgbWVtY2cpO1xcbm1tL2xpc3RfbHJ1LmM6MjMxOlxcdGxpc3RfbHJ1X3VubG9jayhsKTtcXG5tbS9saXN0X2xydS5jLTIzMi1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vbGlzdF9scnUuYy0yMzQtXFxubW0vbGlzdF9scnUuYzoyMzU6Ym9vbCBsaXN0X2xydV9hZGRfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbm1tL2xpc3RfbHJ1LmMtMjM2LVxcdFxcdCAgICAgIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTIzNy17XFxubW0vbGlzdF9scnUuYzoyMzg6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTIzOS1cXHRib29sIHJldDtcXG5tbS9saXN0X2xydS5jLTI0MC1cXG5tbS9saXN0X2xydS5jOjI0MTpcXHRsID0gbGlzdF9scnVfbG9ja19pcnEobHJ1LCBuaWQsIFxcdTAwMjZtZW1jZyk7XFxubW0vbGlzdF9scnUuYzoyNDI6XFx0cmV0ID0gX19saXN0X2xydV9hZGQobHJ1LCBsLCBpdGVtLCBuaWQsIG1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjI0MzpcXHRsaXN0X2xydV91bmxvY2tfaXJxKGwpO1xcbm1tL2xpc3RfbHJ1LmMtMjQ0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9saXN0X2xydS5jLTI0Ni1cXG5tbS9saXN0X2xydS5jOjI0Nzpib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxubW0vbGlzdF9scnUuYy0yNDgte1xcbi0tXFxubW0vbGlzdF9scnUuYy0yNTEtXFxubW0vbGlzdF9scnUuYzoyNTI6XFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcXG5tbS9saXN0X2xydS5jLTI1My1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vbGlzdF9scnUuYzoyNTQ6XFx0XFx0cmV0ID0gbGlzdF9scnVfYWRkKGxydSwgaXRlbSwgbmlkLCBtZW1fY2dyb3VwX2Zyb21fdmlydChpdGVtKSk7XFxubW0vbGlzdF9scnUuYy0yNTUtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubW0vbGlzdF9scnUuYy0yNTYtXFx0fSBlbHNlIHtcXG5tbS9saXN0X2xydS5jOjI1NzpcXHRcXHRyZXQgPSBsaXN0X2xydV9hZGQobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xcbm1tL2xpc3RfbHJ1LmMtMjU4LVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjYxLX1cXG5tbS9saXN0X2xydS5jOjI2MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGRfb2JqKTtcXG5tbS9saXN0X2xydS5jLTI2My1cXG5tbS9saXN0X2xydS5jLTI2NC0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjI2NTpib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTI2Ni1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTI2Ny17XFxubW0vbGlzdF9scnUuYzoyNjg6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTI2OS1cXHRib29sIHJldDtcXG5tbS9saXN0X2xydS5jLTI3MC1cXG5tbS9saXN0X2xydS5jOjI3MTpcXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjI3MjpcXHRyZXQgPSBfX2xpc3RfbHJ1X2RlbChscnUsIGwsIGl0ZW0sIG5pZCk7XFxubW0vbGlzdF9scnUuYzoyNzM6XFx0bGlzdF9scnVfdW5sb2NrKGwpO1xcbm1tL2xpc3RfbHJ1LmMtMjc0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9saXN0X2xydS5jLTI3Ni1cXG5tbS9saXN0X2xydS5jOjI3Nzpib29sIGxpc3RfbHJ1X2RlbF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxubW0vbGlzdF9scnUuYy0yNzgte1xcbi0tXFxubW0vbGlzdF9scnUuYy0yODEtXFxubW0vbGlzdF9scnUuYzoyODI6XFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcXG5tbS9saXN0X2xydS5jLTI4My1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vbGlzdF9scnUuYzoyODQ6XFx0XFx0cmV0ID0gbGlzdF9scnVfZGVsKGxydSwgaXRlbSwgbmlkLCBtZW1fY2dyb3VwX2Zyb21fdmlydChpdGVtKSk7XFxubW0vbGlzdF9scnUuYy0yODUtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubW0vbGlzdF9scnUuYy0yODYtXFx0fSBlbHNlIHtcXG5tbS9saXN0X2xydS5jOjI4NzpcXHRcXHRyZXQgPSBsaXN0X2xydV9kZWwobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xcbm1tL2xpc3RfbHJ1LmMtMjg4LVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjkxLX1cXG5tbS9saXN0X2xydS5jOjI5MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcXG5tbS9saXN0X2xydS5jLTI5My1cXG5tbS9saXN0X2xydS5jOjI5NDp2b2lkIGxpc3RfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcXG5tbS9saXN0X2xydS5jLTI5NS17XFxuLS1cXG5tbS9saXN0X2xydS5jLTI5OC19XFxubW0vbGlzdF9scnUuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XFxubW0vbGlzdF9scnUuYy0zMDAtXFxubW0vbGlzdF9scnUuYzozMDE6dm9pZCBsaXN0X2xydV9pc29sYXRlX21vdmUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG5tbS9saXN0X2xydS5jLTMwMi1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubW0vbGlzdF9scnUuYy0zMDYtfVxcbm1tL2xpc3RfbHJ1LmM6MzA3OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2lzb2xhdGVfbW92ZSk7XFxubW0vbGlzdF9scnUuYy0zMDgtXFxubW0vbGlzdF9scnUuYzozMDk6dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbGlzdF9scnUuYy0zMTAtXFx0XFx0XFx0XFx0IGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTMxMS17XFxubW0vbGlzdF9scnUuYzozMTI6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTMxMy1cXHRsb25nIGNvdW50O1xcbi0tXFxubW0vbGlzdF9scnUuYy0zMTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL2xpc3RfbHJ1LmM6MzE2OlxcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgbWVtY2dfa21lbV9pZChtZW1jZykpO1xcbm1tL2xpc3RfbHJ1LmMtMzE3LVxcdGNvdW50ID0gbCA/IFJFQURfT05DRShsLVxcdTAwM2Vucl9pdGVtcykgOiAwO1xcbi0tXFxubW0vbGlzdF9scnUuYy0zMjQtfVxcbm1tL2xpc3RfbHJ1LmM6MzI1OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X29uZSk7XFxubW0vbGlzdF9scnUuYy0zMjYtXFxubW0vbGlzdF9scnUuYzozMjc6dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxcbm1tL2xpc3RfbHJ1LmMtMzI4LXtcXG5tbS9saXN0X2xydS5jOjMyOTpcXHRzdHJ1Y3QgbGlzdF9scnVfbm9kZSAqbmxydTtcXG5tbS9saXN0X2xydS5jLTMzMC1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMzMzLX1cXG5tbS9saXN0X2xydS5jOjMzNDpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9jb3VudF9ub2RlKTtcXG5tbS9saXN0X2xydS5jLTMzNS1cXG5tbS9saXN0X2xydS5jPTMzNj1zdGF0aWMgdW5zaWduZWQgbG9uZ1xcbm1tL2xpc3RfbHJ1LmM6MzM3Ol9fbGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9saXN0X2xydS5jOjMzODpcXHRcXHQgICAgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXFxubW0vbGlzdF9scnUuYy0zMzktXFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGssIGJvb2wgaXJxX29mZilcXG5tbS9saXN0X2xydS5jLTM0MC17XFxubW0vbGlzdF9scnUuYzozNDE6XFx0c3RydWN0IGxpc3RfbHJ1X25vZGUgKm5scnUgPSBcXHUwMDI2bHJ1LVxcdTAwM2Vub2RlW25pZF07XFxubW0vbGlzdF9scnUuYzozNDI6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbCA9IE5VTEw7XFxubW0vbGlzdF9scnUuYy0zNDMtXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgKm47XFxuLS1cXG5tbS9saXN0X2xydS5jLTM0Ni1yZXN0YXJ0Olxcbm1tL2xpc3RfbHJ1LmM6MzQ3OlxcdGwgPSBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBcXHUwMDI2bWVtY2csIC8qaXJxPSovaXJxX29mZixcXG5tbS9saXN0X2xydS5jLTM0OC1cXHRcXHRcXHRcXHQgICAvKmlycV9mbGFncz0qL05VTEwsIC8qc2tpcF9lbXB0eT0qL3RydWUpO1xcbi0tXFxubW0vbGlzdF9scnUuYy0zODgtXFx0fVxcbm1tL2xpc3RfbHJ1LmM6Mzg5OlxcdHVubG9ja19saXN0X2xydShsLCBpcnFfb2ZmLCBOVUxMKTtcXG5tbS9saXN0X2xydS5jLTM5MC1vdXQ6XFxuLS1cXG5tbS9saXN0X2xydS5jPTM5ND11bnNpZ25lZCBsb25nXFxubW0vbGlzdF9scnUuYzozOTU6bGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9saXN0X2xydS5jOjM5NjpcXHRcXHQgIGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxcbm1tL2xpc3RfbHJ1LmMtMzk3LVxcdFxcdCAgdW5zaWduZWQgbG9uZyAqbnJfdG9fd2FsaylcXG5tbS9saXN0X2xydS5jLTM5OC17XFxubW0vbGlzdF9scnUuYzozOTk6XFx0cmV0dXJuIF9fbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIG1lbWNnLCBpc29sYXRlLFxcbm1tL2xpc3RfbHJ1LmMtNDAwLVxcdFxcdFxcdFxcdCAgIGNiX2FyZywgbnJfdG9fd2FsaywgZmFsc2UpO1xcbm1tL2xpc3RfbHJ1LmMtNDAxLX1cXG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XFxubW0vbGlzdF9scnUuYy00MDMtXFxubW0vbGlzdF9scnUuYz00MDQ9dW5zaWduZWQgbG9uZ1xcbm1tL2xpc3RfbHJ1LmM6NDA1Omxpc3RfbHJ1X3dhbGtfb25lX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2xpc3RfbHJ1LmM6NDA2OlxcdFxcdCAgICAgIGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxcbm1tL2xpc3RfbHJ1LmMtNDA3LVxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspXFxubW0vbGlzdF9scnUuYy00MDgte1xcbm1tL2xpc3RfbHJ1LmM6NDA5OlxcdHJldHVybiBfX2xpc3RfbHJ1X3dhbGtfb25lKGxydSwgbmlkLCBtZW1jZywgaXNvbGF0ZSxcXG5tbS9saXN0X2xydS5jLTQxMC1cXHRcXHRcXHRcXHQgICBjYl9hcmcsIG5yX3RvX3dhbGssIHRydWUpO1xcbi0tXFxubW0vbGlzdF9scnUuYy00MTItXFxubW0vbGlzdF9scnUuYzo0MTM6dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYzo0MTQ6XFx0XFx0XFx0XFx0IGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxcbm1tL2xpc3RfbHJ1LmMtNDE1LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpucl90b193YWxrKVxcbi0tXFxubW0vbGlzdF9scnUuYy00MTgtXFxubW0vbGlzdF9scnUuYzo0MTk6XFx0aXNvbGF0ZWQgKz0gbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIE5VTEwsIGlzb2xhdGUsIGNiX2FyZyxcXG5tbS9saXN0X2xydS5jLTQyMC1cXHRcXHRcXHRcXHQgICAgICBucl90b193YWxrKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDIyLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQyMzpcXHRpZiAoKm5yX3RvX3dhbGsgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcXG5tbS9saXN0X2xydS5jOjQyNDpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxubW0vbGlzdF9scnUuYy00MjUtXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbi0tXFxubW0vbGlzdF9scnUuYy00MzUtXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubW0vbGlzdF9scnUuYzo0MzY6XFx0XFx0XFx0aXNvbGF0ZWQgKz0gX19saXN0X2xydV93YWxrX29uZShscnUsIG5pZCwgbWVtY2csXFxubW0vbGlzdF9scnUuYy00MzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0aXNvbGF0ZSwgY2JfYXJnLFxcbi0tXFxubW0vbGlzdF9scnUuYy00NDgtfVxcbm1tL2xpc3RfbHJ1LmM6NDQ5OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X3dhbGtfbm9kZSk7XFxubW0vbGlzdF9scnUuYy00NTAtXFxubW0vbGlzdF9scnUuYzo0NTE6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbm1tL2xpc3RfbHJ1LmMtNDUyLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDYyLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQ2MzpzdGF0aWMgc3RydWN0IGxpc3RfbHJ1X21lbWNnICptZW1jZ19pbml0X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbm1tL2xpc3RfbHJ1LmMtNDY0LXtcXG5tbS9saXN0X2xydS5jLTQ2NS1cXHRpbnQgbmlkO1xcbm1tL2xpc3RfbHJ1LmM6NDY2OlxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcXG5tbS9saXN0X2xydS5jLTQ2Ny1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDc3LVxcbm1tL2xpc3RfbHJ1LmM6NDc4OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbm1tL2xpc3RfbHJ1LmMtNDc5LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDg0LVxcbm1tL2xpc3RfbHJ1LmM6NDg1OnN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy00ODYte1xcbm1tL2xpc3RfbHJ1LmMtNDg3LVxcdFhBX1NUQVRFKHhhcywgXFx1MDAyNmxydS1cXHUwMDNleGEsIDApO1xcbm1tL2xpc3RfbHJ1LmM6NDg4OlxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcXG5tbS9saXN0X2xydS5jLTQ4OS1cXG5tbS9saXN0X2xydS5jOjQ5MDpcXHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXFxubW0vbGlzdF9scnUuYy00OTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbGlzdF9scnUuYy01MDAtXFxubW0vbGlzdF9scnUuYzo1MDE6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmM6NTAyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcXG5tbS9saXN0X2xydS5jLTUwMy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqZHN0X21lbWNnKVxcbi0tXFxubW0vbGlzdF9scnUuYy01MDUtXFx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXFx1MDAzZWttZW1jZ19pZDtcXG5tbS9saXN0X2xydS5jOjUwNjpcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpkc3Q7XFxubW0vbGlzdF9scnUuYy01MDctXFxubW0vbGlzdF9scnUuYy01MDgtXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG5tbS9saXN0X2xydS5jOjUwOTpcXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgZHN0X2lkeCk7XFxubW0vbGlzdF9scnUuYy01MTAtXFx0c3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2ZHN0LVxcdTAwM2Vsb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuLS1cXG5tbS9saXN0X2xydS5jLTUxNy1cXHR9XFxubW0vbGlzdF9scnUuYzo1MTg6XFx0LyogTWFyayB0aGUgbGlzdF9scnVfb25lIGRlYWQgKi9cXG5tbS9saXN0X2xydS5jLTUxOS1cXHRzcmMtXFx1MDAzZW5yX2l0ZW1zID0gTE9OR19NSU47XFxuLS1cXG5tbS9saXN0X2xydS5jLTUyNC1cXG5tbS9saXN0X2xydS5jOjUyNTp2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbGlzdF9scnUuYy01MjYte1xcbm1tL2xpc3RfbHJ1LmM6NTI3OlxcdHN0cnVjdCBsaXN0X2xydSAqbHJ1O1xcbm1tL2xpc3RfbHJ1LmMtNTI4LVxcdGludCBpO1xcbm1tL2xpc3RfbHJ1LmMtNTI5LVxcbm1tL2xpc3RfbHJ1LmM6NTMwOlxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYzo1MzE6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShscnUsIFxcdTAwMjZtZW1jZ19saXN0X2xydXMsIGxpc3QpIHtcXG5tbS9saXN0X2xydS5jOjUzMjpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxubW0vbGlzdF9scnUuYy01MzMtXFxubW0vbGlzdF9scnUuYy01MzQtXFx0XFx0LypcXG5tbS9saXN0X2xydS5jOjUzNTpcXHRcXHQgKiBjc3NfaXNfZHlpbmcoKSBjaGVjayBpbiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGF2b2lkc1xcbm1tL2xpc3RfbHJ1LmMtNTM2LVxcdFxcdCAqIGFsbG9jYXRpbmcgYSBuZXcgbWxydSBzaW5jZSBDU1NfRFlJTkcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoaXNcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTQ1LVxcdFxcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxcbm1tL2xpc3RfbHJ1LmM6NTQ2OlxcdFxcdCAqIGNvbmN1cnJlbnQgbGlzdF9scnVfZGVsKCkgbWF5IGNvcnJ1cHQgdGhlIGxpc3QgaWYgaXQgYXJyaXZlc1xcbm1tL2xpc3RfbHJ1LmMtNTQ3LVxcdFxcdCAqIGFmdGVyIHhhcnJheSBjbGVhciBidXQgYmVmb3JlIHJlcGFyZW50aW5nIGFzXFxubW0vbGlzdF9scnUuYzo1NDg6XFx0XFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50J3MgbG9jayB3aGlsZSB0aGVcXG5tbS9saXN0X2xydS5jLTU0OS1cXHRcXHQgKiBpdGVtIGlzIHN0aWxsIG9uIGNoaWxkJ3MgbGlzdC5cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTUxLVxcdFxcdGZvcl9lYWNoX25vZGUoaSlcXG5tbS9saXN0X2xydS5jOjU1MjpcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG5tbS9saXN0X2xydS5jLTU1My1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTU2LVxcdFxcdC8qXFxubW0vbGlzdF9scnUuYzo1NTc6XFx0XFx0ICogSGVyZSBhbGwgbGlzdF9scnVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNncm91cCBhcmUgZ3VhcmFudGVlZFxcbm1tL2xpc3RfbHJ1LmMtNTU4LVxcdFxcdCAqIHRvIHJlbWFpbiBlbXB0eSwgd2UgY2FuIHNhZmVseSBmcmVlIHRoaXMgbHJ1LCBhbnkgZnVydGhlclxcbm1tL2xpc3RfbHJ1LmM6NTU5OlxcdFxcdCAqIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgY2FsbCB3aWxsIHNpbXBseSBiYWlsIG91dC5cXG5tbS9saXN0X2xydS5jLTU2MC1cXHRcXHQgKi9cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTYyLVxcdH1cXG5tbS9saXN0X2xydS5jOjU2MzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYy01NjQtfVxcbm1tL2xpc3RfbHJ1LmMtNTY1LVxcbm1tL2xpc3RfbHJ1LmM6NTY2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2xpc3RfbHJ1LmM6NTY3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDEuNTcxNTE1OTA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTI4MTU4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIE1FTUNHKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBNZW1vcnkgQ29udHJvbCBHcm91cHMgKE1FTUNHKS4gVGhpcyBpc24ndCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgbm90IHlldCBhbnl3YXksIGJ1dCBhIGZpcnN0LXBhc3MgY2hlY2suIEkgd2FudCB0byBzZWUgaWYgTUVNQ0cgaXMgZXZlbiAqZW5hYmxlZCogb3IgaWYgaXQncyBwb3RlbnRpYWxseSBjb25maWd1cmVkIGluIGEgc3BlY2lmaWMgd2F5IHRoYXQgY291bGQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBteSB0YXJnZXQgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGFyZSB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzLCBsaWtlIG1lbW9yeSByZXNvdXJjZSBjb250cm9sIGFuZCBoaWVyYXJjaGljYWwgY2dyb3VwcywgY29tcGlsZWQgaW50byB0aGUga2VybmVsPyBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMsIGFuZCBoYXZlIGFueSBjdXN0b20gY29uZmlndXJhdGlvbnMgYmVlbiBhcHBsaWVkPyBUaGlzIGlzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGF2b2lkIHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIHJvb3RlZCBpbiBhIGRpc2FibGVkIG9yIG1pc2NvbmZpZ3VyZWQgTUVNQ0cgc2V0dXAuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjQzLjkyNDMzMzg4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NjIzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4Ni1cXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjQzLjk2OTIwMDM3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTU5MDYwOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBDb250cm9sIEdyb3VwcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJvdW5kIE1FTUNHLiBXaGVyZSB3b3VsZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGJlPyBIbW0sIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHNwb3QuIEl0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUga2VybmVsLiBMZXQncyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCBLY29uZmlnIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlIHRvIE1FTUNHLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIHN1YnN5c3RlbXMgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgTUVNQ0cgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyBJIG1pZ2h0IG5lZWQgdG8gZG8uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgdHJlZSBjbGVhcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjEzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjQ3LjkyODI2Mzk1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTE6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDo0Ny45MjgzOTUwNTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwMTUxMjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUmVsYXRpb25zaGlwIEJldHdlZW4gTUVNQ0cgYW5kIENHUk9VUFMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgTUVNQ0cgKG1lbW9yeSBjb250cm9sIGdyb3VwcykgYW5kIGhvdyB0aGV5IGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoLCBhbmQgZnJhbmtseSwgbXkgd29ya2luZyBhc3N1bXB0aW9uLCBpcyB0aGF0IE1FTUNHIGlzIGZ1bmRhbWVudGFsbHkgKmRlcGVuZGVudCogb24gQ0dST1VQUy4gTGV0J3MgZHJpbGwgZG93biBhbmQgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBNRU1DRyByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgQ0dST1VQUyBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGFuZCBlbnN1cmUgSSdtIHNvbGlkIG9uIHRoZSBhcmNoaXRlY3R1cmUuIExldCdzIGNsYXJpZnkgdGhlaXIgcm9sZXMgYW5kIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYwMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDkuOTI5OTEwMzE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2MDpcXHRcXG4xMDYxOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNjI6XFx0XFxuMTA2MzpcXHRpZiBDR1JPVVBTXFxuMTA2NDpcXHRcXG4xMDY1OlxcdGNvbmZpZyBQQUdFX0NPVU5URVJcXG4xMDY2OlxcdFxcdGJvb2xcXG4xMDY3OlxcdFxcbjEwNjg6XFx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuMTA2OTpcXHRcXHRib29sIFxcXCJGYXZvciBkeW5hbWljIG1vZGlmaWNhdGlvbiBsYXRlbmN5IHJlZHVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbjEwNzA6XFx0XFx0aGVscFxcbjEwNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcXFwiZmF2b3JkeW5tb2RzXFxcIiBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxcbjEwNzI6XFx0XFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXFxuMTA3MzpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwNzQ6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDkuOTMwMDMzMTM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzA5OTkxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1FTUNHJ3MgTGlzdCBMUlUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgTUVNQ0dgIGludGVyYWN0cyB3aXRoIHRoZSBgbGlzdF9scnVgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiBgTUVNQ0dgJ3MgaW50ZWdyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGxpc3RfbHJ1YCBpbml0aWFsaXphdGlvbiBhbmQgYW55dGhpbmcgdGhhdCBpc24ndCBvbiB0aGUgaG90IHBhdGguIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxpc3QsIHdoaWNoIEkndmUgZ290OiBgX19saXN0X2xydV9pbml0YCwgYGxpc3RfbHJ1X2Rlc3Ryb3lgLCBgbGlzdF9scnVfYWRkYCwgYGxpc3RfbHJ1X2RlbGAsIGBsaXN0X2xydV9hZGRfb2JqYCwgYGxpc3RfbHJ1X2RlbF9vYmpgLCBgbGlzdF9scnVfaXNvbGF0ZWAsIGBsaXN0X2xydV9pc29sYXRlX21vdmVgLCBgbGlzdF9scnVfd2Fsa19vbmVgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGFuZCBgc2V0X3Nocmlua2VyX2JpdGAuXG5cbk5vdywgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGZpbGVzOiBgbW0vbGlzdF9scnUuY2AgYW5kIGBtbS9zaHJpbmtlci5jYC4gSG1tLCBhIHF1aWNrIHNjYW4gcmV2ZWFscyB0aGF0IHRoZSBzeW1ib2xzIGZyb20gYG1tL2xpc3RfbHJ1LmNgIGFyZTogYF9fbGlzdF9scnVfaW5pdGAsIGBsaXN0X2xydV9kZXN0cm95YCwgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGBsaXN0X2xydV93YWxrX25vZGVgLCBhbmQgYHNldF9zaHJpbmtlcl9iaXRgLiBUaGlzIGNvbmZpcm1zIHNvbWUgb2YgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucy5cblxuTGV0J3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIGVuc3VyaW5nIEkgaGF2ZSBhbGwgdGhlIGtleSBwaWVjZXMuIEl0IGxvb2tzIGxpa2UgdGhpcyBjaGFuZ2UgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIGEgbm9uLWBtZW1jZ2AtYXdhcmUgc2hyaW5rZXIsIGxpa2Ugd2hlbiB3ZSdyZSBmYWxsaW5nIGJhY2sgZHVlIHRvIGNncm91cC5tZW1vcnk9bm9rbWVtLCBrZWVwcyB0aGUgYHNocmlua2VyX2lkYCBhdCAwIGluIGBsaXN0X2xydWAuIFRoaXMgaXMgbGVhZGluZyB0byBlcnJvbmVvdXMgY2FsbHMgdG8gYHNldF9zaHJpbmtlcl9iaXQoKWAuIE15IGNvbmZpcm1lZCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFyZTogYF9fbGlzdF9scnVfaW5pdGAsIGBsaXN0X2xydV9kZXN0cm95YCwgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGBzZXRfc2hyaW5rZXJfYml0YCwgYW5kIGBsaXN0X2xydV93YWxrX25vZGVgLiBJJ2xsIGJlIHN1cmUgdG8gZW5hYmxlIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24sIGFuZCB3aXRoIHRoYXQsIEkgY2FuIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDUxLCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU0LjYwMTAzNTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDQyMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbGlzdF9scnVfaW5pdFwiLFxuICAgIFwibGlzdF9scnVfZGVzdHJveVwiLFxuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJzZXRfc2hyaW5rZXJfYml0XCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjb21taXQgbW9kaWZpZXMgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gdG8gZW5zdXJlIGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgaXMgbm90IGFzc2lnbmVkIGFuIHVuaW5pdGlhbGl6ZWQgSUQgb2YgMCB3aGVuIGEgc2hyaW5rZXIgZmFsbHMgYmFjayB0byBub24tbWVtY2ctYXdhcmUgbW9kZSAoc3VjaCBhcyB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWQpLiBUaGlzIHByZXZlbnRzIHVuaW50ZW5kZWQgc2hyaW5rZXIgYml0IHVwZGF0ZXMgaW4gc2V0X3Nocmlua2VyX2JpdCgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCIsXG4gICAgXCJsaXN0X2xydV9kZXN0cm95XCIsXG4gICAgXCJtZW1jZ19yZXBhcmVudF9saXN0X2xydXNcIixcbiAgICBcInNldF9zaHJpbmtlcl9iaXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCBpcyBub3QgYXNzaWduZWQgYW4gdW5pbml0aWFsaXplZCBJRCBvZiAwIHdoZW4gYSBzaHJpbmtlciBmYWxscyBiYWNrIHRvIG5vbi1tZW1jZy1hd2FyZSBtb2RlIChzdWNoIGFzIHdoZW4gbWVtY2cga21lbSBpcyBkaXNhYmxlZCkuIFRoaXMgcHJldmVudHMgdW5pbnRlbmRlZCBzaHJpbmtlciBiaXQgdXBkYXRlcyBpbiBzZXRfc2hyaW5rZXJfYml0KCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU0LjcwNzQ4NDExNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNzQzNjU4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDo1NC43MDc5MTg4ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTE3MzkyNjg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXFx1MDAzZXNocmlua2VyX2lkYCBpbiBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNocmlua2VyIGFjdHVhbGx5IGhhcyB0aGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIHNldCBiZWZvcmUgdXNpbmcgYHNocmlua2VyLVxcdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxcblxcbkFsbCByZWxldmFudCBzdHJ1Y3R1cmVzIChgc3RydWN0IHNocmlua2VyYCBhbmQgYHN0cnVjdCBsaXN0X2xydWApIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChga3phbGxvY19vYmpgLCBldGMuKSwgYW5kIGFsbCBmaWVsZHMgYWNjZXNzZWQgKGBzaHJpbmtlci1cXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXFx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcXG5cXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEyNGJkYzZkYzFiM2FiOWMyOWY0MjI0ODQxNDExZmQ5ZmM3Y2M4NWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAwOjIwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLjk2ZDAyZWEyMDZhODggMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4rKysgYi9tbS9saXN0X2xydS5jXG5AQCAtNjY2LDcgKzY2NiwxMiBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNoclxuIFx0aW50IGk7XG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0aWYgKHNocmlua2VyKVxuK1x0LypcbitcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcbitcdCAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYVxuK1x0ICogc3RhbGUgMC4gRG9uJ3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXG4rXHQgKi9cbitcdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVx1MDAzZWlkO1xuIFx0ZWxzZVxuIFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU0LjcwNzkyMDE4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTU2NjQ0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGxpc3RfbHJ1LmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbGlzdF9scnUuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb25hbCBjaGVjayB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBsb2dpYyBpcyB0aGVyZSB0byBoYW5kbGUgaG93IHRoZSBgc2hyaW5rZXJfaWRgIGlzIGFzc2lnbmVkLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtY2ctYXdhcmUgc2hyaW5rZXJzLiBcblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBlbnN1cmUgdGhlIHNocmlua2VyIGlzIGFjdHVhbGx5IG1lbWNnLWF3YXJlIGJlZm9yZSBhc3NpZ25pbmcgaXRzIElEIHRvIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgLiBUaGlzIGlzIGNydWNpYWwuIElmIHRoZSBzaHJpbmtlciBoYXMgXCJmYWxsZW4gYmFja1wiIHRvIGJlaW5nIG5vbi1tZW1jZyBhd2FyZSAoYXMgdGhlIGNvbW1lbnQgc3VnZ2VzdHMsIHBlcmhhcHMgZHVlIHRvIHNvbWV0aGluZyBsaWtlIGBjZ3JvdXAubWVtb3J5PW5va21lbWApLCBpdHMgSUQgaXMgc3RhbGUuIEF0dGVtcHRpbmcgdG8gdXNlIHRoaXMgc3RhbGUgSUQgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3IsIHNvIHRoZSBjaGVjayBwcmV2ZW50cyB0aGlzLlxuXG5JJ2Qgd2FudCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVsYXRlZCBgc2hyaW5rZXJgIGFuZCBgbGlzdF9scnVgIGNvZGUgZm9yIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBUaGUgYHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRWAgYml0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGZsYWcgaXMgc2V0IGFuZCB3aGVuIGl0IG1pZ2h0ICpub3QqIGJlIHNldC4gSXQgc2VlbXMgdGhlIGNvbW1pdCBhdXRob3IgaXMgY29ycmVjdGx5IGhhbmRsaW5nIGFuIGVkZ2UgY2FzZSByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTm93IEkgd2FudCB0byB1bmRlcnN0YW5kIG1vcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDo1OC4yNjQ1NjgwNzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2xpc3RfbHJ1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdFxcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4gNjUxOlxcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gNjUyOlxcdFxcdHJldHVybiByZXM7XFxuIDY1MzpcXHR9XFxuIDY1NDpcXHQjZWxzZVxcbiA2NTU6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXFxuIDY1NjpcXHR7XFxuIDY1NzpcXHR9XFxuIDY1ODpcXHRcXG4gNjU5OlxcdHN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIDY2MDpcXHR7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIDY2MzpcXHRcXG4gNjY0OlxcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuIDY2NTpcXHR7XFxuIDY2NjpcXHRcXHRpbnQgaTtcXG4gNjY3OlxcdFxcbiA2Njg6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiA2Njk6XFx0XFx0LypcXG4gNjcwOlxcdFxcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcXG4gNjcxOlxcdFxcdCAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYVxcbiA2NzI6XFx0XFx0ICogc3RhbGUgMC4gRG9uJ3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXFxuIDY3MzpcXHRcXHQgKi9cXG4gNjc0OlxcdFxcdGlmIChzaHJpbmtlciBcXHUwMDI2XFx1MDAyNiAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxcbiA2NzU6XFx0XFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVxcdTAwM2VpZDtcXG4gNjc2OlxcdFxcdGVsc2VcXG4gNjc3OlxcdFxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbiA2ODA6XFx0XFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4gNjgxOlxcdCNlbmRpZlxcbiA2ODI6XFx0XFxuIDY4MzpcXHRcXHRscnUtXFx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cXHUwMDNlbm9kZSwgbnJfbm9kZV9pZHMpO1xcbiA2ODQ6XFx0XFx0aWYgKCFscnUtXFx1MDAzZW5vZGUpXFxuIDY4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjg2OlxcdFxcbiA2ODc6XFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiA2ODg6XFx0XFx0XFx0aW5pdF9vbmVfbHJ1KGxydSwgXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtpXS5scnUpO1xcbiA2ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU4LjI2NDY3NDk4N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTE0MzEyNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNocmlua2VyYCBTdHJ1Y3R1cmUgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBzaHJpbmtlci1cdTAwM2VpZGAgYW5kIGBzaHJpbmtlci1cdTAwM2VmbGFnc2AuIE15IHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hlcmUgdGhlc2UgbWVtYmVycyBhcmUgYm90aCBzZXQgdG8gYSB2YWx1ZSBhbmQgYWxzbyB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc3Vic2VxdWVudCB1dGlsaXphdGlvbiBvZiB0aGVzZSBmaWVsZHMuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgc2hyaW5rZXJgIG9iamVjdCBmdW5jdGlvbnMgYW5kIGhvdyBpdHMgc3RhdGUgaW1wYWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBmb2xsb3cgdGhlIGNvZGUgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMTowMC4xNzg5OTA1MDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDQ3Njg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtlcl9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbGlzdF9scnUuYz01OT1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy02OC1cXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNzAte1xcbm1tL2xpc3RfbHJ1LmM6NzE6XFx0cmV0dXJuIGxydS1cXHUwMDNlc2hyaW5rZXJfaWQ7XFxubW0vbGlzdF9scnUuYy03Mi19XFxuLS1cXG5tbS9saXN0X2xydS5jPTEyMD1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy0xMjMtXFxubW0vbGlzdF9scnUuYzoxMjQ6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy0xMjUte1xcbi0tXFxubW0vbGlzdF9scnUuYz0xOTA9Ym9vbCBfX2xpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjAxLVxcdFxcdGlmICghbC1cXHUwMDNlbnJfaXRlbXMrKylcXG5tbS9saXN0X2xydS5jOjIwMjpcXHRcXHRcXHRzZXRfc2hyaW5rZXJfYml0KG1lbWNnLCBuaWQsIGxydV9zaHJpbmtlcl9pZChscnUpKTtcXG5tbS9saXN0X2xydS5jLTIwMy1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtuaWRdLm5yX2l0ZW1zKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NTAxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTE1LVxcdFxcdGRzdC1cXHUwMDNlbnJfaXRlbXMgKz0gc3JjLVxcdTAwM2Vucl9pdGVtcztcXG5tbS9saXN0X2xydS5jOjUxNjpcXHRcXHRzZXRfc2hyaW5rZXJfYml0KGRzdF9tZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XFxubW0vbGlzdF9scnUuYy01MTctXFx0fVxcbi0tXFxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjc0LVxcdGlmIChzaHJpbmtlciBcXHUwMDI2XFx1MDAyNiAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxcbm1tL2xpc3RfbHJ1LmM6Njc1OlxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cXHUwMDNlaWQ7XFxubW0vbGlzdF9scnUuYy02NzYtXFx0ZWxzZVxcbm1tL2xpc3RfbHJ1LmM6Njc3OlxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG5tbS9saXN0X2xydS5jLTY3OC1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzA5LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjcxMDpcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxubW0vbGlzdF9scnUuYy03MTEtI2VuZGlmXFxuLS1cXG5tbS9zaHJpbmtlci5jPTE1OT1zdGF0aWMgaW50IGV4cGFuZF9zaHJpbmtlcl9pbmZvKGludCBuZXdfaWQpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTE4OS1cXG5tbS9zaHJpbmtlci5jOjE5MDpzdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZF90b19pbmRleChpbnQgc2hyaW5rZXJfaWQpXFxubW0vc2hyaW5rZXIuYy0xOTEte1xcbm1tL3Nocmlua2VyLmM6MTkyOlxcdHJldHVybiBzaHJpbmtlcl9pZCAvIFNIUklOS0VSX1VOSVRfQklUUztcXG5tbS9zaHJpbmtlci5jLTE5My19XFxubW0vc2hyaW5rZXIuYy0xOTQtXFxubW0vc2hyaW5rZXIuYzoxOTU6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KGludCBzaHJpbmtlcl9pZClcXG5tbS9zaHJpbmtlci5jLTE5Ni17XFxubW0vc2hyaW5rZXIuYzoxOTc6XFx0cmV0dXJuIHNocmlua2VyX2lkICUgU0hSSU5LRVJfVU5JVF9CSVRTO1xcbm1tL3Nocmlua2VyLmMtMTk4LX1cXG5tbS9zaHJpbmtlci5jLTE5OS1cXG5tbS9zaHJpbmtlci5jOjIwMDpzdGF0aWMgaW5saW5lIGludCBjYWxjX3Nocmlua2VyX2lkKGludCBpbmRleCwgaW50IG9mZnNldClcXG5tbS9zaHJpbmtlci5jLTIwMS17XFxuLS1cXG5tbS9zaHJpbmtlci5jLTIwNC1cXG5tbS9zaHJpbmtlci5jOjIwNTp2b2lkIHNldF9zaHJpbmtlcl9iaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkLCBpbnQgc2hyaW5rZXJfaWQpXFxubW0vc2hyaW5rZXIuYy0yMDYte1xcbm1tL3Nocmlua2VyLmM6MjA3OlxcdGlmIChzaHJpbmtlcl9pZCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XFxubW0vc2hyaW5rZXIuYy0yMDgtXFx0XFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm87XFxuLS1cXG5tbS9zaHJpbmtlci5jLTIxMS1cXHRcXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvKTtcXG5tbS9zaHJpbmtlci5jOjIxMjpcXHRcXHRpZiAoIVdBUk5fT05fT05DRShzaHJpbmtlcl9pZCBcXHUwMDNlPSBpbmZvLVxcdTAwM2VtYXBfbnJfbWF4KSkge1xcbm1tL3Nocmlua2VyLmMtMjEzLVxcdFxcdFxcdHN0cnVjdCBzaHJpbmtlcl9pbmZvX3VuaXQgKnVuaXQ7XFxubW0vc2hyaW5rZXIuYy0yMTQtXFxubW0vc2hyaW5rZXIuYzoyMTU6XFx0XFx0XFx0dW5pdCA9IGluZm8tXFx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXJfaWQpXTtcXG5tbS9zaHJpbmtlci5jLTIxNi1cXHRcXHRcXHQvKiBQYWlycyB3aXRoIHNtcCBtYiBpbiBzaHJpbmtfc2xhYigpICovXFxubW0vc2hyaW5rZXIuYy0yMTctXFx0XFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxubW0vc2hyaW5rZXIuYzoyMTg6XFx0XFx0XFx0c2V0X2JpdChzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXJfaWQpLCB1bml0LVxcdTAwM2VtYXApO1xcbm1tL3Nocmlua2VyLmMtMjE5LVxcdFxcdH1cXG4tLVxcbm1tL3Nocmlua2VyLmMtMjIzLVxcbm1tL3Nocmlua2VyLmM6MjI0OnN0YXRpYyBERUZJTkVfSURSKHNocmlua2VyX2lkcik7XFxubW0vc2hyaW5rZXIuYy0yMjUtXFxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0yMzUtXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxubW0vc2hyaW5rZXIuYzoyMzY6XFx0aWQgPSBpZHJfYWxsb2MoXFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXIsIDAsIDAsIEdGUF9LRVJORUwpO1xcbm1tL3Nocmlua2VyLmMtMjM3LVxcdGlmIChpZCBcXHUwMDNjIDApXFxuLS1cXG5tbS9zaHJpbmtlci5jLTI0MS1cXHRcXHRpZiAoZXhwYW5kX3Nocmlua2VyX2luZm8oaWQpKSB7XFxubW0vc2hyaW5rZXIuYzoyNDI6XFx0XFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2c2hyaW5rZXJfaWRyLCBpZCk7XFxubW0vc2hyaW5rZXIuYy0yNDMtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5tbS9zaHJpbmtlci5jPTI1MD1zdGF0aWMgdm9pZCBzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjU3LVxcbm1tL3Nocmlua2VyLmM6MjU4OlxcdGlkcl9yZW1vdmUoXFx1MDAyNnNocmlua2VyX2lkciwgaWQpO1xcbm1tL3Nocmlua2VyLmMtMjU5LX1cXG4tLVxcbm1tL3Nocmlua2VyLmM9MjYxPXN0YXRpYyBsb25nIHhjaGdfbnJfZGVmZXJyZWRfbWVtY2coaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjY5LVxcdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZXNocmlua2VyX2luZm8pO1xcbm1tL3Nocmlua2VyLmM6MjcwOlxcdHVuaXQgPSBpbmZvLVxcdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyLVxcdTAwM2VpZCldO1xcbm1tL3Nocmlua2VyLmM6MjcxOlxcdG5yX2RlZmVycmVkID0gYXRvbWljX2xvbmdfeGNoZyhcXHUwMDI2dW5pdC1cXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVxcdTAwM2VpZCldLCAwKTtcXG5tbS9zaHJpbmtlci5jLTI3Mi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9Mjc3PXN0YXRpYyBsb25nIGFkZF9ucl9kZWZlcnJlZF9tZW1jZyhsb25nIG5yLCBpbnQgbmlkLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYy0yODUtXFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZShtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbyk7XFxubW0vc2hyaW5rZXIuYzoyODY6XFx0dW5pdCA9IGluZm8tXFx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXItXFx1MDAzZWlkKV07XFxubW0vc2hyaW5rZXIuYy0yODctXFx0bnJfZGVmZXJyZWQgPVxcbm1tL3Nocmlua2VyLmM6Mjg4OlxcdFxcdGF0b21pY19sb25nX2FkZF9yZXR1cm4obnIsIFxcdTAwMjZ1bml0LVxcdTAwM2Vucl9kZWZlcnJlZFtzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXItXFx1MDAzZWlkKV0pO1xcbm1tL3Nocmlua2VyLmMtMjg5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0yOTQ9dm9pZCByZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTMwNi1cXHRcXHRwYXJlbnRfaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKHBhcmVudCwgbmlkKTtcXG5tbS9zaHJpbmtlci5jOjMwNzpcXHRcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBzaHJpbmtlcl9pZF90b19pbmRleChjaGlsZF9pbmZvLVxcdTAwM2VtYXBfbnJfbWF4KTsgaW5kZXgrKykge1xcbm1tL3Nocmlua2VyLmMtMzA4LVxcdFxcdFxcdGNoaWxkX3VuaXQgPSBjaGlsZF9pbmZvLVxcdTAwM2V1bml0W2luZGV4XTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9NDc2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01MDItXFx0ICogICAgICAgICAgUkNVIGxvY2suXFxubW0vc2hyaW5rZXIuYzo1MDM6XFx0ICogIHN0ZXAgMzogdHJhdmVyc2UgdGhlIGJpdG1hcCBhbmQgY2FsY3VsYXRlIHNocmlua2VyX2lkXFxubW0vc2hyaW5rZXIuYy01MDQtXFx0ICogIHN0ZXAgNDogdXNlIHJjdV9yZWFkX2xvY2soKSB0byBndWFyYW50ZWUgZXhpc3RlbmNlIG9mIHRoZSBzaHJpbmtlci5cXG5tbS9zaHJpbmtlci5jOjUwNTpcXHQgKiAgc3RlcCA1OiB1c2Ugc2hyaW5rZXJfaWQgdG8gZmluZCB0aGUgc2hyaW5rZXIsIHRoZW4gdXNlXFxubW0vc2hyaW5rZXIuYy01MDYtXFx0ICogICAgICAgICAgc2hyaW5rZXJfdHJ5X2dldCgpIHRvIGd1YXJhbnRlZSBleGlzdGVuY2Ugb2YgdGhlIHNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01MjYtXFxubW0vc2hyaW5rZXIuYzo1Mjc6XFx0aWYgKGluZGV4IFxcdTAwM2Mgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW5mby1cXHUwMDNlbWFwX25yX21heCkpIHtcXG5tbS9zaHJpbmtlci5jLTUyOC1cXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xcbi0tXFxubW0vc2hyaW5rZXIuYy01NDAtXFx0XFx0XFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcjtcXG5tbS9zaHJpbmtlci5jOjU0MTpcXHRcXHRcXHRpbnQgc2hyaW5rZXJfaWQgPSBjYWxjX3Nocmlua2VyX2lkKGluZGV4LCBvZmZzZXQpO1xcbm1tL3Nocmlua2VyLmMtNTQyLVxcbm1tL3Nocmlua2VyLmMtNTQzLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9zaHJpbmtlci5jOjU0NDpcXHRcXHRcXHRzaHJpbmtlciA9IGlkcl9maW5kKFxcdTAwMjZzaHJpbmtlcl9pZHIsIHNocmlua2VyX2lkKTtcXG5tbS9zaHJpbmtlci5jLTU0NS1cXHRcXHRcXHRpZiAodW5saWtlbHkoIXNocmlua2VyIHx8ICFzaHJpbmtlcl90cnlfZ2V0KHNocmlua2VyKSkpIHtcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTgyLVxcdFxcdFxcdFxcdGVsc2VcXG5tbS9zaHJpbmtlci5jOjU4MzpcXHRcXHRcXHRcXHRcXHRzZXRfc2hyaW5rZXJfYml0KG1lbWNnLCBuaWQsIHNocmlua2VyX2lkKTtcXG5tbS9zaHJpbmtlci5jLTU4NC1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjAwLjUyOTQ3Mjc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzczODMzMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBTaHJpbmtlciBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgYHNocmlua2VyYCBvYmplY3Qgd29ya3MsIHNwZWNpZmljYWxseSBhdCBpdHMgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIHdlIGNhbGwgYHNocmlua2VyX2FsbG9jYD8gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoZW4sIHNpbmNlIGFsbG9jYXRpb24gaXMgdXN1YWxseSBmb2xsb3dlZCBieSByZWdpc3RyYXRpb24gb2Ygc29tZSBzb3J0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBzaHJpbmtlcl9yZWdpc3RlcmAgYXMgd2VsbC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMgd2lsbCBsaWtlbHkgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gSXQncyBhbGwgYWJvdXQgdHJhY2tpbmcgdGhlIGxpZmVjeWNsZSwgYW5kIHRob3NlIGFyZSB0aGUgcG9pbnRzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI3NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjAyLjMwMzMwODQ1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMDcyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rZXJfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgyPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy0zODMte1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzg0OlxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFxcXCJ0aHAtemVyb1xcXCIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzg1LVxcdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTEwNjUte1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTA2NjpcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXFxuLS1cXG5tbS9zaHJpbmtlci5jPTYyND11bnNpZ25lZCBsb25nIHNocmlua19zbGFiKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9zaHJpbmtlci5jLTY4Ny1cXG5tbS9zaHJpbmtlci5jOjY4ODpzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyX2FsbG9jKHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxubW0vc2hyaW5rZXIuYy02ODkte1xcbi0tXFxubW0vc2hyaW5rZXIuYy03NDYtfVxcbm1tL3Nocmlua2VyLmM6NzQ3OkVYUE9SVF9TWU1CT0xfR1BMKHNocmlua2VyX2FsbG9jKTtcXG5tbS9zaHJpbmtlci5jLTc0OC1cXG5tbS9zaHJpbmtlci5jPTc0OT12b2lkIHNocmlua2VyX3JlZ2lzdGVyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTc1MS1cXHRpZiAodW5saWtlbHkoIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9BTExPQ0FURUQpKSkge1xcbm1tL3Nocmlua2VyLmM6NzUyOlxcdFxcdHByX3dhcm4oXFxcIk11c3QgdXNlIHNocmlua2VyX2FsbG9jKCkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIHNocmlua2VyXFxcIik7XFxubW0vc2hyaW5rZXIuYy03NTMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMjQ0PXZvaWQgX19pbml0IGt2ZnJlZV9yY3VfaW5pdCh2b2lkKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMjg0LVxcbm1tL3NsYWJfY29tbW9uLmM6MjI4NTpcXHRrZnJlZV9yY3Vfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcXFwic2xhYi1rdmZyZWUtcmN1XFxcIik7XFxubW0vc2xhYl9jb21tb24uYy0yMjg2LVxcdGlmICgha2ZyZWVfcmN1X3Nocmlua2VyKSB7XFxuLS1cXG5tbS92bWFsbG9jLmM9NTU0Nz12b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NTk3LVxcbm1tL3ZtYWxsb2MuYzo1NTk4OlxcdHZtYXBfbm9kZV9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFxcXCJ2bWFwLW5vZGVcXFwiKTtcXG5tbS92bWFsbG9jLmMtNTU5OS1cXHRpZiAoIXZtYXBfbm9kZV9zaHJpbmtlcikge1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTc5Mz1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy04MTgtXFxubW0vd29ya2luZ3NldC5jOjgxOTpcXHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL3dvcmtpbmdzZXQuYy04MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFNIUklOS0VSX01FTUNHX0FXQVJFLFxcbi0tXFxubW0venNtYWxsb2MuYz0yMTgyPXN0YXRpYyBpbnQgenNfcmVnaXN0ZXJfc2hyaW5rZXIoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXFxubW0venNtYWxsb2MuYy0yMTgzLXtcXG5tbS96c21hbGxvYy5jOjIxODQ6XFx0cG9vbC1cXHUwMDNlc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcXFwibW0tenNwb29sOiVzXFxcIiwgcG9vbC1cXHUwMDNlbmFtZSk7XFxubW0venNtYWxsb2MuYy0yMTg1LVxcdGlmICghcG9vbC1cXHUwMDNlc2hyaW5rZXIpXFxuLS1cXG5tbS96c3dhcC5jPTEyNTE9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI1NS1cXHRzaHJpbmtlciA9XFxubW0venN3YXAuYzoxMjU2OlxcdFxcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXFxcIm1tLXpzd2FwXFxcIik7XFxubW0venN3YXAuYy0xMjU3LVxcdGlmICghc2hyaW5rZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjAyLjM1MjMyMTAxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc2MTM1Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDY4NSB0aHJvdWdoIDc2NSBvZiBgbW0vc2hyaW5rZXIuY2AuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHNocmlua2VyIGZ1bmN0aW9uYWxpdHkuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIHByb2JhYmx5IGludm9sdmVzIHJlY2xhaW1pbmcgb3IgcmVsZWFzaW5nIGNhY2hlZCBwYWdlcyBmcm9tIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZSBvciBzb21lIG90aGVyIGtlcm5lbCBldmVudC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gcGFnZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLCBjb25zaWRlcmF0aW9ucyBmb3IgZGlydHkgcGFnZXMsIGFuZCBwZXJoYXBzIHNvbWUgbG9naWMgYXJvdW5kIHdoYXQga2luZCBvZiBwYWdlcyBhcmUgdGFyZ2V0ZWQgZm9yIGV2aWN0aW9uIChlLmcuLCBmaWxlLWJhY2tlZCB2cy4gYW5vbnltb3VzKS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZSBzaHJpbmtlciBwcmlvcml0aXplcyB3aGljaCBwYWdlcyB0byByZWNsYWltLCB0aGUgYmFsYW5jaW5nIGFjdCBiZXR3ZWVuIGZyZWVpbmcgbWVtb3J5IGFuZCBhdm9pZGluZyBleGNlc3NpdmUgSS9PLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHN0cmF0ZWdpZXMgZW1wbG95ZWQgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLCB3aGljaCB3aWxsIGhlbHAgbWUgcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBhbHNvIHJlYWR5IHRvIGNyaXRpY2FsbHkgYXNzZXNzIHRoZSBkZXNpZ24gY2hvaWNlcyBhbmQgYW50aWNpcGF0ZSBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMTowNC44Mjg0NTg3NjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Nocmlua2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjg1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjg1OlxcdFxcdHJldHVybiBmcmVlZDtcXG4gNjg2OlxcdH1cXG4gNjg3OlxcdFxcbiA2ODg6XFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiA2ODk6XFx0e1xcbiA2OTA6XFx0XFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcjtcXG4gNjkxOlxcdFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiA2OTI6XFx0XFx0dmFfbGlzdCBhcDtcXG4gNjkzOlxcdFxcdGludCBlcnI7XFxuIDY5NDpcXHRcXG4gNjk1OlxcdFxcdHNocmlua2VyID0ga3phbGxvY19vYmooc3RydWN0IHNocmlua2VyKTtcXG4gNjk2OlxcdFxcdGlmICghc2hyaW5rZXIpXFxuIDY5NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0dmFfc3RhcnQoYXAsIGZtdCk7XFxuIDcwMDpcXHRcXHRlcnIgPSBzaHJpbmtlcl9kZWJ1Z2ZzX25hbWVfYWxsb2Moc2hyaW5rZXIsIGZtdCwgYXApO1xcbiA3MDE6XFx0XFx0dmFfZW5kKGFwKTtcXG4gNzAyOlxcdFxcdGlmIChlcnIpXFxuIDcwMzpcXHRcXHRcXHRnb3RvIGVycl9uYW1lO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRzaHJpbmtlci1cXHUwMDNlZmxhZ3MgPSBmbGFncyB8IFNIUklOS0VSX0FMTE9DQVRFRDtcXG4gNzA2OlxcdFxcdHNocmlua2VyLVxcdTAwM2VzZWVrcyA9IERFRkFVTFRfU0VFS1M7XFxuIDcwNzpcXHRcXG4gNzA4OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSB7XFxuIDcwOTpcXHRcXHRcXHRlcnIgPSBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzaHJpbmtlcik7XFxuIDcxMDpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9TWVMpIHtcXG4gNzExOlxcdFxcdFxcdFxcdC8qIE1lbWNnIGlzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlci4gKi9cXG4gNzEyOlxcdFxcdFxcdFxcdHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+U0hSSU5LRVJfTUVNQ0dfQVdBUkU7XFxuIDcxMzpcXHRcXHRcXHRcXHRnb3RvIG5vbl9tZW1jZztcXG4gNzE0OlxcdFxcdFxcdH1cXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0XFx0aWYgKGVycilcXG4gNzE3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZsYWdzO1xcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHRcXHRyZXR1cm4gc2hyaW5rZXI7XFxuIDcyMDpcXHRcXHR9XFxuIDcyMTpcXHRcXG4gNzIyOlxcdG5vbl9tZW1jZzpcXG4gNzIzOlxcdFxcdC8qXFxuIDcyNDpcXHRcXHQgKiBUaGUgbnJfZGVmZXJyZWQgaXMgYXZhaWxhYmxlIG9uIHBlciBtZW1jZyBsZXZlbCBmb3IgbWVtY2cgYXdhcmVcXG4gNzI1OlxcdFxcdCAqIHNocmlua2Vycywgc28gb25seSBhbGxvY2F0ZSBucl9kZWZlcnJlZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxcbiA3MjY6XFx0XFx0ICogIC0gbm9uLW1lbWNnLWF3YXJlIHNocmlua2Vyc1xcbiA3Mjc6XFx0XFx0ICogIC0gIUNPTkZJR19NRU1DR1xcbiA3Mjg6XFx0XFx0ICogIC0gbWVtY2cgaXMgZGlzYWJsZWQgYnkga2VybmVsIGNvbW1hbmQgbGluZVxcbiA3Mjk6XFx0XFx0ICogIC0gbm9uLXNsYWIgc2hyaW5rZXJzOiB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWRcXG4gNzMwOlxcdFxcdCAqL1xcbiA3MzE6XFx0XFx0c2l6ZSA9IHNpemVvZigqc2hyaW5rZXItXFx1MDAzZW5yX2RlZmVycmVkKTtcXG4gNzMyOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNIUklOS0VSX05VTUFfQVdBUkUpXFxuIDczMzpcXHRcXHRcXHRzaXplICo9IG5yX25vZGVfaWRzO1xcbiA3MzQ6XFx0XFxuIDczNTpcXHRcXHRzaHJpbmtlci1cXHUwMDNlbnJfZGVmZXJyZWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbiA3MzY6XFx0XFx0aWYgKCFzaHJpbmtlci1cXHUwMDNlbnJfZGVmZXJyZWQpXFxuIDczNzpcXHRcXHRcXHRnb3RvIGVycl9mbGFncztcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0cmV0dXJuIHNocmlua2VyO1xcbiA3NDA6XFx0XFxuIDc0MTpcXHRlcnJfZmxhZ3M6XFxuIDc0MjpcXHRcXHRzaHJpbmtlcl9kZWJ1Z2ZzX25hbWVfZnJlZShzaHJpbmtlcik7XFxuIDc0MzpcXHRlcnJfbmFtZTpcXG4gNzQ0OlxcdFxcdGtmcmVlKHNocmlua2VyKTtcXG4gNzQ1OlxcdFxcdHJldHVybiBOVUxMO1xcbiA3NDY6XFx0fVxcbiA3NDc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2hyaW5rZXJfYWxsb2MpO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHR2b2lkIHNocmlua2VyX3JlZ2lzdGVyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuIDc1MDpcXHR7XFxuIDc1MTpcXHRcXHRpZiAodW5saWtlbHkoIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9BTExPQ0FURUQpKSkge1xcbiA3NTI6XFx0XFx0XFx0cHJfd2FybihcXFwiTXVzdCB1c2Ugc2hyaW5rZXJfYWxsb2MoKSB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgc2hyaW5rZXJcXFwiKTtcXG4gNzUzOlxcdFxcdFxcdHJldHVybjtcXG4gNzU0OlxcdFxcdH1cXG4gNzU1OlxcdFxcbiA3NTY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbiA3NTc6XFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNnNocmlua2VyLVxcdTAwM2VsaXN0LCBcXHUwMDI2c2hyaW5rZXJfbGlzdCk7XFxuIDc1ODpcXHRcXHRzaHJpbmtlci1cXHUwMDNlZmxhZ3MgfD0gU0hSSU5LRVJfUkVHSVNURVJFRDtcXG4gNzU5OlxcdFxcdHNocmlua2VyX2RlYnVnZnNfYWRkKHNocmlua2VyKTtcXG4gNzYwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnNocmlua2VyLVxcdTAwM2Vkb25lKTtcXG4gNzYzOlxcdFxcdC8qXFxuIDc2NDpcXHRcXHQgKiBOb3cgdGhlIHNocmlua2VyIGlzIGZ1bGx5IHNldCB1cCwgdGFrZSB0aGUgZmlyc3QgcmVmZXJlbmNlIHRvIGl0IHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjA0LjgyODU3MzA5M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDUzMjUwMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTaHJpbmtlciBJRCBJbml0aWFsaXphdGlvbiBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoaXMgcGF0Y2ggaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoZXRoZXIgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyBuZWVkZWQgaGVyZS4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgbHJ1LVx1MDAzZXNocmlua2VyX2lkYCBmaWVsZCB3aXRoaW4gdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlLCBhbmQgaG93IGl0J3MgYmVpbmcgc2V0IGluIHJlbGF0aW9uIHRvIGBzaHJpbmtlcmAgb2JqZWN0cywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhpczogdGhlIHBhdGNoIGNoYW5nZXMgaG93IGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGlzIHNldC4gUHJldmlvdXNseSwgaXQgd2FzIHNpbXBseSBgbHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWRgIGlmIGBzaHJpbmtlcmAgd2FzIG5vdCBOVUxMLiBIb3dldmVyLCBpZiB0aGUgYHNocmlua2VyYCB3YXMgYWxsb2NhdGVkIGJ1dCB0aGVuIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGR1ZSB0byBzb21ldGhpbmcgbGlrZSBtZW1vcnkgY2dyb3VwIGJlaW5nIGRpc2FibGVkKSwgaXRzIElEIHJlbWFpbmVkIGF0IHRoZSBkZWZhdWx0IHplcm8gKGJlY2F1c2Ugb2YgYGt6YWxsb2Nfb2JqYCkuIFRoZSBwcm9ibGVtYXRpYyBjb2RlIHVzZXMgdGhpcyB6ZXJvIHZhbHVlIGFzIGFuIGFjdHVhbCBpZCBvZiBzaHJpbmtlci5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGBzaHJpbmtlci1cdTAwM2VpZGAgaXMgZ2V0dGluZyBzZXQgdG8gemVybyBhbmQgdGhlbiBpdCBlbmRzIHVwIGJlaW5nIGEgdmFsaWQgaWQgaW4gdGhlIHN5c3RlbS4gVGhlIGZpeCBpcyB0byBhZGQgYSBjb25kaXRpb246IGBpZiAoc2hyaW5rZXIgXHUwMDI2XHUwMDI2IChzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKWAuIFRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgbWVtY2ctYXdhcmUgc2hyaW5rZXJzIGdldCB0aGVpciBgaWRgIGFzc2lnbmVkLiBOb24tbWVtY2cgYXdhcmUgc2hyaW5rZXJzIHdpbGwgaGF2ZSB0aGVpciBgbHJ1LVx1MDAzZXNocmlua2VyX2lkYCBzZXQgdG8gLTEsIHdoaWNoIHByZXZlbnRzIHRoZSBpbmNvcnJlY3QgdXNlIG9mIHRoZSB6ZXJvIElEIHZhbHVlLlxuXG5TbywgbGV0J3MgZXZhbHVhdGU6XG5cbjEuICAqKkRvZXMgdGhpcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vLiBUaGUgYHNocmlua2VyYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBieSBga3phbGxvY19vYmpgLCBhbmQgdGhlIGBzaHJpbmtlci1cdTAwM2VmbGFnc2AgZmllbGQgaXMgZXhwbGljaXRseSBzZXQgYWZ0ZXJ3YXJkIGluIGBzaHJpbmtlcl9hbGxvYygpYC4gVGhlIHZhbHVlIDAgbWlnaHQgYmUgXCJzdGFsZVwiIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJ3QgcmVwcmVzZW50IGEgdmFsaWQgbWVtY2ctYXdhcmUgc2hyaW5rZXIsIGJ1dCBpdCdzIG5vdCB1bmluaXRpYWxpemVkLlxuXG4yLiAgKipEb2VzIGl0IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2U/KiogTm8sIHRoZXJlIGFyZSBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB0aGUgdXNlciBpbiB0aGlzIGNvZGUuXG5cbjMuICAqKkRvZXMgaXQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgbG9naWNhbCBjb25kaXRpb24gdG8gY2hlY2sgYHNocmlua2VyLVx1MDAzZWZsYWdzYCBidXQgdGhlIG1lbW9yeSBpcyBub3QgdW5pbml0aWFsaXplZC5cblxuNC4gICoqRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby5cblxuNS4gICoqRG9lcyBpdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOPyoqIE5vLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG5cbiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUuXG4qICAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIEFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG4qICAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgcmVhZHM6KiogTm9wZS5cbiogICAqKkJvdW5kcyBjaGVjayBpc3N1ZXM6KiogTm9wZS5cblxuVGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZyBpcyB0aGF0IHRoZSB6ZXJvIElEIHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGdvdCBwYXNzZWQgYXMgaWYgdmFsaWQuIFRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhpcyBhcyBhIFwic3RhbGUgMFwiLiBUaGlzIGlzbid0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gS01TQU4ncyBwZXJzcGVjdGl2ZTsgaXQncyBhICpsb2dpY2FsKiBlcnJvci4gVGhlIElEIDAgaXMgYSB2YWxpZCBJRCBmb3IgYW5vdGhlciBzaHJpbmtlci5cblxuTXkgY29uY2x1c2lvbjogVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBsb2dpYy9zdGF0ZSBjb25zaXN0ZW5jeSBidWcuIEtBU0FOIGFuZCBnZW5lcmFsIGZ1enppbmcgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgZXJyb3JzIHJlc3VsdGluZyBmcm9tIHRoaXMgaXNzdWUuIEtNU0FOIGlzIG5vdCByZWxldmFudCBoZXJlIGFzIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkyNywiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjE6MTMuODgxODI1MzA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGxydS1cXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXFx1MDAzZWlkYCwgYXNzaWduaW5nIC0xIG90aGVyd2lzZS4gXFxuXFxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVxcdTAwM2VmbGFnc2AsIGBzaHJpbmtlci1cXHUwMDNlaWRgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBkZWZhdWx0IHplcm8gdmFsdWUgKGBpZCA9IDBgKSBvZiBhIG5vbi1tZW1jZyBzaHJpbmtlciB3YXMgZXJyb25lb3VzbHkgaW50ZXJwcmV0ZWQgYXMgYSB2YWxpZCBJRCAoMCkgaW5zdGVhZCBvZiBhbiBpbnZhbGlkIElEICgtMSksIGxlYWRpbmcgdG8gc3B1cmlvdXMgY2FsbHMgdG8gYHNldF9zaHJpbmtlcl9iaXQoKWAuIFxcblxcblRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkLCBubyBtZW1vcnkgZXhwb3N1cmUgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYWx0ZXJlZCBkYXRhIGxlbmd0aCBvciBib3VuZHMgY2hlY2sgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXFx1MDAzZXNocmlua2VyX2lkYCBpbiBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNocmlua2VyIGFjdHVhbGx5IGhhcyB0aGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIHNldCBiZWZvcmUgdXNpbmcgYHNocmlua2VyLVxcdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxcblxcbkFsbCByZWxldmFudCBzdHJ1Y3R1cmVzIChgc3RydWN0IHNocmlua2VyYCBhbmQgYHN0cnVjdCBsaXN0X2xydWApIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChga3phbGxvY19vYmpgLCBldGMuKSwgYW5kIGFsbCBmaWVsZHMgYWNjZXNzZWQgKGBzaHJpbmtlci1cXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXFx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcXG5cXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6fbtb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 23:56:01 +0000 UTC FinishedAt: 2026-09-02 00:21:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "d1beda88-3df4-4814-b1a6-c7099cc0f3de" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__list_lru_init", "list_lru_destroy", "memcg_reparent_list_lrus", "set_shrinker_bit", "list_lru_walk_node" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19saXN0X2xydV9pbml0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O3NldF9zaHJpbmtlcl9iaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfd2Fsa19ub2RlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXHUwMDNlaWRgLCBhc3NpZ25pbmcgLTEgb3RoZXJ3aXNlLiBcblxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVx1MDAzZWZsYWdzYCwgYHNocmlua2VyLVx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcblxuVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQsIG5vIG1lbW9yeSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIGFuZCBubyBhbHRlcmVkIGRhdGEgbGVuZ3RoIG9yIGJvdW5kcyBjaGVjayBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY29tbWl0IG1vZGlmaWVzIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSBscnUtXHUwMDNlc2hyaW5rZXJfaWQgaXMgbm90IGFzc2lnbmVkIGFuIHVuaW5pdGlhbGl6ZWQgSUQgb2YgMCB3aGVuIGEgc2hyaW5rZXIgZmFsbHMgYmFjayB0byBub24tbWVtY2ctYXdhcmUgbW9kZSAoc3VjaCBhcyB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWQpLiBUaGlzIHByZXZlbnRzIHVuaW50ZW5kZWQgc2hyaW5rZXIgYml0IHVwZGF0ZXMgaW4gc2V0X3Nocmlua2VyX2JpdCgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTI0YmRjNmRjMWIzYWI5YzI5ZjQyMjQ4NDE0MTFmZDlmYzdjYzg1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLjk2ZDAyZWEyMDZhODggMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jXG5AQCAtNjY2LDcgJiM0Mzs2NjYsMTIgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcbiBcdGludCBpO1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbi1cdGlmIChzaHJpbmtlcilcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcbiYjNDM7XHQgKiBjZ3JvdXAubWVtb3J5PW5va21lbSksIGl0cyBpZCB3YXMgbmV2ZXIgYXNzaWduZWQgYW5kIGhvbGRzIGFcbiYjNDM7XHQgKiBzdGFsZSAwLiBEb24mIzM5O3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19saXN0X2xydV9pbml0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O3NldF9zaHJpbmtlcl9iaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfd2Fsa19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVx1MDAzZXNocmlua2VyX2lkIGlzIG5vdCBhc3NpZ25lZCBhbiB1bmluaXRpYWxpemVkIElEIG9mIDAgd2hlbiBhIHNocmlua2VyIGZhbGxzIGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIG1vZGUgKHN1Y2ggYXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkKS4gVGhpcyBwcmV2ZW50cyB1bmludGVuZGVkIHNocmlua2VyIGJpdCB1cGRhdGVzIGluIHNldF9zaHJpbmtlcl9iaXQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEyNGJkYzZkYzFiM2FiOWMyOWY0MjI0ODQxNDExZmQ5ZmM3Y2M4NWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDAwOjIwOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmMKaW5kZXggMzY2NjJkMDJmZjk2My4uOTZkMDJlYTIwNmE4OCAxMDA2NDQKLS0tIGEvbW0vbGlzdF9scnUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9saXN0X2xydS5jCkBAIC02NjYsNyAmIzQzOzY2NiwxMiBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocgogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX01FTUNHCi0JaWYgKHNocmlua2VyKQomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgc2hyaW5rZXIgZmVsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSAoZS5nLiB3aXRoCiYjNDM7CSAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYQomIzQzOwkgKiBzdGFsZSAwLiBEb24mIzM5O3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2hyaW5rZXIgJmFtcDsmYW1wOyAoc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX01FTUNHX0FXQVJFKSkKIAkJbHJ1LSZndDtzaHJpbmtlcl9pZCA9IHNocmlua2VyLSZndDtpZDsKIAllbHNlCiAJCWxydS0mZ3Q7c2hyaW5rZXJfaWQgPSAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBsaXN0X2xydS5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBtbS9saXN0X2xydS5jYC4gRmlyc3QsIEkgc2VlIGEgc3RyYWlnaHRmb3J3YXJkIGRpZmYuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGxpc3RfbHJ1YCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzaHJpbmtlcmAgYXNzaWdubWVudC4gVGhlIHByZXZpb3VzIGNvZGUgc2ltcGx5IGFzc2lnbmVkIGBzaHJpbmtlci0mZ3Q7aWRgIGlmIGBzaHJpbmtlcmAgd2FzIG5vdCBudWxsLiBOb3csIHdlIGhhdmUgYW4gYWRkZWQgY29uZGl0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYENPTkZJR19NRU1DR2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhlIGFkZGVkIGNvbW1lbnQgaXMgaGVscGZ1bCDigJMgaXQgaW5kaWNhdGVzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHNocmlua2VyIG1pZ2h0IGZhbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUsIHBvc3NpYmx5IGR1ZSB0byBzb21ldGhpbmcgbGlrZSBgY2dyb3VwLm1lbW9yeT1ub2ttZW1gLiBJbiBzdWNoIGEgY2FzZSwgdGhlIHNocmlua2VyIElEIHdhc24mIzM5O3QgcHJvcGVybHkgYXNzaWduZWQsIGxlYXZpbmcgYSBzdGFsZSB2YWx1ZS4KClRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgY2hlY2s6IGAoc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX01FTUNHX0FXQVJFKWAuIFRoaXMgc3VnZ2VzdHMgdGhlIGludGVudGlvbiBpcyB0byBvbmx5IGFzc2lnbiB0aGUgYGxydS0mZ3Q7c2hyaW5rZXJfaWRgIHdoZW4gdGhlIHNocmlua2VyIGlzIGFjdHVhbGx5IG1lbWNnLWF3YXJlLiBJZiB0aGUgc2hyaW5rZXIgaGFzIGZhbGxlbiBiYWNrIGFuZCB0aGlzIGZsYWcgaXMgKm5vdCogc2V0LCB0aGUgSUQgcmVtYWlucyBzZXQgdG8gLTEuIFRoaXMgaXMgYSBzb3VuZCBhcHByb2FjaCBhbmQgcHJldmVudHMgcG90ZW50aWFsbHkgaW5jb3JyZWN0IHVzYWdlIG9mIGEgc3RhbGUgb3IgdW5kZWZpbmVkIHNocmlua2VyIElELgoKTm93LCBsZXQgbWUgcnVuIHRoaXMgcGF0Y2ggdGhyb3VnaCBvdXIgc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgaWYgYW55dGhpbmcgZmxhZ3MuIEkgYWxzbyB3YW50IHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBzaW1pbGFyIHBhdHRlcm5zIGFuZCBwb3NzaWJsZSByZWdyZXNzaW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBhIHNpbWlsYXIgY29uZGl0aW9uIG1pZ2h0IGFwcGx5IG9yIGFueSBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcbiA2NTE6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiA2NTI6XHRcdHJldHVybiByZXM7XG4gNjUzOlx0fVxuIDY1NDpcdCNlbHNlXG4gNjU1Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG4gNjU2Olx0e1xuIDY1NzpcdH1cbiA2NTg6XHRcbiA2NTk6XHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuIDY2MDpcdHtcbiA2NjE6XHR9XG4gNjYyOlx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIDY2MzpcdFxuIDY2NDpcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4gNjY1Olx0e1xuIDY2NjpcdFx0aW50IGk7XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY2OTpcdFx0LypcbiA2NzA6XHRcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcbiA2NzE6XHRcdCAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYVxuIDY3MjpcdFx0ICogc3RhbGUgMC4gRG9uJiMzOTt0IGxldCBzZXRfc2hyaW5rZXJfYml0KCkgYWN0IG9uIGl0LlxuIDY3MzpcdFx0ICovXG4gNjc0Olx0XHRpZiAoc2hyaW5rZXIgXHUwMDI2XHUwMDI2IChzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxuIDY3NTpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbiA2NzY6XHRcdGVsc2VcbiA2Nzc6XHRcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4gNjc4Olx0XG4gNjc5Olx0XHRpZiAobWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpXG4gNjgwOlx0XHRcdG1lbWNnX2F3YXJlID0gZmFsc2U7XG4gNjgxOlx0I2VuZGlmXG4gNjgyOlx0XG4gNjgzOlx0XHRscnUtXHUwMDNlbm9kZSA9IGt6YWxsb2Nfb2JqcygqbHJ1LVx1MDAzZW5vZGUsIG5yX25vZGVfaWRzKTtcbiA2ODQ6XHRcdGlmICghbHJ1LVx1MDAzZW5vZGUpXG4gNjg1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDY4NjpcdFxuIDY4NzpcdFx0Zm9yX2VhY2hfbm9kZShpKVxuIDY4ODpcdFx0XHRpbml0X29uZV9scnUobHJ1LCBcdTAwMjZscnUtXHUwMDNlbm9kZVtpXS5scnUpO1xuIDY4OTpcdFxuIDY5MDpcdFx0bWVtY2dfaW5pdF9saXN0X2xydShscnUsIG1lbWNnX2F3YXJlKTtcbiA2OTE6XHRcdGxpc3RfbHJ1X3JlZ2lzdGVyKGxydSk7XG4gNjkyOlx0XG4gNjkzOlx0XHRyZXR1cm4gMDtcbiA2OTQ6XHR9XG4gNjk1Olx0RVhQT1JUX1NZTUJPTF9HUEwoX19saXN0X2xydV9pbml0KTtcbiA2OTY6XHRcbiA2OTc6XHR2b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gNjk4Olx0e1xuIDY5OTpcdFx0LyogQWxyZWFkeSBkZXN0cm95ZWQgb3Igbm90IHlldCBpbml0aWFsaXplZD8gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjIzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIGBzaHJpbmtlcmAgYW5kIGBsaXN0X2xydWAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBzaHJpbmtlcmAgbWVjaGFuaXNtIGFuZCB0aGUgYGxpc3RfbHJ1YCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgY3VyaW91cyBhYm91dCBob3cgdGhlIGBzaHJpbmtlcl9pZGAgdmFyaWFibGUgZmFjdG9ycyBpbnRvIHRoZWlyIGludGVycGxheS4gR2l2ZW4gdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBzaHJpbmtzIGNhY2hlIG9iamVjdHMgaW4gbGlzdCBMUlVzIGlzIHByZXR0eSBjcml0aWNhbC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSYjMzk7bGwgaGVhZCBzdHJhaWdodCBmb3IgYG1tL2xpc3RfbHJ1LmNgIGFuZCB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gc2VlIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBzaHJpbmtlcl9pZGAgYW5kIGBsaXN0X2xydWAgYXJlIHVzZWQgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QsIGZvY3VzZWQgdmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZXhwb3NlIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgdGhlIElEIGlzIHVzZWQgdG8gbWFuYWdlIGFuZCBpZGVudGlmeSBMUlUgZW50cmllcyBvciBzaHJpbmtlciBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgTFJVIGxpc3RzLiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IGhvdyBhIHNocmlua2VyIGlzIHJlZ2lzdGVyZWQgYW5kIGhvdyBlbnRyaWVzIGFyZSByZW1vdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rZXJfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYz01OT1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjgtXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy03MC17XG5tbS9saXN0X2xydS5jOjcxOlx0cmV0dXJuIGxydS1cdTAwM2VzaHJpbmtlcl9pZDtcbm1tL2xpc3RfbHJ1LmMtNzItfVxuLS1cbm1tL2xpc3RfbHJ1LmM9MTIwPXN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy0xMjMtXG5tbS9saXN0X2xydS5jOjEyNDpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcbi0tXG5tbS9saXN0X2xydS5jPTE5MD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMjAxLVx0XHRpZiAoIWwtXHUwMDNlbnJfaXRlbXMmIzQzOyYjNDM7KVxubW0vbGlzdF9scnUuYzoyMDI6XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XG5tbS9saXN0X2xydS5jLTIwMy1cdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubnJfaXRlbXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NTAxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTUxNS1cdFx0ZHN0LVx1MDAzZW5yX2l0ZW1zICYjNDM7PSBzcmMtXHUwMDNlbnJfaXRlbXM7XG5tbS9saXN0X2xydS5jOjUxNjpcdFx0c2V0X3Nocmlua2VyX2JpdChkc3RfbWVtY2csIG5pZCwgbHJ1X3Nocmlua2VyX2lkKGxydSkpO1xubW0vbGlzdF9scnUuYy01MTctXHR9XG4tLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY3NC1cdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG5tbS9saXN0X2xydS5jOjY3NTpcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG5tbS9saXN0X2xydS5jLTY3Ni1cdGVsc2Vcbm1tL2xpc3RfbHJ1LmM6Njc3Olx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbm1tL2xpc3RfbHJ1LmMtNjc4LVxuLS1cbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTcwOS0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jOjcxMDpcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xubW0vbGlzdF9scnUuYy03MTEtI2VuZGlmXG4tLVxubW0vc2hyaW5rZXIuYz0xNTk9c3RhdGljIGludCBleHBhbmRfc2hyaW5rZXJfaW5mbyhpbnQgbmV3X2lkKVxuLS1cbm1tL3Nocmlua2VyLmMtMTg5LVxubW0vc2hyaW5rZXIuYzoxOTA6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW50IHNocmlua2VyX2lkKVxubW0vc2hyaW5rZXIuYy0xOTEte1xubW0vc2hyaW5rZXIuYzoxOTI6XHRyZXR1cm4gc2hyaW5rZXJfaWQgLyBTSFJJTktFUl9VTklUX0JJVFM7XG5tbS9zaHJpbmtlci5jLTE5My19XG5tbS9zaHJpbmtlci5jLTE5NC1cbm1tL3Nocmlua2VyLmM6MTk1OnN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkX3RvX29mZnNldChpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTE5Ni17XG5tbS9zaHJpbmtlci5jOjE5NzpcdHJldHVybiBzaHJpbmtlcl9pZCAlIFNIUklOS0VSX1VOSVRfQklUUztcbm1tL3Nocmlua2VyLmMtMTk4LX1cbm1tL3Nocmlua2VyLmMtMTk5LVxubW0vc2hyaW5rZXIuYzoyMDA6c3RhdGljIGlubGluZSBpbnQgY2FsY19zaHJpbmtlcl9pZChpbnQgaW5kZXgsIGludCBvZmZzZXQpXG5tbS9zaHJpbmtlci5jLTIwMS17XG4tLVxubW0vc2hyaW5rZXIuYy0yMDQtXG5tbS9zaHJpbmtlci5jOjIwNTp2b2lkIHNldF9zaHJpbmtlcl9iaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkLCBpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTIwNi17XG5tbS9zaHJpbmtlci5jOjIwNzpcdGlmIChzaHJpbmtlcl9pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xubW0vc2hyaW5rZXIuYy0yMDgtXHRcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xuLS1cbm1tL3Nocmlua2VyLmMtMjExLVx0XHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjIxMjpcdFx0aWYgKCFXQVJOX09OX09OQ0Uoc2hyaW5rZXJfaWQgXHUwMDNlPSBpbmZvLVx1MDAzZW1hcF9ucl9tYXgpKSB7XG5tbS9zaHJpbmtlci5jLTIxMy1cdFx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xubW0vc2hyaW5rZXIuYy0yMTQtXG5tbS9zaHJpbmtlci5jOjIxNTpcdFx0XHR1bml0ID0gaW5mby1cdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyX2lkKV07XG5tbS9zaHJpbmtlci5jLTIxNi1cdFx0XHQvKiBQYWlycyB3aXRoIHNtcCBtYiBpbiBzaHJpbmtfc2xhYigpICovXG5tbS9zaHJpbmtlci5jLTIxNy1cdFx0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbm1tL3Nocmlua2VyLmM6MjE4Olx0XHRcdHNldF9iaXQoc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyX2lkKSwgdW5pdC1cdTAwM2VtYXApO1xubW0vc2hyaW5rZXIuYy0yMTktXHRcdH1cbi0tXG5tbS9zaHJpbmtlci5jLTIyMy1cbm1tL3Nocmlua2VyLmM6MjI0OnN0YXRpYyBERUZJTkVfSURSKHNocmlua2VyX2lkcik7XG5tbS9zaHJpbmtlci5jLTIyNS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIzNS1cdGd1YXJkKG11dGV4KShcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG5tbS9zaHJpbmtlci5jOjIzNjpcdGlkID0gaWRyX2FsbG9jKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXIsIDAsIDAsIEdGUF9LRVJORUwpO1xubW0vc2hyaW5rZXIuYy0yMzctXHRpZiAoaWQgXHUwMDNjIDApXG4tLVxubW0vc2hyaW5rZXIuYy0yNDEtXHRcdGlmIChleHBhbmRfc2hyaW5rZXJfaW5mbyhpZCkpIHtcbm1tL3Nocmlua2VyLmM6MjQyOlx0XHRcdGlkcl9yZW1vdmUoXHUwMDI2c2hyaW5rZXJfaWRyLCBpZCk7XG5tbS9zaHJpbmtlci5jLTI0My1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9zaHJpbmtlci5jPTI1MD1zdGF0aWMgdm9pZCBzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTI1Ny1cbm1tL3Nocmlua2VyLmM6MjU4Olx0aWRyX3JlbW92ZShcdTAwMjZzaHJpbmtlcl9pZHIsIGlkKTtcbm1tL3Nocmlua2VyLmMtMjU5LX1cbi0tXG5tbS9zaHJpbmtlci5jPTI2MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkX21lbWNnKGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0vc2hyaW5rZXIuYy0yNjktXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjI3MDpcdHVuaXQgPSBpbmZvLVx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXItXHUwMDNlaWQpXTtcbm1tL3Nocmlua2VyLmM6MjcxOlx0bnJfZGVmZXJyZWQgPSBhdG9taWNfbG9uZ194Y2hnKFx1MDAyNnVuaXQtXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVx1MDAzZWlkKV0sIDApO1xubW0vc2hyaW5rZXIuYy0yNzItXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9zaHJpbmtlci5jPTI3Nz1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTI4NS1cdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VzaHJpbmtlcl9pbmZvKTtcbm1tL3Nocmlua2VyLmM6Mjg2Olx0dW5pdCA9IGluZm8tXHUwMDNldW5pdFtzaHJpbmtlcl9pZF90b19pbmRleChzaHJpbmtlci1cdTAwM2VpZCldO1xubW0vc2hyaW5rZXIuYy0yODctXHRucl9kZWZlcnJlZCA9XG5tbS9zaHJpbmtlci5jOjI4ODpcdFx0YXRvbWljX2xvbmdfYWRkX3JldHVybihuciwgXHUwMDI2dW5pdC1cdTAwM2Vucl9kZWZlcnJlZFtzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXItXHUwMDNlaWQpXSk7XG5tbS9zaHJpbmtlci5jLTI4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3Nocmlua2VyLmM9Mjk0PXZvaWQgcmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Nocmlua2VyLmMtMzA2LVx0XHRwYXJlbnRfaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKHBhcmVudCwgbmlkKTtcbm1tL3Nocmlua2VyLmM6MzA3Olx0XHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGNoaWxkX2luZm8tXHUwMDNlbWFwX25yX21heCk7IGluZGV4JiM0MzsmIzQzOykge1xubW0vc2hyaW5rZXIuYy0zMDgtXHRcdFx0Y2hpbGRfdW5pdCA9IGNoaWxkX2luZm8tXHUwMDNldW5pdFtpbmRleF07XG4tLVxubW0vc2hyaW5rZXIuYz00NzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4tLVxubW0vc2hyaW5rZXIuYy01MDItXHQgKiAgICAgICAgICBSQ1UgbG9jay5cbm1tL3Nocmlua2VyLmM6NTAzOlx0ICogIHN0ZXAgMzogdHJhdmVyc2UgdGhlIGJpdG1hcCBhbmQgY2FsY3VsYXRlIHNocmlua2VyX2lkXG5tbS9zaHJpbmtlci5jLTUwNC1cdCAqICBzdGVwIDQ6IHVzZSByY3VfcmVhZF9sb2NrKCkgdG8gZ3VhcmFudGVlIGV4aXN0ZW5jZSBvZiB0aGUgc2hyaW5rZXIuXG5tbS9zaHJpbmtlci5jOjUwNTpcdCAqICBzdGVwIDU6IHVzZSBzaHJpbmtlcl9pZCB0byBmaW5kIHRoZSBzaHJpbmtlciwgdGhlbiB1c2Vcbm1tL3Nocmlua2VyLmMtNTA2LVx0ICogICAgICAgICAgc2hyaW5rZXJfdHJ5X2dldCgpIHRvIGd1YXJhbnRlZSBleGlzdGVuY2Ugb2YgdGhlIHNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmMtNTI2LVxubW0vc2hyaW5rZXIuYzo1Mjc6XHRpZiAoaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGluZm8tXHUwMDNlbWFwX25yX21heCkpIHtcbm1tL3Nocmlua2VyLmMtNTI4LVx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xuLS1cbm1tL3Nocmlua2VyLmMtNTQwLVx0XHRcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG5tbS9zaHJpbmtlci5jOjU0MTpcdFx0XHRpbnQgc2hyaW5rZXJfaWQgPSBjYWxjX3Nocmlua2VyX2lkKGluZGV4LCBvZmZzZXQpO1xubW0vc2hyaW5rZXIuYy01NDItXG5tbS9zaHJpbmtlci5jLTU0My1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9zaHJpbmtlci5jOjU0NDpcdFx0XHRzaHJpbmtlciA9IGlkcl9maW5kKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXJfaWQpO1xubW0vc2hyaW5rZXIuYy01NDUtXHRcdFx0aWYgKHVubGlrZWx5KCFzaHJpbmtlciB8fCAhc2hyaW5rZXJfdHJ5X2dldChzaHJpbmtlcikpKSB7XG4tLVxubW0vc2hyaW5rZXIuYy01ODItXHRcdFx0XHRlbHNlXG5tbS9zaHJpbmtlci5jOjU4MzpcdFx0XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBzaHJpbmtlcl9pZCk7XG5tbS9zaHJpbmtlci5jLTU4NC1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExSVSBJbml0aWFsaXphdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgX19saXN0X2xydV9pbml0YC4gUHJldmlvdXNseSwgd2hlbiBpbml0aWFsaXppbmcgdGhlIExSVSwgaXQgd291bGQgYXNzaWduIHRoZSBgc2hyaW5rZXJfaWRgIGJhc2VkIG9uIHdoZXRoZXIgYSBzaHJpbmtlciB3YXMgcHJlc2VudCwgYW5kIHVuZGVyIGBDT05GSUdfTUVNQ0dgLCB0aGlzIHdhcyBzdHJhaWdodGZvcndhcmQuIElmIGEgYHNocmlua2VyYCBleGlzdGVkLCBpdCBnb3QgdGhlIElELiBOb3csIGhvd2V2ZXIsIHRoZXJlJiMzOTtzIGFuIGFkZGVkIGNoZWNrOgoKYGBgYwoJaWYgKHNocmlua2VyICZhbXA7JmFtcDsgKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9NRU1DR19BV0FSRSkpCgkJbHJ1LSZndDtzaHJpbmtlcl9pZCA9IHNocmlua2VyLSZndDtpZDsKCWVsc2UKCQlscnUtJmd0O3Nocmlua2VyX2lkID0gLTE7CmBgYAoKSW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIG5vdyAqYWxzbyogY2hlY2tpbmcgdGhlIGBTSFJJTktFUl9NRU1DR19BV0FSRWAgZmxhZyBvbiB0aGUgYHNocmlua2VyYCBzdHJ1Y3QuIFRoZSBjb21tZW50IGlzIGNydWNpYWw7IGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBzY2VuYXJpbyB3aGVyZSBhIHNocmlua2VyIG1pZ2h0IGZhbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUsIHBlcmhhcHMgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBsaWtlIGBjZ3JvdXAubWVtb3J5PW5va21lbWAuIEluIHN1Y2ggYSBjYXNlLCB0aGUgYHNocmlua2VyLSZndDtpZGAgbWlnaHQgYmUgc3RhbGUgKDApLiBUaGlzIHByZXZlbnRzIGBzZXRfc2hyaW5rZXJfYml0KClgIGZyb20gYWN0aW5nIG9uIGFuIGludmFsaWQgYHNocmlua2VyX2lkYC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgaXMgc2V0IGFuZCBob3cgYHNocmlua2VyLSZndDtpZGAgaXMgYXNzaWduZWQgYW5kIG1hbmFnZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBlc3BlY2lhbGx5IGlmIHRoZSBzaHJpbmtlciBpc24mIzM5O3QgbWVtY2ctYXdhcmUuIFRpbWUgdG8gZGlnIGludG8gYHNocmlua2VyX2FsbG9jYCBhbmQgYHNocmlua2VyX3JlZ2lzdGVyYCBpbiBgbW0vc2hyaW5rZXIuY2AuIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhvc2UgdmFyaWFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NIUklOS0VSX01FTUNHX0FXQVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ni1cdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8XG5tbS9odWdlX21lbW9yeS5jOjEwNjc6XHRcdFx0XHRcdFx0IFNIUklOS0VSX01FTUNHX0FXQVJFLFxubW0vaHVnZV9tZW1vcnkuYy0xMDY4LVx0XHRcdFx0XHRcdCBcJiMzNDt0aHAtZGVmZXJyZWRfc3BsaXRcJiMzNDspO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NzMtXHQgKi9cbm1tL2xpc3RfbHJ1LmM6Njc0Olx0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbm1tL2xpc3RfbHJ1LmMtNjc1LVx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcbi0tXG5tbS9zaHJpbmtlci5jPTM0MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0vc2hyaW5rZXIuYy0zNDktXHRpZiAoc2MtXHUwMDNlbWVtY2cgXHUwMDI2XHUwMDI2XG5tbS9zaHJpbmtlci5jOjM1MDpcdCAgICAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbm1tL3Nocmlua2VyLmMtMzUxLVx0XHRyZXR1cm4geGNoZ19ucl9kZWZlcnJlZF9tZW1jZyhuaWQsIHNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmM9MzU4PXN0YXRpYyBsb25nIGFkZF9ucl9kZWZlcnJlZChsb25nIG5yLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmMtMzY2LVx0aWYgKHNjLVx1MDAzZW1lbWNnIFx1MDAyNlx1MDAyNlxubW0vc2hyaW5rZXIuYzozNjc6XHQgICAgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG5tbS9zaHJpbmtlci5jLTM2OC1cdFx0cmV0dXJuIGFkZF9ucl9kZWZlcnJlZF9tZW1jZyhuciwgbmlkLCBzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jPTY4OD1zdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyX2FsbG9jKHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxubW0vc2hyaW5rZXIuYy03MDctXG5tbS9zaHJpbmtlci5jOjcwODpcdGlmIChmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpIHtcbm1tL3Nocmlua2VyLmMtNzA5LVx0XHRlcnIgPSBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzaHJpbmtlcik7XG4tLVxubW0vc2hyaW5rZXIuYy03MTEtXHRcdFx0LyogTWVtY2cgaXMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIHNocmlua2VyLiAqL1xubW0vc2hyaW5rZXIuYzo3MTI6XHRcdFx0c2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2PSB+U0hSSU5LRVJfTUVNQ0dfQVdBUkU7XG5tbS9zaHJpbmtlci5jLTcxMy1cdFx0XHRnb3RvIG5vbl9tZW1jZztcbi0tXG5tbS9zaHJpbmtlci5jPTc4MD12b2lkIHNocmlua2VyX2ZyZWUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTgxMi1cbm1tL3Nocmlua2VyLmM6ODEzOlx0aWYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSlcbm1tL3Nocmlua2VyLmMtODE0LVx0XHRzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc2hyaW5rZXIpO1xuLS1cbm1tL3Nocmlua2VyX2RlYnVnLmM9NDc9c3RhdGljIGludCBzaHJpbmtlcl9kZWJ1Z2ZzX2NvdW50X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Nocmlua2VyX2RlYnVnLmMtNTktXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjYwOlx0bWVtY2dfYXdhcmUgPSBzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkU7XG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTYxLVxuLS1cbm1tL3Nocmlua2VyX2RlYnVnLmM9MTAwPXN0YXRpYyBzc2l6ZV90IHNocmlua2VyX2RlYnVnZnNfc2Nhbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTEyNy1cbm1tL3Nocmlua2VyX2RlYnVnLmM6MTI4Olx0aWYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkge1xubW0vc2hyaW5rZXJfZGVidWcuYy0xMjktXHRcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChpZCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTc5Mz1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcbi0tXG5tbS93b3JraW5nc2V0LmMtODE5LVx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbm1tL3dvcmtpbmdzZXQuYzo4MjA6XHRcdFx0XHRcdFx0ICAgIFNIUklOS0VSX01FTUNHX0FXQVJFLFxubW0vd29ya2luZ3NldC5jLTgyMS1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7bW0tc2hhZG93XCYjMzQ7KTtcbi0tXG5tbS96c3dhcC5jPTEyNTE9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcbi0tXG5tbS96c3dhcC5jLTEyNTUtXHRzaHJpbmtlciA9XG5tbS96c3dhcC5jOjEyNTY6XHRcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXCYjMzQ7bW0tenN3YXBcJiMzNDspO1xubW0venN3YXAuYy0xMjU3LVx0aWYgKCFzaHJpbmtlcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExpc3QgTFJVIGFuZCBNZW1jZyBTaHJpbmtlciBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgc2hyaW5rZXJfYWxsb2NgLCBpZiB3ZSBlbmNvdW50ZXIgYC1FTk9TWVNgIGZyb20gYHNocmlua2VyX21lbWNnX2FsbG9jYCwgd2hpY2ggc2lnbmFscyB0aGF0IG1lbWNnIGlzbiYjMzk7dCBzdXBwb3J0ZWQgKG9yIGF0IGxlYXN0LCBrbWVtIGlzIGRpc2FibGVkKSwgdGhlIGNvZGUgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYSBub24tbWVtY2ctYXdhcmUgc2hyaW5rZXIuIFRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgaXMgY2xlYXJlZCwgd2hpY2ggaXMgZ29vZC4gSG93ZXZlciwgdGhlIGBzaHJpbmtlci0mZ3Q7aWRgIGZpZWxkIHJlbWFpbnMgdW5pbml0aWFsaXplZCDigJMgaXQmIzM5O3Mgc3R1Y2sgYXQgMCAodGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgYGt6YWxsb2NgKS4KClRoZSBwcm9ibGVtIHN1cmZhY2VzIGxhdGVyLCB3aGVuIGNvZGUgbGlrZSB0aGF0IGluIHN1cGVyYmxvY2tzIGluaXRpYWxpemVzIGEgYGxpc3RfbHJ1YCAoZm9yIGV4YW1wbGUgYHMtJmd0O3NfZGVudHJ5X2xydWApIGFuZCBwYXNzZXMgdGhlIHNocmlua2VyIHRvIGBfX2xpc3RfbHJ1X2luaXRgLiBCZWZvcmUgdGhpcyBwYXRjaCwgYF9fbGlzdF9scnVfaW5pdGAgd291bGQgc2ltcGx5IGNoZWNrIGZvciBhIG5vbi1OVUxMIHNocmlua2VyIGFuZCB0aGVuIGJsaW5kbHkgYXNzaWduIGBzaHJpbmtlci0mZ3Q7aWRgIHRvIGBscnUtJmd0O3Nocmlua2VyX2lkYC4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgdGhlIHNocmlua2VyIGlzbiYjMzk7dCBtZW1jZy1hd2FyZSwgYGxydS0mZ3Q7c2hyaW5rZXJfaWRgIGdldHMgc2V0IHRvIDAuCgpMYXRlciwgdGhlIGNvZGUgY2FsbHMgYHNldF9zaHJpbmtlcl9iaXRgIHdpdGggdGhpcyBwb3RlbnRpYWxseSBpbnZhbGlkIGBzaHJpbmtlcl9pZGAuIFRoZSBiaXRtYXNrIGZvciBtZW1jZyBzaHJpbmtlcnMgd291bGQgYmUgbW9kaWZpZWQgdXNpbmcgdGhpcyB2YWx1ZSBvZiAwLCBldmVuIHRob3VnaCB0aGUgc2hyaW5rZXIgaXNuJiMzOTt0IG1lbWNnLWF3YXJlIG9yIHZhbGlkICh3aGljaCBpcyBpbmNvcnJlY3QgYW5kIGlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMpLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZml4OiBpdCBhZGRzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGA6IGBpZiAoc2hyaW5rZXIgJmFtcDsmYW1wOyAoc2hyaW5rZXItJmd0O2ZsYWdzICZhbXA7IFNIUklOS0VSX01FTUNHX0FXQVJFKSlgLiBJZiB0aGUgc2hyaW5rZXIgaXNuJiMzOTt0IG1lbWNnLWF3YXJlLCBgbHJ1LSZndDtzaHJpbmtlcl9pZGAgZ2V0cyBzZXQgdG8gLTEuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljPyBBYnNvbHV0ZWx5LiBUaGUgYGxpc3RfbHJ1YCBhbmQgc2hyaW5rZXIgbG9naWMgYXJlIGZ1bmRhbWVudGFsIE1NIGNvbXBvbmVudHMuIFRoZSBwYXRjaCBlZmZlY3RpdmVseSBwcmV2ZW50cyBpbmNvcnJlY3Qgc2hyaW5rZXIgYml0IHVwZGF0ZXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkIChvciBpZiB3ZSBoYWQgYSBmYWxsYmFjayBzY2VuYXJpbykuIFRoZXJlZm9yZSwgdGhpcyBkZXNlcnZlcyBmdXJ0aGVyIHNjcnV0aW55LgoKR2l2ZW4gdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgaXMgd29ydGggZnV6emluZywgdGhpcyBwYXRjaCBjbGVhcmx5IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPXRydWVgLgoKRm9yIGZ1enppbmcsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgX19saXN0X2xydV9pbml0YCBmdW5jdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgdGhlIHN1cnJvdW5kaW5nIGNhbGxzIGluIGBtbS9saXN0X2xydS5jYC4gVGhlc2UgYXJlIHRoZSBlbnRyeXBvaW50cyB0byBiZSBtb25pdG9yZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmM9MTkwPWJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0vbGlzdF9scnUuYy0yMDctfVxubW0vbGlzdF9scnUuYzoyMDg6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkKTtcbm1tL2xpc3RfbHJ1LmMtMjA5LVxuLS1cbm1tL2xpc3RfbHJ1LmM9MjQ3PWJvb2wgbGlzdF9scnVfYWRkX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcbi0tXG5tbS9saXN0X2xydS5jLTI2MS19XG5tbS9saXN0X2xydS5jOjI2MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGRfb2JqKTtcbm1tL2xpc3RfbHJ1LmMtMjYzLVxuLS1cbm1tL2xpc3RfbHJ1LmM9Mjc3PWJvb2wgbGlzdF9scnVfZGVsX29iaihzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcbi0tXG5tbS9saXN0X2xydS5jLTI5MS19XG5tbS9saXN0X2xydS5jOjI5MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcbm1tL2xpc3RfbHJ1LmMtMjkzLVxubW0vbGlzdF9scnUuYz0yOTQ9dm9pZCBsaXN0X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXG4tLVxubW0vbGlzdF9scnUuYy0yOTgtfVxubW0vbGlzdF9scnUuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XG5tbS9saXN0X2xydS5jLTMwMC1cbm1tL2xpc3RfbHJ1LmM9MzAxPXZvaWQgbGlzdF9scnVfaXNvbGF0ZV9tb3ZlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxubW0vbGlzdF9scnUuYy0zMDYtfVxubW0vbGlzdF9scnUuYzozMDc6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZV9tb3ZlKTtcbm1tL2xpc3RfbHJ1LmMtMzA4LVxubW0vbGlzdF9scnUuYz0zMDk9dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbGlzdF9scnUuYy0zMjQtfVxubW0vbGlzdF9scnUuYzozMjU6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfY291bnRfb25lKTtcbm1tL2xpc3RfbHJ1LmMtMzI2LVxubW0vbGlzdF9scnUuYz0zMjc9dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMzMzLX1cbm1tL2xpc3RfbHJ1LmM6MzM0OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X25vZGUpO1xubW0vbGlzdF9scnUuYy0zMzUtXG4tLVxubW0vbGlzdF9scnUuYz0zOTU9bGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9saXN0X2xydS5jLTQwMS19XG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XG5tbS9saXN0X2xydS5jLTQwMy1cbi0tXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTQ0OC19XG5tbS9saXN0X2xydS5jOjQ0OTpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX25vZGUpO1xubW0vbGlzdF9scnUuYy00NTAtXG4tLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY5NC19XG5tbS9saXN0X2xydS5jOjY5NTpFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xubW0vbGlzdF9scnUuYy02OTYtXG5tbS9saXN0X2xydS5jPTY5Nz12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MTItfVxubW0vbGlzdF9scnUuYzo3MTM6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfZGVzdHJveSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDIyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19NRU1DR2AgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBtbS9saXN0X2xydS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgYGxpc3RfbHJ1LmNgIGlzIGNvbXBpbGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGdhdGluZyBpdHMgaW5jbHVzaW9uIG9yIHBvdGVudGlhbGx5IGd1YXJkaW5nIGFzcGVjdHMgb2YgYENPTkZJR19NRU1DR2AgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gY2VydGFpbiBLY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXN0X2xydSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODIyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01Ni1cdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGU6NTc6XHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG5tbS9NYWtlZmlsZS01OC1cdFx0XHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxubW0vaHVnZV9tZW1vcnkuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcdTAwM2Vcbi0tXG5tbS9odWdlX21lbW9yeS5jPTcyPXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVmZXJyZWRfc3BsaXRfa2V5O1xubW0vaHVnZV9tZW1vcnkuYzo3MzpzdGF0aWMgc3RydWN0IGxpc3RfbHJ1IGRlZmVycmVkX3NwbGl0X2xydTtcbm1tL2h1Z2VfbWVtb3J5LmMtNzQtc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXI7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zODI9c3RhdGljIGludCBfX2luaXQgaHVnZV96ZXJvX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4Ni1cdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG5tbS9odWdlX21lbW9yeS5jOjM4NzpcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xubW0vaHVnZV9tZW1vcnkuYy0zODgtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA1Nz1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNjAtXHRcdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYzoxMDYxOlx0cmV0dXJuIGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKGZvbGlvLCBcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDYyLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwNzEtXG5tbS9odWdlX21lbW9yeS5jOjEwNzI6XHRpZiAobGlzdF9scnVfaW5pdF9tZW1jZ19rZXkoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy0xMDczLVx0XHRcdFx0ICAgIGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA4Nj1zdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwODgtXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA4OTpcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5MC1cdGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDgzPWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDk0LSAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xubW0vaHVnZV9tZW1vcnkuYzo0NDk1OiAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG5tbS9odWdlX21lbW9yeS5jLTQ0OTYtICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSYjMzk7cyB1bmxvY2tlZFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5OC0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDk5OiAqIFRoZSBsaXN0X2xydSBzdWJsaXN0IGlzIGRldGVybWluZWQgYnkgZm9saW8mIzM5O3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxubW0vaHVnZV9tZW1vcnkuYy00NTAwLSAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MDI9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDQtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5tbS9odWdlX21lbW9yeS5jOjQ1MDU6XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG5tbS9odWdlX21lbW9yeS5jLTQ1MDYtXHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTQtXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNTpcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNjpcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNy1cdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MjMtXHR9XG5tbS9odWdlX21lbW9yeS5jOjQ1MjQ6XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUyNS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUzMT12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMi17XG5tbS9odWdlX21lbW9yeS5jOjQ1MzM6XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG5tbS9odWdlX21lbW9yeS5jLTQ1MzQtXHRpbnQgbmlkO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2MS1cdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzo0NTYyOlx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy00NTYzLVx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1NzQtXHR9XG5tbS9odWdlX21lbW9yeS5jOjQ1NzU6XHRfX2xpc3RfbHJ1X2FkZChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCwgbWVtY2cpO1xubW0vaHVnZV9tZW1vcnkuYzo0NTc2Olx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcdTAwMjZmbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTQ1NzctXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTg0LVxubW0vaHVnZV9tZW1vcnkuYzo0NTg1Olx0Y291bnQgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBzYyk7XG5tbS9odWdlX21lbW9yeS5jLTQ1ODYtXHRyZXR1cm4gY291bnQgPzogU0hSSU5LX0VNUFRZO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYxNj1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2h1Z2VfbWVtb3J5LmM6NDYxNzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy00NjE4LVx0XHRcdFx0XHQgICAgICB2b2lkICpjYl9hcmcpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjI2LVxubW0vaHVnZV9tZW1vcnkuYzo0NjI3Olx0bGlzdF9scnVfaXNvbGF0ZV9tb3ZlKGxydSwgaXRlbSwgZnJlZWFibGUpO1xubW0vaHVnZV9tZW1vcnkuYy00NjI4LVx0cmV0dXJuIExSVV9SRU1PVkVEO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYzMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDYzOC1cbm1tL2h1Z2VfbWVtb3J5LmM6NDYzOTpcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXG5tbS9odWdlX21lbW9yeS5jLTQ2NDAtXHRcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcdTAwMjZkaXNwb3NlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2NzgtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubW0vaHVnZV9tZW1vcnkuYzo0Njc5Olx0XHRcdGxpc3RfbHJ1X2FkZF9pcnEoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy00NjgwLVx0XHRcdFx0XHQgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsXG4tLVxubW0vaW50ZXJuYWwuaD03MzI9c3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9pbnRlcm5hbC5oLTczOS1cdCAqIGRlZmVycmVkX2xpc3QuIElmIGZvbGlvIGlzIG5vdCBpbiBkZWZlcnJlZF9saXN0LCBpdCYjMzk7cyBzYWZlXG5tbS9pbnRlcm5hbC5oOjc0MDpcdCAqIHRvIGNoZWNrIHdpdGhvdXQgYWNxdWlyaW5nIHRoZSBsaXN0X2xydSBsb2NrLlxubW0vaW50ZXJuYWwuaC03NDEtXHQgKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTE0NzA9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKTtcbm1tL2ludGVybmFsLmg6MTQ3MTpleHRlcm4gc3RydWN0IGxpc3RfbHJ1IHNoYWRvd19ub2Rlcztcbm1tL2ludGVybmFsLmgtMTQ3Mi0jZGVmaW5lIG1hcHBpbmdfc2V0X3VwZGF0ZSh4YXMsIG1hcHBpbmcpIGRvIHtcdFx0XHRcXFxuLS1cbm1tL2xpc3RfbHJ1LmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxubW0vbGlzdF9scnUuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG5tbS9saXN0X2xydS5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuLS1cbm1tL2xpc3RfbHJ1LmMtMTctXG5tbS9saXN0X2xydS5jOjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIGJvb2wgaXJxLFxubW0vbGlzdF9scnUuYy0xOS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpXG4tLVxubW0vbGlzdF9scnUuYy0yOC1cbm1tL2xpc3RfbHJ1LmM6Mjk6c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXG5tbS9saXN0X2xydS5jLTMwLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDAtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYzo0MTpzdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XG5tbS9saXN0X2xydS5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmMtNDMtXG5tbS9saXN0X2xydS5jOjQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtNDUte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDgtXG5tbS9saXN0X2xydS5jOjQ5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy01MC17XG5tbS9saXN0X2xydS5jOjUxOlx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxubW0vbGlzdF9scnUuYy01Mi1cdFx0cmV0dXJuO1xubW0vbGlzdF9scnUuYy01My1cbm1tL2xpc3RfbHJ1LmM6NTQ6XHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jOjU1Olx0bGlzdF9hZGQoXHUwMDI2bHJ1LVx1MDAzZWxpc3QsIFx1MDAyNm1lbWNnX2xpc3RfbHJ1cyk7XG5tbS9saXN0X2xydS5jOjU2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jLTU3LX1cbm1tL2xpc3RfbHJ1LmMtNTgtXG5tbS9saXN0X2xydS5jOjU5OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG5tbS9saXN0X2xydS5jLTYwLXtcbm1tL2xpc3RfbHJ1LmM6NjE6XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG5tbS9saXN0X2xydS5jLTYyLVx0XHRyZXR1cm47XG5tbS9saXN0X2xydS5jLTYzLVxubW0vbGlzdF9scnUuYzo2NDpcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmMtNjUtXHRsaXN0X2RlbChcdTAwMjZscnUtXHUwMDNlbGlzdCk7XG5tbS9saXN0X2xydS5jOjY2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XG5tbS9saXN0X2xydS5jLTY3LX1cbm1tL2xpc3RfbHJ1LmMtNjgtXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy03MC17XG4tLVxubW0vbGlzdF9scnUuYy03My1cbm1tL2xpc3RfbHJ1LmM6NzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbm1tL2xpc3RfbHJ1LmM6NzU6bGlzdF9scnVfZnJvbV9tZW1jZ19pZHgoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIGludCBpZHgpXG5tbS9saXN0X2xydS5jLTc2LXtcbm1tL2xpc3RfbHJ1LmM6Nzc6XHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSBcdTAwMjZcdTAwMjYgaWR4IFx1MDAzZT0gMCkge1xubW0vbGlzdF9scnUuYzo3ODpcdFx0c3RydWN0IGxpc3RfbHJ1X21lbWNnICptbHJ1ID0geGFfbG9hZChcdTAwMjZscnUtXHUwMDNleGEsIGlkeCk7XG5tbS9saXN0X2xydS5jLTc5LVxuLS1cbm1tL2xpc3RfbHJ1LmMtODQtXG5tbS9saXN0X2xydS5jOjg1OnN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXG5tbS9saXN0X2xydS5jOjg2OmxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTg3LVx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXG4tLVxubW0vbGlzdF9scnUuYy04OS17XG5tbS9saXN0X2xydS5jOjkwOlx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcbm1tL2xpc3RfbHJ1LmMtOTEtXG4tLVxubW0vbGlzdF9scnUuYy05My1hZ2Fpbjpcbm1tL2xpc3RfbHJ1LmM6OTQ6XHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XG5tbS9saXN0X2xydS5jLTk1LVx0aWYgKGxpa2VseShsKSkge1xubW0vbGlzdF9scnUuYzo5NjpcdFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG5tbS9saXN0X2xydS5jLTk3LVx0XHRpZiAobGlrZWx5KFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcbi0tXG5tbS9saXN0X2xydS5jLTEwMC1cdFx0fVxubW0vbGlzdF9scnUuYzoxMDE6XHRcdHVubG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XG5tbS9saXN0X2xydS5jLTEwMi1cdH1cbi0tXG5tbS9saXN0X2xydS5jLTEwNC1cdCAqIENhbGxlciBtYXkgc2ltcGx5IGJhaWwgb3V0IGlmIHJhY2VkIHdpdGggcmVwYXJlbnRpbmcgb3Jcbm1tL2xpc3RfbHJ1LmM6MTA1Olx0ICogbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdF9scnUgYW5kIGV4cGVjdCBlbXB0eSBzbG90cy5cbm1tL2xpc3RfbHJ1LmMtMTA2LVx0ICovXG4tLVxubW0vbGlzdF9scnUuYy0xMTUtI2Vsc2Vcbm1tL2xpc3RfbHJ1LmM6MTE2OnN0YXRpYyB2b2lkIGxpc3RfbHJ1X3JlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMTcte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTE5LVxubW0vbGlzdF9scnUuYzoxMjA6c3RhdGljIHZvaWQgbGlzdF9scnVfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtMTIxLXtcbi0tXG5tbS9saXN0X2xydS5jLTEyMy1cbm1tL2xpc3RfbHJ1LmM6MTI0OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMjUte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTI4LVxubW0vbGlzdF9scnUuYzoxMjk6c3RhdGljIGlubGluZSBib29sIGxpc3RfbHJ1X21lbWNnX2F3YXJlKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy0xMzAte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTMzLVxubW0vbGlzdF9scnUuYzoxMzQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbm1tL2xpc3RfbHJ1LmM6MTM1Omxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxubW0vbGlzdF9scnUuYy0xMzYte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTM5LVxubW0vbGlzdF9scnUuYzoxNDA6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcbm1tL2xpc3RfbHJ1LmM6MTQxOmxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTE0Mi1cdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csIGJvb2wgaXJxLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMTQ0LXtcbm1tL2xpc3RfbHJ1LmM6MTQ1Olx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbCA9IFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubHJ1O1xubW0vbGlzdF9scnUuYy0xNDYtXG5tbS9saXN0X2xydS5jOjE0NzpcdGxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xubW0vbGlzdF9scnUuYy0xNDgtXG4tLVxubW0vbGlzdF9scnUuYy0xNTItXG5tbS9saXN0X2xydS5jOjE1MzpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYy0xNTQtXHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnKVxubW0vbGlzdF9scnUuYy0xNTUte1xubW0vbGlzdF9scnUuYzoxNTY6XHRyZXR1cm4gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgbWVtY2csIC8qaXJxPSovZmFsc2UsXG5tbS9saXN0X2xydS5jLTE1Ny1cdFx0XHRcdCAgICAgIC8qaXJxX2ZsYWdzPSovTlVMTCwgLypza2lwX2VtcHR5PSovZmFsc2UpO1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTU5LVxubW0vbGlzdF9scnUuYzoxNjA6dm9pZCBsaXN0X2xydV91bmxvY2soc3RydWN0IGxpc3RfbHJ1X29uZSAqbClcbm1tL2xpc3RfbHJ1LmMtMTYxLXtcbm1tL2xpc3RfbHJ1LmM6MTYyOlx0dW5sb2NrX2xpc3RfbHJ1KGwsIC8qaXJxX29mZj0qL2ZhbHNlLCAvKmlycV9mbGFncz0qL05VTEwpO1xubW0vbGlzdF9scnUuYy0xNjMtfVxubW0vbGlzdF9scnUuYy0xNjQtXG5tbS9saXN0X2xydS5jOjE2NTpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbm1tL2xpc3RfbHJ1LmMtMTY2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXG5tbS9saXN0X2xydS5jLTE2Ny17XG5tbS9saXN0X2xydS5jOjE2ODpcdHJldHVybiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBtZW1jZywgLyppcnE9Ki90cnVlLFxubW0vbGlzdF9scnUuYy0xNjktXHRcdFx0XHQgICAgICAvKmlycV9mbGFncz0qL05VTEwsIC8qc2tpcF9lbXB0eT0qL2ZhbHNlKTtcbi0tXG5tbS9saXN0X2xydS5jLTE3MS1cbm1tL2xpc3RfbHJ1LmM6MTcyOnZvaWQgbGlzdF9scnVfdW5sb2NrX2lycShzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy0xNzMte1xubW0vbGlzdF9scnUuYzoxNzQ6XHR1bmxvY2tfbGlzdF9scnUobCwgLyppcnFfb2ZmPSovdHJ1ZSwgLyppcnFfZmxhZ3M9Ki9OVUxMKTtcbm1tL2xpc3RfbHJ1LmMtMTc1LX1cbm1tL2xpc3RfbHJ1LmMtMTc2LVxubW0vbGlzdF9scnUuYzoxNzc6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnFzYXZlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYy0xNzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csXG4tLVxubW0vbGlzdF9scnUuYy0xODAte1xubW0vbGlzdF9scnUuYzoxODE6XHRyZXR1cm4gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgbWVtY2csIC8qaXJxPSovdHJ1ZSxcbm1tL2xpc3RfbHJ1LmMtMTgyLVx0XHRcdFx0ICAgICAgLyppcnFfZmxhZ3M9Ki9mbGFncywgLypza2lwX2VtcHR5PSovZmFsc2UpO1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTg0LVxubW0vbGlzdF9scnUuYzoxODU6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCB1bnNpZ25lZCBsb25nICpmbGFncylcbm1tL2xpc3RfbHJ1LmMtMTg2LXtcbm1tL2xpc3RfbHJ1LmM6MTg3Olx0dW5sb2NrX2xpc3RfbHJ1KGwsIC8qaXJxX29mZj0qL3RydWUsIC8qaXJxX2ZsYWdzPSovZmxhZ3MpO1xubW0vbGlzdF9scnUuYy0xODgtfVxubW0vbGlzdF9scnUuYy0xODktXG5tbS9saXN0X2xydS5jOjE5MDpib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0vbGlzdF9scnUuYy0xOTEtXHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMTk3LVx0XHQgKiBTZXQgc2hyaW5rZXIgYml0IG9uIHRoZSBtZW1jZyB0aGF0IG93bnMgdGhlIGxvY2tlZFxubW0vbGlzdF9scnUuYzoxOTg6XHRcdCAqIHN1Ymxpc3QgLSBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKCkgbWF5IGhhdmUgd2Fsa2VkIHVwXG5tbS9saXN0X2xydS5jLTE5OS1cdFx0ICogcGFzdCBhIGR5aW5nIG1lbWNnLCBhbmQgdGhlIGJpdCBtdXN0IGJlIHNldCB0aGVyZS5cbi0tXG5tbS9saXN0X2xydS5jLTIwNy19XG5tbS9saXN0X2xydS5jOjIwODpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGQpO1xubW0vbGlzdF9scnUuYy0yMDktXG5tbS9saXN0X2xydS5jOjIxMDpib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0vbGlzdF9scnUuYy0yMTEtXHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkKVxuLS1cbm1tL2xpc3RfbHJ1LmMtMjIyLS8qIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIG1lbWNnIGxpZmV0aW1lLiAqL1xubW0vbGlzdF9scnUuYzoyMjM6Ym9vbCBsaXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTIyNC1cdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9saXN0X2xydS5jLTIyNS17XG5tbS9saXN0X2xydS5jOjIyNjpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG5tbS9saXN0X2xydS5jLTIyNy1cdGJvb2wgcmV0O1xubW0vbGlzdF9scnUuYy0yMjgtXG5tbS9saXN0X2xydS5jOjIyOTpcdGwgPSBsaXN0X2xydV9sb2NrKGxydSwgbmlkLCBcdTAwMjZtZW1jZyk7XG5tbS9saXN0X2xydS5jOjIzMDpcdHJldCA9IF9fbGlzdF9scnVfYWRkKGxydSwgbCwgaXRlbSwgbmlkLCBtZW1jZyk7XG5tbS9saXN0X2xydS5jOjIzMTpcdGxpc3RfbHJ1X3VubG9jayhsKTtcbm1tL2xpc3RfbHJ1LmMtMjMyLVx0cmV0dXJuIHJldDtcbi0tXG5tbS9saXN0X2xydS5jLTIzNC1cbm1tL2xpc3RfbHJ1LmM6MjM1OmJvb2wgbGlzdF9scnVfYWRkX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2xpc3RfbHJ1LmMtMjM2LVx0XHQgICAgICBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9saXN0X2xydS5jLTIzNy17XG5tbS9saXN0X2xydS5jOjIzODpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG5tbS9saXN0X2xydS5jLTIzOS1cdGJvb2wgcmV0O1xubW0vbGlzdF9scnUuYy0yNDAtXG5tbS9saXN0X2xydS5jOjI0MTpcdGwgPSBsaXN0X2xydV9sb2NrX2lycShscnUsIG5pZCwgXHUwMDI2bWVtY2cpO1xubW0vbGlzdF9scnUuYzoyNDI6XHRyZXQgPSBfX2xpc3RfbHJ1X2FkZChscnUsIGwsIGl0ZW0sIG5pZCwgbWVtY2cpO1xubW0vbGlzdF9scnUuYzoyNDM6XHRsaXN0X2xydV91bmxvY2tfaXJxKGwpO1xubW0vbGlzdF9scnUuYy0yNDQtXHRyZXR1cm4gcmV0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjQ2LVxubW0vbGlzdF9scnUuYzoyNDc6Ym9vbCBsaXN0X2xydV9hZGRfb2JqKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtKVxubW0vbGlzdF9scnUuYy0yNDgte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjUxLVxubW0vbGlzdF9scnUuYzoyNTI6XHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xubW0vbGlzdF9scnUuYy0yNTMtXHRcdHJjdV9yZWFkX2xvY2soKTtcbm1tL2xpc3RfbHJ1LmM6MjU0Olx0XHRyZXQgPSBsaXN0X2xydV9hZGQobHJ1LCBpdGVtLCBuaWQsIG1lbV9jZ3JvdXBfZnJvbV92aXJ0KGl0ZW0pKTtcbm1tL2xpc3RfbHJ1LmMtMjU1LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbm1tL2xpc3RfbHJ1LmMtMjU2LVx0fSBlbHNlIHtcbm1tL2xpc3RfbHJ1LmM6MjU3Olx0XHRyZXQgPSBsaXN0X2xydV9hZGQobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xubW0vbGlzdF9scnUuYy0yNTgtXHR9XG4tLVxubW0vbGlzdF9scnUuYy0yNjEtfVxubW0vbGlzdF9scnUuYzoyNjI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XG5tbS9saXN0X2xydS5jLTI2My1cbm1tL2xpc3RfbHJ1LmMtMjY0LS8qIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIG1lbWNnIGxpZmV0aW1lLiAqL1xubW0vbGlzdF9scnUuYzoyNjU6Ym9vbCBsaXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXG5tbS9saXN0X2xydS5jLTI2Ni1cdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9saXN0X2xydS5jLTI2Ny17XG5tbS9saXN0X2xydS5jOjI2ODpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XG5tbS9saXN0X2xydS5jLTI2OS1cdGJvb2wgcmV0O1xubW0vbGlzdF9scnUuYy0yNzAtXG5tbS9saXN0X2xydS5jOjI3MTpcdGwgPSBsaXN0X2xydV9sb2NrKGxydSwgbmlkLCBcdTAwMjZtZW1jZyk7XG5tbS9saXN0X2xydS5jOjI3MjpcdHJldCA9IF9fbGlzdF9scnVfZGVsKGxydSwgbCwgaXRlbSwgbmlkKTtcbm1tL2xpc3RfbHJ1LmM6MjczOlx0bGlzdF9scnVfdW5sb2NrKGwpO1xubW0vbGlzdF9scnUuYy0yNzQtXHRyZXR1cm4gcmV0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjc2LVxubW0vbGlzdF9scnUuYzoyNzc6Ym9vbCBsaXN0X2xydV9kZWxfb2JqKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtKVxubW0vbGlzdF9scnUuYy0yNzgte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjgxLVxubW0vbGlzdF9scnUuYzoyODI6XHRpZiAobGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xubW0vbGlzdF9scnUuYy0yODMtXHRcdHJjdV9yZWFkX2xvY2soKTtcbm1tL2xpc3RfbHJ1LmM6Mjg0Olx0XHRyZXQgPSBsaXN0X2xydV9kZWwobHJ1LCBpdGVtLCBuaWQsIG1lbV9jZ3JvdXBfZnJvbV92aXJ0KGl0ZW0pKTtcbm1tL2xpc3RfbHJ1LmMtMjg1LVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbm1tL2xpc3RfbHJ1LmMtMjg2LVx0fSBlbHNlIHtcbm1tL2xpc3RfbHJ1LmM6Mjg3Olx0XHRyZXQgPSBsaXN0X2xydV9kZWwobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xubW0vbGlzdF9scnUuYy0yODgtXHR9XG4tLVxubW0vbGlzdF9scnUuYy0yOTEtfVxubW0vbGlzdF9scnUuYzoyOTI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfZGVsX29iaik7XG5tbS9saXN0X2xydS5jLTI5My1cbm1tL2xpc3RfbHJ1LmM6Mjk0OnZvaWQgbGlzdF9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtKVxubW0vbGlzdF9scnUuYy0yOTUte1xuLS1cbm1tL2xpc3RfbHJ1LmMtMjk4LX1cbm1tL2xpc3RfbHJ1LmM6Mjk5OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2lzb2xhdGUpO1xubW0vbGlzdF9scnUuYy0zMDAtXG5tbS9saXN0X2xydS5jOjMwMTp2b2lkIGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxubW0vbGlzdF9scnUuYy0zMDItXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5tbS9saXN0X2xydS5jLTMwNi19XG5tbS9saXN0X2xydS5jOjMwNzpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlX21vdmUpO1xubW0vbGlzdF9scnUuYy0zMDgtXG5tbS9saXN0X2xydS5jOjMwOTp1bnNpZ25lZCBsb25nIGxpc3RfbHJ1X2NvdW50X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbm1tL2xpc3RfbHJ1LmMtMzEwLVx0XHRcdFx0IGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL2xpc3RfbHJ1LmMtMzExLXtcbm1tL2xpc3RfbHJ1LmM6MzEyOlx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcbm1tL2xpc3RfbHJ1LmMtMzEzLVx0bG9uZyBjb3VudDtcbi0tXG5tbS9saXN0X2xydS5jLTMxNS1cdHJjdV9yZWFkX2xvY2soKTtcbm1tL2xpc3RfbHJ1LmM6MzE2Olx0bCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBtZW1jZ19rbWVtX2lkKG1lbWNnKSk7XG5tbS9saXN0X2xydS5jLTMxNy1cdGNvdW50ID0gbCA/IFJFQURfT05DRShsLVx1MDAzZW5yX2l0ZW1zKSA6IDA7XG4tLVxubW0vbGlzdF9scnUuYy0zMjQtfVxubW0vbGlzdF9scnUuYzozMjU6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfY291bnRfb25lKTtcbm1tL2xpc3RfbHJ1LmMtMzI2LVxubW0vbGlzdF9scnUuYzozMjc6dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxubW0vbGlzdF9scnUuYy0zMjgte1xubW0vbGlzdF9scnUuYzozMjk6XHRzdHJ1Y3QgbGlzdF9scnVfbm9kZSAqbmxydTtcbm1tL2xpc3RfbHJ1LmMtMzMwLVxuLS1cbm1tL2xpc3RfbHJ1LmMtMzMzLX1cbm1tL2xpc3RfbHJ1LmM6MzM0OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X25vZGUpO1xubW0vbGlzdF9scnUuYy0zMzUtXG5tbS9saXN0X2xydS5jPTMzNj1zdGF0aWMgdW5zaWduZWQgbG9uZ1xubW0vbGlzdF9scnUuYzozMzc6X19saXN0X2xydV93YWxrX29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbGlzdF9scnUuYzozMzg6XHRcdCAgICBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcbm1tL2xpc3RfbHJ1LmMtMzM5LVx0XHQgICAgdW5zaWduZWQgbG9uZyAqbnJfdG9fd2FsaywgYm9vbCBpcnFfb2ZmKVxubW0vbGlzdF9scnUuYy0zNDAte1xubW0vbGlzdF9scnUuYzozNDE6XHRzdHJ1Y3QgbGlzdF9scnVfbm9kZSAqbmxydSA9IFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF07XG5tbS9saXN0X2xydS5jOjM0MjpcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmwgPSBOVUxMO1xubW0vbGlzdF9scnUuYy0zNDMtXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCAqbjtcbi0tXG5tbS9saXN0X2xydS5jLTM0Ni1yZXN0YXJ0OlxubW0vbGlzdF9scnUuYzozNDc6XHRsID0gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgXHUwMDI2bWVtY2csIC8qaXJxPSovaXJxX29mZixcbm1tL2xpc3RfbHJ1LmMtMzQ4LVx0XHRcdFx0ICAgLyppcnFfZmxhZ3M9Ki9OVUxMLCAvKnNraXBfZW1wdHk9Ki90cnVlKTtcbi0tXG5tbS9saXN0X2xydS5jLTM4OC1cdH1cbm1tL2xpc3RfbHJ1LmM6Mzg5Olx0dW5sb2NrX2xpc3RfbHJ1KGwsIGlycV9vZmYsIE5VTEwpO1xubW0vbGlzdF9scnUuYy0zOTAtb3V0OlxuLS1cbm1tL2xpc3RfbHJ1LmM9Mzk0PXVuc2lnbmVkIGxvbmdcbm1tL2xpc3RfbHJ1LmM6Mzk1Omxpc3RfbHJ1X3dhbGtfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9saXN0X2xydS5jOjM5NjpcdFx0ICBsaXN0X2xydV93YWxrX2NiIGlzb2xhdGUsIHZvaWQgKmNiX2FyZyxcbm1tL2xpc3RfbHJ1LmMtMzk3LVx0XHQgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspXG5tbS9saXN0X2xydS5jLTM5OC17XG5tbS9saXN0X2xydS5jOjM5OTpcdHJldHVybiBfX2xpc3RfbHJ1X3dhbGtfb25lKGxydSwgbmlkLCBtZW1jZywgaXNvbGF0ZSxcbm1tL2xpc3RfbHJ1LmMtNDAwLVx0XHRcdFx0ICAgY2JfYXJnLCBucl90b193YWxrLCBmYWxzZSk7XG5tbS9saXN0X2xydS5jLTQwMS19XG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XG5tbS9saXN0X2xydS5jLTQwMy1cbm1tL2xpc3RfbHJ1LmM9NDA0PXVuc2lnbmVkIGxvbmdcbm1tL2xpc3RfbHJ1LmM6NDA1Omxpc3RfbHJ1X3dhbGtfb25lX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbGlzdF9scnUuYzo0MDY6XHRcdCAgICAgIGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxubW0vbGlzdF9scnUuYy00MDctXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspXG5tbS9saXN0X2xydS5jLTQwOC17XG5tbS9saXN0X2xydS5jOjQwOTpcdHJldHVybiBfX2xpc3RfbHJ1X3dhbGtfb25lKGxydSwgbmlkLCBtZW1jZywgaXNvbGF0ZSxcbm1tL2xpc3RfbHJ1LmMtNDEwLVx0XHRcdFx0ICAgY2JfYXJnLCBucl90b193YWxrLCB0cnVlKTtcbi0tXG5tbS9saXN0X2xydS5jLTQxMi1cbm1tL2xpc3RfbHJ1LmM6NDEzOnVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYzo0MTQ6XHRcdFx0XHQgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXG5tbS9saXN0X2xydS5jLTQxNS1cdFx0XHRcdCB1bnNpZ25lZCBsb25nICpucl90b193YWxrKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDE4LVxubW0vbGlzdF9scnUuYzo0MTk6XHRpc29sYXRlZCAmIzQzOz0gbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIE5VTEwsIGlzb2xhdGUsIGNiX2FyZyxcbm1tL2xpc3RfbHJ1LmMtNDIwLVx0XHRcdFx0ICAgICAgbnJfdG9fd2Fsayk7XG4tLVxubW0vbGlzdF9scnUuYy00MjItI2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYzo0MjM6XHRpZiAoKm5yX3RvX3dhbGsgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcbm1tL2xpc3RfbHJ1LmM6NDI0Olx0XHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XG5tbS9saXN0X2xydS5jLTQyNS1cdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDM1LVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xubW0vbGlzdF9scnUuYzo0MzY6XHRcdFx0aXNvbGF0ZWQgJiM0Mzs9IF9fbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIG1lbWNnLFxubW0vbGlzdF9scnUuYy00MzctXHRcdFx0XHRcdFx0XHRpc29sYXRlLCBjYl9hcmcsXG4tLVxubW0vbGlzdF9scnUuYy00NDgtfVxubW0vbGlzdF9scnUuYzo0NDk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfd2Fsa19ub2RlKTtcbm1tL2xpc3RfbHJ1LmMtNDUwLVxubW0vbGlzdF9scnUuYzo0NTE6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxubW0vbGlzdF9scnUuYy00NTIte1xuLS1cbm1tL2xpc3RfbHJ1LmMtNDYyLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmM6NDYzOnN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG5tbS9saXN0X2xydS5jLTQ2NC17XG5tbS9saXN0X2xydS5jLTQ2NS1cdGludCBuaWQ7XG5tbS9saXN0X2xydS5jOjQ2NjpcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbm1tL2xpc3RfbHJ1LmMtNDY3LVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDc3LVxubW0vbGlzdF9scnUuYzo0Nzg6c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXG5tbS9saXN0X2xydS5jLTQ3OS17XG4tLVxubW0vbGlzdF9scnUuYy00ODQtXG5tbS9saXN0X2xydS5jOjQ4NTpzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy00ODYte1xubW0vbGlzdF9scnUuYy00ODctXHRYQV9TVEFURSh4YXMsIFx1MDAyNmxydS1cdTAwM2V4YSwgMCk7XG5tbS9saXN0X2xydS5jOjQ4ODpcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbm1tL2xpc3RfbHJ1LmMtNDg5LVxubW0vbGlzdF9scnUuYzo0OTA6XHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXG5tbS9saXN0X2xydS5jLTQ5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTAwLVxubW0vbGlzdF9scnUuYzo1MDE6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxubW0vbGlzdF9scnUuYzo1MDI6XHRcdFx0XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcbm1tL2xpc3RfbHJ1LmMtNTAzLVx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqZHN0X21lbWNnKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNTA1LVx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXHUwMDNla21lbWNnX2lkO1xubW0vbGlzdF9scnUuYzo1MDY6XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpkc3Q7XG5tbS9saXN0X2xydS5jLTUwNy1cbm1tL2xpc3RfbHJ1LmMtNTA4LVx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcmMtXHUwMDNlbG9jayk7XG5tbS9saXN0X2xydS5jOjUwOTpcdGRzdCA9IGxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KGxydSwgbmlkLCBkc3RfaWR4KTtcbm1tL2xpc3RfbHJ1LmMtNTEwLVx0c3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3QtXHUwMDNlbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTE3LVx0fVxubW0vbGlzdF9scnUuYzo1MTg6XHQvKiBNYXJrIHRoZSBsaXN0X2xydV9vbmUgZGVhZCAqL1xubW0vbGlzdF9scnUuYy01MTktXHRzcmMtXHUwMDNlbnJfaXRlbXMgPSBMT05HX01JTjtcbi0tXG5tbS9saXN0X2xydS5jLTUyNC1cbm1tL2xpc3RfbHJ1LmM6NTI1OnZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL2xpc3RfbHJ1LmMtNTI2LXtcbm1tL2xpc3RfbHJ1LmM6NTI3Olx0c3RydWN0IGxpc3RfbHJ1ICpscnU7XG5tbS9saXN0X2xydS5jLTUyOC1cdGludCBpO1xubW0vbGlzdF9scnUuYy01MjktXG5tbS9saXN0X2xydS5jOjUzMDpcdG11dGV4X2xvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmM6NTMxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShscnUsIFx1MDAyNm1lbWNnX2xpc3RfbHJ1cywgbGlzdCkge1xubW0vbGlzdF9scnUuYzo1MzI6XHRcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcbm1tL2xpc3RfbHJ1LmMtNTMzLVxubW0vbGlzdF9scnUuYy01MzQtXHRcdC8qXG5tbS9saXN0X2xydS5jOjUzNTpcdFx0ICogY3NzX2lzX2R5aW5nKCkgY2hlY2sgaW4gbWVtY2dfbGlzdF9scnVfYWxsb2MoKSBhdm9pZHNcbm1tL2xpc3RfbHJ1LmMtNTM2LVx0XHQgKiBhbGxvY2F0aW5nIGEgbmV3IG1scnUgc2luY2UgQ1NTX0RZSU5HIGlzIGFscmVhZHkgc2V0IGZvciB0aGlzXG4tLVxubW0vbGlzdF9scnUuYy01NDUtXHRcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxubW0vbGlzdF9scnUuYzo1NDY6XHRcdCAqIGNvbmN1cnJlbnQgbGlzdF9scnVfZGVsKCkgbWF5IGNvcnJ1cHQgdGhlIGxpc3QgaWYgaXQgYXJyaXZlc1xubW0vbGlzdF9scnUuYy01NDctXHRcdCAqIGFmdGVyIHhhcnJheSBjbGVhciBidXQgYmVmb3JlIHJlcGFyZW50aW5nIGFzXG5tbS9saXN0X2xydS5jOjU0ODpcdFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50JiMzOTtzIGxvY2sgd2hpbGUgdGhlXG5tbS9saXN0X2xydS5jLTU0OS1cdFx0ICogaXRlbSBpcyBzdGlsbCBvbiBjaGlsZCYjMzk7cyBsaXN0LlxuLS1cbm1tL2xpc3RfbHJ1LmMtNTUxLVx0XHRmb3JfZWFjaF9ub2RlKGkpXG5tbS9saXN0X2xydS5jOjU1MjpcdFx0XHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcdTAwMjZtbHJ1LVx1MDAzZW5vZGVbaV0sIHBhcmVudCk7XG5tbS9saXN0X2xydS5jLTU1My1cbi0tXG5tbS9saXN0X2xydS5jLTU1Ni1cdFx0Lypcbm1tL2xpc3RfbHJ1LmM6NTU3Olx0XHQgKiBIZXJlIGFsbCBsaXN0X2xydXMgY29ycmVzcG9uZGluZyB0byB0aGUgY2dyb3VwIGFyZSBndWFyYW50ZWVkXG5tbS9saXN0X2xydS5jLTU1OC1cdFx0ICogdG8gcmVtYWluIGVtcHR5LCB3ZSBjYW4gc2FmZWx5IGZyZWUgdGhpcyBscnUsIGFueSBmdXJ0aGVyXG5tbS9saXN0X2xydS5jOjU1OTpcdFx0ICogbWVtY2dfbGlzdF9scnVfYWxsb2MoKSBjYWxsIHdpbGwgc2ltcGx5IGJhaWwgb3V0LlxubW0vbGlzdF9scnUuYy01NjAtXHRcdCAqL1xuLS1cbm1tL2xpc3RfbHJ1LmMtNTYyLVx0fVxubW0vbGlzdF9scnUuYzo1NjM6XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9scnVzX211dGV4KTtcbm1tL2xpc3RfbHJ1LmMtNTY0LX1cbm1tL2xpc3RfbHJ1LmMtNTY1LVxubW0vbGlzdF9scnUuYzo1NjY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2xpc3RfbHJ1X2FsbG9jYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9saXN0X2xydS5jOjU2NzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjc1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgTUVNQ0cqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gTWVtb3J5IENvbnRyb2wgR3JvdXBzIChNRU1DRykuIFRoaXMgaXNuJiMzOTt0IGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBub3QgeWV0IGFueXdheSwgYnV0IGEgZmlyc3QtcGFzcyBjaGVjay4gSSB3YW50IHRvIHNlZSBpZiBNRU1DRyBpcyBldmVuICplbmFibGVkKiBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBjb25maWd1cmVkIGluIGEgc3BlY2lmaWMgd2F5IHRoYXQgY291bGQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBteSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlIG5lY2Vzc2FyeSBmZWF0dXJlcywgbGlrZSBtZW1vcnkgcmVzb3VyY2UgY29udHJvbCBhbmQgaGllcmFyY2hpY2FsIGNncm91cHMsIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbD8gV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGF2ZSBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb25zIGJlZW4gYXBwbGllZD8gVGhpcyBpcyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCB3YXN0aW5nIHRpbWUgZGVidWdnaW5nIGEgcHJvYmxlbSByb290ZWQgaW4gYSBkaXNhYmxlZCBvciBtaXNjb25maWd1cmVkIE1FTUNHIHNldHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg2LVxuaW5pdC9LY29uZmlnOjEwODc6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg4LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDItXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgQ29udHJvbCBHcm91cHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgTUVNQ0cuIFdoZXJlIHdvdWxkIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgYmU/IEhtbSwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgc2VlbXMgbGlrZSB0aGUgcmlnaHQgc3BvdC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUga2VybmVsLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgS2NvbmZpZyBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZSB0byBNRU1DRy4gSSYjMzk7bSBob3BpbmcgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3Igc3Vic3lzdGVtcyBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBNRU1DRyBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVlcGVyIGFuYWx5c2lzIEkgbWlnaHQgbmVlZCB0byBkby4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlIGNsZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDc1Olx0XG4xMDc2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzc6XHRcbjEwNzg6XHRjb25maWcgTUVNQ0dcbjEwNzk6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODA6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODE6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDgyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDgzOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwODQ6XHRcdGhlbHBcbjEwODU6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA4NjpcdFxuMTA4NzpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDg4Olx0XHRib29sXG4xMDg5Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDkwOlx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDkxOlx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5MjpcdFx0ZGVmYXVsdCB5XG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgUmVsYXRpb25zaGlwIEJldHdlZW4gTUVNQ0cgYW5kIENHUk9VUFMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBNRU1DRyAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKSBhbmQgaG93IHRoZXkgZnVuY3Rpb24uIE15IGluaXRpYWwgaHVuY2gsIGFuZCBmcmFua2x5LCBteSB3b3JraW5nIGFzc3VtcHRpb24sIGlzIHRoYXQgTUVNQ0cgaXMgZnVuZGFtZW50YWxseSAqZGVwZW5kZW50KiBvbiBDR1JPVVBTLiBMZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBNRU1DRyByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgQ0dST1VQUyBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBhbmQgZW5zdXJlIEkmIzM5O20gc29saWQgb24gdGhlIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIGNsYXJpZnkgdGhlaXIgcm9sZXMgYW5kIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdFxuMTA2MTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDYyOlx0XG4xMDYzOlx0aWYgQ0dST1VQU1xuMTA2NDpcdFxuMTA2NTpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNjY6XHRcdGJvb2xcbjEwNjc6XHRcbjEwNjg6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNjk6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3MDpcdFx0aGVscFxuMTA3MTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzI6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA3MzpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwNzQ6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA1MQoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1FTUNHJiMzOTtzIExpc3QgTFJVIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgTUVNQ0dgIGludGVyYWN0cyB3aXRoIHRoZSBgbGlzdF9scnVgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiBgTUVNQ0dgJiMzOTtzIGludGVncmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBsaXN0X2xydWAgaW5pdGlhbGl6YXRpb24gYW5kIGFueXRoaW5nIHRoYXQgaXNuJiMzOTt0IG9uIHRoZSBob3QgcGF0aC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxpc3QsIHdoaWNoIEkmIzM5O3ZlIGdvdDogYF9fbGlzdF9scnVfaW5pdGAsIGBsaXN0X2xydV9kZXN0cm95YCwgYGxpc3RfbHJ1X2FkZGAsIGBsaXN0X2xydV9kZWxgLCBgbGlzdF9scnVfYWRkX29iamAsIGBsaXN0X2xydV9kZWxfb2JqYCwgYGxpc3RfbHJ1X2lzb2xhdGVgLCBgbGlzdF9scnVfaXNvbGF0ZV9tb3ZlYCwgYGxpc3RfbHJ1X3dhbGtfb25lYCwgYGxpc3RfbHJ1X3dhbGtfbm9kZWAsIGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBhbmQgYHNldF9zaHJpbmtlcl9iaXRgLgoKTm93LCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBmaWxlczogYG1tL2xpc3RfbHJ1LmNgIGFuZCBgbW0vc2hyaW5rZXIuY2AuIEhtbSwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCB0aGUgc3ltYm9scyBmcm9tIGBtbS9saXN0X2xydS5jYCBhcmU6IGBfX2xpc3RfbHJ1X2luaXRgLCBgbGlzdF9scnVfZGVzdHJveWAsIGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYW5kIGBzZXRfc2hyaW5rZXJfYml0YC4gVGhpcyBjb25maXJtcyBzb21lIG9mIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIGVuc3VyaW5nIEkgaGF2ZSBhbGwgdGhlIGtleSBwaWVjZXMuIEl0IGxvb2tzIGxpa2UgdGhpcyBjaGFuZ2UgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIGEgbm9uLWBtZW1jZ2AtYXdhcmUgc2hyaW5rZXIsIGxpa2Ugd2hlbiB3ZSYjMzk7cmUgZmFsbGluZyBiYWNrIGR1ZSB0byBjZ3JvdXAubWVtb3J5PW5va21lbSwga2VlcHMgdGhlIGBzaHJpbmtlcl9pZGAgYXQgMCBpbiBgbGlzdF9scnVgLiBUaGlzIGlzIGxlYWRpbmcgdG8gZXJyb25lb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBNeSBjb25maXJtZWQgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhcmU6IGBfX2xpc3RfbHJ1X2luaXRgLCBgbGlzdF9scnVfZGVzdHJveWAsIGBtZW1jZ19yZXBhcmVudF9saXN0X2xydXNgLCBgc2V0X3Nocmlua2VyX2JpdGAsIGFuZCBgbGlzdF9scnVfd2Fsa19ub2RlYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBlbmFibGUgdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiwgYW5kIHdpdGggdGhhdCwgSSBjYW4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19saXN0X2xydV9pbml0JiMzNDssCiAgICAmIzM0O2xpc3RfbHJ1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzJiMzNDssCiAgICAmIzM0O3NldF9zaHJpbmtlcl9iaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfd2Fsa19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVx1MDAzZXNocmlua2VyX2lkIGlzIG5vdCBhc3NpZ25lZCBhbiB1bmluaXRpYWxpemVkIElEIG9mIDAgd2hlbiBhIHNocmlua2VyIGZhbGxzIGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIG1vZGUgKHN1Y2ggYXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkKS4gVGhpcyBwcmV2ZW50cyB1bmludGVuZGVkIHNocmlua2VyIGJpdCB1cGRhdGVzIGluIHNldF9zaHJpbmtlcl9iaXQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2xpc3RfbHJ1X2luaXQmIzM0OywKICAgICYjMzQ7bGlzdF9scnVfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttZW1jZ19yZXBhcmVudF9saXN0X2xydXMmIzM0OywKICAgICYjMzQ7c2V0X3Nocmlua2VyX2JpdCYjMzQ7LAogICAgJiMzNDtsaXN0X2xydV93YWxrX25vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY29tbWl0IG1vZGlmaWVzIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSBscnUtXHUwMDNlc2hyaW5rZXJfaWQgaXMgbm90IGFzc2lnbmVkIGFuIHVuaW5pdGlhbGl6ZWQgSUQgb2YgMCB3aGVuIGEgc2hyaW5rZXIgZmFsbHMgYmFjayB0byBub24tbWVtY2ctYXdhcmUgbW9kZSAoc3VjaCBhcyB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWQpLiBUaGlzIHByZXZlbnRzIHVuaW50ZW5kZWQgc2hyaW5rZXIgYml0IHVwZGF0ZXMgaW4gc2V0X3Nocmlua2VyX2JpdCgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXHUwMDNlaWRgLCBhc3NpZ25pbmcgLTEgb3RoZXJ3aXNlLiBcblxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVx1MDAzZWZsYWdzYCwgYHNocmlua2VyLVx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcblxuVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQsIG5vIG1lbW9yeSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIGFuZCBubyBhbHRlcmVkIGRhdGEgbGVuZ3RoIG9yIGJvdW5kcyBjaGVjayBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTI0YmRjNmRjMWIzYWI5YzI5ZjQyMjQ4NDE0MTFmZDlmYzdjYzg1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuYwppbmRleCAzNjY2MmQwMmZmOTYzLi45NmQwMmVhMjA2YTg4IDEwMDY0NAotLS0gYS9tbS9saXN0X2xydS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2xpc3RfbHJ1LmMKQEAgLTY2Niw3ICYjNDM7NjY2LDEyIEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyCiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKLQlpZiAoc2hyaW5rZXIpCiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGgKJiM0MzsJICogY2dyb3VwLm1lbW9yeT1ub2ttZW0pLCBpdHMgaWQgd2FzIG5ldmVyIGFzc2lnbmVkIGFuZCBob2xkcyBhCiYjNDM7CSAqIHN0YWxlIDAuIERvbiYjMzk7dCBsZXQgc2V0X3Nocmlua2VyX2JpdCgpIGFjdCBvbiBpdC4KJiM0MzsJICovCiYjNDM7CWlmIChzaHJpbmtlciAmYW1wOyZhbXA7IChzaHJpbmtlci0mZ3Q7ZmxhZ3MgJmFtcDsgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKQogCQlscnUtJmd0O3Nocmlua2VyX2lkID0gc2hyaW5rZXItJmd0O2lkOwogCWVsc2UKIAkJbHJ1LSZndDtzaHJpbmtlcl9pZCA9IC0xOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBsaXN0X2xydS5jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbGlzdF9scnUuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb25hbCBjaGVjayB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBsb2dpYyBpcyB0aGVyZSB0byBoYW5kbGUgaG93IHRoZSBgc2hyaW5rZXJfaWRgIGlzIGFzc2lnbmVkLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtY2ctYXdhcmUgc2hyaW5rZXJzLiAKClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzaHJpbmtlciBpcyBhY3R1YWxseSBtZW1jZy1hd2FyZSBiZWZvcmUgYXNzaWduaW5nIGl0cyBJRCB0byBgbHJ1LSZndDtzaHJpbmtlcl9pZGAuIFRoaXMgaXMgY3J1Y2lhbC4gSWYgdGhlIHNocmlua2VyIGhhcyAmIzM0O2ZhbGxlbiBiYWNrJiMzNDsgdG8gYmVpbmcgbm9uLW1lbWNnIGF3YXJlIChhcyB0aGUgY29tbWVudCBzdWdnZXN0cywgcGVyaGFwcyBkdWUgdG8gc29tZXRoaW5nIGxpa2UgYGNncm91cC5tZW1vcnk9bm9rbWVtYCksIGl0cyBJRCBpcyBzdGFsZS4gQXR0ZW1wdGluZyB0byB1c2UgdGhpcyBzdGFsZSBJRCBjb3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvciwgc28gdGhlIGNoZWNrIHByZXZlbnRzIHRoaXMuCgpJJiMzOTtkIHdhbnQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGF0ZWQgYHNocmlua2VyYCBhbmQgYGxpc3RfbHJ1YCBjb2RlIGZvciBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGhlIGBzaHJpbmtlci0mZ3Q7ZmxhZ3MgJmFtcDsgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGJpdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmbGFnIGlzIHNldCBhbmQgd2hlbiBpdCBtaWdodCAqbm90KiBiZSBzZXQuIEl0IHNlZW1zIHRoZSBjb21taXQgYXV0aG9yIGlzIGNvcnJlY3RseSBoYW5kbGluZyBhbiBlZGdlIGNhc2UgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIE5vdyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBtb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2xpc3RfbHJ1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY1MDpcdFx0cmVzID0gX19tZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgbHJ1LCBnZnApO1xuIDY1MTpcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIDY1MjpcdFx0cmV0dXJuIHJlcztcbiA2NTM6XHR9XG4gNjU0Olx0I2Vsc2VcbiA2NTU6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfaW5pdF9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSlcbiA2NTY6XHR7XG4gNjU3Olx0fVxuIDY1ODpcdFxuIDY1OTpcdHN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4gNjYwOlx0e1xuIDY2MTpcdH1cbiA2NjI6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gNjYzOlx0XG4gNjY0Olx0aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbiA2NjU6XHR7XG4gNjY2Olx0XHRpbnQgaTtcbiA2Njc6XHRcbiA2Njg6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjY5Olx0XHQvKlxuIDY3MDpcdFx0ICogSWYgdGhlIHNocmlua2VyIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGUuZy4gd2l0aFxuIDY3MTpcdFx0ICogY2dyb3VwLm1lbW9yeT1ub2ttZW0pLCBpdHMgaWQgd2FzIG5ldmVyIGFzc2lnbmVkIGFuZCBob2xkcyBhXG4gNjcyOlx0XHQgKiBzdGFsZSAwLiBEb24mIzM5O3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXG4gNjczOlx0XHQgKi9cbiA2NzQ6XHRcdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG4gNjc1Olx0XHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVx1MDAzZWlkO1xuIDY3NjpcdFx0ZWxzZVxuIDY3NzpcdFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiA2Nzg6XHRcbiA2Nzk6XHRcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbiA2ODA6XHRcdFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcbiA2ODE6XHQjZW5kaWZcbiA2ODI6XHRcbiA2ODM6XHRcdGxydS1cdTAwM2Vub2RlID0ga3phbGxvY19vYmpzKCpscnUtXHUwMDNlbm9kZSwgbnJfbm9kZV9pZHMpO1xuIDY4NDpcdFx0aWYgKCFscnUtXHUwMDNlbm9kZSlcbiA2ODU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNjg2Olx0XG4gNjg3Olx0XHRmb3JfZWFjaF9ub2RlKGkpXG4gNjg4Olx0XHRcdGluaXRfb25lX2xydShscnUsIFx1MDAyNmxydS1cdTAwM2Vub2RlW2ldLmxydSk7XG4gNjg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNocmlua2VyYCBTdHJ1Y3R1cmUgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgc2hyaW5rZXItJmd0O2lkYCBhbmQgYHNocmlua2VyLSZndDtmbGFnc2AuIE15IHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hlcmUgdGhlc2UgbWVtYmVycyBhcmUgYm90aCBzZXQgdG8gYSB2YWx1ZSBhbmQgYWxzbyB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc3Vic2VxdWVudCB1dGlsaXphdGlvbiBvZiB0aGVzZSBmaWVsZHMuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgc2hyaW5rZXJgIG9iamVjdCBmdW5jdGlvbnMgYW5kIGhvdyBpdHMgc3RhdGUgaW1wYWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZWlyIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rZXJfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbGlzdF9scnUuYz01OT1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjgtXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxubW0vbGlzdF9scnUuYy03MC17XG5tbS9saXN0X2xydS5jOjcxOlx0cmV0dXJuIGxydS1cdTAwM2VzaHJpbmtlcl9pZDtcbm1tL2xpc3RfbHJ1LmMtNzItfVxuLS1cbm1tL2xpc3RfbHJ1LmM9MTIwPXN0YXRpYyB2b2lkIGxpc3RfbHJ1X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy0xMjMtXG5tbS9saXN0X2xydS5jOjEyNDpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcbi0tXG5tbS9saXN0X2xydS5jPTE5MD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMjAxLVx0XHRpZiAoIWwtXHUwMDNlbnJfaXRlbXMmIzQzOyYjNDM7KVxubW0vbGlzdF9scnUuYzoyMDI6XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XG5tbS9saXN0X2xydS5jLTIwMy1cdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNmxydS1cdTAwM2Vub2RlW25pZF0ubnJfaXRlbXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NTAxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTUxNS1cdFx0ZHN0LVx1MDAzZW5yX2l0ZW1zICYjNDM7PSBzcmMtXHUwMDNlbnJfaXRlbXM7XG5tbS9saXN0X2xydS5jOjUxNjpcdFx0c2V0X3Nocmlua2VyX2JpdChkc3RfbWVtY2csIG5pZCwgbHJ1X3Nocmlua2VyX2lkKGxydSkpO1xubW0vbGlzdF9scnUuYy01MTctXHR9XG4tLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY3NC1cdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG5tbS9saXN0X2xydS5jOjY3NTpcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG5tbS9saXN0X2xydS5jLTY3Ni1cdGVsc2Vcbm1tL2xpc3RfbHJ1LmM6Njc3Olx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbm1tL2xpc3RfbHJ1LmMtNjc4LVxuLS1cbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTcwOS0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jOjcxMDpcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xubW0vbGlzdF9scnUuYy03MTEtI2VuZGlmXG4tLVxubW0vc2hyaW5rZXIuYz0xNTk9c3RhdGljIGludCBleHBhbmRfc2hyaW5rZXJfaW5mbyhpbnQgbmV3X2lkKVxuLS1cbm1tL3Nocmlua2VyLmMtMTg5LVxubW0vc2hyaW5rZXIuYzoxOTA6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW50IHNocmlua2VyX2lkKVxubW0vc2hyaW5rZXIuYy0xOTEte1xubW0vc2hyaW5rZXIuYzoxOTI6XHRyZXR1cm4gc2hyaW5rZXJfaWQgLyBTSFJJTktFUl9VTklUX0JJVFM7XG5tbS9zaHJpbmtlci5jLTE5My19XG5tbS9zaHJpbmtlci5jLTE5NC1cbm1tL3Nocmlua2VyLmM6MTk1OnN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkX3RvX29mZnNldChpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTE5Ni17XG5tbS9zaHJpbmtlci5jOjE5NzpcdHJldHVybiBzaHJpbmtlcl9pZCAlIFNIUklOS0VSX1VOSVRfQklUUztcbm1tL3Nocmlua2VyLmMtMTk4LX1cbm1tL3Nocmlua2VyLmMtMTk5LVxubW0vc2hyaW5rZXIuYzoyMDA6c3RhdGljIGlubGluZSBpbnQgY2FsY19zaHJpbmtlcl9pZChpbnQgaW5kZXgsIGludCBvZmZzZXQpXG5tbS9zaHJpbmtlci5jLTIwMS17XG4tLVxubW0vc2hyaW5rZXIuYy0yMDQtXG5tbS9zaHJpbmtlci5jOjIwNTp2b2lkIHNldF9zaHJpbmtlcl9iaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkLCBpbnQgc2hyaW5rZXJfaWQpXG5tbS9zaHJpbmtlci5jLTIwNi17XG5tbS9zaHJpbmtlci5jOjIwNzpcdGlmIChzaHJpbmtlcl9pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xubW0vc2hyaW5rZXIuYy0yMDgtXHRcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xuLS1cbm1tL3Nocmlua2VyLmMtMjExLVx0XHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjIxMjpcdFx0aWYgKCFXQVJOX09OX09OQ0Uoc2hyaW5rZXJfaWQgXHUwMDNlPSBpbmZvLVx1MDAzZW1hcF9ucl9tYXgpKSB7XG5tbS9zaHJpbmtlci5jLTIxMy1cdFx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xubW0vc2hyaW5rZXIuYy0yMTQtXG5tbS9zaHJpbmtlci5jOjIxNTpcdFx0XHR1bml0ID0gaW5mby1cdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyX2lkKV07XG5tbS9zaHJpbmtlci5jLTIxNi1cdFx0XHQvKiBQYWlycyB3aXRoIHNtcCBtYiBpbiBzaHJpbmtfc2xhYigpICovXG5tbS9zaHJpbmtlci5jLTIxNy1cdFx0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbm1tL3Nocmlua2VyLmM6MjE4Olx0XHRcdHNldF9iaXQoc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyX2lkKSwgdW5pdC1cdTAwM2VtYXApO1xubW0vc2hyaW5rZXIuYy0yMTktXHRcdH1cbi0tXG5tbS9zaHJpbmtlci5jLTIyMy1cbm1tL3Nocmlua2VyLmM6MjI0OnN0YXRpYyBERUZJTkVfSURSKHNocmlua2VyX2lkcik7XG5tbS9zaHJpbmtlci5jLTIyNS1cbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTIzNS1cdGd1YXJkKG11dGV4KShcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG5tbS9zaHJpbmtlci5jOjIzNjpcdGlkID0gaWRyX2FsbG9jKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXIsIDAsIDAsIEdGUF9LRVJORUwpO1xubW0vc2hyaW5rZXIuYy0yMzctXHRpZiAoaWQgXHUwMDNjIDApXG4tLVxubW0vc2hyaW5rZXIuYy0yNDEtXHRcdGlmIChleHBhbmRfc2hyaW5rZXJfaW5mbyhpZCkpIHtcbm1tL3Nocmlua2VyLmM6MjQyOlx0XHRcdGlkcl9yZW1vdmUoXHUwMDI2c2hyaW5rZXJfaWRyLCBpZCk7XG5tbS9zaHJpbmtlci5jLTI0My1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9zaHJpbmtlci5jPTI1MD1zdGF0aWMgdm9pZCBzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9zaHJpbmtlci5jLTI1Ny1cbm1tL3Nocmlua2VyLmM6MjU4Olx0aWRyX3JlbW92ZShcdTAwMjZzaHJpbmtlcl9pZHIsIGlkKTtcbm1tL3Nocmlua2VyLmMtMjU5LX1cbi0tXG5tbS9zaHJpbmtlci5jPTI2MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkX21lbWNnKGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4tLVxubW0vc2hyaW5rZXIuYy0yNjktXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF0tXHUwMDNlc2hyaW5rZXJfaW5mbyk7XG5tbS9zaHJpbmtlci5jOjI3MDpcdHVuaXQgPSBpbmZvLVx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXItXHUwMDNlaWQpXTtcbm1tL3Nocmlua2VyLmM6MjcxOlx0bnJfZGVmZXJyZWQgPSBhdG9taWNfbG9uZ194Y2hnKFx1MDAyNnVuaXQtXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVx1MDAzZWlkKV0sIDApO1xubW0vc2hyaW5rZXIuYy0yNzItXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9zaHJpbmtlci5jPTI3Nz1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTI4NS1cdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VzaHJpbmtlcl9pbmZvKTtcbm1tL3Nocmlua2VyLmM6Mjg2Olx0dW5pdCA9IGluZm8tXHUwMDNldW5pdFtzaHJpbmtlcl9pZF90b19pbmRleChzaHJpbmtlci1cdTAwM2VpZCldO1xubW0vc2hyaW5rZXIuYy0yODctXHRucl9kZWZlcnJlZCA9XG5tbS9zaHJpbmtlci5jOjI4ODpcdFx0YXRvbWljX2xvbmdfYWRkX3JldHVybihuciwgXHUwMDI2dW5pdC1cdTAwM2Vucl9kZWZlcnJlZFtzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXItXHUwMDNlaWQpXSk7XG5tbS9zaHJpbmtlci5jLTI4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3Nocmlua2VyLmM9Mjk0PXZvaWQgcmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Nocmlua2VyLmMtMzA2LVx0XHRwYXJlbnRfaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKHBhcmVudCwgbmlkKTtcbm1tL3Nocmlua2VyLmM6MzA3Olx0XHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGNoaWxkX2luZm8tXHUwMDNlbWFwX25yX21heCk7IGluZGV4JiM0MzsmIzQzOykge1xubW0vc2hyaW5rZXIuYy0zMDgtXHRcdFx0Y2hpbGRfdW5pdCA9IGNoaWxkX2luZm8tXHUwMDNldW5pdFtpbmRleF07XG4tLVxubW0vc2hyaW5rZXIuYz00NzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4tLVxubW0vc2hyaW5rZXIuYy01MDItXHQgKiAgICAgICAgICBSQ1UgbG9jay5cbm1tL3Nocmlua2VyLmM6NTAzOlx0ICogIHN0ZXAgMzogdHJhdmVyc2UgdGhlIGJpdG1hcCBhbmQgY2FsY3VsYXRlIHNocmlua2VyX2lkXG5tbS9zaHJpbmtlci5jLTUwNC1cdCAqICBzdGVwIDQ6IHVzZSByY3VfcmVhZF9sb2NrKCkgdG8gZ3VhcmFudGVlIGV4aXN0ZW5jZSBvZiB0aGUgc2hyaW5rZXIuXG5tbS9zaHJpbmtlci5jOjUwNTpcdCAqICBzdGVwIDU6IHVzZSBzaHJpbmtlcl9pZCB0byBmaW5kIHRoZSBzaHJpbmtlciwgdGhlbiB1c2Vcbm1tL3Nocmlua2VyLmMtNTA2LVx0ICogICAgICAgICAgc2hyaW5rZXJfdHJ5X2dldCgpIHRvIGd1YXJhbnRlZSBleGlzdGVuY2Ugb2YgdGhlIHNocmlua2VyLFxuLS1cbm1tL3Nocmlua2VyLmMtNTI2LVxubW0vc2hyaW5rZXIuYzo1Mjc6XHRpZiAoaW5kZXggXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGluZm8tXHUwMDNlbWFwX25yX21heCkpIHtcbm1tL3Nocmlua2VyLmMtNTI4LVx0XHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xuLS1cbm1tL3Nocmlua2VyLmMtNTQwLVx0XHRcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG5tbS9zaHJpbmtlci5jOjU0MTpcdFx0XHRpbnQgc2hyaW5rZXJfaWQgPSBjYWxjX3Nocmlua2VyX2lkKGluZGV4LCBvZmZzZXQpO1xubW0vc2hyaW5rZXIuYy01NDItXG5tbS9zaHJpbmtlci5jLTU0My1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS9zaHJpbmtlci5jOjU0NDpcdFx0XHRzaHJpbmtlciA9IGlkcl9maW5kKFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXJfaWQpO1xubW0vc2hyaW5rZXIuYy01NDUtXHRcdFx0aWYgKHVubGlrZWx5KCFzaHJpbmtlciB8fCAhc2hyaW5rZXJfdHJ5X2dldChzaHJpbmtlcikpKSB7XG4tLVxubW0vc2hyaW5rZXIuYy01ODItXHRcdFx0XHRlbHNlXG5tbS9zaHJpbmtlci5jOjU4MzpcdFx0XHRcdFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBzaHJpbmtlcl9pZCk7XG5tbS9zaHJpbmtlci5jLTU4NC1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNzcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBTaHJpbmtlciBMaWZlY3ljbGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBgc2hyaW5rZXJgIG9iamVjdCB3b3Jrcywgc3BlY2lmaWNhbGx5IGF0IGl0cyBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIHdlIGNhbGwgYHNocmlua2VyX2FsbG9jYD8gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkLiBUaGVuLCBzaW5jZSBhbGxvY2F0aW9uIGlzIHVzdWFsbHkgZm9sbG93ZWQgYnkgcmVnaXN0cmF0aW9uIG9mIHNvbWUgc29ydCwgSSBuZWVkIHRvIGxvb2sgaW50byBgc2hyaW5rZXJfcmVnaXN0ZXJgIGFzIHdlbGwuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0JiMzOTtzIGFsbCBhYm91dCB0cmFja2luZyB0aGUgbGlmZWN5Y2xlLCBhbmQgdGhvc2UgYXJlIHRoZSBwb2ludHMgSSBuZWVkIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtlcl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM4Mj1zdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy0zODMte1xubW0vaHVnZV9tZW1vcnkuYzozODQ6XHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDt0aHAtemVyb1wmIzM0Oyk7XG5tbS9odWdlX21lbW9yeS5jLTM4NS1cdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXG5tbS9odWdlX21lbW9yeS5jLTEwNjUte1xubW0vaHVnZV9tZW1vcnkuYzoxMDY2Olx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ny1cdFx0XHRcdFx0XHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXG4tLVxubW0vc2hyaW5rZXIuYz02MjQ9dW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYihnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Nocmlua2VyLmMtNjg3LVxubW0vc2hyaW5rZXIuYzo2ODg6c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxubW0vc2hyaW5rZXIuYy02ODkte1xuLS1cbm1tL3Nocmlua2VyLmMtNzQ2LX1cbm1tL3Nocmlua2VyLmM6NzQ3OkVYUE9SVF9TWU1CT0xfR1BMKHNocmlua2VyX2FsbG9jKTtcbm1tL3Nocmlua2VyLmMtNzQ4LVxubW0vc2hyaW5rZXIuYz03NDk9dm9pZCBzaHJpbmtlcl9yZWdpc3RlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbm1tL3Nocmlua2VyLmMtNzUxLVx0aWYgKHVubGlrZWx5KCEoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX0FMTE9DQVRFRCkpKSB7XG5tbS9zaHJpbmtlci5jOjc1MjpcdFx0cHJfd2FybihcJiMzNDtNdXN0IHVzZSBzaHJpbmtlcl9hbGxvYygpIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBzaHJpbmtlclwmIzM0Oyk7XG5tbS9zaHJpbmtlci5jLTc1My1cdFx0cmV0dXJuO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjI0ND12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIyODQtXG5tbS9zbGFiX2NvbW1vbi5jOjIyODU6XHRrZnJlZV9yY3Vfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDtzbGFiLWt2ZnJlZS1yY3VcJiMzNDspO1xubW0vc2xhYl9jb21tb24uYy0yMjg2LVx0aWYgKCFrZnJlZV9yY3Vfc2hyaW5rZXIpIHtcbi0tXG5tbS92bWFsbG9jLmM9NTU0Nz12b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbi0tXG5tbS92bWFsbG9jLmMtNTU5Ny1cbm1tL3ZtYWxsb2MuYzo1NTk4Olx0dm1hcF9ub2RlX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXCYjMzQ7dm1hcC1ub2RlXCYjMzQ7KTtcbm1tL3ZtYWxsb2MuYy01NTk5LVx0aWYgKCF2bWFwX25vZGVfc2hyaW5rZXIpIHtcbi0tXG5tbS93b3JraW5nc2V0LmM9NzkzPXN0YXRpYyBpbnQgX19pbml0IHdvcmtpbmdzZXRfaW5pdCh2b2lkKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy04MTgtXG5tbS93b3JraW5nc2V0LmM6ODE5Olx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcbm1tL3dvcmtpbmdzZXQuYy04MjAtXHRcdFx0XHRcdFx0ICAgIFNIUklOS0VSX01FTUNHX0FXQVJFLFxuLS1cbm1tL3pzbWFsbG9jLmM9MjE4Mj1zdGF0aWMgaW50IHpzX3JlZ2lzdGVyX3Nocmlua2VyKHN0cnVjdCB6c19wb29sICpwb29sKVxubW0venNtYWxsb2MuYy0yMTgzLXtcbm1tL3pzbWFsbG9jLmM6MjE4NDpcdHBvb2wtXHUwMDNlc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcJiMzNDttbS16c3Bvb2w6JXNcJiMzNDssIHBvb2wtXHUwMDNlbmFtZSk7XG5tbS96c21hbGxvYy5jLTIxODUtXHRpZiAoIXBvb2wtXHUwMDNlc2hyaW5rZXIpXG4tLVxubW0venN3YXAuYz0xMjUxPXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXG4tLVxubW0venN3YXAuYy0xMjU1LVx0c2hyaW5rZXIgPVxubW0venN3YXAuYzoxMjU2Olx0XHRzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHwgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsIFwmIzM0O21tLXpzd2FwXCYjMzQ7KTtcbm1tL3pzd2FwLmMtMTI1Ny1cdGlmICghc2hyaW5rZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDY4NSB0aHJvdWdoIDc2NSBvZiBgbW0vc2hyaW5rZXIuY2AuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHNocmlua2VyIGZ1bmN0aW9uYWxpdHkuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIHByb2JhYmx5IGludm9sdmVzIHJlY2xhaW1pbmcgb3IgcmVsZWFzaW5nIGNhY2hlZCBwYWdlcyBmcm9tIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZSBvciBzb21lIG90aGVyIGtlcm5lbCBldmVudC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIHBhZ2UgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgY29uc2lkZXJhdGlvbnMgZm9yIGRpcnR5IHBhZ2VzLCBhbmQgcGVyaGFwcyBzb21lIGxvZ2ljIGFyb3VuZCB3aGF0IGtpbmQgb2YgcGFnZXMgYXJlIHRhcmdldGVkIGZvciBldmljdGlvbiAoZS5nLiwgZmlsZS1iYWNrZWQgdnMuIGFub255bW91cykuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlIHNocmlua2VyIHByaW9yaXRpemVzIHdoaWNoIHBhZ2VzIHRvIHJlY2xhaW0sIHRoZSBiYWxhbmNpbmcgYWN0IGJldHdlZW4gZnJlZWluZyBtZW1vcnkgYW5kIGF2b2lkaW5nIGV4Y2Vzc2l2ZSBJL08sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHN0cmF0ZWdpZXMgZW1wbG95ZWQgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLCB3aGljaCB3aWxsIGhlbHAgbWUgcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gYWxzbyByZWFkeSB0byBjcml0aWNhbGx5IGFzc2VzcyB0aGUgZGVzaWduIGNob2ljZXMgYW5kIGFudGljaXBhdGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaHJpbmtlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODU6XHRcdHJldHVybiBmcmVlZDtcbiA2ODY6XHR9XG4gNjg3Olx0XG4gNjg4Olx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIDY4OTpcdHtcbiA2OTA6XHRcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XG4gNjkxOlx0XHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiA2OTI6XHRcdHZhX2xpc3QgYXA7XG4gNjkzOlx0XHRpbnQgZXJyO1xuIDY5NDpcdFxuIDY5NTpcdFx0c2hyaW5rZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2hyaW5rZXIpO1xuIDY5NjpcdFx0aWYgKCFzaHJpbmtlcilcbiA2OTc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjk4Olx0XG4gNjk5Olx0XHR2YV9zdGFydChhcCwgZm10KTtcbiA3MDA6XHRcdGVyciA9IHNocmlua2VyX2RlYnVnZnNfbmFtZV9hbGxvYyhzaHJpbmtlciwgZm10LCBhcCk7XG4gNzAxOlx0XHR2YV9lbmQoYXApO1xuIDcwMjpcdFx0aWYgKGVycilcbiA3MDM6XHRcdFx0Z290byBlcnJfbmFtZTtcbiA3MDQ6XHRcbiA3MDU6XHRcdHNocmlua2VyLVx1MDAzZWZsYWdzID0gZmxhZ3MgfCBTSFJJTktFUl9BTExPQ0FURUQ7XG4gNzA2Olx0XHRzaHJpbmtlci1cdTAwM2VzZWVrcyA9IERFRkFVTFRfU0VFS1M7XG4gNzA3Olx0XG4gNzA4Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSB7XG4gNzA5Olx0XHRcdGVyciA9IHNocmlua2VyX21lbWNnX2FsbG9jKHNocmlua2VyKTtcbiA3MTA6XHRcdFx0aWYgKGVyciA9PSAtRU5PU1lTKSB7XG4gNzExOlx0XHRcdFx0LyogTWVtY2cgaXMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIHNocmlua2VyLiAqL1xuIDcxMjpcdFx0XHRcdHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNj0gflNIUklOS0VSX01FTUNHX0FXQVJFO1xuIDcxMzpcdFx0XHRcdGdvdG8gbm9uX21lbWNnO1xuIDcxNDpcdFx0XHR9XG4gNzE1Olx0XG4gNzE2Olx0XHRcdGlmIChlcnIpXG4gNzE3Olx0XHRcdFx0Z290byBlcnJfZmxhZ3M7XG4gNzE4Olx0XG4gNzE5Olx0XHRcdHJldHVybiBzaHJpbmtlcjtcbiA3MjA6XHRcdH1cbiA3MjE6XHRcbiA3MjI6XHRub25fbWVtY2c6XG4gNzIzOlx0XHQvKlxuIDcyNDpcdFx0ICogVGhlIG5yX2RlZmVycmVkIGlzIGF2YWlsYWJsZSBvbiBwZXIgbWVtY2cgbGV2ZWwgZm9yIG1lbWNnIGF3YXJlXG4gNzI1Olx0XHQgKiBzaHJpbmtlcnMsIHNvIG9ubHkgYWxsb2NhdGUgbnJfZGVmZXJyZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiA3MjY6XHRcdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcbiA3Mjc6XHRcdCAqICAtICFDT05GSUdfTUVNQ0dcbiA3Mjg6XHRcdCAqICAtIG1lbWNnIGlzIGRpc2FibGVkIGJ5IGtlcm5lbCBjb21tYW5kIGxpbmVcbiA3Mjk6XHRcdCAqICAtIG5vbi1zbGFiIHNocmlua2Vyczogd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkXG4gNzMwOlx0XHQgKi9cbiA3MzE6XHRcdHNpemUgPSBzaXplb2YoKnNocmlua2VyLVx1MDAzZW5yX2RlZmVycmVkKTtcbiA3MzI6XHRcdGlmIChmbGFncyBcdTAwMjYgU0hSSU5LRVJfTlVNQV9BV0FSRSlcbiA3MzM6XHRcdFx0c2l6ZSAqPSBucl9ub2RlX2lkcztcbiA3MzQ6XHRcbiA3MzU6XHRcdHNocmlua2VyLVx1MDAzZW5yX2RlZmVycmVkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiA3MzY6XHRcdGlmICghc2hyaW5rZXItXHUwMDNlbnJfZGVmZXJyZWQpXG4gNzM3Olx0XHRcdGdvdG8gZXJyX2ZsYWdzO1xuIDczODpcdFxuIDczOTpcdFx0cmV0dXJuIHNocmlua2VyO1xuIDc0MDpcdFxuIDc0MTpcdGVycl9mbGFnczpcbiA3NDI6XHRcdHNocmlua2VyX2RlYnVnZnNfbmFtZV9mcmVlKHNocmlua2VyKTtcbiA3NDM6XHRlcnJfbmFtZTpcbiA3NDQ6XHRcdGtmcmVlKHNocmlua2VyKTtcbiA3NDU6XHRcdHJldHVybiBOVUxMO1xuIDc0NjpcdH1cbiA3NDc6XHRFWFBPUlRfU1lNQk9MX0dQTChzaHJpbmtlcl9hbGxvYyk7XG4gNzQ4Olx0XG4gNzQ5Olx0dm9pZCBzaHJpbmtlcl9yZWdpc3RlcihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuIDc1MDpcdHtcbiA3NTE6XHRcdGlmICh1bmxpa2VseSghKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9BTExPQ0FURUQpKSkge1xuIDc1MjpcdFx0XHRwcl93YXJuKFwmIzM0O011c3QgdXNlIHNocmlua2VyX2FsbG9jKCkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIHNocmlua2VyXCYjMzQ7KTtcbiA3NTM6XHRcdFx0cmV0dXJuO1xuIDc1NDpcdFx0fVxuIDc1NTpcdFxuIDc1NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzaHJpbmtlcl9tdXRleCk7XG4gNzU3Olx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZzaHJpbmtlci1cdTAwM2VsaXN0LCBcdTAwMjZzaHJpbmtlcl9saXN0KTtcbiA3NTg6XHRcdHNocmlua2VyLVx1MDAzZWZsYWdzIHw9IFNIUklOS0VSX1JFR0lTVEVSRUQ7XG4gNzU5Olx0XHRzaHJpbmtlcl9kZWJ1Z2ZzX2FkZChzaHJpbmtlcik7XG4gNzYwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xuIDc2MTpcdFxuIDc2MjpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnNocmlua2VyLVx1MDAzZWRvbmUpO1xuIDc2MzpcdFx0LypcbiA3NjQ6XHRcdCAqIE5vdyB0aGUgc2hyaW5rZXIgaXMgZnVsbHkgc2V0IHVwLCB0YWtlIHRoZSBmaXJzdCByZWZlcmVuY2UgdG8gaXQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyNwoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiAxMDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBTaHJpbmtlciBJRCBJbml0aWFsaXphdGlvbiBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gd2hldGhlciBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGlzIG5lZWRlZCBoZXJlLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdGhlIGBscnUtJmd0O3Nocmlua2VyX2lkYCBmaWVsZCB3aXRoaW4gdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlLCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHNldCBpbiByZWxhdGlvbiB0byBgc2hyaW5rZXJgIG9iamVjdHMsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcy4KCk15IHByaW1hcnkgY29uY2VybiBpcyB0aGlzOiB0aGUgcGF0Y2ggY2hhbmdlcyBob3cgYGxydS0mZ3Q7c2hyaW5rZXJfaWRgIGlzIHNldC4gUHJldmlvdXNseSwgaXQgd2FzIHNpbXBseSBgbHJ1LSZndDtzaHJpbmtlcl9pZCA9IHNocmlua2VyLSZndDtpZGAgaWYgYHNocmlua2VyYCB3YXMgbm90IE5VTEwuIEhvd2V2ZXIsIGlmIHRoZSBgc2hyaW5rZXJgIHdhcyBhbGxvY2F0ZWQgYnV0IHRoZW4gZmVsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSAoZHVlIHRvIHNvbWV0aGluZyBsaWtlIG1lbW9yeSBjZ3JvdXAgYmVpbmcgZGlzYWJsZWQpLCBpdHMgSUQgcmVtYWluZWQgYXQgdGhlIGRlZmF1bHQgemVybyAoYmVjYXVzZSBvZiBga3phbGxvY19vYmpgKS4gVGhlIHByb2JsZW1hdGljIGNvZGUgdXNlcyB0aGlzIHplcm8gdmFsdWUgYXMgYW4gYWN0dWFsIGlkIG9mIHNocmlua2VyLgoKVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGBzaHJpbmtlci0mZ3Q7aWRgIGlzIGdldHRpbmcgc2V0IHRvIHplcm8gYW5kIHRoZW4gaXQgZW5kcyB1cCBiZWluZyBhIHZhbGlkIGlkIGluIHRoZSBzeXN0ZW0uIFRoZSBmaXggaXMgdG8gYWRkIGEgY29uZGl0aW9uOiBgaWYgKHNocmlua2VyICZhbXA7JmFtcDsgKHNocmlua2VyLSZndDtmbGFncyAmYW1wOyBTSFJJTktFUl9NRU1DR19BV0FSRSkpYC4gVGhpcyBlbnN1cmVzIHRoYXQgb25seSBtZW1jZy1hd2FyZSBzaHJpbmtlcnMgZ2V0IHRoZWlyIGBpZGAgYXNzaWduZWQuIE5vbi1tZW1jZyBhd2FyZSBzaHJpbmtlcnMgd2lsbCBoYXZlIHRoZWlyIGBscnUtJmd0O3Nocmlua2VyX2lkYCBzZXQgdG8gLTEsIHdoaWNoIHByZXZlbnRzIHRoZSBpbmNvcnJlY3QgdXNlIG9mIHRoZSB6ZXJvIElEIHZhbHVlLgoKU28sIGxldCYjMzk7cyBldmFsdWF0ZToKCjEuICAqKkRvZXMgdGhpcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vLiBUaGUgYHNocmlua2VyYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBieSBga3phbGxvY19vYmpgLCBhbmQgdGhlIGBzaHJpbmtlci0mZ3Q7ZmxhZ3NgIGZpZWxkIGlzIGV4cGxpY2l0bHkgc2V0IGFmdGVyd2FyZCBpbiBgc2hyaW5rZXJfYWxsb2MoKWAuIFRoZSB2YWx1ZSAwIG1pZ2h0IGJlICYjMzQ7c3RhbGUmIzM0OyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2VzbiYjMzk7dCByZXByZXNlbnQgYSB2YWxpZCBtZW1jZy1hd2FyZSBzaHJpbmtlciwgYnV0IGl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkLgoKMi4gICoqRG9lcyBpdCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlPyoqIE5vLCB0aGVyZSBhcmUgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdGhlIHVzZXIgaW4gdGhpcyBjb2RlLgoKMy4gICoqRG9lcyBpdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYSBsb2dpY2FsIGNvbmRpdGlvbiB0byBjaGVjayBgc2hyaW5rZXItJmd0O2ZsYWdzYCBidXQgdGhlIG1lbW9yeSBpcyBub3QgdW5pbml0aWFsaXplZC4KCjQuICAqKkRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8uCgo1LiAgKipEb2VzIGl0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4/KiogTm8uCgpOb3csIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBLTVNBTiBhcHBsaWNhYmlsaXR5OgoKKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4KKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOb3BlLiBBbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoqICAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgcmVhZHM6KiogTm9wZS4KKiAgICoqQm91bmRzIGNoZWNrIGlzc3VlczoqKiBOb3BlLgoKVGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZyBpcyB0aGF0IHRoZSB6ZXJvIElEIHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGdvdCBwYXNzZWQgYXMgaWYgdmFsaWQuIFRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhpcyBhcyBhICYjMzQ7c3RhbGUgMCYjMzQ7LiBUaGlzIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIEtNU0FOJiMzOTtzIHBlcnNwZWN0aXZlOyBpdCYjMzk7cyBhICpsb2dpY2FsKiBlcnJvci4gVGhlIElEIDAgaXMgYSB2YWxpZCBJRCBmb3IgYW5vdGhlciBzaHJpbmtlci4KCk15IGNvbmNsdXNpb246IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMvc3RhdGUgY29uc2lzdGVuY3kgYnVnLiBLQVNBTiBhbmQgZ2VuZXJhbCBmdXp6aW5nIHNob3VsZCBiZSBhZGVxdWF0ZSB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpY2FsIGVycm9ycyByZXN1bHRpbmcgZnJvbSB0aGlzIGlzc3VlLiBLTVNBTiBpcyBub3QgcmVsZXZhbnQgaGVyZSBhcyB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAgaW4gYF9fbGlzdF9scnVfaW5pdCgpYCB0byBjaGVjayB3aGV0aGVyIHRoZSBzaHJpbmtlciBhY3R1YWxseSBoYXMgdGhlIGBTSFJJTktFUl9NRU1DR19BV0FSRWAgZmxhZyBzZXQgYmVmb3JlIHVzaW5nIGBzaHJpbmtlci1cdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxuXG5BbGwgcmVsZXZhbnQgc3RydWN0dXJlcyAoYHN0cnVjdCBzaHJpbmtlcmAgYW5kIGBzdHJ1Y3QgbGlzdF9scnVgKSBhcmUgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgYWxsb2NhdG9ycyAoYGt6YWxsb2Nfb2JqYCwgZXRjLiksIGFuZCBhbGwgZmllbGRzIGFjY2Vzc2VkIChgc2hyaW5rZXItXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXHUwMDNlaWRgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBkZWZhdWx0IHplcm8gdmFsdWUgKGBpZCA9IDBgKSBvZiBhIG5vbi1tZW1jZyBzaHJpbmtlciB3YXMgZXJyb25lb3VzbHkgaW50ZXJwcmV0ZWQgYXMgYSB2YWxpZCBJRCAoMCkgaW5zdGVhZCBvZiBhbiBpbnZhbGlkIElEICgtMSksIGxlYWRpbmcgdG8gc3B1cmlvdXMgY2FsbHMgdG8gYHNldF9zaHJpbmtlcl9iaXQoKWAuIFxuXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXHUwMDNlaWRgLCBhc3NpZ25pbmcgLTEgb3RoZXJ3aXNlLiBcblxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVx1MDAzZWZsYWdzYCwgYHNocmlua2VyLVx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcblxuVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGQsIG5vIG1lbW9yeSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIGFuZCBubyBhbHRlcmVkIGRhdGEgbGVuZ3RoIG9yIGJvdW5kcyBjaGVjayBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MTQuMTYyOTIwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzE4OTM4MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCIsXG4gICAgXCJsaXN0X2xydV9kZXN0cm95XCIsXG4gICAgXCJtZW1jZ19yZXBhcmVudF9saXN0X2xydXNcIixcbiAgICBcInNldF9zaHJpbmtlcl9iaXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXFx1MDAzZXNocmlua2VyX2lkYCBpbiBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNocmlua2VyIGFjdHVhbGx5IGhhcyB0aGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIHNldCBiZWZvcmUgdXNpbmcgYHNocmlua2VyLVxcdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxcblxcbkFsbCByZWxldmFudCBzdHJ1Y3R1cmVzIChgc3RydWN0IHNocmlua2VyYCBhbmQgYHN0cnVjdCBsaXN0X2xydWApIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChga3phbGxvY19vYmpgLCBldGMuKSwgYW5kIGFsbCBmaWVsZHMgYWNjZXNzZWQgKGBzaHJpbmtlci1cXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXFx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcXG5cXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCBpcyBub3QgYXNzaWduZWQgYW4gdW5pbml0aWFsaXplZCBJRCBvZiAwIHdoZW4gYSBzaHJpbmtlciBmYWxscyBiYWNrIHRvIG5vbi1tZW1jZy1hd2FyZSBtb2RlIChzdWNoIGFzIHdoZW4gbWVtY2cga21lbSBpcyBkaXNhYmxlZCkuIFRoaXMgcHJldmVudHMgdW5pbnRlbmRlZCBzaHJpbmtlciBiaXQgdXBkYXRlcyBpbiBzZXRfc2hyaW5rZXJfYml0KCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjE0LjE2MjkyNTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDEwMzA0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMjRiZGM2ZGMxYjNhYjljMjlmNDIyNDg0MTQxMWZkOWZjN2NjODVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcXG5pbmRleCAzNjY2MmQwMmZmOTYzLi45NmQwMmVhMjA2YTg4IDEwMDY0NFxcbi0tLSBhL21tL2xpc3RfbHJ1LmNcXG4rKysgYi9tbS9saXN0X2xydS5jXFxuQEAgLTY2Niw3ICs2NjYsMTIgQEAgaW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJcXG4gXFx0aW50IGk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01FTUNHXFxuLVxcdGlmIChzaHJpbmtlcilcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIHNocmlua2VyIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGUuZy4gd2l0aFxcbitcXHQgKiBjZ3JvdXAubWVtb3J5PW5va21lbSksIGl0cyBpZCB3YXMgbmV2ZXIgYXNzaWduZWQgYW5kIGhvbGRzIGFcXG4rXFx0ICogc3RhbGUgMC4gRG9uJ3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG4gXFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVxcdTAwM2VpZDtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjE0LjU2NDg0ODYzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDAxNDI2MzIwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xpc3RfbHJ1X2luaXRcIixcbiAgICBcImxpc3RfbHJ1X2Rlc3Ryb3lcIixcbiAgICBcIm1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c1wiLFxuICAgIFwic2V0X3Nocmlua2VyX2JpdFwiLFxuICAgIFwibGlzdF9scnVfd2Fsa19ub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY29tbWl0IG1vZGlmaWVzIGxpc3RfbHJ1IGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSBscnUtXFx1MDAzZXNocmlua2VyX2lkIGlzIG5vdCBhc3NpZ25lZCBhbiB1bmluaXRpYWxpemVkIElEIG9mIDAgd2hlbiBhIHNocmlua2VyIGZhbGxzIGJhY2sgdG8gbm9uLW1lbWNnLWF3YXJlIG1vZGUgKHN1Y2ggYXMgd2hlbiBtZW1jZyBrbWVtIGlzIGRpc2FibGVkKS4gVGhpcyBwcmV2ZW50cyB1bmludGVuZGVkIHNocmlua2VyIGJpdCB1cGRhdGVzIGluIHNldF9zaHJpbmtlcl9iaXQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTI0YmRjNmRjMWIzYWI5YzI5ZjQyMjQ4NDE0MTFmZDlmYzdjYzg1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDA6MjA6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9saXN0X2xydS5jIGIvbW0vbGlzdF9scnUuY1xuaW5kZXggMzY2NjJkMDJmZjk2My4uOTZkMDJlYTIwNmE4OCAxMDA2NDRcbi0tLSBhL21tL2xpc3RfbHJ1LmNcbisrKyBiL21tL2xpc3RfbHJ1LmNcbkBAIC02NjYsNyArNjY2LDEyIEBAIGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyXG4gXHRpbnQgaTtcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4tXHRpZiAoc2hyaW5rZXIpXG4rXHQvKlxuK1x0ICogSWYgdGhlIHNocmlua2VyIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGUuZy4gd2l0aFxuK1x0ICogY2dyb3VwLm1lbW9yeT1ub2ttZW0pLCBpdHMgaWQgd2FzIG5ldmVyIGFzc2lnbmVkIGFuZCBob2xkcyBhXG4rXHQgKiBzdGFsZSAwLiBEb24ndCBsZXQgc2V0X3Nocmlua2VyX2JpdCgpIGFjdCBvbiBpdC5cbitcdCAqL1xuK1x0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcbiBcdFx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWQ7XG4gXHRlbHNlXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MTQuNTY0ODUwNzAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMzOTMzMjEyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbGlzdF9scnUuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYG1tL2xpc3RfbHJ1LmNgLiBGaXJzdCwgSSBzZWUgYSBzdHJhaWdodGZvcndhcmQgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgYSBjb25kaXRpb25hbCBjaGVjayB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc2hyaW5rZXJgIGFzc2lnbm1lbnQuIFRoZSBwcmV2aW91cyBjb2RlIHNpbXBseSBhc3NpZ25lZCBgc2hyaW5rZXItXHUwMDNlaWRgIGlmIGBzaHJpbmtlcmAgd2FzIG5vdCBudWxsLiBOb3csIHdlIGhhdmUgYW4gYWRkZWQgY29uZGl0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBgQ09ORklHX01FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGUgYWRkZWQgY29tbWVudCBpcyBoZWxwZnVsIOKAkyBpdCBpbmRpY2F0ZXMgYSBzY2VuYXJpbyB3aGVyZSB0aGUgc2hyaW5rZXIgbWlnaHQgZmFsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSwgcG9zc2libHkgZHVlIHRvIHNvbWV0aGluZyBsaWtlIGBjZ3JvdXAubWVtb3J5PW5va21lbWAuIEluIHN1Y2ggYSBjYXNlLCB0aGUgc2hyaW5rZXIgSUQgd2Fzbid0IHByb3Blcmx5IGFzc2lnbmVkLCBsZWF2aW5nIGEgc3RhbGUgdmFsdWUuXG5cblRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGUgY2hlY2s6IGAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKWAuIFRoaXMgc3VnZ2VzdHMgdGhlIGludGVudGlvbiBpcyB0byBvbmx5IGFzc2lnbiB0aGUgYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAgd2hlbiB0aGUgc2hyaW5rZXIgaXMgYWN0dWFsbHkgbWVtY2ctYXdhcmUuIElmIHRoZSBzaHJpbmtlciBoYXMgZmFsbGVuIGJhY2sgYW5kIHRoaXMgZmxhZyBpcyAqbm90KiBzZXQsIHRoZSBJRCByZW1haW5zIHNldCB0byAtMS4gVGhpcyBpcyBhIHNvdW5kIGFwcHJvYWNoIGFuZCBwcmV2ZW50cyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgdXNhZ2Ugb2YgYSBzdGFsZSBvciB1bmRlZmluZWQgc2hyaW5rZXIgSUQuXG5cbk5vdywgbGV0IG1lIHJ1biB0aGlzIHBhdGNoIHRocm91Z2ggb3VyIHN0YXRpYyBhbmFseXNpcyB0b29scyBhbmQgc2VlIGlmIGFueXRoaW5nIGZsYWdzLiBJIGFsc28gd2FudCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3Igc2ltaWxhciBwYXR0ZXJucyBhbmQgcG9zc2libGUgcmVncmVzc2lvbnMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBhIHNpbWlsYXIgY29uZGl0aW9uIG1pZ2h0IGFwcGx5IG9yIGFueSBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDoyNy45NTgxNzQ5NTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1MDpcXHRcXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XFxuIDY1MTpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIDY1MjpcXHRcXHRyZXR1cm4gcmVzO1xcbiA2NTM6XFx0fVxcbiA2NTQ6XFx0I2Vsc2VcXG4gNjU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbiA2NTY6XFx0e1xcbiA2NTc6XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2NjA6XFx0e1xcbiA2NjE6XFx0fVxcbiA2NjI6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiA2NjM6XFx0XFxuIDY2NDpcXHRpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbiA2NjU6XFx0e1xcbiA2NjY6XFx0XFx0aW50IGk7XFxuIDY2NzpcXHRcXG4gNjY4OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjY5OlxcdFxcdC8qXFxuIDY3MDpcXHRcXHQgKiBJZiB0aGUgc2hyaW5rZXIgZmVsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSAoZS5nLiB3aXRoXFxuIDY3MTpcXHRcXHQgKiBjZ3JvdXAubWVtb3J5PW5va21lbSksIGl0cyBpZCB3YXMgbmV2ZXIgYXNzaWduZWQgYW5kIGhvbGRzIGFcXG4gNjcyOlxcdFxcdCAqIHN0YWxlIDAuIERvbid0IGxldCBzZXRfc2hyaW5rZXJfYml0KCkgYWN0IG9uIGl0LlxcbiA2NzM6XFx0XFx0ICovXFxuIDY3NDpcXHRcXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG4gNjc1OlxcdFxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cXHUwMDNlaWQ7XFxuIDY3NjpcXHRcXHRlbHNlXFxuIDY3NzpcXHRcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdGlmIChtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcXG4gNjgwOlxcdFxcdFxcdG1lbWNnX2F3YXJlID0gZmFsc2U7XFxuIDY4MTpcXHQjZW5kaWZcXG4gNjgyOlxcdFxcbiA2ODM6XFx0XFx0bHJ1LVxcdTAwM2Vub2RlID0ga3phbGxvY19vYmpzKCpscnUtXFx1MDAzZW5vZGUsIG5yX25vZGVfaWRzKTtcXG4gNjg0OlxcdFxcdGlmICghbHJ1LVxcdTAwM2Vub2RlKVxcbiA2ODU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDY4NjpcXHRcXG4gNjg3OlxcdFxcdGZvcl9lYWNoX25vZGUoaSlcXG4gNjg4OlxcdFxcdFxcdGluaXRfb25lX2xydShscnUsIFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbaV0ubHJ1KTtcXG4gNjg5OlxcdFxcbiA2OTA6XFx0XFx0bWVtY2dfaW5pdF9saXN0X2xydShscnUsIG1lbWNnX2F3YXJlKTtcXG4gNjkxOlxcdFxcdGxpc3RfbHJ1X3JlZ2lzdGVyKGxydSk7XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdHJldHVybiAwO1xcbiA2OTQ6XFx0fVxcbiA2OTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19saXN0X2xydV9pbml0KTtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbiA2OTg6XFx0e1xcbiA2OTk6XFx0XFx0LyogQWxyZWFkeSBkZXN0cm95ZWQgb3Igbm90IHlldCBpbml0aWFsaXplZD8gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MjcuOTU4MjU5OTYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1OTMzNTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIGBzaHJpbmtlcmAgYW5kIGBsaXN0X2xydWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgc2hyaW5rZXJgIG1lY2hhbmlzbSBhbmQgdGhlIGBsaXN0X2xydWAgZGF0YSBzdHJ1Y3R1cmUuIEknbSBzcGVjaWZpY2FsbHkgY3VyaW91cyBhYm91dCBob3cgdGhlIGBzaHJpbmtlcl9pZGAgdmFyaWFibGUgZmFjdG9ycyBpbnRvIHRoZWlyIGludGVycGxheS4gR2l2ZW4gdGhhdCBJJ20gd29ya2luZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIHNocmlua3MgY2FjaGUgb2JqZWN0cyBpbiBsaXN0IExSVXMgaXMgcHJldHR5IGNyaXRpY2FsLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbGwgaGVhZCBzdHJhaWdodCBmb3IgYG1tL2xpc3RfbHJ1LmNgIGFuZCB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gc2VlIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBzaHJpbmtlcl9pZGAgYW5kIGBsaXN0X2xydWAgYXJlIHVzZWQgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QsIGZvY3VzZWQgdmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZXhwb3NlIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgSUQgaXMgdXNlZCB0byBtYW5hZ2UgYW5kIGlkZW50aWZ5IExSVSBlbnRyaWVzIG9yIHNocmlua2VyIG9wZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBMUlUgbGlzdHMuIFdpdGggdGhhdCBpbmZvcm1hdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byByZWFzb24gYWJvdXQgaG93IGEgc2hyaW5rZXIgaXMgcmVnaXN0ZXJlZCBhbmQgaG93IGVudHJpZXMgYXJlIHJlbW92ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBzb3VyY2UgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozMC4yMTc1OTc2OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTE5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rZXJfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2xpc3RfbHJ1LmM9NTk9c3RhdGljIHZvaWQgbGlzdF9scnVfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjgtXFxubW0vbGlzdF9scnUuYzo2OTpzdGF0aWMgaW50IGxydV9zaHJpbmtlcl9pZChzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTcwLXtcXG5tbS9saXN0X2xydS5jOjcxOlxcdHJldHVybiBscnUtXFx1MDAzZXNocmlua2VyX2lkO1xcbm1tL2xpc3RfbHJ1LmMtNzItfVxcbi0tXFxubW0vbGlzdF9scnUuYz0xMjA9c3RhdGljIHZvaWQgbGlzdF9scnVfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTIzLVxcbm1tL2xpc3RfbHJ1LmM6MTI0OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTkwPWJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuLS1cXG5tbS9saXN0X2xydS5jLTIwMS1cXHRcXHRpZiAoIWwtXFx1MDAzZW5yX2l0ZW1zKyspXFxubW0vbGlzdF9scnUuYzoyMDI6XFx0XFx0XFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XFxubW0vbGlzdF9scnUuYy0yMDMtXFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5ucl9pdGVtcyk7XFxuLS1cXG5tbS9saXN0X2xydS5jPTUwMT1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTUxNS1cXHRcXHRkc3QtXFx1MDAzZW5yX2l0ZW1zICs9IHNyYy1cXHUwMDNlbnJfaXRlbXM7XFxubW0vbGlzdF9scnUuYzo1MTY6XFx0XFx0c2V0X3Nocmlua2VyX2JpdChkc3RfbWVtY2csIG5pZCwgbHJ1X3Nocmlua2VyX2lkKGxydSkpO1xcbm1tL2xpc3RfbHJ1LmMtNTE3LVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY3NC1cXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG5tbS9saXN0X2xydS5jOjY3NTpcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXFx1MDAzZWlkO1xcbm1tL2xpc3RfbHJ1LmMtNjc2LVxcdGVsc2VcXG5tbS9saXN0X2xydS5jOjY3NzpcXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxubW0vbGlzdF9scnUuYy02NzgtXFxuLS1cXG5tbS9saXN0X2xydS5jPTY5Nz12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTcwOS0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYzo3MTA6XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xcbm1tL2xpc3RfbHJ1LmMtNzExLSNlbmRpZlxcbi0tXFxubW0vc2hyaW5rZXIuYz0xNTk9c3RhdGljIGludCBleHBhbmRfc2hyaW5rZXJfaW5mbyhpbnQgbmV3X2lkKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0xODktXFxubW0vc2hyaW5rZXIuYzoxOTA6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW50IHNocmlua2VyX2lkKVxcbm1tL3Nocmlua2VyLmMtMTkxLXtcXG5tbS9zaHJpbmtlci5jOjE5MjpcXHRyZXR1cm4gc2hyaW5rZXJfaWQgLyBTSFJJTktFUl9VTklUX0JJVFM7XFxubW0vc2hyaW5rZXIuYy0xOTMtfVxcbm1tL3Nocmlua2VyLmMtMTk0LVxcbm1tL3Nocmlua2VyLmM6MTk1OnN0YXRpYyBpbmxpbmUgaW50IHNocmlua2VyX2lkX3RvX29mZnNldChpbnQgc2hyaW5rZXJfaWQpXFxubW0vc2hyaW5rZXIuYy0xOTYte1xcbm1tL3Nocmlua2VyLmM6MTk3OlxcdHJldHVybiBzaHJpbmtlcl9pZCAlIFNIUklOS0VSX1VOSVRfQklUUztcXG5tbS9zaHJpbmtlci5jLTE5OC19XFxubW0vc2hyaW5rZXIuYy0xOTktXFxubW0vc2hyaW5rZXIuYzoyMDA6c3RhdGljIGlubGluZSBpbnQgY2FsY19zaHJpbmtlcl9pZChpbnQgaW5kZXgsIGludCBvZmZzZXQpXFxubW0vc2hyaW5rZXIuYy0yMDEte1xcbi0tXFxubW0vc2hyaW5rZXIuYy0yMDQtXFxubW0vc2hyaW5rZXIuYzoyMDU6dm9pZCBzZXRfc2hyaW5rZXJfYml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCwgaW50IHNocmlua2VyX2lkKVxcbm1tL3Nocmlua2VyLmMtMjA2LXtcXG5tbS9zaHJpbmtlci5jOjIwNzpcXHRpZiAoc2hyaW5rZXJfaWQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xcbm1tL3Nocmlua2VyLmMtMjA4LVxcdFxcdHN0cnVjdCBzaHJpbmtlcl9pbmZvICppbmZvO1xcbi0tXFxubW0vc2hyaW5rZXIuYy0yMTEtXFx0XFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZShtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbyk7XFxubW0vc2hyaW5rZXIuYzoyMTI6XFx0XFx0aWYgKCFXQVJOX09OX09OQ0Uoc2hyaW5rZXJfaWQgXFx1MDAzZT0gaW5mby1cXHUwMDNlbWFwX25yX21heCkpIHtcXG5tbS9zaHJpbmtlci5jLTIxMy1cXHRcXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xcbm1tL3Nocmlua2VyLmMtMjE0LVxcbm1tL3Nocmlua2VyLmM6MjE1OlxcdFxcdFxcdHVuaXQgPSBpbmZvLVxcdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyX2lkKV07XFxubW0vc2hyaW5rZXIuYy0yMTYtXFx0XFx0XFx0LyogUGFpcnMgd2l0aCBzbXAgbWIgaW4gc2hyaW5rX3NsYWIoKSAqL1xcbm1tL3Nocmlua2VyLmMtMjE3LVxcdFxcdFxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbm1tL3Nocmlua2VyLmM6MjE4OlxcdFxcdFxcdHNldF9iaXQoc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyX2lkKSwgdW5pdC1cXHUwMDNlbWFwKTtcXG5tbS9zaHJpbmtlci5jLTIxOS1cXHRcXHR9XFxuLS1cXG5tbS9zaHJpbmtlci5jLTIyMy1cXG5tbS9zaHJpbmtlci5jOjIyNDpzdGF0aWMgREVGSU5FX0lEUihzaHJpbmtlcl9pZHIpO1xcbm1tL3Nocmlua2VyLmMtMjI1LVxcbm1tL3Nocmlua2VyLmM9MjI2PXN0YXRpYyBpbnQgc2hyaW5rZXJfbWVtY2dfYWxsb2Moc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjM1LVxcdGd1YXJkKG11dGV4KShcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbm1tL3Nocmlua2VyLmM6MjM2OlxcdGlkID0gaWRyX2FsbG9jKFxcdTAwMjZzaHJpbmtlcl9pZHIsIHNocmlua2VyLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG5tbS9zaHJpbmtlci5jLTIzNy1cXHRpZiAoaWQgXFx1MDAzYyAwKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0yNDEtXFx0XFx0aWYgKGV4cGFuZF9zaHJpbmtlcl9pbmZvKGlkKSkge1xcbm1tL3Nocmlua2VyLmM6MjQyOlxcdFxcdFxcdGlkcl9yZW1vdmUoXFx1MDAyNnNocmlua2VyX2lkciwgaWQpO1xcbm1tL3Nocmlua2VyLmMtMjQzLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0yNTA9c3RhdGljIHZvaWQgc2hyaW5rZXJfbWVtY2dfcmVtb3ZlKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTI1Ny1cXG5tbS9zaHJpbmtlci5jOjI1ODpcXHRpZHJfcmVtb3ZlKFxcdTAwMjZzaHJpbmtlcl9pZHIsIGlkKTtcXG5tbS9zaHJpbmtlci5jLTI1OS19XFxuLS1cXG5tbS9zaHJpbmtlci5jPTI2MT1zdGF0aWMgbG9uZyB4Y2hnX25yX2RlZmVycmVkX21lbWNnKGludCBuaWQsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTI2OS1cXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvKTtcXG5tbS9zaHJpbmtlci5jOjI3MDpcXHR1bml0ID0gaW5mby1cXHUwMDNldW5pdFtzaHJpbmtlcl9pZF90b19pbmRleChzaHJpbmtlci1cXHUwMDNlaWQpXTtcXG5tbS9zaHJpbmtlci5jOjI3MTpcXHRucl9kZWZlcnJlZCA9IGF0b21pY19sb25nX3hjaGcoXFx1MDAyNnVuaXQtXFx1MDAzZW5yX2RlZmVycmVkW3Nocmlua2VyX2lkX3RvX29mZnNldChzaHJpbmtlci1cXHUwMDNlaWQpXSwgMCk7XFxubW0vc2hyaW5rZXIuYy0yNzItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTI3Nz1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjg1LVxcdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZXNocmlua2VyX2luZm8pO1xcbm1tL3Nocmlua2VyLmM6Mjg2OlxcdHVuaXQgPSBpbmZvLVxcdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyLVxcdTAwM2VpZCldO1xcbm1tL3Nocmlua2VyLmMtMjg3LVxcdG5yX2RlZmVycmVkID1cXG5tbS9zaHJpbmtlci5jOjI4ODpcXHRcXHRhdG9taWNfbG9uZ19hZGRfcmV0dXJuKG5yLCBcXHUwMDI2dW5pdC1cXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVxcdTAwM2VpZCldKTtcXG5tbS9zaHJpbmtlci5jLTI4OS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9Mjk0PXZvaWQgcmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0zMDYtXFx0XFx0cGFyZW50X2luZm8gPSBzaHJpbmtlcl9pbmZvX3Byb3RlY3RlZChwYXJlbnQsIG5pZCk7XFxubW0vc2hyaW5rZXIuYzozMDc6XFx0XFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2Mgc2hyaW5rZXJfaWRfdG9faW5kZXgoY2hpbGRfaW5mby1cXHUwMDNlbWFwX25yX21heCk7IGluZGV4KyspIHtcXG5tbS9zaHJpbmtlci5jLTMwOC1cXHRcXHRcXHRjaGlsZF91bml0ID0gY2hpbGRfaW5mby1cXHUwMDNldW5pdFtpbmRleF07XFxuLS1cXG5tbS9zaHJpbmtlci5jPTQ3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTAyLVxcdCAqICAgICAgICAgIFJDVSBsb2NrLlxcbm1tL3Nocmlua2VyLmM6NTAzOlxcdCAqICBzdGVwIDM6IHRyYXZlcnNlIHRoZSBiaXRtYXAgYW5kIGNhbGN1bGF0ZSBzaHJpbmtlcl9pZFxcbm1tL3Nocmlua2VyLmMtNTA0LVxcdCAqICBzdGVwIDQ6IHVzZSByY3VfcmVhZF9sb2NrKCkgdG8gZ3VhcmFudGVlIGV4aXN0ZW5jZSBvZiB0aGUgc2hyaW5rZXIuXFxubW0vc2hyaW5rZXIuYzo1MDU6XFx0ICogIHN0ZXAgNTogdXNlIHNocmlua2VyX2lkIHRvIGZpbmQgdGhlIHNocmlua2VyLCB0aGVuIHVzZVxcbm1tL3Nocmlua2VyLmMtNTA2LVxcdCAqICAgICAgICAgIHNocmlua2VyX3RyeV9nZXQoKSB0byBndWFyYW50ZWUgZXhpc3RlbmNlIG9mIHRoZSBzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTI2LVxcbm1tL3Nocmlua2VyLmM6NTI3OlxcdGlmIChpbmRleCBcXHUwMDNjIHNocmlua2VyX2lkX3RvX2luZGV4KGluZm8tXFx1MDAzZW1hcF9ucl9tYXgpKSB7XFxubW0vc2hyaW5rZXIuYy01MjgtXFx0XFx0c3RydWN0IHNocmlua2VyX2luZm9fdW5pdCAqdW5pdDtcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTQwLVxcdFxcdFxcdHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXI7XFxubW0vc2hyaW5rZXIuYzo1NDE6XFx0XFx0XFx0aW50IHNocmlua2VyX2lkID0gY2FsY19zaHJpbmtlcl9pZChpbmRleCwgb2Zmc2V0KTtcXG5tbS9zaHJpbmtlci5jLTU0Mi1cXG5tbS9zaHJpbmtlci5jLTU0My1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vc2hyaW5rZXIuYzo1NDQ6XFx0XFx0XFx0c2hyaW5rZXIgPSBpZHJfZmluZChcXHUwMDI2c2hyaW5rZXJfaWRyLCBzaHJpbmtlcl9pZCk7XFxubW0vc2hyaW5rZXIuYy01NDUtXFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzaHJpbmtlciB8fCAhc2hyaW5rZXJfdHJ5X2dldChzaHJpbmtlcikpKSB7XFxuLS1cXG5tbS9zaHJpbmtlci5jLTU4Mi1cXHRcXHRcXHRcXHRlbHNlXFxubW0vc2hyaW5rZXIuYzo1ODM6XFx0XFx0XFx0XFx0XFx0c2V0X3Nocmlua2VyX2JpdChtZW1jZywgbmlkLCBzaHJpbmtlcl9pZCk7XFxubW0vc2hyaW5rZXIuYy01ODQtXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozMC4yNzEzNTQ0ODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI0Mzk3MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEluaXRpYWxpemF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgX19saXN0X2xydV9pbml0YC4gUHJldmlvdXNseSwgd2hlbiBpbml0aWFsaXppbmcgdGhlIExSVSwgaXQgd291bGQgYXNzaWduIHRoZSBgc2hyaW5rZXJfaWRgIGJhc2VkIG9uIHdoZXRoZXIgYSBzaHJpbmtlciB3YXMgcHJlc2VudCwgYW5kIHVuZGVyIGBDT05GSUdfTUVNQ0dgLCB0aGlzIHdhcyBzdHJhaWdodGZvcndhcmQuIElmIGEgYHNocmlua2VyYCBleGlzdGVkLCBpdCBnb3QgdGhlIElELiBOb3csIGhvd2V2ZXIsIHRoZXJlJ3MgYW4gYWRkZWQgY2hlY2s6XG5cbmBgYGNcblx0aWYgKHNocmlua2VyIFx1MDAyNlx1MDAyNiAoc2hyaW5rZXItXHUwMDNlZmxhZ3MgXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcblx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cdTAwM2VpZDtcblx0ZWxzZVxuXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuYGBgXG5cbkludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHdlJ3JlIG5vdyAqYWxzbyogY2hlY2tpbmcgdGhlIGBTSFJJTktFUl9NRU1DR19BV0FSRWAgZmxhZyBvbiB0aGUgYHNocmlua2VyYCBzdHJ1Y3QuIFRoZSBjb21tZW50IGlzIGNydWNpYWw7IGl0J3MgYWRkcmVzc2luZyBhIHNjZW5hcmlvIHdoZXJlIGEgc2hyaW5rZXIgbWlnaHQgZmFsbCBiYWNrIHRvIGJlaW5nIG5vbi1tZW1jZy1hd2FyZSwgcGVyaGFwcyBkdWUgdG8gYSBjb25maWd1cmF0aW9uIGxpa2UgYGNncm91cC5tZW1vcnk9bm9rbWVtYC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBgc2hyaW5rZXItXHUwMDNlaWRgIG1pZ2h0IGJlIHN0YWxlICgwKS4gVGhpcyBwcmV2ZW50cyBgc2V0X3Nocmlua2VyX2JpdCgpYCBmcm9tIGFjdGluZyBvbiBhbiBpbnZhbGlkIGBzaHJpbmtlcl9pZGAuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgaXMgc2V0IGFuZCBob3cgYHNocmlua2VyLVx1MDAzZWlkYCBpcyBhc3NpZ25lZCBhbmQgbWFuYWdlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIGVzcGVjaWFsbHkgaWYgdGhlIHNocmlua2VyIGlzbid0IG1lbWNnLWF3YXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBzaHJpbmtlcl9hbGxvY2AgYW5kIGBzaHJpbmtlcl9yZWdpc3RlcmAgaW4gYG1tL3Nocmlua2VyLmNgLiBUaGF0IHNob3VsZCByZXZlYWwgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRob3NlIHZhcmlhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozMy40OTU3NTM1NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjk0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0hSSU5LRVJfTUVNQ0dfQVdBUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY2LVxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoU0hSSU5LRVJfTlVNQV9BV0FSRSB8XFxubW0vaHVnZV9tZW1vcnkuYzoxMDY3OlxcdFxcdFxcdFxcdFxcdFxcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcXG5tbS9odWdlX21lbW9yeS5jLTEwNjgtXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0aHAtZGVmZXJyZWRfc3BsaXRcXFwiKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY3My1cXHQgKi9cXG5tbS9saXN0X2xydS5jOjY3NDpcXHRpZiAoc2hyaW5rZXIgXFx1MDAyNlxcdTAwMjYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG5tbS9saXN0X2xydS5jLTY3NS1cXHRcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXFx1MDAzZWlkO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0zNDE9c3RhdGljIGxvbmcgeGNoZ19ucl9kZWZlcnJlZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYy0zNDktXFx0aWYgKHNjLVxcdTAwM2VtZW1jZyBcXHUwMDI2XFx1MDAyNlxcbm1tL3Nocmlua2VyLmM6MzUwOlxcdCAgICAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxcbm1tL3Nocmlua2VyLmMtMzUxLVxcdFxcdHJldHVybiB4Y2hnX25yX2RlZmVycmVkX21lbWNnKG5pZCwgc2hyaW5rZXIsXFxuLS1cXG5tbS9zaHJpbmtlci5jPTM1OD1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWQobG9uZyBuciwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMzY2LVxcdGlmIChzYy1cXHUwMDNlbWVtY2cgXFx1MDAyNlxcdTAwMjZcXG5tbS9zaHJpbmtlci5jOjM2NzpcXHQgICAgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSlcXG5tbS9zaHJpbmtlci5jLTM2OC1cXHRcXHRyZXR1cm4gYWRkX25yX2RlZmVycmVkX21lbWNnKG5yLCBuaWQsIHNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYz02ODg9c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03MDctXFxubW0vc2hyaW5rZXIuYzo3MDg6XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpIHtcXG5tbS9zaHJpbmtlci5jLTcwOS1cXHRcXHRlcnIgPSBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzaHJpbmtlcik7XFxuLS1cXG5tbS9zaHJpbmtlci5jLTcxMS1cXHRcXHRcXHQvKiBNZW1jZyBpcyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byBub24tbWVtY2ctYXdhcmUgc2hyaW5rZXIuICovXFxubW0vc2hyaW5rZXIuYzo3MTI6XFx0XFx0XFx0c2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5TSFJJTktFUl9NRU1DR19BV0FSRTtcXG5tbS9zaHJpbmtlci5jLTcxMy1cXHRcXHRcXHRnb3RvIG5vbl9tZW1jZztcXG4tLVxcbm1tL3Nocmlua2VyLmM9NzgwPXZvaWQgc2hyaW5rZXJfZnJlZShzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vc2hyaW5rZXIuYy04MTItXFxubW0vc2hyaW5rZXIuYzo4MTM6XFx0aWYgKHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKVxcbm1tL3Nocmlua2VyLmMtODE0LVxcdFxcdHNocmlua2VyX21lbWNnX3JlbW92ZShzaHJpbmtlcik7XFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jPTQ3PXN0YXRpYyBpbnQgc2hyaW5rZXJfZGVidWdmc19jb3VudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Nocmlua2VyX2RlYnVnLmMtNTktXFxubW0vc2hyaW5rZXJfZGVidWcuYzo2MDpcXHRtZW1jZ19hd2FyZSA9IHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFO1xcbm1tL3Nocmlua2VyX2RlYnVnLmMtNjEtXFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jPTEwMD1zdGF0aWMgc3NpemVfdCBzaHJpbmtlcl9kZWJ1Z2ZzX3NjYW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTEyNy1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jOjEyODpcXHRpZiAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpIHtcXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTEyOS1cXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZ2V0X2Zyb21faWQoaWQpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTc5Mz1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy04MTktXFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYyhTSFJJTktFUl9OVU1BX0FXQVJFIHxcXG5tbS93b3JraW5nc2V0LmM6ODIwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBTSFJJTktFUl9NRU1DR19BV0FSRSxcXG5tbS93b3JraW5nc2V0LmMtODIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwibW0tc2hhZG93XFxcIik7XFxuLS1cXG5tbS96c3dhcC5jPTEyNTE9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI1NS1cXHRzaHJpbmtlciA9XFxubW0venN3YXAuYzoxMjU2OlxcdFxcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXFxcIm1tLXpzd2FwXFxcIik7XFxubW0venN3YXAuYy0xMjU3LVxcdGlmICghc2hyaW5rZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjMzLjU0Mzc5Njc2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAxODAwMjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBMaXN0IExSVSBhbmQgTWVtY2cgU2hyaW5rZXIgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBzaHJpbmtlcl9hbGxvY2AsIGlmIHdlIGVuY291bnRlciBgLUVOT1NZU2AgZnJvbSBgc2hyaW5rZXJfbWVtY2dfYWxsb2NgLCB3aGljaCBzaWduYWxzIHRoYXQgbWVtY2cgaXNuJ3Qgc3VwcG9ydGVkIChvciBhdCBsZWFzdCwga21lbSBpcyBkaXNhYmxlZCksIHRoZSBjb2RlIGNvcnJlY3RseSBmYWxscyBiYWNrIHRvIGEgbm9uLW1lbWNnLWF3YXJlIHNocmlua2VyLiBUaGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIGlzIGNsZWFyZWQsIHdoaWNoIGlzIGdvb2QuIEhvd2V2ZXIsIHRoZSBgc2hyaW5rZXItXHUwMDNlaWRgIGZpZWxkIHJlbWFpbnMgdW5pbml0aWFsaXplZCDigJMgaXQncyBzdHVjayBhdCAwICh0aGUgZGVmYXVsdCB2YWx1ZSBhZnRlciBga3phbGxvY2ApLlxuXG5UaGUgcHJvYmxlbSBzdXJmYWNlcyBsYXRlciwgd2hlbiBjb2RlIGxpa2UgdGhhdCBpbiBzdXBlcmJsb2NrcyBpbml0aWFsaXplcyBhIGBsaXN0X2xydWAgKGZvciBleGFtcGxlIGBzLVx1MDAzZXNfZGVudHJ5X2xydWApIGFuZCBwYXNzZXMgdGhlIHNocmlua2VyIHRvIGBfX2xpc3RfbHJ1X2luaXRgLiBCZWZvcmUgdGhpcyBwYXRjaCwgYF9fbGlzdF9scnVfaW5pdGAgd291bGQgc2ltcGx5IGNoZWNrIGZvciBhIG5vbi1OVUxMIHNocmlua2VyIGFuZCB0aGVuIGJsaW5kbHkgYXNzaWduIGBzaHJpbmtlci1cdTAwM2VpZGAgdG8gYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAuIFRoaXMgbWVhbnMgdGhhdCBldmVuIGlmIHRoZSBzaHJpbmtlciBpc24ndCBtZW1jZy1hd2FyZSwgYGxydS1cdTAwM2VzaHJpbmtlcl9pZGAgZ2V0cyBzZXQgdG8gMC5cblxuTGF0ZXIsIHRoZSBjb2RlIGNhbGxzIGBzZXRfc2hyaW5rZXJfYml0YCB3aXRoIHRoaXMgcG90ZW50aWFsbHkgaW52YWxpZCBgc2hyaW5rZXJfaWRgLiBUaGUgYml0bWFzayBmb3IgbWVtY2cgc2hyaW5rZXJzIHdvdWxkIGJlIG1vZGlmaWVkIHVzaW5nIHRoaXMgdmFsdWUgb2YgMCwgZXZlbiB0aG91Z2ggdGhlIHNocmlua2VyIGlzbid0IG1lbWNnLWF3YXJlIG9yIHZhbGlkICh3aGljaCBpcyBpbmNvcnJlY3QgYW5kIGlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMpLlxuXG5UaGlzIHBhdGNoIGludHJvZHVjZXMgYSBmaXg6IGl0IGFkZHMgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgX19saXN0X2xydV9pbml0YDogYGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpYC4gSWYgdGhlIHNocmlua2VyIGlzbid0IG1lbWNnLWF3YXJlLCBgbHJ1LVx1MDAzZXNocmlua2VyX2lkYCBnZXRzIHNldCB0byAtMS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYz8gQWJzb2x1dGVseS4gVGhlIGBsaXN0X2xydWAgYW5kIHNocmlua2VyIGxvZ2ljIGFyZSBmdW5kYW1lbnRhbCBNTSBjb21wb25lbnRzLiBUaGUgcGF0Y2ggZWZmZWN0aXZlbHkgcHJldmVudHMgaW5jb3JyZWN0IHNocmlua2VyIGJpdCB1cGRhdGVzIHdoZW4gbWVtY2cga21lbSBpcyBkaXNhYmxlZCAob3IgaWYgd2UgaGFkIGEgZmFsbGJhY2sgc2NlbmFyaW8pLiBUaGVyZWZvcmUsIHRoaXMgZGVzZXJ2ZXMgZnVydGhlciBzY3J1dGlueS5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgaXMgd29ydGggZnV6emluZywgdGhpcyBwYXRjaCBjbGVhcmx5IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Gb3IgZnV6emluZywgSSBzaG91bGQgZm9jdXMgb24gdGhlIGBfX2xpc3RfbHJ1X2luaXRgIGZ1bmN0aW9uIGl0c2VsZiwgYXMgd2VsbCBhcyB0aGUgc3Vycm91bmRpbmcgY2FsbHMgaW4gYG1tL2xpc3RfbHJ1LmNgLiBUaGVzZSBhcmUgdGhlIGVudHJ5cG9pbnRzIHRvIGJlIG1vbml0b3JlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDozOS41NjE4MDE5NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjI3Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbGlzdF9scnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9saXN0X2xydS5jPTE5MD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbi0tXFxubW0vbGlzdF9scnUuYy0yMDctfVxcbm1tL2xpc3RfbHJ1LmM6MjA4OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2FkZCk7XFxubW0vbGlzdF9scnUuYy0yMDktXFxuLS1cXG5tbS9saXN0X2xydS5jPTI0Nz1ib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxuLS1cXG5tbS9saXN0X2xydS5jLTI2MS19XFxubW0vbGlzdF9scnUuYzoyNjI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkX29iaik7XFxubW0vbGlzdF9scnUuYy0yNjMtXFxuLS1cXG5tbS9saXN0X2xydS5jPTI3Nz1ib29sIGxpc3RfbHJ1X2RlbF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxuLS1cXG5tbS9saXN0X2xydS5jLTI5MS19XFxubW0vbGlzdF9scnUuYzoyOTI6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfZGVsX29iaik7XFxubW0vbGlzdF9scnUuYy0yOTMtXFxubW0vbGlzdF9scnUuYz0yOTQ9dm9pZCBsaXN0X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxuLS1cXG5tbS9saXN0X2xydS5jLTI5OC19XFxubW0vbGlzdF9scnUuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XFxubW0vbGlzdF9scnUuYy0zMDAtXFxubW0vbGlzdF9scnUuYz0zMDE9dm9pZCBsaXN0X2xydV9pc29sYXRlX21vdmUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMzA2LX1cXG5tbS9saXN0X2xydS5jOjMwNzpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9pc29sYXRlX21vdmUpO1xcbm1tL2xpc3RfbHJ1LmMtMzA4LVxcbm1tL2xpc3RfbHJ1LmM9MzA5PXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfY291bnRfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbGlzdF9scnUuYy0zMjQtfVxcbm1tL2xpc3RfbHJ1LmM6MzI1OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X29uZSk7XFxubW0vbGlzdF9scnUuYy0zMjYtXFxubW0vbGlzdF9scnUuYz0zMjc9dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxcbi0tXFxubW0vbGlzdF9scnUuYy0zMzMtfVxcbm1tL2xpc3RfbHJ1LmM6MzM0OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X25vZGUpO1xcbm1tL2xpc3RfbHJ1LmMtMzM1LVxcbi0tXFxubW0vbGlzdF9scnUuYz0zOTU9bGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDAxLX1cXG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XFxubW0vbGlzdF9scnUuYy00MDMtXFxuLS1cXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDQ4LX1cXG5tbS9saXN0X2xydS5jOjQ0OTpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX25vZGUpO1xcbm1tL2xpc3RfbHJ1LmMtNDUwLVxcbi0tXFxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjk0LX1cXG5tbS9saXN0X2xydS5jOjY5NTpFWFBPUlRfU1lNQk9MX0dQTChfX2xpc3RfbHJ1X2luaXQpO1xcbm1tL2xpc3RfbHJ1LmMtNjk2LVxcbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzEyLX1cXG5tbS9saXN0X2xydS5jOjcxMzpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZXN0cm95KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6MzkuNjEyNDMzNDA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDg2MDU5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTUVNQ0dgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgbW0vbGlzdF9scnUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IGBsaXN0X2xydS5jYCBpcyBjb21waWxlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBnYXRpbmcgaXRzIGluY2x1c2lvbiBvciBwb3RlbnRpYWxseSBndWFyZGluZyBhc3BlY3RzIG9mIGBDT05GSUdfTUVNQ0dgIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gY2VydGFpbiBLY29uZmlnIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDEuNTIxMDQyNDU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ2ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXN0X2xydVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MjIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS01Ni1cXHRcXHRcXHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxcXFxubW0vTWFrZWZpbGU6NTc6XFx0XFx0XFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXFxcXG5tbS9NYWtlZmlsZS01OC1cXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG5tbS9odWdlX21lbW9yeS5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcXHUwMDNlXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTcyPXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVmZXJyZWRfc3BsaXRfa2V5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzM6c3RhdGljIHN0cnVjdCBsaXN0X2xydSBkZWZlcnJlZF9zcGxpdF9scnU7XFxubW0vaHVnZV9tZW1vcnkuYy03NC1zdGF0aWMgc3RydWN0IHNocmlua2VyICpkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzgyPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4Ni1cXHRcXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM4NzpcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzg4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDU3PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDYwLVxcdFxcdHJldHVybiAwO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTA2MTpcXHRyZXR1cm4gZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MoZm9saW8sIFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Mi19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA3MS1cXG5tbS9odWdlX21lbW9yeS5jOjEwNzI6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxubW0vaHVnZV9tZW1vcnkuYy0xMDczLVxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA4Nj1zdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4OC1cXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jOjEwODk6XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcXG5tbS9odWdlX21lbW9yeS5jLTEwOTAtXFx0aHVnZV96ZXJvX3Nocmlua2VyX2V4aXQoKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ4Mz1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDk0LSAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ5NTogKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5Ni0gKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJ3MgdW5sb2NrZWRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5OC0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ5OTogKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMC0gKiBpbXBvcnRhbnQgdG8gdW5xdWV1ZSBkZWZlcnJlZCBzcGxpdCBiZWZvcmUgY2hhbmdpbmcgZm9saW8gbWVtY2cuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1MDI9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OlxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1MDYtXFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MTQtXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTE1OlxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MTY6XFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNy1cXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTIzLVxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjQ1MjQ6XFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUyNS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDUzMT12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG5tbS9odWdlX21lbW9yeS5jLTQ1MzIte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMzpcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxubW0vaHVnZV9tZW1vcnkuYy00NTM0LVxcdGludCBuaWQ7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NjEtXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTYyOlxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NjMtXFx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU3NC1cXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0NTc1OlxcdF9fbGlzdF9scnVfYWRkKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkLCBtZW1jZyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTc2OlxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NzctXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1ODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1ODQtXFxubW0vaHVnZV9tZW1vcnkuYzo0NTg1OlxcdGNvdW50ID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIHNjKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1ODYtXFx0cmV0dXJuIGNvdW50ID86IFNIUklOS19FTVBUWTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDYxNj1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG5tbS9odWdlX21lbW9yeS5jOjQ2MTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYxOC1cXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICpjYl9hcmcpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MjYtXFxubW0vaHVnZV9tZW1vcnkuYzo0NjI3OlxcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ2MjgtXFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjMxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MzgtXFxubW0vaHVnZV9tZW1vcnkuYzo0NjM5OlxcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIHNjLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY0MC1cXHRcXHRcXHRcXHRcXHQgICAgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSwgXFx1MDAyNmRpc3Bvc2UpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Njc4LVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ2Nzk6XFx0XFx0XFx0bGlzdF9scnVfYWRkX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY4MC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCxcXG4tLVxcbm1tL2ludGVybmFsLmg9NzMyPXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTczOS1cXHQgKiBkZWZlcnJlZF9saXN0LiBJZiBmb2xpbyBpcyBub3QgaW4gZGVmZXJyZWRfbGlzdCwgaXQncyBzYWZlXFxubW0vaW50ZXJuYWwuaDo3NDA6XFx0ICogdG8gY2hlY2sgd2l0aG91dCBhY3F1aXJpbmcgdGhlIGxpc3RfbHJ1IGxvY2suXFxubW0vaW50ZXJuYWwuaC03NDEtXFx0ICovXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTE0NzA9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKTtcXG5tbS9pbnRlcm5hbC5oOjE0NzE6ZXh0ZXJuIHN0cnVjdCBsaXN0X2xydSBzaGFkb3dfbm9kZXM7XFxubW0vaW50ZXJuYWwuaC0xNDcyLSNkZWZpbmUgbWFwcGluZ19zZXRfdXBkYXRlKHhhcywgbWFwcGluZykgZG8ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxubW0vbGlzdF9scnUuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9scnUuaFxcdTAwM2VcXG5tbS9saXN0X2xydS5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuLS1cXG5tbS9saXN0X2xydS5jLTE3LVxcbm1tL2xpc3RfbHJ1LmM6MTg6c3RhdGljIGlubGluZSB2b2lkIGxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnEsXFxubW0vbGlzdF9scnUuYy0xOS1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxcbi0tXFxubW0vbGlzdF9scnUuYy0yOC1cXG5tbS9saXN0X2xydS5jOjI5OnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxcbm1tL2xpc3RfbHJ1LmMtMzAtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKVxcbi0tXFxubW0vbGlzdF9scnUuYy00MC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYzo0MTpzdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XFxubW0vbGlzdF9scnUuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYy00My1cXG5tbS9saXN0X2xydS5jOjQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTQ1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDgtXFxubW0vbGlzdF9scnUuYzo0OTpzdGF0aWMgdm9pZCBsaXN0X2xydV9yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTUwLXtcXG5tbS9saXN0X2xydS5jOjUxOlxcdGlmICghbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSlcXG5tbS9saXN0X2xydS5jLTUyLVxcdFxcdHJldHVybjtcXG5tbS9saXN0X2xydS5jLTUzLVxcbm1tL2xpc3RfbHJ1LmM6NTQ6XFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9scnVzX211dGV4KTtcXG5tbS9saXN0X2xydS5jOjU1OlxcdGxpc3RfYWRkKFxcdTAwMjZscnUtXFx1MDAzZWxpc3QsIFxcdTAwMjZtZW1jZ19saXN0X2xydXMpO1xcbm1tL2xpc3RfbHJ1LmM6NTY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbm1tL2xpc3RfbHJ1LmMtNTctfVxcbm1tL2xpc3RfbHJ1LmMtNTgtXFxubW0vbGlzdF9scnUuYzo1OTpzdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNjAte1xcbm1tL2xpc3RfbHJ1LmM6NjE6XFx0aWYgKCFsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKVxcbm1tL2xpc3RfbHJ1LmMtNjItXFx0XFx0cmV0dXJuO1xcbm1tL2xpc3RfbHJ1LmMtNjMtXFxubW0vbGlzdF9scnUuYzo2NDpcXHRtdXRleF9sb2NrKFxcdTAwMjZsaXN0X2xydXNfbXV0ZXgpO1xcbm1tL2xpc3RfbHJ1LmMtNjUtXFx0bGlzdF9kZWwoXFx1MDAyNmxydS1cXHUwMDNlbGlzdCk7XFxubW0vbGlzdF9scnUuYzo2NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYy02Ny19XFxubW0vbGlzdF9scnUuYy02OC1cXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNzAte1xcbi0tXFxubW0vbGlzdF9scnUuYy03My1cXG5tbS9saXN0X2xydS5jOjc0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxubW0vbGlzdF9scnUuYzo3NTpsaXN0X2xydV9mcm9tX21lbWNnX2lkeChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgaW50IGlkeClcXG5tbS9saXN0X2xydS5jLTc2LXtcXG5tbS9saXN0X2xydS5jOjc3OlxcdGlmIChsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpIFxcdTAwMjZcXHUwMDI2IGlkeCBcXHUwMDNlPSAwKSB7XFxubW0vbGlzdF9scnUuYzo3ODpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnUgPSB4YV9sb2FkKFxcdTAwMjZscnUtXFx1MDAzZXhhLCBpZHgpO1xcbm1tL2xpc3RfbHJ1LmMtNzktXFxuLS1cXG5tbS9saXN0X2xydS5jLTg0LVxcbm1tL2xpc3RfbHJ1LmM6ODU6c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9scnVfb25lICpcXG5tbS9saXN0X2xydS5jOjg2OmxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYy04Ny1cXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXFxuLS1cXG5tbS9saXN0X2xydS5jLTg5LXtcXG5tbS9saXN0X2xydS5jOjkwOlxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmw7XFxubW0vbGlzdF9scnUuYy05MS1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtOTMtYWdhaW46XFxubW0vbGlzdF9scnUuYzo5NDpcXHRsID0gbGlzdF9scnVfZnJvbV9tZW1jZ19pZHgobHJ1LCBuaWQsIG1lbWNnX2ttZW1faWQoKm1lbWNnKSk7XFxubW0vbGlzdF9scnUuYy05NS1cXHRpZiAobGlrZWx5KGwpKSB7XFxubW0vbGlzdF9scnUuYzo5NjpcXHRcXHRsb2NrX2xpc3RfbHJ1KGwsIGlycSwgaXJxX2ZsYWdzKTtcXG5tbS9saXN0X2xydS5jLTk3LVxcdFxcdGlmIChsaWtlbHkoUkVBRF9PTkNFKGwtXFx1MDAzZW5yX2l0ZW1zKSAhPSBMT05HX01JTikpIHtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTAwLVxcdFxcdH1cXG5tbS9saXN0X2xydS5jOjEwMTpcXHRcXHR1bmxvY2tfbGlzdF9scnUobCwgaXJxLCBpcnFfZmxhZ3MpO1xcbm1tL2xpc3RfbHJ1LmMtMTAyLVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTA0LVxcdCAqIENhbGxlciBtYXkgc2ltcGx5IGJhaWwgb3V0IGlmIHJhY2VkIHdpdGggcmVwYXJlbnRpbmcgb3JcXG5tbS9saXN0X2xydS5jOjEwNTpcXHQgKiBtYXkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0X2xydSBhbmQgZXhwZWN0IGVtcHR5IHNsb3RzLlxcbm1tL2xpc3RfbHJ1LmMtMTA2LVxcdCAqL1xcbi0tXFxubW0vbGlzdF9scnUuYy0xMTUtI2Vsc2VcXG5tbS9saXN0X2xydS5jOjExNjpzdGF0aWMgdm9pZCBsaXN0X2xydV9yZWdpc3RlcihzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTExNy17XFxuLS1cXG5tbS9saXN0X2xydS5jLTExOS1cXG5tbS9saXN0X2xydS5jOjEyMDpzdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTIxLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTIzLVxcbm1tL2xpc3RfbHJ1LmM6MTI0OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtMTI1LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTI4LVxcbm1tL2xpc3RfbHJ1LmM6MTI5OnN0YXRpYyBpbmxpbmUgYm9vbCBsaXN0X2xydV9tZW1jZ19hd2FyZShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5tbS9saXN0X2xydS5jLTEzMC17XFxuLS1cXG5tbS9saXN0X2xydS5jLTEzMy1cXG5tbS9saXN0X2xydS5jOjEzNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2xydV9vbmUgKlxcbm1tL2xpc3RfbHJ1LmM6MTM1Omxpc3RfbHJ1X2Zyb21fbWVtY2dfaWR4KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLCBpbnQgaWR4KVxcbm1tL2xpc3RfbHJ1LmMtMTM2LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTM5LVxcbm1tL2xpc3RfbHJ1LmM6MTQwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfbHJ1X29uZSAqXFxubW0vbGlzdF9scnUuYzoxNDE6bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTE0Mi1cXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBpcnEsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE0NC17XFxubW0vbGlzdF9scnUuYzoxNDU6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbCA9IFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5scnU7XFxubW0vbGlzdF9scnUuYy0xNDYtXFxubW0vbGlzdF9scnUuYzoxNDc6XFx0bG9ja19saXN0X2xydShsLCBpcnEsIGlycV9mbGFncyk7XFxubW0vbGlzdF9scnUuYy0xNDgtXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1Mi1cXG5tbS9saXN0X2xydS5jOjE1MzpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmMtMTU0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXFxubW0vbGlzdF9scnUuYy0xNTUte1xcbm1tL2xpc3RfbHJ1LmM6MTU2OlxcdHJldHVybiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBtZW1jZywgLyppcnE9Ki9mYWxzZSxcXG5tbS9saXN0X2xydS5jLTE1Ny1cXHRcXHRcXHRcXHQgICAgICAvKmlycV9mbGFncz0qL05VTEwsIC8qc2tpcF9lbXB0eT0qL2ZhbHNlKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTU5LVxcbm1tL2xpc3RfbHJ1LmM6MTYwOnZvaWQgbGlzdF9scnVfdW5sb2NrKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxubW0vbGlzdF9scnUuYy0xNjEte1xcbm1tL2xpc3RfbHJ1LmM6MTYyOlxcdHVubG9ja19saXN0X2xydShsLCAvKmlycV9vZmY9Ki9mYWxzZSwgLyppcnFfZmxhZ3M9Ki9OVUxMKTtcXG5tbS9saXN0X2xydS5jLTE2My19XFxubW0vbGlzdF9scnUuYy0xNjQtXFxubW0vbGlzdF9scnUuYzoxNjU6c3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdF9scnVfbG9ja19pcnEoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYy0xNjYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2cpXFxubW0vbGlzdF9scnUuYy0xNjcte1xcbm1tL2xpc3RfbHJ1LmM6MTY4OlxcdHJldHVybiBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBtZW1jZywgLyppcnE9Ki90cnVlLFxcbm1tL2xpc3RfbHJ1LmMtMTY5LVxcdFxcdFxcdFxcdCAgICAgIC8qaXJxX2ZsYWdzPSovTlVMTCwgLypza2lwX2VtcHR5PSovZmFsc2UpO1xcbi0tXFxubW0vbGlzdF9scnUuYy0xNzEtXFxubW0vbGlzdF9scnUuYzoxNzI6dm9pZCBsaXN0X2xydV91bmxvY2tfaXJxKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxubW0vbGlzdF9scnUuYy0xNzMte1xcbm1tL2xpc3RfbHJ1LmM6MTc0OlxcdHVubG9ja19saXN0X2xydShsLCAvKmlycV9vZmY9Ki90cnVlLCAvKmlycV9mbGFncz0qL05VTEwpO1xcbm1tL2xpc3RfbHJ1LmMtMTc1LX1cXG5tbS9saXN0X2xydS5jLTE3Ni1cXG5tbS9saXN0X2xydS5jOjE3NzpzdHJ1Y3QgbGlzdF9scnVfb25lICpsaXN0X2xydV9sb2NrX2lycXNhdmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYy0xNzgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZyxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMTgwLXtcXG5tbS9saXN0X2xydS5jOjE4MTpcXHRyZXR1cm4gbG9ja19saXN0X2xydV9vZl9tZW1jZyhscnUsIG5pZCwgbWVtY2csIC8qaXJxPSovdHJ1ZSxcXG5tbS9saXN0X2xydS5jLTE4Mi1cXHRcXHRcXHRcXHQgICAgICAvKmlycV9mbGFncz0qL2ZsYWdzLCAvKnNraXBfZW1wdHk9Ki9mYWxzZSk7XFxuLS1cXG5tbS9saXN0X2xydS5jLTE4NC1cXG5tbS9saXN0X2xydS5jOjE4NTp2b2lkIGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbm1tL2xpc3RfbHJ1LmMtMTg2LXtcXG5tbS9saXN0X2xydS5jOjE4NzpcXHR1bmxvY2tfbGlzdF9scnUobCwgLyppcnFfb2ZmPSovdHJ1ZSwgLyppcnFfZmxhZ3M9Ki9mbGFncyk7XFxubW0vbGlzdF9scnUuYy0xODgtfVxcbm1tL2xpc3RfbHJ1LmMtMTg5LVxcbm1tL2xpc3RfbHJ1LmM6MTkwOmJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0xOTEtXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE5Ny1cXHRcXHQgKiBTZXQgc2hyaW5rZXIgYml0IG9uIHRoZSBtZW1jZyB0aGF0IG93bnMgdGhlIGxvY2tlZFxcbm1tL2xpc3RfbHJ1LmM6MTk4OlxcdFxcdCAqIHN1Ymxpc3QgLSBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKCkgbWF5IGhhdmUgd2Fsa2VkIHVwXFxubW0vbGlzdF9scnUuYy0xOTktXFx0XFx0ICogcGFzdCBhIGR5aW5nIG1lbWNnLCBhbmQgdGhlIGJpdCBtdXN0IGJlIHNldCB0aGVyZS5cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjA3LX1cXG5tbS9saXN0X2xydS5jOjIwODpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGQpO1xcbm1tL2xpc3RfbHJ1LmMtMjA5LVxcbm1tL2xpc3RfbHJ1LmM6MjEwOmJvb2wgX19saXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0vbGlzdF9scnUuYy0yMTEtXFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXFxuLS1cXG5tbS9saXN0X2xydS5jLTIyMi0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjIyMzpib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTIyNC1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTIyNS17XFxubW0vbGlzdF9scnUuYzoyMjY6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTIyNy1cXHRib29sIHJldDtcXG5tbS9saXN0X2xydS5jLTIyOC1cXG5tbS9saXN0X2xydS5jOjIyOTpcXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjIzMDpcXHRyZXQgPSBfX2xpc3RfbHJ1X2FkZChscnUsIGwsIGl0ZW0sIG5pZCwgbWVtY2cpO1xcbm1tL2xpc3RfbHJ1LmM6MjMxOlxcdGxpc3RfbHJ1X3VubG9jayhsKTtcXG5tbS9saXN0X2xydS5jLTIzMi1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vbGlzdF9scnUuYy0yMzQtXFxubW0vbGlzdF9scnUuYzoyMzU6Ym9vbCBsaXN0X2xydV9hZGRfaXJxKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbm1tL2xpc3RfbHJ1LmMtMjM2LVxcdFxcdCAgICAgIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTIzNy17XFxubW0vbGlzdF9scnUuYzoyMzg6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTIzOS1cXHRib29sIHJldDtcXG5tbS9saXN0X2xydS5jLTI0MC1cXG5tbS9saXN0X2xydS5jOjI0MTpcXHRsID0gbGlzdF9scnVfbG9ja19pcnEobHJ1LCBuaWQsIFxcdTAwMjZtZW1jZyk7XFxubW0vbGlzdF9scnUuYzoyNDI6XFx0cmV0ID0gX19saXN0X2xydV9hZGQobHJ1LCBsLCBpdGVtLCBuaWQsIG1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjI0MzpcXHRsaXN0X2xydV91bmxvY2tfaXJxKGwpO1xcbm1tL2xpc3RfbHJ1LmMtMjQ0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9saXN0X2xydS5jLTI0Ni1cXG5tbS9saXN0X2xydS5jOjI0Nzpib29sIGxpc3RfbHJ1X2FkZF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxubW0vbGlzdF9scnUuYy0yNDgte1xcbi0tXFxubW0vbGlzdF9scnUuYy0yNTEtXFxubW0vbGlzdF9scnUuYzoyNTI6XFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcXG5tbS9saXN0X2xydS5jLTI1My1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vbGlzdF9scnUuYzoyNTQ6XFx0XFx0cmV0ID0gbGlzdF9scnVfYWRkKGxydSwgaXRlbSwgbmlkLCBtZW1fY2dyb3VwX2Zyb21fdmlydChpdGVtKSk7XFxubW0vbGlzdF9scnUuYy0yNTUtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubW0vbGlzdF9scnUuYy0yNTYtXFx0fSBlbHNlIHtcXG5tbS9saXN0X2xydS5jOjI1NzpcXHRcXHRyZXQgPSBsaXN0X2xydV9hZGQobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xcbm1tL2xpc3RfbHJ1LmMtMjU4LVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjYxLX1cXG5tbS9saXN0X2xydS5jOjI2MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9hZGRfb2JqKTtcXG5tbS9saXN0X2xydS5jLTI2My1cXG5tbS9saXN0X2xydS5jLTI2NC0vKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cXG5tbS9saXN0X2xydS5jOjI2NTpib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG5tbS9saXN0X2xydS5jLTI2Ni1cXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTI2Ny17XFxubW0vbGlzdF9scnUuYzoyNjg6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTI2OS1cXHRib29sIHJldDtcXG5tbS9saXN0X2xydS5jLTI3MC1cXG5tbS9saXN0X2xydS5jOjI3MTpcXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjI3MjpcXHRyZXQgPSBfX2xpc3RfbHJ1X2RlbChscnUsIGwsIGl0ZW0sIG5pZCk7XFxubW0vbGlzdF9scnUuYzoyNzM6XFx0bGlzdF9scnVfdW5sb2NrKGwpO1xcbm1tL2xpc3RfbHJ1LmMtMjc0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9saXN0X2xydS5jLTI3Ni1cXG5tbS9saXN0X2xydS5jOjI3Nzpib29sIGxpc3RfbHJ1X2RlbF9vYmooc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0pXFxubW0vbGlzdF9scnUuYy0yNzgte1xcbi0tXFxubW0vbGlzdF9scnUuYy0yODEtXFxubW0vbGlzdF9scnUuYzoyODI6XFx0aWYgKGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcXG5tbS9saXN0X2xydS5jLTI4My1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vbGlzdF9scnUuYzoyODQ6XFx0XFx0cmV0ID0gbGlzdF9scnVfZGVsKGxydSwgaXRlbSwgbmlkLCBtZW1fY2dyb3VwX2Zyb21fdmlydChpdGVtKSk7XFxubW0vbGlzdF9scnUuYy0yODUtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubW0vbGlzdF9scnUuYy0yODYtXFx0fSBlbHNlIHtcXG5tbS9saXN0X2xydS5jOjI4NzpcXHRcXHRyZXQgPSBsaXN0X2xydV9kZWwobHJ1LCBpdGVtLCBuaWQsIE5VTEwpO1xcbm1tL2xpc3RfbHJ1LmMtMjg4LVxcdH1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjkxLX1cXG5tbS9saXN0X2xydS5jOjI5MjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9kZWxfb2JqKTtcXG5tbS9saXN0X2xydS5jLTI5My1cXG5tbS9saXN0X2xydS5jOjI5NDp2b2lkIGxpc3RfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSlcXG5tbS9saXN0X2xydS5jLTI5NS17XFxuLS1cXG5tbS9saXN0X2xydS5jLTI5OC19XFxubW0vbGlzdF9scnUuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfaXNvbGF0ZSk7XFxubW0vbGlzdF9scnUuYy0zMDAtXFxubW0vbGlzdF9scnUuYzozMDE6dm9pZCBsaXN0X2xydV9pc29sYXRlX21vdmUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG5tbS9saXN0X2xydS5jLTMwMi1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubW0vbGlzdF9scnUuYy0zMDYtfVxcbm1tL2xpc3RfbHJ1LmM6MzA3OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2lzb2xhdGVfbW92ZSk7XFxubW0vbGlzdF9scnUuYy0zMDgtXFxubW0vbGlzdF9scnUuYzozMDk6dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbGlzdF9scnUuYy0zMTAtXFx0XFx0XFx0XFx0IGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9saXN0X2xydS5jLTMxMS17XFxubW0vbGlzdF9scnUuYzozMTI6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG5tbS9saXN0X2xydS5jLTMxMy1cXHRsb25nIGNvdW50O1xcbi0tXFxubW0vbGlzdF9scnUuYy0zMTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm1tL2xpc3RfbHJ1LmM6MzE2OlxcdGwgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgbWVtY2dfa21lbV9pZChtZW1jZykpO1xcbm1tL2xpc3RfbHJ1LmMtMzE3LVxcdGNvdW50ID0gbCA/IFJFQURfT05DRShsLVxcdTAwM2Vucl9pdGVtcykgOiAwO1xcbi0tXFxubW0vbGlzdF9scnUuYy0zMjQtfVxcbm1tL2xpc3RfbHJ1LmM6MzI1OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X2NvdW50X29uZSk7XFxubW0vbGlzdF9scnUuYy0zMjYtXFxubW0vbGlzdF9scnUuYzozMjc6dW5zaWduZWQgbG9uZyBsaXN0X2xydV9jb3VudF9ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkKVxcbm1tL2xpc3RfbHJ1LmMtMzI4LXtcXG5tbS9saXN0X2xydS5jOjMyOTpcXHRzdHJ1Y3QgbGlzdF9scnVfbm9kZSAqbmxydTtcXG5tbS9saXN0X2xydS5jLTMzMC1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMzMzLX1cXG5tbS9saXN0X2xydS5jOjMzNDpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV9jb3VudF9ub2RlKTtcXG5tbS9saXN0X2xydS5jLTMzNS1cXG5tbS9saXN0X2xydS5jPTMzNj1zdGF0aWMgdW5zaWduZWQgbG9uZ1xcbm1tL2xpc3RfbHJ1LmM6MzM3Ol9fbGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9saXN0X2xydS5jOjMzODpcXHRcXHQgICAgbGlzdF9scnVfd2Fsa19jYiBpc29sYXRlLCB2b2lkICpjYl9hcmcsXFxubW0vbGlzdF9scnUuYy0zMzktXFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGssIGJvb2wgaXJxX29mZilcXG5tbS9saXN0X2xydS5jLTM0MC17XFxubW0vbGlzdF9scnUuYzozNDE6XFx0c3RydWN0IGxpc3RfbHJ1X25vZGUgKm5scnUgPSBcXHUwMDI2bHJ1LVxcdTAwM2Vub2RlW25pZF07XFxubW0vbGlzdF9scnUuYzozNDI6XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbCA9IE5VTEw7XFxubW0vbGlzdF9scnUuYy0zNDMtXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgKm47XFxuLS1cXG5tbS9saXN0X2xydS5jLTM0Ni1yZXN0YXJ0Olxcbm1tL2xpc3RfbHJ1LmM6MzQ3OlxcdGwgPSBsb2NrX2xpc3RfbHJ1X29mX21lbWNnKGxydSwgbmlkLCBcXHUwMDI2bWVtY2csIC8qaXJxPSovaXJxX29mZixcXG5tbS9saXN0X2xydS5jLTM0OC1cXHRcXHRcXHRcXHQgICAvKmlycV9mbGFncz0qL05VTEwsIC8qc2tpcF9lbXB0eT0qL3RydWUpO1xcbi0tXFxubW0vbGlzdF9scnUuYy0zODgtXFx0fVxcbm1tL2xpc3RfbHJ1LmM6Mzg5OlxcdHVubG9ja19saXN0X2xydShsLCBpcnFfb2ZmLCBOVUxMKTtcXG5tbS9saXN0X2xydS5jLTM5MC1vdXQ6XFxuLS1cXG5tbS9saXN0X2xydS5jPTM5ND11bnNpZ25lZCBsb25nXFxubW0vbGlzdF9scnUuYzozOTU6bGlzdF9scnVfd2Fsa19vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9saXN0X2xydS5jOjM5NjpcXHRcXHQgIGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxcbm1tL2xpc3RfbHJ1LmMtMzk3LVxcdFxcdCAgdW5zaWduZWQgbG9uZyAqbnJfdG9fd2FsaylcXG5tbS9saXN0X2xydS5jLTM5OC17XFxubW0vbGlzdF9scnUuYzozOTk6XFx0cmV0dXJuIF9fbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIG1lbWNnLCBpc29sYXRlLFxcbm1tL2xpc3RfbHJ1LmMtNDAwLVxcdFxcdFxcdFxcdCAgIGNiX2FyZywgbnJfdG9fd2FsaywgZmFsc2UpO1xcbm1tL2xpc3RfbHJ1LmMtNDAxLX1cXG5tbS9saXN0X2xydS5jOjQwMjpFWFBPUlRfU1lNQk9MX0dQTChsaXN0X2xydV93YWxrX29uZSk7XFxubW0vbGlzdF9scnUuYy00MDMtXFxubW0vbGlzdF9scnUuYz00MDQ9dW5zaWduZWQgbG9uZ1xcbm1tL2xpc3RfbHJ1LmM6NDA1Omxpc3RfbHJ1X3dhbGtfb25lX2lycShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2xpc3RfbHJ1LmM6NDA2OlxcdFxcdCAgICAgIGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxcbm1tL2xpc3RfbHJ1LmMtNDA3LVxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3dhbGspXFxubW0vbGlzdF9scnUuYy00MDgte1xcbm1tL2xpc3RfbHJ1LmM6NDA5OlxcdHJldHVybiBfX2xpc3RfbHJ1X3dhbGtfb25lKGxydSwgbmlkLCBtZW1jZywgaXNvbGF0ZSxcXG5tbS9saXN0X2xydS5jLTQxMC1cXHRcXHRcXHRcXHQgICBjYl9hcmcsIG5yX3RvX3dhbGssIHRydWUpO1xcbi0tXFxubW0vbGlzdF9scnUuYy00MTItXFxubW0vbGlzdF9scnUuYzo0MTM6dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxubW0vbGlzdF9scnUuYzo0MTQ6XFx0XFx0XFx0XFx0IGxpc3RfbHJ1X3dhbGtfY2IgaXNvbGF0ZSwgdm9pZCAqY2JfYXJnLFxcbm1tL2xpc3RfbHJ1LmMtNDE1LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpucl90b193YWxrKVxcbi0tXFxubW0vbGlzdF9scnUuYy00MTgtXFxubW0vbGlzdF9scnUuYzo0MTk6XFx0aXNvbGF0ZWQgKz0gbGlzdF9scnVfd2Fsa19vbmUobHJ1LCBuaWQsIE5VTEwsIGlzb2xhdGUsIGNiX2FyZyxcXG5tbS9saXN0X2xydS5jLTQyMC1cXHRcXHRcXHRcXHQgICAgICBucl90b193YWxrKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDIyLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQyMzpcXHRpZiAoKm5yX3RvX3dhbGsgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcXG5tbS9saXN0X2xydS5jOjQyNDpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxubW0vbGlzdF9scnUuYy00MjUtXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbi0tXFxubW0vbGlzdF9scnUuYy00MzUtXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubW0vbGlzdF9scnUuYzo0MzY6XFx0XFx0XFx0aXNvbGF0ZWQgKz0gX19saXN0X2xydV93YWxrX29uZShscnUsIG5pZCwgbWVtY2csXFxubW0vbGlzdF9scnUuYy00MzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0aXNvbGF0ZSwgY2JfYXJnLFxcbi0tXFxubW0vbGlzdF9scnUuYy00NDgtfVxcbm1tL2xpc3RfbHJ1LmM6NDQ5OkVYUE9SVF9TWU1CT0xfR1BMKGxpc3RfbHJ1X3dhbGtfbm9kZSk7XFxubW0vbGlzdF9scnUuYy00NTAtXFxubW0vbGlzdF9scnUuYzo0NTE6c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbm1tL2xpc3RfbHJ1LmMtNDUyLXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDYyLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjQ2MzpzdGF0aWMgc3RydWN0IGxpc3RfbHJ1X21lbWNnICptZW1jZ19pbml0X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxcbm1tL2xpc3RfbHJ1LmMtNDY0LXtcXG5tbS9saXN0X2xydS5jLTQ2NS1cXHRpbnQgbmlkO1xcbm1tL2xpc3RfbHJ1LmM6NDY2OlxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcXG5tbS9saXN0X2xydS5jLTQ2Ny1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDc3LVxcbm1tL2xpc3RfbHJ1LmM6NDc4OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19pbml0X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlKVxcbm1tL2xpc3RfbHJ1LmMtNDc5LXtcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNDg0LVxcbm1tL2xpc3RfbHJ1LmM6NDg1OnN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy00ODYte1xcbm1tL2xpc3RfbHJ1LmMtNDg3LVxcdFhBX1NUQVRFKHhhcywgXFx1MDAyNmxydS1cXHUwMDNleGEsIDApO1xcbm1tL2xpc3RfbHJ1LmM6NDg4OlxcdHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWxydTtcXG5tbS9saXN0X2xydS5jLTQ4OS1cXG5tbS9saXN0X2xydS5jOjQ5MDpcXHRpZiAoIWxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpXFxubW0vbGlzdF9scnUuYy00OTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbGlzdF9scnUuYy01MDAtXFxubW0vbGlzdF9scnUuYzo1MDE6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbm1tL2xpc3RfbHJ1LmM6NTAyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKnNyYyxcXG5tbS9saXN0X2xydS5jLTUwMy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqZHN0X21lbWNnKVxcbi0tXFxubW0vbGlzdF9scnUuYy01MDUtXFx0aW50IGRzdF9pZHggPSBkc3RfbWVtY2ctXFx1MDAzZWttZW1jZ19pZDtcXG5tbS9saXN0X2xydS5jOjUwNjpcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpkc3Q7XFxubW0vbGlzdF9scnUuYy01MDctXFxubW0vbGlzdF9scnUuYy01MDgtXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c3JjLVxcdTAwM2Vsb2NrKTtcXG5tbS9saXN0X2xydS5jOjUwOTpcXHRkc3QgPSBsaXN0X2xydV9mcm9tX21lbWNnX2lkeChscnUsIG5pZCwgZHN0X2lkeCk7XFxubW0vbGlzdF9scnUuYy01MTAtXFx0c3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2ZHN0LVxcdTAwM2Vsb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuLS1cXG5tbS9saXN0X2xydS5jLTUxNy1cXHR9XFxubW0vbGlzdF9scnUuYzo1MTg6XFx0LyogTWFyayB0aGUgbGlzdF9scnVfb25lIGRlYWQgKi9cXG5tbS9saXN0X2xydS5jLTUxOS1cXHRzcmMtXFx1MDAzZW5yX2l0ZW1zID0gTE9OR19NSU47XFxuLS1cXG5tbS9saXN0X2xydS5jLTUyNC1cXG5tbS9saXN0X2xydS5jOjUyNTp2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbGlzdF9scnUuYy01MjYte1xcbm1tL2xpc3RfbHJ1LmM6NTI3OlxcdHN0cnVjdCBsaXN0X2xydSAqbHJ1O1xcbm1tL2xpc3RfbHJ1LmMtNTI4LVxcdGludCBpO1xcbm1tL2xpc3RfbHJ1LmMtNTI5LVxcbm1tL2xpc3RfbHJ1LmM6NTMwOlxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYzo1MzE6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShscnUsIFxcdTAwMjZtZW1jZ19saXN0X2xydXMsIGxpc3QpIHtcXG5tbS9saXN0X2xydS5jOjUzMjpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1scnU7XFxubW0vbGlzdF9scnUuYy01MzMtXFxubW0vbGlzdF9scnUuYy01MzQtXFx0XFx0LypcXG5tbS9saXN0X2xydS5jOjUzNTpcXHRcXHQgKiBjc3NfaXNfZHlpbmcoKSBjaGVjayBpbiBtZW1jZ19saXN0X2xydV9hbGxvYygpIGF2b2lkc1xcbm1tL2xpc3RfbHJ1LmMtNTM2LVxcdFxcdCAqIGFsbG9jYXRpbmcgYSBuZXcgbWxydSBzaW5jZSBDU1NfRFlJTkcgaXMgYWxyZWFkeSBzZXQgZm9yIHRoaXNcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTQ1LVxcdFxcdCAqIChMT05HX01JTikgYmVmb3JlIGNsZWFyaW5nIHhhcnJheSBlbnRyeSBvdGhlcndpc2UgYVxcbm1tL2xpc3RfbHJ1LmM6NTQ2OlxcdFxcdCAqIGNvbmN1cnJlbnQgbGlzdF9scnVfZGVsKCkgbWF5IGNvcnJ1cHQgdGhlIGxpc3QgaWYgaXQgYXJyaXZlc1xcbm1tL2xpc3RfbHJ1LmMtNTQ3LVxcdFxcdCAqIGFmdGVyIHhhcnJheSBjbGVhciBidXQgYmVmb3JlIHJlcGFyZW50aW5nIGFzXFxubW0vbGlzdF9scnUuYzo1NDg6XFx0XFx0ICogbG9ja19saXN0X2xydV9vZl9tZW1jZyB3aWxsIGFjcXVpcmUgcGFyZW50J3MgbG9jayB3aGlsZSB0aGVcXG5tbS9saXN0X2xydS5jLTU0OS1cXHRcXHQgKiBpdGVtIGlzIHN0aWxsIG9uIGNoaWxkJ3MgbGlzdC5cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTUxLVxcdFxcdGZvcl9lYWNoX25vZGUoaSlcXG5tbS9saXN0X2xydS5jOjU1MjpcXHRcXHRcXHRtZW1jZ19yZXBhcmVudF9saXN0X2xydV9vbmUobHJ1LCBpLCBcXHUwMDI2bWxydS1cXHUwMDNlbm9kZVtpXSwgcGFyZW50KTtcXG5tbS9saXN0X2xydS5jLTU1My1cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTU2LVxcdFxcdC8qXFxubW0vbGlzdF9scnUuYzo1NTc6XFx0XFx0ICogSGVyZSBhbGwgbGlzdF9scnVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNncm91cCBhcmUgZ3VhcmFudGVlZFxcbm1tL2xpc3RfbHJ1LmMtNTU4LVxcdFxcdCAqIHRvIHJlbWFpbiBlbXB0eSwgd2UgY2FuIHNhZmVseSBmcmVlIHRoaXMgbHJ1LCBhbnkgZnVydGhlclxcbm1tL2xpc3RfbHJ1LmM6NTU5OlxcdFxcdCAqIG1lbWNnX2xpc3RfbHJ1X2FsbG9jKCkgY2FsbCB3aWxsIHNpbXBseSBiYWlsIG91dC5cXG5tbS9saXN0X2xydS5jLTU2MC1cXHRcXHQgKi9cXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTYyLVxcdH1cXG5tbS9saXN0X2xydS5jOjU2MzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbHJ1c19tdXRleCk7XFxubW0vbGlzdF9scnUuYy01NjQtfVxcbm1tL2xpc3RfbHJ1LmMtNTY1LVxcbm1tL2xpc3RfbHJ1LmM6NTY2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19saXN0X2xydV9hbGxvY2F0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2xpc3RfbHJ1LmM6NTY3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDEuNTcxNTE1OTA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTI4MTU4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIE1FTUNHKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBNZW1vcnkgQ29udHJvbCBHcm91cHMgKE1FTUNHKS4gVGhpcyBpc24ndCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgbm90IHlldCBhbnl3YXksIGJ1dCBhIGZpcnN0LXBhc3MgY2hlY2suIEkgd2FudCB0byBzZWUgaWYgTUVNQ0cgaXMgZXZlbiAqZW5hYmxlZCogb3IgaWYgaXQncyBwb3RlbnRpYWxseSBjb25maWd1cmVkIGluIGEgc3BlY2lmaWMgd2F5IHRoYXQgY291bGQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBteSB0YXJnZXQgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGFyZSB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzLCBsaWtlIG1lbW9yeSByZXNvdXJjZSBjb250cm9sIGFuZCBoaWVyYXJjaGljYWwgY2dyb3VwcywgY29tcGlsZWQgaW50byB0aGUga2VybmVsPyBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMsIGFuZCBoYXZlIGFueSBjdXN0b20gY29uZmlndXJhdGlvbnMgYmVlbiBhcHBsaWVkPyBUaGlzIGlzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGF2b2lkIHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIHJvb3RlZCBpbiBhIGRpc2FibGVkIG9yIG1pc2NvbmZpZ3VyZWQgTUVNQ0cgc2V0dXAuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjQzLjkyNDMzMzg4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NjIzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4Ni1cXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjQzLjk2OTIwMDM3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTU5MDYwOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBDb250cm9sIEdyb3VwcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJvdW5kIE1FTUNHLiBXaGVyZSB3b3VsZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGJlPyBIbW0sIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHNwb3QuIEl0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUga2VybmVsLiBMZXQncyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCBLY29uZmlnIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlIHRvIE1FTUNHLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIHN1YnN5c3RlbXMgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgTUVNQ0cgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGRlZXBlciBhbmFseXNpcyBJIG1pZ2h0IG5lZWQgdG8gZG8uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgdHJlZSBjbGVhcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjEzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjQ3LjkyODI2Mzk1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTE6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDo0Ny45MjgzOTUwNTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwMTUxMjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUmVsYXRpb25zaGlwIEJldHdlZW4gTUVNQ0cgYW5kIENHUk9VUFMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgTUVNQ0cgKG1lbW9yeSBjb250cm9sIGdyb3VwcykgYW5kIGhvdyB0aGV5IGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoLCBhbmQgZnJhbmtseSwgbXkgd29ya2luZyBhc3N1bXB0aW9uLCBpcyB0aGF0IE1FTUNHIGlzIGZ1bmRhbWVudGFsbHkgKmRlcGVuZGVudCogb24gQ0dST1VQUy4gTGV0J3MgZHJpbGwgZG93biBhbmQgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBNRU1DRyByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgQ0dST1VQUyBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGFuZCBlbnN1cmUgSSdtIHNvbGlkIG9uIHRoZSBhcmNoaXRlY3R1cmUuIExldCdzIGNsYXJpZnkgdGhlaXIgcm9sZXMgYW5kIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYwMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDkuOTI5OTEwMzE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2MDpcXHRcXG4xMDYxOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNjI6XFx0XFxuMTA2MzpcXHRpZiBDR1JPVVBTXFxuMTA2NDpcXHRcXG4xMDY1OlxcdGNvbmZpZyBQQUdFX0NPVU5URVJcXG4xMDY2OlxcdFxcdGJvb2xcXG4xMDY3OlxcdFxcbjEwNjg6XFx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuMTA2OTpcXHRcXHRib29sIFxcXCJGYXZvciBkeW5hbWljIG1vZGlmaWNhdGlvbiBsYXRlbmN5IHJlZHVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbjEwNzA6XFx0XFx0aGVscFxcbjEwNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcXFwiZmF2b3JkeW5tb2RzXFxcIiBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxcbjEwNzI6XFx0XFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXFxuMTA3MzpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwNzQ6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjA6NDkuOTMwMDMzMTM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzA5OTkxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1FTUNHJ3MgTGlzdCBMUlUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgTUVNQ0dgIGludGVyYWN0cyB3aXRoIHRoZSBgbGlzdF9scnVgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiBgTUVNQ0dgJ3MgaW50ZWdyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGxpc3RfbHJ1YCBpbml0aWFsaXphdGlvbiBhbmQgYW55dGhpbmcgdGhhdCBpc24ndCBvbiB0aGUgaG90IHBhdGguIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxpc3QsIHdoaWNoIEkndmUgZ290OiBgX19saXN0X2xydV9pbml0YCwgYGxpc3RfbHJ1X2Rlc3Ryb3lgLCBgbGlzdF9scnVfYWRkYCwgYGxpc3RfbHJ1X2RlbGAsIGBsaXN0X2xydV9hZGRfb2JqYCwgYGxpc3RfbHJ1X2RlbF9vYmpgLCBgbGlzdF9scnVfaXNvbGF0ZWAsIGBsaXN0X2xydV9pc29sYXRlX21vdmVgLCBgbGlzdF9scnVfd2Fsa19vbmVgLCBgbGlzdF9scnVfd2Fsa19ub2RlYCwgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGFuZCBgc2V0X3Nocmlua2VyX2JpdGAuXG5cbk5vdywgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGZpbGVzOiBgbW0vbGlzdF9scnUuY2AgYW5kIGBtbS9zaHJpbmtlci5jYC4gSG1tLCBhIHF1aWNrIHNjYW4gcmV2ZWFscyB0aGF0IHRoZSBzeW1ib2xzIGZyb20gYG1tL2xpc3RfbHJ1LmNgIGFyZTogYF9fbGlzdF9scnVfaW5pdGAsIGBsaXN0X2xydV9kZXN0cm95YCwgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGBsaXN0X2xydV93YWxrX25vZGVgLCBhbmQgYHNldF9zaHJpbmtlcl9iaXRgLiBUaGlzIGNvbmZpcm1zIHNvbWUgb2YgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucy5cblxuTGV0J3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIGVuc3VyaW5nIEkgaGF2ZSBhbGwgdGhlIGtleSBwaWVjZXMuIEl0IGxvb2tzIGxpa2UgdGhpcyBjaGFuZ2UgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIGEgbm9uLWBtZW1jZ2AtYXdhcmUgc2hyaW5rZXIsIGxpa2Ugd2hlbiB3ZSdyZSBmYWxsaW5nIGJhY2sgZHVlIHRvIGNncm91cC5tZW1vcnk9bm9rbWVtLCBrZWVwcyB0aGUgYHNocmlua2VyX2lkYCBhdCAwIGluIGBsaXN0X2xydWAuIFRoaXMgaXMgbGVhZGluZyB0byBlcnJvbmVvdXMgY2FsbHMgdG8gYHNldF9zaHJpbmtlcl9iaXQoKWAuIE15IGNvbmZpcm1lZCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFyZTogYF9fbGlzdF9scnVfaW5pdGAsIGBsaXN0X2xydV9kZXN0cm95YCwgYG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1c2AsIGBzZXRfc2hyaW5rZXJfYml0YCwgYW5kIGBsaXN0X2xydV93YWxrX25vZGVgLiBJJ2xsIGJlIHN1cmUgdG8gZW5hYmxlIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24sIGFuZCB3aXRoIHRoYXQsIEkgY2FuIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDUxLCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU0LjYwMTAzNTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDQyMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbGlzdF9scnVfaW5pdFwiLFxuICAgIFwibGlzdF9scnVfZGVzdHJveVwiLFxuICAgIFwibWVtY2dfcmVwYXJlbnRfbGlzdF9scnVzXCIsXG4gICAgXCJzZXRfc2hyaW5rZXJfYml0XCIsXG4gICAgXCJsaXN0X2xydV93YWxrX25vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjb21taXQgbW9kaWZpZXMgbGlzdF9scnUgaW5pdGlhbGl6YXRpb24gdG8gZW5zdXJlIGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgaXMgbm90IGFzc2lnbmVkIGFuIHVuaW5pdGlhbGl6ZWQgSUQgb2YgMCB3aGVuIGEgc2hyaW5rZXIgZmFsbHMgYmFjayB0byBub24tbWVtY2ctYXdhcmUgbW9kZSAoc3VjaCBhcyB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWQpLiBUaGlzIHByZXZlbnRzIHVuaW50ZW5kZWQgc2hyaW5rZXIgYml0IHVwZGF0ZXMgaW4gc2V0X3Nocmlua2VyX2JpdCgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19saXN0X2xydV9pbml0XCIsXG4gICAgXCJsaXN0X2xydV9kZXN0cm95XCIsXG4gICAgXCJtZW1jZ19yZXBhcmVudF9saXN0X2xydXNcIixcbiAgICBcInNldF9zaHJpbmtlcl9iaXRcIixcbiAgICBcImxpc3RfbHJ1X3dhbGtfbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNvbW1pdCBtb2RpZmllcyBsaXN0X2xydSBpbml0aWFsaXphdGlvbiB0byBlbnN1cmUgbHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCBpcyBub3QgYXNzaWduZWQgYW4gdW5pbml0aWFsaXplZCBJRCBvZiAwIHdoZW4gYSBzaHJpbmtlciBmYWxscyBiYWNrIHRvIG5vbi1tZW1jZy1hd2FyZSBtb2RlIChzdWNoIGFzIHdoZW4gbWVtY2cga21lbSBpcyBkaXNhYmxlZCkuIFRoaXMgcHJldmVudHMgdW5pbnRlbmRlZCBzaHJpbmtlciBiaXQgdXBkYXRlcyBpbiBzZXRfc2hyaW5rZXJfYml0KCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU0LjcwNzQ4NDExNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNzQzNjU4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDo1NC43MDc5MTg4ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTE3MzkyNjg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXFx1MDAzZXNocmlua2VyX2lkYCBpbiBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNocmlua2VyIGFjdHVhbGx5IGhhcyB0aGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIHNldCBiZWZvcmUgdXNpbmcgYHNocmlua2VyLVxcdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxcblxcbkFsbCByZWxldmFudCBzdHJ1Y3R1cmVzIChgc3RydWN0IHNocmlua2VyYCBhbmQgYHN0cnVjdCBsaXN0X2xydWApIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChga3phbGxvY19vYmpgLCBldGMuKSwgYW5kIGFsbCBmaWVsZHMgYWNjZXNzZWQgKGBzaHJpbmtlci1cXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXFx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcXG5cXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEyNGJkYzZkYzFiM2FiOWMyOWY0MjI0ODQxNDExZmQ5ZmM3Y2M4NWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAwOjIwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbGlzdF9scnUuYyBiL21tL2xpc3RfbHJ1LmNcbmluZGV4IDM2NjYyZDAyZmY5NjMuLjk2ZDAyZWEyMDZhODggMTAwNjQ0XG4tLS0gYS9tbS9saXN0X2xydS5jXG4rKysgYi9tbS9saXN0X2xydS5jXG5AQCAtNjY2LDcgKzY2NiwxMiBAQCBpbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNoclxuIFx0aW50IGk7XG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0aWYgKHNocmlua2VyKVxuK1x0LypcbitcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcbitcdCAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYVxuK1x0ICogc3RhbGUgMC4gRG9uJ3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXG4rXHQgKi9cbitcdGlmIChzaHJpbmtlciBcdTAwMjZcdTAwMjYgKHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRSkpXG4gXHRcdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVx1MDAzZWlkO1xuIFx0ZWxzZVxuIFx0XHRscnUtXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU0LjcwNzkyMDE4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTU2NjQ0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGxpc3RfbHJ1LmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vbGlzdF9scnUuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb25hbCBjaGVjayB3aXRoaW4gYF9fbGlzdF9scnVfaW5pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBsb2dpYyBpcyB0aGVyZSB0byBoYW5kbGUgaG93IHRoZSBgc2hyaW5rZXJfaWRgIGlzIGFzc2lnbmVkLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtY2ctYXdhcmUgc2hyaW5rZXJzLiBcblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB0byBlbnN1cmUgdGhlIHNocmlua2VyIGlzIGFjdHVhbGx5IG1lbWNnLWF3YXJlIGJlZm9yZSBhc3NpZ25pbmcgaXRzIElEIHRvIGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgLiBUaGlzIGlzIGNydWNpYWwuIElmIHRoZSBzaHJpbmtlciBoYXMgXCJmYWxsZW4gYmFja1wiIHRvIGJlaW5nIG5vbi1tZW1jZyBhd2FyZSAoYXMgdGhlIGNvbW1lbnQgc3VnZ2VzdHMsIHBlcmhhcHMgZHVlIHRvIHNvbWV0aGluZyBsaWtlIGBjZ3JvdXAubWVtb3J5PW5va21lbWApLCBpdHMgSUQgaXMgc3RhbGUuIEF0dGVtcHRpbmcgdG8gdXNlIHRoaXMgc3RhbGUgSUQgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3IsIHNvIHRoZSBjaGVjayBwcmV2ZW50cyB0aGlzLlxuXG5JJ2Qgd2FudCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVsYXRlZCBgc2hyaW5rZXJgIGFuZCBgbGlzdF9scnVgIGNvZGUgZm9yIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBUaGUgYHNocmlua2VyLVx1MDAzZWZsYWdzIFx1MDAyNiBTSFJJTktFUl9NRU1DR19BV0FSRWAgYml0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGZsYWcgaXMgc2V0IGFuZCB3aGVuIGl0IG1pZ2h0ICpub3QqIGJlIHNldC4gSXQgc2VlbXMgdGhlIGNvbW1pdCBhdXRob3IgaXMgY29ycmVjdGx5IGhhbmRsaW5nIGFuIGVkZ2UgY2FzZSByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTm93IEkgd2FudCB0byB1bmRlcnN0YW5kIG1vcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMDo1OC4yNjQ1NjgwNzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2xpc3RfbHJ1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdFxcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4gNjUxOlxcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gNjUyOlxcdFxcdHJldHVybiByZXM7XFxuIDY1MzpcXHR9XFxuIDY1NDpcXHQjZWxzZVxcbiA2NTU6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2luaXRfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUpXFxuIDY1NjpcXHR7XFxuIDY1NzpcXHR9XFxuIDY1ODpcXHRcXG4gNjU5OlxcdHN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuIDY2MDpcXHR7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIDY2MzpcXHRcXG4gNjY0OlxcdGludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuIDY2NTpcXHR7XFxuIDY2NjpcXHRcXHRpbnQgaTtcXG4gNjY3OlxcdFxcbiA2Njg6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiA2Njk6XFx0XFx0LypcXG4gNjcwOlxcdFxcdCAqIElmIHRoZSBzaHJpbmtlciBmZWxsIGJhY2sgdG8gYmVpbmcgbm9uLW1lbWNnLWF3YXJlIChlLmcuIHdpdGhcXG4gNjcxOlxcdFxcdCAqIGNncm91cC5tZW1vcnk9bm9rbWVtKSwgaXRzIGlkIHdhcyBuZXZlciBhc3NpZ25lZCBhbmQgaG9sZHMgYVxcbiA2NzI6XFx0XFx0ICogc3RhbGUgMC4gRG9uJ3QgbGV0IHNldF9zaHJpbmtlcl9iaXQoKSBhY3Qgb24gaXQuXFxuIDY3MzpcXHRcXHQgKi9cXG4gNjc0OlxcdFxcdGlmIChzaHJpbmtlciBcXHUwMDI2XFx1MDAyNiAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxcbiA2NzU6XFx0XFx0XFx0bHJ1LVxcdTAwM2VzaHJpbmtlcl9pZCA9IHNocmlua2VyLVxcdTAwM2VpZDtcXG4gNjc2OlxcdFxcdGVsc2VcXG4gNjc3OlxcdFxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbiA2ODA6XFx0XFx0XFx0bWVtY2dfYXdhcmUgPSBmYWxzZTtcXG4gNjgxOlxcdCNlbmRpZlxcbiA2ODI6XFx0XFxuIDY4MzpcXHRcXHRscnUtXFx1MDAzZW5vZGUgPSBremFsbG9jX29ianMoKmxydS1cXHUwMDNlbm9kZSwgbnJfbm9kZV9pZHMpO1xcbiA2ODQ6XFx0XFx0aWYgKCFscnUtXFx1MDAzZW5vZGUpXFxuIDY4NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjg2OlxcdFxcbiA2ODc6XFx0XFx0Zm9yX2VhY2hfbm9kZShpKVxcbiA2ODg6XFx0XFx0XFx0aW5pdF9vbmVfbHJ1KGxydSwgXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtpXS5scnUpO1xcbiA2ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIwOjU4LjI2NDY3NDk4N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTE0MzEyNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNocmlua2VyYCBTdHJ1Y3R1cmUgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBzaHJpbmtlci1cdTAwM2VpZGAgYW5kIGBzaHJpbmtlci1cdTAwM2VmbGFnc2AuIE15IHByaW1hcnkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hlcmUgdGhlc2UgbWVtYmVycyBhcmUgYm90aCBzZXQgdG8gYSB2YWx1ZSBhbmQgYWxzbyB3aGVyZSB0aGV5IGFyZSBiZWluZyB1c2VkLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc3Vic2VxdWVudCB1dGlsaXphdGlvbiBvZiB0aGVzZSBmaWVsZHMuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgc2hyaW5rZXJgIG9iamVjdCBmdW5jdGlvbnMgYW5kIGhvdyBpdHMgc3RhdGUgaW1wYWN0cyB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBmb2xsb3cgdGhlIGNvZGUgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMTowMC4xNzg5OTA1MDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDQ3Njg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtlcl9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbGlzdF9scnUuYz01OT1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy02OC1cXG5tbS9saXN0X2xydS5jOjY5OnN0YXRpYyBpbnQgbHJ1X3Nocmlua2VyX2lkKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbm1tL2xpc3RfbHJ1LmMtNzAte1xcbm1tL2xpc3RfbHJ1LmM6NzE6XFx0cmV0dXJuIGxydS1cXHUwMDNlc2hyaW5rZXJfaWQ7XFxubW0vbGlzdF9scnUuYy03Mi19XFxuLS1cXG5tbS9saXN0X2xydS5jPTEyMD1zdGF0aWMgdm9pZCBsaXN0X2xydV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy0xMjMtXFxubW0vbGlzdF9scnUuYzoxMjQ6c3RhdGljIGludCBscnVfc2hyaW5rZXJfaWQoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxubW0vbGlzdF9scnUuYy0xMjUte1xcbi0tXFxubW0vbGlzdF9scnUuYz0xOTA9Ym9vbCBfX2xpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMjAxLVxcdFxcdGlmICghbC1cXHUwMDNlbnJfaXRlbXMrKylcXG5tbS9saXN0X2xydS5jOjIwMjpcXHRcXHRcXHRzZXRfc2hyaW5rZXJfYml0KG1lbWNnLCBuaWQsIGxydV9zaHJpbmtlcl9pZChscnUpKTtcXG5tbS9saXN0X2xydS5jLTIwMy1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNmxydS1cXHUwMDNlbm9kZVtuaWRdLm5yX2l0ZW1zKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NTAxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNTE1LVxcdFxcdGRzdC1cXHUwMDNlbnJfaXRlbXMgKz0gc3JjLVxcdTAwM2Vucl9pdGVtcztcXG5tbS9saXN0X2xydS5jOjUxNjpcXHRcXHRzZXRfc2hyaW5rZXJfYml0KGRzdF9tZW1jZywgbmlkLCBscnVfc2hyaW5rZXJfaWQobHJ1KSk7XFxubW0vbGlzdF9scnUuYy01MTctXFx0fVxcbi0tXFxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNjc0LVxcdGlmIChzaHJpbmtlciBcXHUwMDI2XFx1MDAyNiAoc2hyaW5rZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKVxcbm1tL2xpc3RfbHJ1LmM6Njc1OlxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSBzaHJpbmtlci1cXHUwMDNlaWQ7XFxubW0vbGlzdF9scnUuYy02NzYtXFx0ZWxzZVxcbm1tL2xpc3RfbHJ1LmM6Njc3OlxcdFxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG5tbS9saXN0X2xydS5jLTY3OC1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9Njk3PXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzA5LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jOjcxMDpcXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxubW0vbGlzdF9scnUuYy03MTEtI2VuZGlmXFxuLS1cXG5tbS9zaHJpbmtlci5jPTE1OT1zdGF0aWMgaW50IGV4cGFuZF9zaHJpbmtlcl9pbmZvKGludCBuZXdfaWQpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTE4OS1cXG5tbS9zaHJpbmtlci5jOjE5MDpzdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZF90b19pbmRleChpbnQgc2hyaW5rZXJfaWQpXFxubW0vc2hyaW5rZXIuYy0xOTEte1xcbm1tL3Nocmlua2VyLmM6MTkyOlxcdHJldHVybiBzaHJpbmtlcl9pZCAvIFNIUklOS0VSX1VOSVRfQklUUztcXG5tbS9zaHJpbmtlci5jLTE5My19XFxubW0vc2hyaW5rZXIuYy0xOTQtXFxubW0vc2hyaW5rZXIuYzoxOTU6c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KGludCBzaHJpbmtlcl9pZClcXG5tbS9zaHJpbmtlci5jLTE5Ni17XFxubW0vc2hyaW5rZXIuYzoxOTc6XFx0cmV0dXJuIHNocmlua2VyX2lkICUgU0hSSU5LRVJfVU5JVF9CSVRTO1xcbm1tL3Nocmlua2VyLmMtMTk4LX1cXG5tbS9zaHJpbmtlci5jLTE5OS1cXG5tbS9zaHJpbmtlci5jOjIwMDpzdGF0aWMgaW5saW5lIGludCBjYWxjX3Nocmlua2VyX2lkKGludCBpbmRleCwgaW50IG9mZnNldClcXG5tbS9zaHJpbmtlci5jLTIwMS17XFxuLS1cXG5tbS9zaHJpbmtlci5jLTIwNC1cXG5tbS9zaHJpbmtlci5jOjIwNTp2b2lkIHNldF9zaHJpbmtlcl9iaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkLCBpbnQgc2hyaW5rZXJfaWQpXFxubW0vc2hyaW5rZXIuYy0yMDYte1xcbm1tL3Nocmlua2VyLmM6MjA3OlxcdGlmIChzaHJpbmtlcl9pZCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG1lbWNnIFxcdTAwMjZcXHUwMDI2ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKSB7XFxubW0vc2hyaW5rZXIuYy0yMDgtXFx0XFx0c3RydWN0IHNocmlua2VyX2luZm8gKmluZm87XFxuLS1cXG5tbS9zaHJpbmtlci5jLTIxMS1cXHRcXHRpbmZvID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdLVxcdTAwM2VzaHJpbmtlcl9pbmZvKTtcXG5tbS9zaHJpbmtlci5jOjIxMjpcXHRcXHRpZiAoIVdBUk5fT05fT05DRShzaHJpbmtlcl9pZCBcXHUwMDNlPSBpbmZvLVxcdTAwM2VtYXBfbnJfbWF4KSkge1xcbm1tL3Nocmlua2VyLmMtMjEzLVxcdFxcdFxcdHN0cnVjdCBzaHJpbmtlcl9pbmZvX3VuaXQgKnVuaXQ7XFxubW0vc2hyaW5rZXIuYy0yMTQtXFxubW0vc2hyaW5rZXIuYzoyMTU6XFx0XFx0XFx0dW5pdCA9IGluZm8tXFx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXJfaWQpXTtcXG5tbS9zaHJpbmtlci5jLTIxNi1cXHRcXHRcXHQvKiBQYWlycyB3aXRoIHNtcCBtYiBpbiBzaHJpbmtfc2xhYigpICovXFxubW0vc2hyaW5rZXIuYy0yMTctXFx0XFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxubW0vc2hyaW5rZXIuYzoyMTg6XFx0XFx0XFx0c2V0X2JpdChzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXJfaWQpLCB1bml0LVxcdTAwM2VtYXApO1xcbm1tL3Nocmlua2VyLmMtMjE5LVxcdFxcdH1cXG4tLVxcbm1tL3Nocmlua2VyLmMtMjIzLVxcbm1tL3Nocmlua2VyLmM6MjI0OnN0YXRpYyBERUZJTkVfSURSKHNocmlua2VyX2lkcik7XFxubW0vc2hyaW5rZXIuYy0yMjUtXFxubW0vc2hyaW5rZXIuYz0yMjY9c3RhdGljIGludCBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vc2hyaW5rZXIuYy0yMzUtXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzaHJpbmtlcl9tdXRleCk7XFxubW0vc2hyaW5rZXIuYzoyMzY6XFx0aWQgPSBpZHJfYWxsb2MoXFx1MDAyNnNocmlua2VyX2lkciwgc2hyaW5rZXIsIDAsIDAsIEdGUF9LRVJORUwpO1xcbm1tL3Nocmlua2VyLmMtMjM3LVxcdGlmIChpZCBcXHUwMDNjIDApXFxuLS1cXG5tbS9zaHJpbmtlci5jLTI0MS1cXHRcXHRpZiAoZXhwYW5kX3Nocmlua2VyX2luZm8oaWQpKSB7XFxubW0vc2hyaW5rZXIuYzoyNDI6XFx0XFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2c2hyaW5rZXJfaWRyLCBpZCk7XFxubW0vc2hyaW5rZXIuYy0yNDMtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5tbS9zaHJpbmtlci5jPTI1MD1zdGF0aWMgdm9pZCBzaHJpbmtlcl9tZW1jZ19yZW1vdmUoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjU3LVxcbm1tL3Nocmlua2VyLmM6MjU4OlxcdGlkcl9yZW1vdmUoXFx1MDAyNnNocmlua2VyX2lkciwgaWQpO1xcbm1tL3Nocmlua2VyLmMtMjU5LX1cXG4tLVxcbm1tL3Nocmlua2VyLmM9MjYxPXN0YXRpYyBsb25nIHhjaGdfbnJfZGVmZXJyZWRfbWVtY2coaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMjY5LVxcdGluZm8gPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZXNocmlua2VyX2luZm8pO1xcbm1tL3Nocmlua2VyLmM6MjcwOlxcdHVuaXQgPSBpbmZvLVxcdTAwM2V1bml0W3Nocmlua2VyX2lkX3RvX2luZGV4KHNocmlua2VyLVxcdTAwM2VpZCldO1xcbm1tL3Nocmlua2VyLmM6MjcxOlxcdG5yX2RlZmVycmVkID0gYXRvbWljX2xvbmdfeGNoZyhcXHUwMDI2dW5pdC1cXHUwMDNlbnJfZGVmZXJyZWRbc2hyaW5rZXJfaWRfdG9fb2Zmc2V0KHNocmlua2VyLVxcdTAwM2VpZCldLCAwKTtcXG5tbS9zaHJpbmtlci5jLTI3Mi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9Mjc3PXN0YXRpYyBsb25nIGFkZF9ucl9kZWZlcnJlZF9tZW1jZyhsb25nIG5yLCBpbnQgbmlkLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYy0yODUtXFx0aW5mbyA9IHJjdV9kZXJlZmVyZW5jZShtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlc2hyaW5rZXJfaW5mbyk7XFxubW0vc2hyaW5rZXIuYzoyODY6XFx0dW5pdCA9IGluZm8tXFx1MDAzZXVuaXRbc2hyaW5rZXJfaWRfdG9faW5kZXgoc2hyaW5rZXItXFx1MDAzZWlkKV07XFxubW0vc2hyaW5rZXIuYy0yODctXFx0bnJfZGVmZXJyZWQgPVxcbm1tL3Nocmlua2VyLmM6Mjg4OlxcdFxcdGF0b21pY19sb25nX2FkZF9yZXR1cm4obnIsIFxcdTAwMjZ1bml0LVxcdTAwM2Vucl9kZWZlcnJlZFtzaHJpbmtlcl9pZF90b19vZmZzZXQoc2hyaW5rZXItXFx1MDAzZWlkKV0pO1xcbm1tL3Nocmlua2VyLmMtMjg5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubW0vc2hyaW5rZXIuYz0yOTQ9dm9pZCByZXBhcmVudF9zaHJpbmtlcl9kZWZlcnJlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTMwNi1cXHRcXHRwYXJlbnRfaW5mbyA9IHNocmlua2VyX2luZm9fcHJvdGVjdGVkKHBhcmVudCwgbmlkKTtcXG5tbS9zaHJpbmtlci5jOjMwNzpcXHRcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBzaHJpbmtlcl9pZF90b19pbmRleChjaGlsZF9pbmZvLVxcdTAwM2VtYXBfbnJfbWF4KTsgaW5kZXgrKykge1xcbm1tL3Nocmlua2VyLmMtMzA4LVxcdFxcdFxcdGNoaWxkX3VuaXQgPSBjaGlsZF9pbmZvLVxcdTAwM2V1bml0W2luZGV4XTtcXG4tLVxcbm1tL3Nocmlua2VyLmM9NDc2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01MDItXFx0ICogICAgICAgICAgUkNVIGxvY2suXFxubW0vc2hyaW5rZXIuYzo1MDM6XFx0ICogIHN0ZXAgMzogdHJhdmVyc2UgdGhlIGJpdG1hcCBhbmQgY2FsY3VsYXRlIHNocmlua2VyX2lkXFxubW0vc2hyaW5rZXIuYy01MDQtXFx0ICogIHN0ZXAgNDogdXNlIHJjdV9yZWFkX2xvY2soKSB0byBndWFyYW50ZWUgZXhpc3RlbmNlIG9mIHRoZSBzaHJpbmtlci5cXG5tbS9zaHJpbmtlci5jOjUwNTpcXHQgKiAgc3RlcCA1OiB1c2Ugc2hyaW5rZXJfaWQgdG8gZmluZCB0aGUgc2hyaW5rZXIsIHRoZW4gdXNlXFxubW0vc2hyaW5rZXIuYy01MDYtXFx0ICogICAgICAgICAgc2hyaW5rZXJfdHJ5X2dldCgpIHRvIGd1YXJhbnRlZSBleGlzdGVuY2Ugb2YgdGhlIHNocmlua2VyLFxcbi0tXFxubW0vc2hyaW5rZXIuYy01MjYtXFxubW0vc2hyaW5rZXIuYzo1Mjc6XFx0aWYgKGluZGV4IFxcdTAwM2Mgc2hyaW5rZXJfaWRfdG9faW5kZXgoaW5mby1cXHUwMDNlbWFwX25yX21heCkpIHtcXG5tbS9zaHJpbmtlci5jLTUyOC1cXHRcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mb191bml0ICp1bml0O1xcbi0tXFxubW0vc2hyaW5rZXIuYy01NDAtXFx0XFx0XFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcjtcXG5tbS9zaHJpbmtlci5jOjU0MTpcXHRcXHRcXHRpbnQgc2hyaW5rZXJfaWQgPSBjYWxjX3Nocmlua2VyX2lkKGluZGV4LCBvZmZzZXQpO1xcbm1tL3Nocmlua2VyLmMtNTQyLVxcbm1tL3Nocmlua2VyLmMtNTQzLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9zaHJpbmtlci5jOjU0NDpcXHRcXHRcXHRzaHJpbmtlciA9IGlkcl9maW5kKFxcdTAwMjZzaHJpbmtlcl9pZHIsIHNocmlua2VyX2lkKTtcXG5tbS9zaHJpbmtlci5jLTU0NS1cXHRcXHRcXHRpZiAodW5saWtlbHkoIXNocmlua2VyIHx8ICFzaHJpbmtlcl90cnlfZ2V0KHNocmlua2VyKSkpIHtcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTgyLVxcdFxcdFxcdFxcdGVsc2VcXG5tbS9zaHJpbmtlci5jOjU4MzpcXHRcXHRcXHRcXHRcXHRzZXRfc2hyaW5rZXJfYml0KG1lbWNnLCBuaWQsIHNocmlua2VyX2lkKTtcXG5tbS9zaHJpbmtlci5jLTU4NC1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjAwLjUyOTQ3Mjc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzczODMzMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBTaHJpbmtlciBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgYHNocmlua2VyYCBvYmplY3Qgd29ya3MsIHNwZWNpZmljYWxseSBhdCBpdHMgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIHdlIGNhbGwgYHNocmlua2VyX2FsbG9jYD8gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoZW4sIHNpbmNlIGFsbG9jYXRpb24gaXMgdXN1YWxseSBmb2xsb3dlZCBieSByZWdpc3RyYXRpb24gb2Ygc29tZSBzb3J0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBzaHJpbmtlcl9yZWdpc3RlcmAgYXMgd2VsbC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMgd2lsbCBsaWtlbHkgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gSXQncyBhbGwgYWJvdXQgdHJhY2tpbmcgdGhlIGxpZmVjeWNsZSwgYW5kIHRob3NlIGFyZSB0aGUgcG9pbnRzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI3NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjAyLjMwMzMwODQ1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMDcyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rZXJfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgyPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy0zODMte1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzg0OlxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFxcXCJ0aHAtemVyb1xcXCIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzg1LVxcdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNjQ9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTEwNjUte1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTA2NjpcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA2Ny1cXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXFxuLS1cXG5tbS9zaHJpbmtlci5jPTYyND11bnNpZ25lZCBsb25nIHNocmlua19zbGFiKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9zaHJpbmtlci5jLTY4Ny1cXG5tbS9zaHJpbmtlci5jOjY4ODpzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyX2FsbG9jKHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxubW0vc2hyaW5rZXIuYy02ODkte1xcbi0tXFxubW0vc2hyaW5rZXIuYy03NDYtfVxcbm1tL3Nocmlua2VyLmM6NzQ3OkVYUE9SVF9TWU1CT0xfR1BMKHNocmlua2VyX2FsbG9jKTtcXG5tbS9zaHJpbmtlci5jLTc0OC1cXG5tbS9zaHJpbmtlci5jPTc0OT12b2lkIHNocmlua2VyX3JlZ2lzdGVyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9zaHJpbmtlci5jLTc1MS1cXHRpZiAodW5saWtlbHkoIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9BTExPQ0FURUQpKSkge1xcbm1tL3Nocmlua2VyLmM6NzUyOlxcdFxcdHByX3dhcm4oXFxcIk11c3QgdXNlIHNocmlua2VyX2FsbG9jKCkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIHNocmlua2VyXFxcIik7XFxubW0vc2hyaW5rZXIuYy03NTMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMjQ0PXZvaWQgX19pbml0IGt2ZnJlZV9yY3VfaW5pdCh2b2lkKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMjg0LVxcbm1tL3NsYWJfY29tbW9uLmM6MjI4NTpcXHRrZnJlZV9yY3Vfc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcXFwic2xhYi1rdmZyZWUtcmN1XFxcIik7XFxubW0vc2xhYl9jb21tb24uYy0yMjg2LVxcdGlmICgha2ZyZWVfcmN1X3Nocmlua2VyKSB7XFxuLS1cXG5tbS92bWFsbG9jLmM9NTU0Nz12b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NTk3LVxcbm1tL3ZtYWxsb2MuYzo1NTk4OlxcdHZtYXBfbm9kZV9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFxcXCJ2bWFwLW5vZGVcXFwiKTtcXG5tbS92bWFsbG9jLmMtNTU5OS1cXHRpZiAoIXZtYXBfbm9kZV9zaHJpbmtlcikge1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTc5Mz1zdGF0aWMgaW50IF9faW5pdCB3b3JraW5nc2V0X2luaXQodm9pZClcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy04MTgtXFxubW0vd29ya2luZ3NldC5jOjgxOTpcXHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL3dvcmtpbmdzZXQuYy04MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFNIUklOS0VSX01FTUNHX0FXQVJFLFxcbi0tXFxubW0venNtYWxsb2MuYz0yMTgyPXN0YXRpYyBpbnQgenNfcmVnaXN0ZXJfc2hyaW5rZXIoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXFxubW0venNtYWxsb2MuYy0yMTgzLXtcXG5tbS96c21hbGxvYy5jOjIxODQ6XFx0cG9vbC1cXHUwMDNlc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCBcXFwibW0tenNwb29sOiVzXFxcIiwgcG9vbC1cXHUwMDNlbmFtZSk7XFxubW0venNtYWxsb2MuYy0yMTg1LVxcdGlmICghcG9vbC1cXHUwMDNlc2hyaW5rZXIpXFxuLS1cXG5tbS96c3dhcC5jPTEyNTE9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTI1NS1cXHRzaHJpbmtlciA9XFxubW0venN3YXAuYzoxMjU2OlxcdFxcdHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfCBTSFJJTktFUl9NRU1DR19BV0FSRSwgXFxcIm1tLXpzd2FwXFxcIik7XFxubW0venN3YXAuYy0xMjU3LVxcdGlmICghc2hyaW5rZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjAyLjM1MjMyMTAxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc2MTM1Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDY4NSB0aHJvdWdoIDc2NSBvZiBgbW0vc2hyaW5rZXIuY2AuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHNocmlua2VyIGZ1bmN0aW9uYWxpdHkuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIHByb2JhYmx5IGludm9sdmVzIHJlY2xhaW1pbmcgb3IgcmVsZWFzaW5nIGNhY2hlZCBwYWdlcyBmcm9tIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZSBvciBzb21lIG90aGVyIGtlcm5lbCBldmVudC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gcGFnZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLCBjb25zaWRlcmF0aW9ucyBmb3IgZGlydHkgcGFnZXMsIGFuZCBwZXJoYXBzIHNvbWUgbG9naWMgYXJvdW5kIHdoYXQga2luZCBvZiBwYWdlcyBhcmUgdGFyZ2V0ZWQgZm9yIGV2aWN0aW9uIChlLmcuLCBmaWxlLWJhY2tlZCB2cy4gYW5vbnltb3VzKS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZSBzaHJpbmtlciBwcmlvcml0aXplcyB3aGljaCBwYWdlcyB0byByZWNsYWltLCB0aGUgYmFsYW5jaW5nIGFjdCBiZXR3ZWVuIGZyZWVpbmcgbWVtb3J5IGFuZCBhdm9pZGluZyBleGNlc3NpdmUgSS9PLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHN0cmF0ZWdpZXMgZW1wbG95ZWQgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLCB3aGljaCB3aWxsIGhlbHAgbWUgcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBhbHNvIHJlYWR5IHRvIGNyaXRpY2FsbHkgYXNzZXNzIHRoZSBkZXNpZ24gY2hvaWNlcyBhbmQgYW50aWNpcGF0ZSBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMDoyMTowNC44Mjg0NTg3NjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Nocmlua2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjg1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjg1OlxcdFxcdHJldHVybiBmcmVlZDtcXG4gNjg2OlxcdH1cXG4gNjg3OlxcdFxcbiA2ODg6XFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiA2ODk6XFx0e1xcbiA2OTA6XFx0XFx0c3RydWN0IHNocmlua2VyICpzaHJpbmtlcjtcXG4gNjkxOlxcdFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiA2OTI6XFx0XFx0dmFfbGlzdCBhcDtcXG4gNjkzOlxcdFxcdGludCBlcnI7XFxuIDY5NDpcXHRcXG4gNjk1OlxcdFxcdHNocmlua2VyID0ga3phbGxvY19vYmooc3RydWN0IHNocmlua2VyKTtcXG4gNjk2OlxcdFxcdGlmICghc2hyaW5rZXIpXFxuIDY5NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0dmFfc3RhcnQoYXAsIGZtdCk7XFxuIDcwMDpcXHRcXHRlcnIgPSBzaHJpbmtlcl9kZWJ1Z2ZzX25hbWVfYWxsb2Moc2hyaW5rZXIsIGZtdCwgYXApO1xcbiA3MDE6XFx0XFx0dmFfZW5kKGFwKTtcXG4gNzAyOlxcdFxcdGlmIChlcnIpXFxuIDcwMzpcXHRcXHRcXHRnb3RvIGVycl9uYW1lO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRzaHJpbmtlci1cXHUwMDNlZmxhZ3MgPSBmbGFncyB8IFNIUklOS0VSX0FMTE9DQVRFRDtcXG4gNzA2OlxcdFxcdHNocmlua2VyLVxcdTAwM2VzZWVrcyA9IERFRkFVTFRfU0VFS1M7XFxuIDcwNzpcXHRcXG4gNzA4OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNIUklOS0VSX01FTUNHX0FXQVJFKSB7XFxuIDcwOTpcXHRcXHRcXHRlcnIgPSBzaHJpbmtlcl9tZW1jZ19hbGxvYyhzaHJpbmtlcik7XFxuIDcxMDpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9TWVMpIHtcXG4gNzExOlxcdFxcdFxcdFxcdC8qIE1lbWNnIGlzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlci4gKi9cXG4gNzEyOlxcdFxcdFxcdFxcdHNocmlua2VyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+U0hSSU5LRVJfTUVNQ0dfQVdBUkU7XFxuIDcxMzpcXHRcXHRcXHRcXHRnb3RvIG5vbl9tZW1jZztcXG4gNzE0OlxcdFxcdFxcdH1cXG4gNzE1OlxcdFxcbiA3MTY6XFx0XFx0XFx0aWYgKGVycilcXG4gNzE3OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZsYWdzO1xcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHRcXHRyZXR1cm4gc2hyaW5rZXI7XFxuIDcyMDpcXHRcXHR9XFxuIDcyMTpcXHRcXG4gNzIyOlxcdG5vbl9tZW1jZzpcXG4gNzIzOlxcdFxcdC8qXFxuIDcyNDpcXHRcXHQgKiBUaGUgbnJfZGVmZXJyZWQgaXMgYXZhaWxhYmxlIG9uIHBlciBtZW1jZyBsZXZlbCBmb3IgbWVtY2cgYXdhcmVcXG4gNzI1OlxcdFxcdCAqIHNocmlua2Vycywgc28gb25seSBhbGxvY2F0ZSBucl9kZWZlcnJlZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxcbiA3MjY6XFx0XFx0ICogIC0gbm9uLW1lbWNnLWF3YXJlIHNocmlua2Vyc1xcbiA3Mjc6XFx0XFx0ICogIC0gIUNPTkZJR19NRU1DR1xcbiA3Mjg6XFx0XFx0ICogIC0gbWVtY2cgaXMgZGlzYWJsZWQgYnkga2VybmVsIGNvbW1hbmQgbGluZVxcbiA3Mjk6XFx0XFx0ICogIC0gbm9uLXNsYWIgc2hyaW5rZXJzOiB3aGVuIG1lbWNnIGttZW0gaXMgZGlzYWJsZWRcXG4gNzMwOlxcdFxcdCAqL1xcbiA3MzE6XFx0XFx0c2l6ZSA9IHNpemVvZigqc2hyaW5rZXItXFx1MDAzZW5yX2RlZmVycmVkKTtcXG4gNzMyOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNIUklOS0VSX05VTUFfQVdBUkUpXFxuIDczMzpcXHRcXHRcXHRzaXplICo9IG5yX25vZGVfaWRzO1xcbiA3MzQ6XFx0XFxuIDczNTpcXHRcXHRzaHJpbmtlci1cXHUwMDNlbnJfZGVmZXJyZWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbiA3MzY6XFx0XFx0aWYgKCFzaHJpbmtlci1cXHUwMDNlbnJfZGVmZXJyZWQpXFxuIDczNzpcXHRcXHRcXHRnb3RvIGVycl9mbGFncztcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0cmV0dXJuIHNocmlua2VyO1xcbiA3NDA6XFx0XFxuIDc0MTpcXHRlcnJfZmxhZ3M6XFxuIDc0MjpcXHRcXHRzaHJpbmtlcl9kZWJ1Z2ZzX25hbWVfZnJlZShzaHJpbmtlcik7XFxuIDc0MzpcXHRlcnJfbmFtZTpcXG4gNzQ0OlxcdFxcdGtmcmVlKHNocmlua2VyKTtcXG4gNzQ1OlxcdFxcdHJldHVybiBOVUxMO1xcbiA3NDY6XFx0fVxcbiA3NDc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2hyaW5rZXJfYWxsb2MpO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHR2b2lkIHNocmlua2VyX3JlZ2lzdGVyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuIDc1MDpcXHR7XFxuIDc1MTpcXHRcXHRpZiAodW5saWtlbHkoIShzaHJpbmtlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSFJJTktFUl9BTExPQ0FURUQpKSkge1xcbiA3NTI6XFx0XFx0XFx0cHJfd2FybihcXFwiTXVzdCB1c2Ugc2hyaW5rZXJfYWxsb2MoKSB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgc2hyaW5rZXJcXFwiKTtcXG4gNzUzOlxcdFxcdFxcdHJldHVybjtcXG4gNzU0OlxcdFxcdH1cXG4gNzU1OlxcdFxcbiA3NTY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbiA3NTc6XFx0XFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNnNocmlua2VyLVxcdTAwM2VsaXN0LCBcXHUwMDI2c2hyaW5rZXJfbGlzdCk7XFxuIDc1ODpcXHRcXHRzaHJpbmtlci1cXHUwMDNlZmxhZ3MgfD0gU0hSSU5LRVJfUkVHSVNURVJFRDtcXG4gNzU5OlxcdFxcdHNocmlua2VyX2RlYnVnZnNfYWRkKHNocmlua2VyKTtcXG4gNzYwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2hyaW5rZXJfbXV0ZXgpO1xcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnNocmlua2VyLVxcdTAwM2Vkb25lKTtcXG4gNzYzOlxcdFxcdC8qXFxuIDc2NDpcXHRcXHQgKiBOb3cgdGhlIHNocmlua2VyIGlzIGZ1bGx5IHNldCB1cCwgdGFrZSB0aGUgZmlyc3QgcmVmZXJlbmNlIHRvIGl0IHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAwOjIxOjA0LjgyODU3MzA5M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDUzMjUwMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBTaHJpbmtlciBJRCBJbml0aWFsaXphdGlvbiBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoaXMgcGF0Y2ggaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoZXRoZXIgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyBuZWVkZWQgaGVyZS4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgbHJ1LVx1MDAzZXNocmlua2VyX2lkYCBmaWVsZCB3aXRoaW4gdGhlIGBsaXN0X2xydWAgc3RydWN0dXJlLCBhbmQgaG93IGl0J3MgYmVpbmcgc2V0IGluIHJlbGF0aW9uIHRvIGBzaHJpbmtlcmAgb2JqZWN0cywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhpczogdGhlIHBhdGNoIGNoYW5nZXMgaG93IGBscnUtXHUwMDNlc2hyaW5rZXJfaWRgIGlzIHNldC4gUHJldmlvdXNseSwgaXQgd2FzIHNpbXBseSBgbHJ1LVx1MDAzZXNocmlua2VyX2lkID0gc2hyaW5rZXItXHUwMDNlaWRgIGlmIGBzaHJpbmtlcmAgd2FzIG5vdCBOVUxMLiBIb3dldmVyLCBpZiB0aGUgYHNocmlua2VyYCB3YXMgYWxsb2NhdGVkIGJ1dCB0aGVuIGZlbGwgYmFjayB0byBiZWluZyBub24tbWVtY2ctYXdhcmUgKGR1ZSB0byBzb21ldGhpbmcgbGlrZSBtZW1vcnkgY2dyb3VwIGJlaW5nIGRpc2FibGVkKSwgaXRzIElEIHJlbWFpbmVkIGF0IHRoZSBkZWZhdWx0IHplcm8gKGJlY2F1c2Ugb2YgYGt6YWxsb2Nfb2JqYCkuIFRoZSBwcm9ibGVtYXRpYyBjb2RlIHVzZXMgdGhpcyB6ZXJvIHZhbHVlIGFzIGFuIGFjdHVhbCBpZCBvZiBzaHJpbmtlci5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGBzaHJpbmtlci1cdTAwM2VpZGAgaXMgZ2V0dGluZyBzZXQgdG8gemVybyBhbmQgdGhlbiBpdCBlbmRzIHVwIGJlaW5nIGEgdmFsaWQgaWQgaW4gdGhlIHN5c3RlbS4gVGhlIGZpeCBpcyB0byBhZGQgYSBjb25kaXRpb246IGBpZiAoc2hyaW5rZXIgXHUwMDI2XHUwMDI2IChzaHJpbmtlci1cdTAwM2VmbGFncyBcdTAwMjYgU0hSSU5LRVJfTUVNQ0dfQVdBUkUpKWAuIFRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgbWVtY2ctYXdhcmUgc2hyaW5rZXJzIGdldCB0aGVpciBgaWRgIGFzc2lnbmVkLiBOb24tbWVtY2cgYXdhcmUgc2hyaW5rZXJzIHdpbGwgaGF2ZSB0aGVpciBgbHJ1LVx1MDAzZXNocmlua2VyX2lkYCBzZXQgdG8gLTEsIHdoaWNoIHByZXZlbnRzIHRoZSBpbmNvcnJlY3QgdXNlIG9mIHRoZSB6ZXJvIElEIHZhbHVlLlxuXG5TbywgbGV0J3MgZXZhbHVhdGU6XG5cbjEuICAqKkRvZXMgdGhpcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqIE5vLiBUaGUgYHNocmlua2VyYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBieSBga3phbGxvY19vYmpgLCBhbmQgdGhlIGBzaHJpbmtlci1cdTAwM2VmbGFnc2AgZmllbGQgaXMgZXhwbGljaXRseSBzZXQgYWZ0ZXJ3YXJkIGluIGBzaHJpbmtlcl9hbGxvYygpYC4gVGhlIHZhbHVlIDAgbWlnaHQgYmUgXCJzdGFsZVwiIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJ3QgcmVwcmVzZW50IGEgdmFsaWQgbWVtY2ctYXdhcmUgc2hyaW5rZXIsIGJ1dCBpdCdzIG5vdCB1bmluaXRpYWxpemVkLlxuXG4yLiAgKipEb2VzIGl0IGNvcHkgZGF0YSB0byB1c2Vyc3BhY2U/KiogTm8sIHRoZXJlIGFyZSBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB0aGUgdXNlciBpbiB0aGlzIGNvZGUuXG5cbjMuICAqKkRvZXMgaXQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgbG9naWNhbCBjb25kaXRpb24gdG8gY2hlY2sgYHNocmlua2VyLVx1MDAzZWZsYWdzYCBidXQgdGhlIG1lbW9yeSBpcyBub3QgdW5pbml0aWFsaXplZC5cblxuNC4gICoqRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby5cblxuNS4gICoqRG9lcyBpdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOPyoqIE5vLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG5cbiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUuXG4qICAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIEFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG4qICAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgcmVhZHM6KiogTm9wZS5cbiogICAqKkJvdW5kcyBjaGVjayBpc3N1ZXM6KiogTm9wZS5cblxuVGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZyBpcyB0aGF0IHRoZSB6ZXJvIElEIHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGdvdCBwYXNzZWQgYXMgaWYgdmFsaWQuIFRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhpcyBhcyBhIFwic3RhbGUgMFwiLiBUaGlzIGlzbid0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gS01TQU4ncyBwZXJzcGVjdGl2ZTsgaXQncyBhICpsb2dpY2FsKiBlcnJvci4gVGhlIElEIDAgaXMgYSB2YWxpZCBJRCBmb3IgYW5vdGhlciBzaHJpbmtlci5cblxuTXkgY29uY2x1c2lvbjogVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBsb2dpYy9zdGF0ZSBjb25zaXN0ZW5jeSBidWcuIEtBU0FOIGFuZCBnZW5lcmFsIGZ1enppbmcgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgZXJyb3JzIHJlc3VsdGluZyBmcm9tIHRoaXMgaXNzdWUuIEtNU0FOIGlzIG5vdCByZWxldmFudCBoZXJlIGFzIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkyNywiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDA6MjE6MTMuODgxODI1MzA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGxydS1cXHUwMDNlc2hyaW5rZXJfaWRgIGluIGBfX2xpc3RfbHJ1X2luaXQoKWAgdG8gY2hlY2sgd2hldGhlciB0aGUgc2hyaW5rZXIgYWN0dWFsbHkgaGFzIHRoZSBgU0hSSU5LRVJfTUVNQ0dfQVdBUkVgIGZsYWcgc2V0IGJlZm9yZSB1c2luZyBgc2hyaW5rZXItXFx1MDAzZWlkYCwgYXNzaWduaW5nIC0xIG90aGVyd2lzZS4gXFxuXFxuQWxsIHJlbGV2YW50IHN0cnVjdHVyZXMgKGBzdHJ1Y3Qgc2hyaW5rZXJgIGFuZCBgc3RydWN0IGxpc3RfbHJ1YCkgYXJlIGFsbG9jYXRlZCB1c2luZyB6ZXJvaW5nIGFsbG9jYXRvcnMgKGBremFsbG9jX29iamAsIGV0Yy4pLCBhbmQgYWxsIGZpZWxkcyBhY2Nlc3NlZCAoYHNocmlua2VyLVxcdTAwM2VmbGFnc2AsIGBzaHJpbmtlci1cXHUwMDNlaWRgKSBhcmUgd2VsbC1kZWZpbmVkIGFuZCBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyBhIGxvZ2ljYWwgYnVnIHdoZXJlIHRoZSBkZWZhdWx0IHplcm8gdmFsdWUgKGBpZCA9IDBgKSBvZiBhIG5vbi1tZW1jZyBzaHJpbmtlciB3YXMgZXJyb25lb3VzbHkgaW50ZXJwcmV0ZWQgYXMgYSB2YWxpZCBJRCAoMCkgaW5zdGVhZCBvZiBhbiBpbnZhbGlkIElEICgtMSksIGxlYWRpbmcgdG8gc3B1cmlvdXMgY2FsbHMgdG8gYHNldF9zaHJpbmtlcl9iaXQoKWAuIFxcblxcblRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkLCBubyBtZW1vcnkgZXhwb3N1cmUgdG8gdXNlcnNwYWNlLCBhbmQgbm8gYWx0ZXJlZCBkYXRhIGxlbmd0aCBvciBib3VuZHMgY2hlY2sgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBscnUtXFx1MDAzZXNocmlua2VyX2lkYCBpbiBgX19saXN0X2xydV9pbml0KClgIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNocmlua2VyIGFjdHVhbGx5IGhhcyB0aGUgYFNIUklOS0VSX01FTUNHX0FXQVJFYCBmbGFnIHNldCBiZWZvcmUgdXNpbmcgYHNocmlua2VyLVxcdTAwM2VpZGAsIGFzc2lnbmluZyAtMSBvdGhlcndpc2UuIFxcblxcbkFsbCByZWxldmFudCBzdHJ1Y3R1cmVzIChgc3RydWN0IHNocmlua2VyYCBhbmQgYHN0cnVjdCBsaXN0X2xydWApIGFyZSBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBhbGxvY2F0b3JzIChga3phbGxvY19vYmpgLCBldGMuKSwgYW5kIGFsbCBmaWVsZHMgYWNjZXNzZWQgKGBzaHJpbmtlci1cXHUwMDNlZmxhZ3NgLCBgc2hyaW5rZXItXFx1MDAzZWlkYCkgYXJlIHdlbGwtZGVmaW5lZCBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBiZWluZyBhZGRyZXNzZWQgaXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSB0aGUgZGVmYXVsdCB6ZXJvIHZhbHVlIChgaWQgPSAwYCkgb2YgYSBub24tbWVtY2cgc2hyaW5rZXIgd2FzIGVycm9uZW91c2x5IGludGVycHJldGVkIGFzIGEgdmFsaWQgSUQgKDApIGluc3RlYWQgb2YgYW4gaW52YWxpZCBJRCAoLTEpLCBsZWFkaW5nIHRvIHNwdXJpb3VzIGNhbGxzIHRvIGBzZXRfc2hyaW5rZXJfYml0KClgLiBcXG5cXG5UaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZCwgbm8gbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGFsdGVyZWQgZGF0YSBsZW5ndGggb3IgYm91bmRzIGNoZWNrIGludm9sdmluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6fbtb[1] Phase: Succeeded StartedAt: 2026-09-02 00:21:50 +0000 UTC FinishedAt: 2026-09-02 00:21:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 00:21:50 +0000 UTC FinishedAt: 2026-09-02 00:21:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2] Phase: Succeeded StartedAt: 2026-09-02 00:21:50 +0000 UTC FinishedAt: 2026-09-02 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 00:21:50 +0000 UTC FinishedAt: 2026-09-02 04:03:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 00:21:50 +0000 UTC FinishedAt: 2026-09-02 00:22:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 00:21:50 +0000 UTC FinishedAt: 2026-09-02 00:21:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow6fbtb/series-workflow6fbtb-convert-artifact-1222226213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 00:22:00 +0000 UTC FinishedAt: 2026-09-02 00:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 00:22:00 +0000 UTC FinishedAt: 2026-09-02 00:41:57 +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:*484d7c0a-1746-4e44-8b33-cac6428471b8,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-workflow6fbtb/series-workflow6fbtb-convert-artifact-1222226213/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": "310f9255-16e7-41fa-95d8-3c87566c02d8", "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-workflow6fbtb/series-workflow6fbtb-build-action-955092299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 00:22:00 +0000 UTC FinishedAt: 2026-09-02 00:41:47 +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:*484d7c0a-1746-4e44-8b33-cac6428471b8,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-workflow6fbtb/series-workflow6fbtb-convert-artifact-1222226213/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": "310f9255-16e7-41fa-95d8-3c87566c02d8", "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-workflow6fbtb/series-workflow6fbtb-build-action-955092299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 00:41:57 +0000 UTC FinishedAt: 2026-09-02 00:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 00:41:57 +0000 UTC FinishedAt: 2026-09-02 00:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 00:41:57 +0000 UTC FinishedAt: 2026-09-02 00:42:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 00:41:57 +0000 UTC FinishedAt: 2026-09-02 00:42:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow6fbtb/series-workflow6fbtb-convert-artifact-3197754368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 00:42:07 +0000 UTC FinishedAt: 2026-09-02 00:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 00:42:07 +0000 UTC FinishedAt: 2026-09-02 00:43:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*310f9255-16e7-41fa-95d8-3c87566c02d8,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-workflow6fbtb/series-workflow6fbtb-build-action-955092299/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-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 00:44:03 +0000 UTC FinishedAt: 2026-09-02 00:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 00:44:03 +0000 UTC FinishedAt: 2026-09-02 00:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 00:44:03 +0000 UTC FinishedAt: 2026-09-02 01:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 00:44:03 +0000 UTC FinishedAt: 2026-09-02 01:00: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:*484d7c0a-1746-4e44-8b33-cac6428471b8,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-workflow6fbtb/series-workflow6fbtb-convert-artifact-3197754368/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": "576d3519-f2ad-4d68-94a1-b6cb5735cb68", "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-workflow6fbtb/series-workflow6fbtb-build-action-948423100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 00:44:03 +0000 UTC FinishedAt: 2026-09-02 01:00: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:*484d7c0a-1746-4e44-8b33-cac6428471b8,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-workflow6fbtb/series-workflow6fbtb-convert-artifact-3197754368/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": "576d3519-f2ad-4d68-94a1-b6cb5735cb68", "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-workflow6fbtb/series-workflow6fbtb-build-action-948423100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 01:00:15 +0000 UTC FinishedAt: 2026-09-02 01:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 01:00:15 +0000 UTC FinishedAt: 2026-09-02 01:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 01:00:15 +0000 UTC FinishedAt: 2026-09-02 01:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 01:00:15 +0000 UTC FinishedAt: 2026-09-02 01:01:55 +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:*576d3519-f2ad-4d68-94a1-b6cb5735cb68,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-workflow6fbtb/series-workflow6fbtb-build-action-948423100/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-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 04:03:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*310f9255-16e7-41fa-95d8-3c87566c02d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*576d3519-f2ad-4d68-94a1-b6cb5735cb68,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-workflow6fbtb/series-workflow6fbtb-build-action-955092299/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-workflow6fbtb/series-workflow6fbtb-build-action-948423100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 01:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 01:02:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6fbtb/series-workflow6fbtb-convert-artifact-3192405337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 01:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 01:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 01:02:05 +0000 UTC FinishedAt: 2026-09-02 01:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 01:02:15 +0000 UTC FinishedAt: 2026-09-02 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6fbtb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__list_lru_init","list_lru_destroy","memcg_reparent_list_lrus","set_shrinker_bit","list_lru_walk_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"d1beda88-3df4-4814-b1a6-c7099cc0f3de","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 01:02:15 +0000 UTC FinishedAt: 2026-09-02 04:03:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*310f9255-16e7-41fa-95d8-3c87566c02d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*576d3519-f2ad-4d68-94a1-b6cb5735cb68,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-workflow6fbtb/series-workflow6fbtb-build-action-955092299/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-workflow6fbtb/series-workflow6fbtb-build-action-948423100/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-workflow6fbtb/series-workflow6fbtb-convert-artifact-3192405337/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,}