Name: series-workflow6j6nl Phase: Succeeded StartedAt: 2026-08-11 09:44:20 +0000 UTC FinishedAt: 2026-08-11 13:31:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[0] Phase: Succeeded StartedAt: 2026-08-11 09:44:20 +0000 UTC FinishedAt: 2026-08-11 09:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 09:44:20 +0000 UTC FinishedAt: 2026-08-11 09:47:47 +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": "1029098ee3275ea5b78e329ce132262affa2f8cc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "1029098ee3275ea5b78e329ce132262affa2f8cc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "c456008a-6ce0-4824-9d60-149b7ee06aa4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "shrink_all_memory", "try_to_free_mem_cgroup_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NDY6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzE5NGRhN2RjYzc5NS4uZWNhNWZmNjQyMzhkZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTQ2NDgsNyAmIzQzOzQ2NDgsNiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdFx0ICAgICAgIGludCB0aWVyX2lkeClcbiB7XG4tXHRib29sIHN1Y2Nlc3M7XG4gXHRpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG5AQCAtNDY2MCwxNiAmIzQzOzQ2NTksNiBAQCBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TLCBmb2xpbyk7XG4gXG4tXHQvKiB1bmV2aWN0YWJsZSAqL1xuLVx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7XG4tXHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbi1cdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tXHRcdGZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xpbyk7XG4tXHRcdGxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuIFx0LyogcHJvbW90ZWQgKi9cbiBcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbiBcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NDY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDMxOTRkYTdkY2M3OTUuLmVjYTVmZjY0MjM4ZGQgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00NjQ4LDcgJiM0Mzs0NjQ4LDYgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwKIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAkJICAgICAgIGludCB0aWVyX2lkeCkKIHsKLQlib29sIHN1Y2Nlc3M7CiAJaW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CkBAIC00NjYwLDE2ICYjNDM7NDY1OSw2IEBAIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jCiAKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZ2VuICZndDs9IE1BWF9OUl9HRU5TLCBmb2xpbyk7CiAKLQkvKiB1bmV2aWN0YWJsZSAqLwotCWlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkgewotCQlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7Ci0JCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwotCQlmb2xpb19zZXRfdW5ldmljdGFibGUoZm9saW8pOwotCQlscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pOwotCQlfX2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR0NVTExFRCwgZGVsdGEpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KIAkvKiBwcm9tb3RlZCAqLwogCWlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pKSB7CiAJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIFVuZXZpY3RhYmxlIEZvbGlvIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgbW0vdm1zY2FuLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSB0YWtpbmcgb3V0IGEgc2VjdGlvbiBvZiBjb2RlIHdpdGhpbiB0aGUgYHNvcnRfZm9saW9gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBwYXJ0IHRoYXQgZGVhbHMgd2l0aCB1bmV2aWN0YWJsZSBmb2xpb3MuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHdoYXQgdGhhdCBibG9jayB3YXMgYWN0dWFsbHkgZG9pbmcuIEFoLCByaWdodC4gSXQgd2FzIGhhbmRsaW5nIHRoZSBzY2VuYXJpbyB3aGVyZSBhIGZvbGlvIGNvdWxkbiYjMzk7dCBiZSBldmljdGVkLgoKSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZDoKCjEuICBDaGVjayBpZiB0aGUgZm9saW8gKndhc24mIzM5O3QqIGV2aWN0YWJsZS4KMi4gIFRoZW4sIGl0JiMzOTtkIHRyeSB0byByZW1vdmUgdGhlIGZvbGlvIGZyb20gdGhlIExSVSBsaXN0IHVzaW5nIGBscnVfZ2VuX2RlbF9mb2xpb2AuIEkmIzM5O2xsIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0cnVlYCBmbGFnIHRoZXJlLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGNhbiBjYXVzZSBzb21lIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLgozLiAgSWYgdGhhdCByZW1vdmFsIGZhaWxlZCwgaXQgd291bGQgdHJpZ2dlciBhIHdhcm5pbmcsIHVzaW5nIGBWTV9XQVJOX09OX09OQ0VfRk9MSU9gLiBUaGF0JiMzOTtzIGEgZ29vZCBzYW5pdHkgY2hlY2s7IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB3ZW50IHdyb25nLgo0LiAgVGhlbiwgaXQgd291bGQgbWFyayB0aGUgZm9saW8gYXMgdW5ldmljdGFibGUgd2l0aCBgZm9saW9fc2V0X3VuZXZpY3RhYmxlYC4KNS4gIEFmdGVyIHRoYXQsIGl0IHdvdWxkIHJlLWFkZCB0aGUgZm9saW8gdG8gdGhlIExSVSB1c2luZyBgbHJ1dmVjX2FkZF9mb2xpb2AuCjYuICBGaW5hbGx5LCBpdCB3b3VsZCB1cGRhdGUgdGhlIGBVTkVWSUNUQUJMRV9QR0NVTExFRGAgY291bnRlci4KClNvLCBpbiBlc3NlbmNlLCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGggdG8gbWFuYWdlIHVuZXZpY3RhYmxlIGZvbGlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbW90aXZhdGlvbiBpcyBmb3IgcmVtb3ZpbmcgdGhpcy4gSXMgaXQgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEEgYnVnIGZpeD8gT3IgaXMgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgbW92ZWQgc29tZXdoZXJlIGVsc2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ydF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ2MTk9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjQ3LVxubW0vdm1zY2FuLmM6NDY0ODpzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy00NjQ5LVx0XHQgICAgICAgaW50IHRpZXJfaWR4KVxuLS1cbm1tL3Ztc2Nhbi5jPTQ3MTc9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00NzU1LVxubW0vdm1zY2FuLmM6NDc1NjpcdFx0XHRpZiAoc29ydF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBzYywgdGllcikpXG5tbS92bXNjYW4uYy00NzU3LVx0XHRcdFx0c29ydGVkICYjNDM7PSBkZWx0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgRm9saW8gRXZpY3Rpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGZvbGlvIG1hbmFnZW1lbnQgc3R1ZmYsIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIGFuZCB0aGlzIGlzIHBhcnQgb2YgdGhlIE1HTFJVLiBOb3csIGBldmljdF9mb2xpb3NgIHNlZW1zIHRvIGJlIGNhbGxpbmcgYHNjYW5fZm9saW9zYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gc2NhbiBzb21ldGhpbmcgdG8gZGVjaWRlIHdoYXQgdG8gZXZpY3QuIFRoZW4gYHNjYW5fZm9saW9zYCBpdHNlbGYgY2FsbHMgYHNvcnRfZm9saW9gLCBhIHN0YXRpYyBmdW5jdGlvbi4gCgpUaGlzIGdpdmVzIG1lIHRoZSBmbG93OiBgZXZpY3RfZm9saW9zYCAtJmd0OyBgc2Nhbl9mb2xpb3NgIC0mZ3Q7IGBzb3J0X2ZvbGlvYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIGNvbmZpZ3VyZWQuIFRoZSBtb3N0IGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIGNoZWNrIHdoZXRoZXIgTUdMUlUgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgaXQmIzM5O3MgYWN0aXZlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIGBldmljdF9mb2xpb3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0cyBhcmUsIGFuZCBob3cgdGhhdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Nhbl9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00NjkzPXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NzE2LVxubW0vdm1zY2FuLmM6NDcxNzpzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDcxOC1cdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXG4tLVxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4NDMtXG5tbS92bXNjYW4uYzo0ODQ0Olx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbm1tL3Ztc2Nhbi5jLTQ4NDUtXHRcdFx0XHQgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgZXZpY3RfZm9saW9zYCBhbmQgYGlzb2xhdGVfZm9saW9zYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHN5c3RlbSBpcyBzaG93aW5nIHNvbWUgdW51c3VhbCBiZWhhdmlvciwgYW5kIG15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHRvIHJldmlzaXQgYGV2aWN0X2ZvbGlvc2AgYW5kIGBpc29sYXRlX2ZvbGlvc2AuIFRoZXNlIGFyZSBjcml0aWNhbCBmdW5jdGlvbnMsIG9mdGVuIHRoZSBsaW5jaHBpbnMgb2YgZWZmaWNpZW50IGZvbGlvIGhhbmRsaW5nLiBJJiMzOTt2ZSBzZWVuIGVub3VnaCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0cmFjZWQgYmFjayB0byBpbmVmZmljaWVudCBmb2xpbyBldmljdGlvbiBvciBpbXByb3BlciBpc29sYXRpb24sIHdoaWNoIGNhbiBjYXNjYWRlIGludG8gc2lnbmlmaWNhbnQgaXNzdWVzLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXMgSSYjMzk7bSBvdmVybG9va2luZy4gSSYjMzk7bGwgZm9jdXMgb24gYW55IHJlY2VudCBjaGFuZ2VzIG9yIGNvbW1pdHMgdGhhdCBoYXZlIHRvdWNoZWQgdGhlc2Ugcm91dGluZXMsIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBiZWVuIGFueSByZWdyZXNzaW9uIG9yIGludHJvZHVjZWQgaW5lZmZpY2llbmN5LiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IHJ1bGUgb3V0IHRoZXNlIGNvbW1vbiBzdXNwZWN0cyBvciBpZGVudGlmeSB0aGUgc21va2luZyBndW4uIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNvbGF0ZV9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00ODEyPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MzAtXG5tbS92bXNjYW4uYzo0ODMxOnN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00ODMyLVx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuLS1cbm1tL3Ztc2Nhbi5jPTQ4NjU9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDg4Ni1cbm1tL3Ztc2Nhbi5jOjQ4ODc6XHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jLTQ4ODgtXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBldmljdF9mb2xpb3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBpcyBwcm9iYWJseSBpbiBhIHN0YXRlIG5vdyB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gcmV2aWV3IGhvdyBmb2xpbyBldmljdGlvbiBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZWZmaWNpZW50LCBnaXZlbiB0aGUgcmVjZW50IGNoYW5nZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZXZpY3RfZm9saW9zYCBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgd2UmIzM5O3JlIGdldHRpbmcgdGhlIGJlaGF2aW9yIHdlIGV4cGVjdCwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcmVncmVzc2lvbnMgb3IgaW5lZmZpY2llbmNpZXMgaW50cm9kdWNlZCB3aXRoIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIHRyaWdnZXJlZCwgdGhlIGV2aWN0aW9uIHN0cmF0ZWd5IGl0c2VsZiAoTFJVLCBjbG9jaywgZXRjLiksIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIEkmIzM5O2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBhIGZldyBjb21tb24gc2NlbmFyaW9zIGFuZCBlZGdlIGNhc2VzIHRvIGVuc3VyZSB0aGUgbG9naWMgaG9sZHMuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgaG90c3BvdHMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiBgZXZpY3RfZm9saW9zYC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGNvbnNpZGVyIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGxvY2tpbmcgY29udGVudGlvbiBvciByZWR1bmRhbnQgb3BlcmF0aW9ucyB0aGF0IGp1bXAgb3V0LiBJdCYjMzk7cyB0aW1lIHRvIHB1dCBvbiBteSBtZW1vcnkgbWFuYWdlbWVudCBoYXQgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00ODMxPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDg2NC1cbm1tL3Ztc2Nhbi5jOjQ4NjU6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00ODY2LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYz01MDQ0PXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA2Ny1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MDY4Olx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MDY5LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU2NzE9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTY5MS1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1NjkyOlx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01NjkzLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UuLi4gd2VsbCwgKkkqIGtub3cgdGhlIGNvZGUuIEl0IGZlZWxzIGxpa2UgdGhpcyBpcyB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIHRoZSBwZXJmb3JtYW5jZSBhbm9tYWx5IHdlJiMzOTtyZSBzZWVpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzaHJpbmtpbmcgbG9naWMgd2l0aGluIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXNuJiMzOTt0IG92ZXJseSBhZ2dyZXNzaXZlLCBvciBpc24mIzM5O3QgZmlyaW5nIHdoZW4gd2UgZG9uJiMzOTt0IGV4cGVjdCBpdCB0by4gV2UmIzM5O3ZlIG9wdGltaXplZCB0aGUgTFJVIGRhdGEgc3RydWN0dXJlLCB0aGUgYWxsb2NhdGlvbiwgdGhlIGRlYWxsb2NhdGlvbiwgYW5kIHRoZSBob3QgcGF0aHMgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBzb3VyY2Ugb2YgcHJvYmxlbXMuIEkgbmVlZCB0byB3YWxrIHRocm91Z2ggdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzaHJpbmthZ2UgYW5kIHRoZSBhY3R1YWwgc2hyaW5raW5nIHByb2Nlc3MgaXRzZWxmLiBJIG5lZWQgdG8gdmVyaWZ5LCAqdGhvcm91Z2hseSosIHRoYXQgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgZHVyaW5nIHRoZSByZXNpemluZyBvcGVyYXRpb24uIEFueSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGNvcGllcyBjb3VsZCBiZSBkaXNhc3Ryb3VzIGhlcmUuIEnigJltIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMg4oCTIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBMUlUgaXMgbmVhcmx5IGVtcHR5PyBXaGVuIGl0JiMzOTtzIGZ1bGw/IFdoZW4gdGhlcmUmIzM5O3MgaGlnaCBjaHVybj8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgYXJlIHdlIGhhbmRsaW5nIGNvbmN1cnJlbnQgYWNjZXNzZXMgZHVyaW5nIHRoZXNlIHNocmluayBvcGVyYXRpb25zPyBUaGlzIGlzIHBvdGVudGlhbGx5IGEgYmlnIGJvdHRsZW5lY2ssIGFuZCBJIG5lZWQgdG8gY29uZmlybSBvdXIgc3luY2hyb25pemF0aW9uIGlzIHJvYnVzdC4gSXQmIzM5O3MgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyDigJMgdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgTFJVIHZlY3RvciYjMzk7cyBpbnRlcm5hbCBzdGF0ZS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCBob2xkcyB1cCB0byBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDA5PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA0My0gKi9cbm1tL3Ztc2Nhbi5jOjUwNDQ6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUwNDUte1xuLS1cbm1tL3Ztc2Nhbi5jPTUwODk9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEwOC1cbm1tL3Ztc2Nhbi5jOjUxMDk6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTExMC1cbi0tXG5tbS92bXNjYW4uYz01MjAwPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMTItXG5tbS92bXNjYW4uYzo1MjEzOlx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTIxNC1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUdMUlUgU2hyaW5raW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGUgc2hyaW5raW5nIHByb2Nlc3Mgd2l0aGluIE1HTFJVLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZzogaXMgTUdMUlUgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byBrbm93IGlmIEkmIzM5O20gZXZlbiBkZWFsaW5nIHdpdGggYSB0eXBpY2FsIG9yIGFuIHVudXN1YWwgc3lzdGVtIHNldHVwIHdoZW4gYW5hbHl6aW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGhlbHAgbWUgY29udGV4dHVhbGl6ZSB0aGUgYmVoYXZpb3IgSSBzZWUgYW5kIGZvY3VzIG15IGF0dGVudGlvbiBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA0LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDExLVxubW0vS2NvbmZpZzoxNDEyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTctXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI2LVxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI4LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZSBmb3IgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSBkZWZpbmVkIGluIHRoaXMgcHJvamVjdC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgZ2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgTFJVIGFsZ29yaXRobXMsIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IHRoZXJlLCB3aGljaCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBLY29uZmlnIHN5bnRheDogYGNvbmZpZyBMUlVfR0VOYCBhbmQgYGNvbmZpZyBMUlVfR0VOX0VOQUJMRURgLCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTQwMTpcdFxuMTQwMjpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDAzOlx0Y29uZmlnIExSVV9HRU5cbjE0MDQ6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwNTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDY6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwNzpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA4Olx0XHRoZWxwXG4xNDA5Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQxMDpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDExOlx0XG4xNDEyOlx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQxMzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxNDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE1Olx0XHRoZWxwXG4xNDE2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTc6XHRcbjE0MTg6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxOTpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MjA6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQyMTpcdFx0aGVscFxuMTQyMjpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MjM6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MjQ6XHRcbjE0MjU6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDI2Olx0XG4xNDI3Olx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDI4Olx0XHRkZWZfYm9vbCB5XG4xNDI5Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtleSBNZW1vcnkgTWFuYWdlbWVudCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYHNvcnRfZm9saW9gIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgY2hhbmdlIHRvIGhvdyB3ZSBoYW5kbGUgdW5ldmljdGFibGUgZm9saW9zLiBTcGVjaWZpY2FsbHksIHRoYXQgd2hvbGUgYmxvY2sgb2YgY29kZSBkZWFsaW5nIHdpdGggdGhlbSBpcyBnb25lLiBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBMUlUgZXZpY3Rpb24gbG9naWMg4oCTIGEgcHJldHR5IHNlbnNpdGl2ZSBhcmVhLCByZWFsbHkuIERlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nLgoKR2l2ZW4gdGhhdCB0aGlzIGRpcmVjdGx5IHRvdWNoZXMgTFJVIGV2aWN0aW9uLCBJIGtub3cgdGhlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgY29uZmlndXJhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB0ZXN0aW5nIHRoaXMgZWZmZWN0aXZlbHkuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9scyB0byB0YXJnZXQgd2l0aCBteSBmdXp6aW5nIGVmZm9ydHMuIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgZXNwZWNpYWxseSBzaW5jZSBgc29ydF9mb2xpb2AsIHdoaWxlIHJlbGV2YW50LCBpcyBzdGF0aWMgYW5kIG1heSB3ZWxsIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBXZSYjMzk7bGwgYWxzbyBjb25zaWRlciBgZXZpY3RfZm9saW9zYCB0b28gYXMgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGlzIGlzIG5vdCBpbmxpbmVkLCBhbHRob3VnaCBpdCYjMzk7cyBhbHNvIHN0YXRpYy4gYHNjYW5fZm9saW9zYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayB0b28uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayBpZiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBpcyBzdGF0aWMsIHdoaWNoIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBmdXp6aW5nIGFwcHJvYWNoIEkgdGFrZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTMwPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTktXG5tbS92bXNjYW4uYzo1MjAwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIwMS17XG4tLVxubW0vdm1zY2FuLmM9NTk0ND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NDgtXG5tbS92bXNjYW4uYzo1OTQ5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTk1MC17XG4tLVxubW0vdm1zY2FuLmM9NTk2MT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk3Mi1cdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYzo1OTczOlx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01OTc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC4KCioqRGVjb25zdHJ1Y3RpbmcgYHNocmlua19scnV2ZWNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHNocmlua19scnV2ZWNgIGZ1bmN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIGl0IGJlY2F1c2UsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBpdCBzZWVtcyB0byBiZSB0aGUgY29yZSBvcGVyYXRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBtZWNoYW5pY3MsIHNwZWNpZmljYWxseSBob3cgaXQgbWFuYWdlcyBzaHJpbmtpbmcgYW4gTFJVIHZlY3Rvci4gSSBpbW1lZGlhdGVseSBzdGFydCBydW5uaW5nIHRocm91Z2ggdGhlIGNvbW1vbiBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBpbiBteSBoZWFkOiBpZGVudGlmeWluZyB0aGUgbW9zdCBlZmZpY2llbnQgbWV0aG9kcyBmb3IgdGhpcyB0YXNrIGluIHRoZSBkb21haW4gb2YgTFJVIGltcGxlbWVudGF0aW9ucy4gSXQgbXVzdCBiZSBhYm91dCBlZmZpY2llbnRseSByZW1vdmluZyBsZWFzdCByZWNlbnRseSB1c2VkIGVsZW1lbnRzIHRvIGZyZWUgdXAgbWVtb3J5LiBXaGF0IGFyZSB0aGUga2V5IGNvbnNpZGVyYXRpb25zPyBJcyBpdCBhYm91dCBzaW1wbHkgZnJlZWluZyBtZW1vcnksIG9yIGlzIGl0IG1vcmUgbnVhbmNlZCB0aGFuIHRoYXQsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGltcGFjdCBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgZXZpY3RlZD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXkgaGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc2ltcGx5IGRlY3JlYXNpbmcgdGhlIHNpemUgb2YgYSB2ZWN0b3IsIG9yIGlzIHRoZXJlIG1vcmUgY29tcGxleCByZS1hcnJhbmdlbWVudD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUwMDk9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQzLSAqL1xubW0vdm1zY2FuLmM6NTA0NDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTA0NS17XG4tLVxubW0vdm1zY2FuLmM9NTA4OT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTA4LVxubW0vdm1zY2FuLmM6NTEwOTpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MTEwLVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMzA9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5OS1cbm1tL3Ztc2Nhbi5jOjUyMDA6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MjAxLXtcbi0tXG5tbS92bXNjYW4uYy01MjEyLVxubW0vdm1zY2FuLmM6NTIxMzpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUyMTQtXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbi0tXG5tbS92bXNjYW4uYz01OTQ0PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk0OC1cbm1tL3Ztc2Nhbi5jOjU5NDk6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTUwLXtcbi0tXG5tbS92bXNjYW4uYz01OTU0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk2MC1cbm1tL3Ztc2Nhbi5jOjU5NjE6c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTk2Mi17XG4tLVxubW0vdm1zY2FuLmMtNTk3Mi1cdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYzo1OTczOlx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01OTc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTYxNTI9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMTEtXG5tbS92bXNjYW4uYzo2MjEyOlx0XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjIxMy1cbi0tXG5tbS92bXNjYW4uYz02ODA3PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgzNy1cdCAqL1xubW0vdm1zY2FuLmM6NjgzODpcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIENvZGUgU3RydWN0dXJlOiBJZGVudGlmeWluZyBQb3RlbnRpYWwgU2NvcGUgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBgc2hyaW5rX2xydXZlY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHdoZXRoZXIgaXQmIzM5O3MgdHJ1bHkgdGhlIGJlc3QgcGxhY2UgZm9yIGl0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgbGltaXRlZCBpbiBpdHMgYWNjZXNzaWJpbGl0eS4gTXkgcHJpbWFyeSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgY2FzdCBhIHdpZGVyIG5ldCBhbmQgaHVudCBmb3IgKm5vbiotc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSBtb3JlIGZsZXhpYmxlIG9yIGdsb2JhbGx5IHJlbGV2YW50IGFwcHJvYWNoIG1pZ2h0IGJlIGJlbmVmaWNpYWwuIFBlcmhhcHMgdGhlcmUgYXJlIHNpbWlsYXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGdlbmVyYWxpemVkLCBvciBwZXJoYXBzIHRoaXMgZnVuY3Rpb24gY291bGQgYmVuZWZpdCBmcm9tIGJyb2FkZXIgdmlzaWJpbGl0eSBvciBldmVuIHNvbWUgZm9ybSBvZiBtb2R1bGFyaXR5LiBUaGlzIHN1Z2dlc3RzIEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY3NjE9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjgwNi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODA3OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODA4LVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHlvdSwgdGhlIHVzZXIsIGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2YgZGV0YWlsOgoKKipUaGlua2luZyBBYm91dCBgdHJ5X3RvX2ZyZWVfcGFnZXNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHRyeV90b19mcmVlX3BhZ2VzYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IHNpbXBseSBhIHV0aWxpdHkgZnVuY3Rpb24sIG9wZXJhdGluZyBpbmRlcGVuZGVudGx5IG9mIGFueSBzcGVjaWZpYyBvYmplY3Qgb3IgbW9kdWxlIHN0YXRlLiBJdCBzdWdnZXN0cyB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgcmVsaWVzIG9uLCBvciBwb3RlbnRpYWxseSBtb2RpZmllcywgZGF0YSB3aXRoaW4gYSBzcGVjaWZpYyBpbnN0YW5jZSBvciBvYmplY3QuIEtub3dpbmcgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgb2JqZWN0IGNvbnRleHQgaXQgb3BlcmF0ZXMgd2l0aGluLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgZm9yIHRoaW5ncyBsaWtlIGNvbmN1cnJlbmN5LCBkYXRhIGludGVncml0eSwgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjUwOD1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1MzgtICovXG5tbS92bXNjYW4uYzo2NTM5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NTQwLVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjc2MC1cbm1tL3Ztc2Nhbi5jOjY3NjE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02NzYyLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY3OTUtXG5tbS92bXNjYW4uYzo2Nzk2Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY3OTctXG4tLVxubW0vdm1zY2FuLmM9Njg0Nz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NzgtXG5tbS92bXNjYW4uYzo2ODc5Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4ODAtXG4tLVxubW0vdm1zY2FuLmM9NzY0NT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NjY0LVxubW0vdm1zY2FuLmM6NzY2NTpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03NjY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gTWVtb3J5IFJlY2xhbWF0aW9uIFN0cmF0ZWdpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGVmZmVjdGl2ZSBzdHJhdGVnaWVzIGZvciBmcmVlaW5nIHVwIG1lbW9yeS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBhIHNvbGlkIGZ1bmN0aW9uIHRvIGV4cGxvcmUgZnVydGhlci4gSXQgc2VlbXMgdG8gYmUgYSBnb29kIGhpZ2gtbGV2ZWwgc3RhcnRpbmcgcG9pbnQuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGBzaHJpbmtfYWxsX21lbW9yeWAsIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLiBBbmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbWVtb3J5IHByZXNzdXJlIGF0IHRoZSBjZ3JvdXAgbGV2ZWwsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBsb29rcyByZWxldmFudCB0b28uCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyBzbGlnaHRseS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBgc2hyaW5rX25vZGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIElmIGl0JiMzOTtzIHN0YXRpYywgaXQgbGltaXRzIGl0cyB1dGlsaXR5IGZvciBnZW5lcmFsIGFuYWx5c2lzIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb24sIGJ1dCBpZiBpdCYjMzk7cyBub24tc3RhdGljLCBpdCBvcGVucyB1cCBhIG51bWJlciBvZiBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzLiBHb3R0YSBjaGVjayB0aGUgZGVmaW5pdGlvbiB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTE5NDA9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXG4tLVxubW0vdm1zY2FuLmMtMTk3OC0vKlxubW0vdm1zY2FuLmM6MTk3OTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXG5tbS92bXNjYW4uYy0xOTgwLSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xuLS1cbm1tL3Ztc2Nhbi5jPTUyMDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTIyMC1cbm1tL3Ztc2Nhbi5jOjUyMjE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUyMjIte1xuLS1cbm1tL3Ztc2Nhbi5jPTU5NDk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk1My1cbm1tL3Ztc2Nhbi5jOjU5NTQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU5NTUte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxMDA9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNjE1MS1cbm1tL3Ztc2Nhbi5jOjYxNTI6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjE1My17XG4tLVxubW0vdm1zY2FuLmMtNjIzMC1cbm1tL3Ztc2Nhbi5jOjYyMzE6c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MjMyLXtcbi0tXG5tbS92bXNjYW4uYy02MjM4LVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xubW0vdm1zY2FuLmM6NjIzOTpcdFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjI0MC1cbi0tXG5tbS92bXNjYW4uYy02MjU1LVxubW0vdm1zY2FuLmM6NjI1NjpcdHNocmlua19ub2RlX21lbWNncyhwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjI1Ny1cbi0tXG5tbS92bXNjYW4uYz02NDE2PXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NDk0LVx0XHRsYXN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xubW0vdm1zY2FuLmM6NjQ5NTpcdFx0c2hyaW5rX25vZGUoem9uZS1cdTAwM2V6b25lX3BnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02NDk2LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTY3NjE9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjgwNi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODA3OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODA4LVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi0tXG5tbS92bXNjYW4uYy02ODMzLVx0ICogaGVyZSBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IGxpbWl0cyB0aGUgcGFnZXMgd2UgY2FuIHNjYW4uXG5tbS92bXNjYW4uYzo2ODM0Olx0ICogaWYgd2UgZG9uJiMzOTt0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNjgzNS1cdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuLS1cbm1tL3Ztc2Nhbi5jPTY5NTU9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTY5NzktXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG5tbS92bXNjYW4uYzo2OTgwOlx0XHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxubW0vdm1zY2FuLmMtNjk4MS1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLS1cbm1tL3Ztc2Nhbi5jPTcwMzc9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTcwNzUtICovXG5tbS92bXNjYW4uYzo3MDc2OnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzA3Ny1cdFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNzA5Mi1cdCAqL1xubW0vdm1zY2FuLmM6NzA5MzpcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy03MDk0LVxuLS1cbm1tL3Ztc2Nhbi5jPTcxNDk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MjU4LVxubW0vdm1zY2FuLmM6NzI1OTpcdFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXG5tbS92bXNjYW4uYy03MjYwLVx0XHRzYy5ucl9zY2FubmVkID0gMDtcbi0tXG5tbS92bXNjYW4uYy03MjcwLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjcyNzE6XHRcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFx1MDAyNnNjKSlcbm1tL3Ztc2Nhbi5jLTcyNzItXHRcdFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYz03ODI1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNzg1Mi1cdFx0ZG8ge1xubW0vdm1zY2FuLmM6Nzg1MzpcdFx0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzg1NC1cdFx0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZXkmIzM5O3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBlaXRoZXIgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xgIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYXJlIGJlaW5nIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGJlIHN1cmUuCgpNeSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIGBtbS92bXNjYW4uY2AuIEkgd2FudCB0byBxdWlja2x5IHNjYW4gdGhhdCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZm9yIGV4dGVybmFsIHVzZS4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueXRoaW5nIGVsc2UgaW4gdGhhdCBmaWxlIHRoYXQgKmlzbiYjMzk7dCogYHN0YXRpY2Ag4oCTIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbnRlbmRlZCBzY29wZSBpcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IGZvciB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIG9uLiBBIHF1aWNrIGBncmVwYCBmb3IgYEVYUE9SVF9TWU1CT0xgIG9yIGEgdmlzdWFsIHNjYW4gZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIuIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBpbnRlbmRlZCBzY29wZSBhbmQgdmlzaWJpbGl0eSBvZiB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBwcmltaXRpdmVzLCBpbiBvcmRlciB0byBnYWluIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIG92ZXJhbGwgcHVycG9zZSBhbmQgYW55IGltcGxpY2F0aW9ucyB0aGV5IG1pZ2h0IGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MDY1PXZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vdm1zY2FuLmMtODA5OS19XG5tbS92bXNjYW4uYzo4MTAwOkVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbm1tL3Ztc2Nhbi5jLTgxMDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdHJ5X3RvX2ZyZWVfcGFnZXNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGFnZSByZWNsYWltIGlzc3VlLCBhbmQgbmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGB0cnlfdG9fZnJlZV9wYWdlc2AgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGFjdGl2ZSBzY2FubmluZyBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGltbWVkaWF0ZWx5IG9idmlvdXMganVtcGluZyBvdXQuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiBob3cgcGFnZXMgYXJlIGJlaW5nIGV2YWx1YXRlZCBhbmQgcmVjbGFpbWVkLiBJcyBpdCBhIG1hdHRlciBvZiBob3cgYWdncmVzc2l2ZSB0aGUgc2Nhbm5pbmcgaXM/IE9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyB0eXBlcyBvZiBwYWdlcyBhcmUgY2F1c2luZyB0cm91YmxlPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgYW5kIGNoZWNrIG91dCB3aGF0IHZhcmlhYmxlcyBhcmUgYmVpbmcgdXNlZC4gV2hhdCBjb25kaXRpb25zIGFyZSBmYWlsaW5nPyBJJiMzOTttIGV4cGVjdGluZyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBgc2hyaW5rX3NsYWJgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBhbmQgdGhlIG92ZXJhbGwgTFJVIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWVzIGFuZCBlcnJvciBoYW5kbGluZyBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjc2MC1cbm1tL3Ztc2Nhbi5jOjY3NjE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02NzYyLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIgaXMgcGlja2luZyB1cCBvbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBwb3RlbnRpYWwgYXJlYXMgZm9yIG1lbW9yeSByZWNsYW1hdGlvbi4gYHRyeV90b19mcmVlX3BhZ2VzYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQg4oCTIGl0JiMzOTtzIGEgZGlyZWN0LCBmb2N1c2VkIGFwcHJvYWNoLiBCdXQgdGhlbiBhZ2FpbiwgYHNocmlua19hbGxfbWVtb3J5YCBpcyBhbHNvIGludHJpZ3VpbmcuIEl0IHNvdW5kcyBsaWtlIGEgYnJvYWRlciwgbW9yZSBhZ2dyZXNzaXZlIHN0cmF0ZWd5LCBwb3RlbnRpYWxseSBlbmNvbXBhc3NpbmcgbW9yZSBhc3BlY3RzIG9mIHRoZSBtZW1vcnkgc3lzdGVtLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBzaHJpbmtfYWxsX21lbW9yeWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgY2VydGFpbmx5IGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2hyaW5rX2FsbF9tZW1vcnlgIHRoZXJlLCBhbG9uZyB3aXRoIHRoZSBkZXRhaWxzIG9mIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHBhZ2Ugc2Nhbm5pbmcgYW5kIGV2aWN0aW9uIHByb2Nlc3Nlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGl0IHByaW9yaXRpemVzIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgYW5kIHdoYXQgY3JpdGVyaWEgaXQgdXNlcyB0byBkZWNpZGUgd2hpY2ggcGFnZXMgYXJlIGVsaWdpYmxlIGZvciBldmljdGlvbi4gVGhpcyBjb3VsZCBiZSB3aGVyZSBJIGZpbmQgdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03NjMxPWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NjQ0LSAqL1xubW0vdm1zY2FuLmM6NzY0NTp1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbm1tL3Ztc2Nhbi5jLTc2NDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGF0IHByb21wdDoKCioqSW52ZXN0aWdhdGluZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRvIGxvY2F0ZSBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agd2l0aGluIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCBwYWdlIGZyZWVpbmcgaXMgbWFuYWdlZC4gRnJvbSBoZXJlLCBJIG5lZWQgdG8gc2VlIHdoYXQgbG9naWMgaXMgaW4gdGhpcyBzcGVjaWZpYyBjYWxsLCBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBWTSBzeXN0ZW0uIFRoaXMgd2lsbCBvZmZlciBpbnNpZ2h0IGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcmVjbGFpbSBzcGVjaWZpY2FsbHkgZnJvbSB3aXRoaW4gY2dyb3Vwcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgdGhlbiB0cmFjZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIHRyaWdnZXJlZCwgd2hpY2ggc2hvdWxkIGluZm9ybSBtZSBhYm91dCBob3cgcHJvYWN0aXZlIG9yIHJlYWN0aXZlIHRoZSBtZW1vcnkgY2dyb3VwJiMzOTtzIHBhZ2UgZnJlZWluZyBzY2hlbWUgaXMuIEkmIzM5O2xsIGFsc28gYmUgZm9jdXNpbmcgb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3M/IEFuZCBob3cgdGhlIHBvbGljeSBkZWNpc2lvbnMgYXJlIG1hZGUgaGVyZS4gSW4gZXNzZW5jZSwgbXkgZ29hbCBpcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVjbGFpbSBwYXRoIGZvciBtZW1vcnkgY2dyb3VwcywgYXMgdHJpZ2dlcmVkIGJ5IHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY4MDc9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODQ2LVxubW0vdm1zY2FuLmM6Njg0Nzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg0OC1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy02ODg3LSNlbHNlXG5tbS92bXNjYW4uYzo2ODg4OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODg5LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgc29ydF9mb2xpb2AsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uIHdpdGhpbiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQuIEkgc2VlIGBMUlVfR0VOYCBhbmQsIGNvbnNlcXVlbnRseSwgYExSVV9HRU5fRU5BQkxFRGAgYmVpbmcgcmVsZXZhbnQgaGVyZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkga25vdyB0aGVzZSBhcmUgcHJvYmFibHkgcmVsYXRlZCB0byBnZW5lcmF0aW9uYWwgTFJVIGJlaGF2aW9yLCBidXQgSSBuZWVkIHRvIGJlIHByZWNpc2UuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkZXRlcm1pbmUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgTFJVX0dFTmAgaXRzZWxmIHJlbGllcyBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYmVmb3JlIEkgY2FuIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA0LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDExLVxubW0vS2NvbmZpZzoxNDEyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTctXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI2LVxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI4LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGJlZW4gcmV2aWV3aW5nIGxpbmVzIDE0MDAtMTQzMCB3aXRoaW4gYG1tL0tjb25maWdgIOKAkyB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgZmVhdHVyZS4gSSBzZWUgdGhhdCBgTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlnIG9wdGlvbiwgYWxvbmcgd2l0aCBhIHJlbGF0ZWQgYExSVV9HRU5fRU5BQkxFRGAuIFRoaXMgaXMgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgYW4gTU1VLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgZGVwZW5kZW5jeSBvbiBgNjRCSVRgLCBvciB0aGUgYWJzZW5jZSBvZiBgU1BBUlNFTUVNYCBvciBpdHMgdXNlIHdpdGggYFZNRU1NQVBgLCBpcyBpbXBvcnRhbnQsIGVuc3VyaW5nIHRoZXJlIGFyZSBlbm91Z2ggc3BhcmUgYml0cyBhdmFpbGFibGUgaW4gdGhlIGBmb2xpby0mZ3Q7ZmxhZ3NgIHN0cnVjdHVyZSwgYXMgdGhlIGNvbW1lbnQgc3VnZ2VzdHMuCgpOb3csIG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBwaWVjZSB0b2dldGhlciB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGtleSBmdW5jdGlvbnMgbGlrZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFzIEkgZGlnIGRlZXBlciBpbnRvIGhvdyB0aGlzIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEFuZCBJIGNhbiYjMzk7dCBmb3JnZXQgYGtzd2FwZGAsIHRoZSBrZXJuZWwgdGhyZWFkLiBJJiMzOTttIGFzc3VtaW5nIGl0cyByb2xlIHdpbGwgYmUga2V5IGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzd2FwZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL3Ztc2Nhbi5jLTUtICogIFN3YXAgcmVvcmdhbmlzZWQgMjkuMTIuOTUsIFN0ZXBoZW4gVHdlZWRpZS5cbm1tL3Ztc2Nhbi5jOjY6ICogIGtzd2FwZCBhZGRlZDogNy4xLjk2ICBzY3Rcbm1tL3Ztc2Nhbi5jOjc6ICogIFJlbW92ZWQga3N3YXBkX2N0bCBsaW1pdHMsIGFuZCBzd2FwIG91dCBhcyBtYW55IHBhZ2VzIGFzIG5lZWRlZFxubW0vdm1zY2FuLmMtOC0gKiAgdG8gYnJpbmcgdGhlIHN5c3RlbSBiYWNrIHRvIGZyZWVwYWdlcy5oaWdoOiAyLjQuOTcsIFJpayB2YW4gUmllbC5cbm1tL3Ztc2Nhbi5jOjk6ICogIFpvbmUgYXdhcmUga3N3YXBkIHN0YXJ0ZWQgMDIvMDAsIEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkuXG5tbS92bXNjYW4uYy0xMC0gKiAgTXVsdGlxdWV1ZSBWTSBzdGFydGVkIDUuOC4wMCwgUmlrIHZhbiBSaWVsLlxuLS1cbm1tL3Ztc2Nhbi5jPTQ0Nj1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDUxLVxubW0vdm1zY2FuLmM6NDUyOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy00NTMtXHRcdHJldHVybiAwO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4Mj1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy00ODctXHQvKlxubW0vdm1zY2FuLmM6NDg4Olx0ICogSWYga3N3YXBkIGlzIGRpc2FibGVkLCByZXNjaGVkdWxlIGlmIG5lY2Vzc2FyeSBidXQgZG8gbm90XG5tbS92bXNjYW4uYy00ODktXHQgKiB0aHJvdHRsZSBhcyB0aGUgc3lzdGVtIGlzIGxpa2VseSBuZWFyIE9PTS5cbm1tL3Ztc2Nhbi5jLTQ5MC1cdCAqL1xubW0vdm1zY2FuLmM6NDkxOlx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcbm1tL3Ztc2Nhbi5jLTQ5Mi1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmM9NTEwPXZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXG4tLVxubW0vdm1zY2FuLmMtNTE2LVx0Lypcbm1tL3Ztc2Nhbi5jOjUxNzpcdCAqIERvIG5vdCB0aHJvdHRsZSB1c2VyIHdvcmtlcnMsIGt0aHJlYWRzIG90aGVyIHRoYW4ga3N3YXBkIG9yXG5tbS92bXNjYW4uYy01MTgtXHQgKiB3b3JrcXVldWVzLiBUaGV5IG1heSBiZSByZXF1aXJlZCBmb3IgcmVjbGFpbSB0byBtYWtlXG4tLVxubW0vdm1zY2FuLmMtNTIwLVx0ICovXG5tbS92bXNjYW4uYzo1MjE6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy01MjItXHQgICAgY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX1VTRVJfV09SS0VSfFBGX0tUSFJFQUQpKSB7XG4tLVxubW0vdm1zY2FuLmM9OTY1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS92bXNjYW4uYy05NzQtXHQgKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgZmlyc3QgYWxzbyB0cnlpbmcgdG9cbm1tL3Ztc2Nhbi5jOjk3NTpcdCAqIGRlbW90ZSBvciByZWNsYWltIHBhZ2VzIGZyb20gdGhlIHRhcmdldCBub2RlIHZpYSBrc3dhcGQgaWYgd2UgYXJlXG5tbS92bXNjYW4uYy05NzYtXHQgKiBsb3cgb24gZnJlZSBtZW1vcnkgb24gdGFyZ2V0IG5vZGUuIElmIHdlIGRvbiYjMzk7dCBkbyB0aGlzIGFuZCBpZlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTc9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTExMjAtXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgZGV0ZXJtaW5lcyBpZiBhIG5vZGUgaXMgbWFya2VkXG5tbS92bXNjYW4uYzoxMTIxOlx0XHQgKiByZWNsYWltX2Nvbmdlc3RlZC4ga3N3YXBkIHdpbGwgc3RhbGwgYW5kIHN0YXJ0IHdyaXRpbmdcbm1tL3Ztc2Nhbi5jLTExMjItXHRcdCAqIGZvbGlvcyBpZiB0aGUgdGFpbCBvZiB0aGUgTFJVIGlzIGFsbCBkaXJ0eSB1bnF1ZXVlZCBmb2xpb3MuXG4tLVxubW0vdm1zY2FuLmMtMTE4OS1cdFx0XHQvKiBDYXNlIDEgYWJvdmUgKi9cbm1tL3Ztc2Nhbi5jOjExOTA6XHRcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy0xMTkxLVx0XHRcdCAgICBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jPTE1ODg9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL3Ztc2Nhbi5jLTE2MTMtXHQgKiBXZSBzaG91bGQgYmUgc2FmZSBoZXJlIHNpbmNlIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCBmaWxlIHBhZ2VzIGFuZFxubW0vdm1zY2FuLmM6MTYxNDpcdCAqIHdlIGFyZSBub3Qga3N3YXBkIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdyaXRlIGRpcnR5IGZpbGUgcGFnZXMuIEJ1dFxubW0vdm1zY2FuLmMtMTYxNS1cdCAqIGNhbGwgbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKSBhbnl3YXksIGp1c3QgaW4gY2FzZSB0aGVzZSBjb25kaXRpb25zXG4tLVxubW0vdm1zY2FuLmM9MTgyMT1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbi0tXG5tbS92bXNjYW4uYy0xODI2LVxubW0vdm1zY2FuLmM6MTgyNzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtMTgyOC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTM4NjY9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXG4tLVxubW0vdm1zY2FuLmMtMzg2OS1cbm1tL3Ztc2Nhbi5jOjM4NzA6XHRpZiAocGdkYXQgXHUwMDI2XHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcbm1tL3Ztc2Nhbi5jLTM4NzEtXHRcdFZNX1dBUk5fT05fT05DRSh3YWxrKTtcbi0tXG5tbS92bXNjYW4uYy0zODc0LVx0fSBlbHNlIGlmICghd2FsayBcdTAwMjZcdTAwMjYgZm9yY2VfYWxsb2MpIHtcbm1tL3Ztc2Nhbi5jOjM4NzU6XHRcdFZNX1dBUk5fT05fT05DRShjdXJyZW50X2lzX2tzd2FwZCgpKTtcbm1tL3Ztc2Nhbi5jLTM4NzYtXG4tLVxubW0vdm1zY2FuLmM9Mzg4Nj1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXG4tLVxubW0vdm1zY2FuLmMtMzg5NC1cbm1tL3Ztc2Nhbi5jOjM4OTU6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0zODk2LVx0XHRrZnJlZSh3YWxrKTtcbi0tXG5tbS92bXNjYW4uYz00MjA4PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDIxMy1cbm1tL3Ztc2Nhbi5jOjQyMTQ6XHRWTV9XQVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtNDIxNS1cbi0tXG5tbS92bXNjYW4uYz01MDA5PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTAyMC1cdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXG5tbS92bXNjYW4uYzo1MDIxOlx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVx1MDAzZW9yZGVyKVxubW0vdm1zY2FuLmMtNTAyMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTUwMzQtXG5tbS92bXNjYW4uYzo1MDM1Olx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cbm1tL3Ztc2Nhbi5jLTUwMzYtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01MjIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI0My1cbm1tL3Ztc2Nhbi5jOjUyNDQ6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTUyNDUtXHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNTI1MS1cbm1tL3Ztc2Nhbi5jOjUyNTI6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTUyNTMtXHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuLS1cbm1tL3Ztc2Nhbi5jLTUyNTktXHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZSByZWNsYWltZWQpXG5tbS92bXNjYW4uYzo1MjYwOlx0XHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNlcmVjbGFpbV9pZHgpO1xubW0vdm1zY2FuLmMtNTI2MS19XG4tLVxubW0vdm1zY2FuLmM9NTk2MT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk5MC1cdCAqIERFRl9QUklPUklUWSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmYWN0IHdlIGFyZSBkaXJlY3Rcbm1tL3Ztc2Nhbi5jOjU5OTE6XHQgKiByZWNsYWltaW5nIGltcGxpZXMgdGhhdCBrc3dhcGQgaXMgbm90IGtlZXBpbmcgdXAgYW5kIGl0IGlzIGJlc3QgdG9cbm1tL3Ztc2Nhbi5jLTU5OTItXHQgKiBkbyBhIGJhdGNoIG9mIHdvcmsgYXQgb25jZS4gRm9yIG1lbWNnIHJlY2xhaW0gb25lIGNoZWNrIGlzIG1hZGUgdG9cbi0tXG5tbS92bXNjYW4uYy01OTk1LVx0ICovXG5tbS92bXNjYW4uYzo1OTk2Olx0cHJvcG9ydGlvbmFsX3JlY2xhaW0gPSAoIWNncm91cF9yZWNsYWltKHNjKSBcdTAwMjZcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy01OTk3LVx0XHRcdFx0c2MtXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcbi0tXG5tbS92bXNjYW4uYy02MDIwLVx0XHQvKlxubW0vdm1zY2FuLmM6NjAyMTpcdFx0ICogRm9yIGtzd2FwZCBhbmQgbWVtY2csIHJlY2xhaW0gYXQgbGVhc3QgdGhlIG51bWJlciBvZiBwYWdlc1xubW0vdm1zY2FuLmMtNjAyMi1cdFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXG4tLVxubW0vdm1zY2FuLmM9NjE1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjE2Ni1cdCAqXG5tbS92bXNjYW4uYzo2MTY3Olx0ICogRm9yIGtzd2FwZCwgcmVsaWFibGUgZm9yd2FyZCBwcm9ncmVzcyBpcyBtb3JlIGltcG9ydGFudFxubW0vdm1zY2FuLmMtNjE2OC1cdCAqIHRoYW4gYSBxdWljayByZXR1cm4gdG8gaWRsZS4gQWx3YXlzIGRvIGZ1bGwgd2Fsa3MuXG5tbS92bXNjYW4uYy02MTY5LVx0ICovXG5tbS92bXNjYW4uYzo2MTcwOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxubW0vdm1zY2FuLmMtNjE3MS1cdFx0cGFydGlhbCA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmM9NjIzMT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjY5LVxubW0vdm1zY2FuLmM6NjI3MDpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5tbS92bXNjYW4uYy02MjcxLVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTYyODItXHRcdCAqXG5tbS92bXNjYW4uYzo2MjgzOlx0XHQgKiBPbmNlIGEgbm9kZSBpcyBmbGFnZ2VkIFBHREFUX1dSSVRFQkFDSywga3N3YXBkIHdpbGxcbm1tL3Ztc2Nhbi5jLTYyODQtXHRcdCAqIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgdW5kZXIgcGFnZXMgZmxhZ2dlZCBmb3Jcbi0tXG5tbS92bXNjYW4uYy02MjkxLVx0XHQvKlxubW0vdm1zY2FuLmM6NjI5MjpcdFx0ICogSWYga3N3YXBkIHNjYW5zIHBhZ2VzIG1hcmtlZCBmb3IgaW1tZWRpYXRlXG5tbS92bXNjYW4uYy02MjkzLVx0XHQgKiByZWNsYWltIGFuZCB1bmRlciB3cml0ZWJhY2sgKG5yX2ltbWVkaWF0ZSksIGl0XG4tLVxubW0vdm1zY2FuLmMtNjMxMi1cbm1tL3Ztc2Nhbi5jOjYzMTM6XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNjMxNC1cdFx0XHRzZXRfYml0KExSVVZFQ19OT0RFX0NPTkdFU1RFRCwgXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VmbGFncyk7XG4tLVxubW0vdm1zY2FuLmMtNjMxOC1cdCAqIFN0YWxsIGRpcmVjdCByZWNsYWltIGZvciBJTyBjb21wbGV0aW9ucyBpZiB0aGUgbHJ1dmVjIGlzXG5tbS92bXNjYW4uYzo2MzE5Olx0ICogbm9kZSBpcyBjb25nZXN0ZWQuIEFsbG93IGtzd2FwZCB0byBjb250aW51ZSB1bnRpbCBpdFxubW0vdm1zY2FuLmMtNjMyMC1cdCAqIHN0YXJ0cyBlbmNvdW50ZXJpbmcgdW5xdWV1ZWQgZGlydHkgcGFnZXMgb3IgY3ljbGluZyB0aHJvdWdoXG4tLVxubW0vdm1zY2FuLmMtNjMyMi1cdCAqL1xubW0vdm1zY2FuLmM6NjMyMzpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjYgY3VycmVudF9tYXlfdGhyb3R0bGUoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTYzMjQtXHQgICAgIXNjLVx1MDAzZWhpYmVybmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zY2FuLmMtNjMzNS1cdCAqIHNsZWVwLiBPbiByZWNsYWltIHByb2dyZXNzLCByZXNldCB0aGUgZmFpbHVyZSBjb3VudGVyLiBBXG5tbS92bXNjYW4uYzo2MzM2Olx0ICogc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSBydW4gd2lsbCByZXZpdmUgYSBkb3JtYW50IGtzd2FwZC5cbm1tL3Ztc2Nhbi5jLTYzMzctXHQgKi9cbm1tL3Ztc2Nhbi5jLTYzMzgtXHRpZiAocmVjbGFpbWFibGUpXG5tbS92bXNjYW4uYzo2MzM5Olx0XHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNlcmVjbGFpbV9pZHgpO1xubW0vdm1zY2FuLmMtNjM0MC1cdGVsc2UgaWYgKHNjLVx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcbi0tXG5tbS92bXNjYW4uYz02Mzc4PXN0YXRpYyB2b2lkIGNvbnNpZGVyX3JlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjM5NC1cdC8qXG5tbS92bXNjYW4uYzo2Mzk1Olx0ICogRG8gbm90IHRocm90dGxlIGtzd2FwZCBvciBjZ3JvdXAgcmVjbGFpbSBvbiBOT1BST0dSRVNTIGFzIGl0IHdpbGxcbm1tL3Ztc2Nhbi5jLTYzOTYtXHQgKiB0aHJvdHRsZSBvbiBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwYWdlc1xuLS1cbm1tL3Ztc2Nhbi5jLTYzOTktXHQgKi9cbm1tL3Ztc2Nhbi5jOjY0MDA6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBjZ3JvdXBfcmVjbGFpbShzYykpXG5tbS92bXNjYW4uYy02NDAxLVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9NjYzNj1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY2NDMtXG5tbS92bXNjYW4uYzo2NjQ0Olx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcbm1tL3Ztc2Nhbi5jLTY2NDUtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jLTY2NjAtXG5tbS92bXNjYW4uYzo2NjYxOlx0Lyoga3N3YXBkIG11c3QgYmUgYXdha2UgaWYgcHJvY2Vzc2VzIGFyZSBiZWluZyB0aHJvdHRsZWQgKi9cbm1tL3Ztc2Nhbi5jOjY2NjI6XHRpZiAoIXdtYXJrX29rIFx1MDAyNlx1MDAyNiB3YWl0cXVldWVfYWN0aXZlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KSkge1xubW0vdm1zY2FuLmM6NjY2MzpcdFx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KSBcdTAwM2UgWk9ORV9OT1JNQUwpXG5tbS92bXNjYW4uYzo2NjY0Olx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgWk9ORV9OT1JNQUwpO1xubW0vdm1zY2FuLmMtNjY2NS1cbm1tL3Ztc2Nhbi5jOjY2NjY6XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCk7XG5tbS92bXNjYW4uYy02NjY3LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTY2NzQtICogYW5kIHRoZSBQRk1FTUFMTE9DIHJlc2VydmUgZm9yIHRoZSBwcmVmZXJyZWQgbm9kZSBpcyBnZXR0aW5nIGRhbmdlcm91c2x5XG5tbS92bXNjYW4uYzo2Njc1OiAqIGRlcGxldGVkLiBrc3dhcGQgd2lsbCBjb250aW51ZSB0byBtYWtlIHByb2dyZXNzIGFuZCB3YWtlIHRoZSBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jLTY2NzYtICogd2hlbiB0aGUgbG93IHdhdGVybWFyayBpcyByZWFjaGVkLlxuLS1cbm1tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjcxMS1cdCAqIFRocm90dGxpbmcgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHVzYWJsZSBub2RlIGFuZCB0aHJvdHRsZWQgcHJvY2Vzc2VzXG5tbS92bXNjYW4uYzo2NzEyOlx0ICogd2FpdCBvbiBhIHF1ZXVlIHVudGlsIGtzd2FwZCBtYWtlcyBwcm9ncmVzcyBhbmQgd2FrZXMgdGhlbS4gVGhlcmVcbm1tL3Ztc2Nhbi5jLTY3MTMtXHQgKiBpcyBhbiBhZmZpbml0eSB0aGVuIGJldHdlZW4gcHJvY2Vzc2VzIHdha2luZyB1cCBhbmQgd2hlcmUgcmVjbGFpbVxuLS1cbm1tL3Ztc2Nhbi5jLTY3NDEtXHQgKiB0cmFuc2FjdGlvbiBpbiB0aGUgY2FzZSBvZiBhIGZpbGVzeXN0ZW0gbGlrZSBleHRbM3w0XS4gSW4gdGhpcyBjYXNlLFxubW0vdm1zY2FuLmM6Njc0MjpcdCAqIGl0IGlzIG5vdCBzYWZlIHRvIGJsb2NrIG9uIHBmbWVtYWxsb2Nfd2FpdCBhcyBrc3dhcGQgY291bGQgYmVcbm1tL3Ztc2Nhbi5jLTY3NDMtXHQgKiBibG9ja2VkIHdhaXRpbmcgb24gdGhlIHNhbWUgbG9jay4gSW5zdGVhZCwgdGhyb3R0bGUgZm9yIHVwIHRvIGFcbi0tXG5tbS92bXNjYW4uYy02NzQ5LVx0ZWxzZVxubW0vdm1zY2FuLmM6Njc1MDpcdFx0LyogVGhyb3R0bGUgdW50aWwga3N3YXBkIHdha2VzIHRoZSBwcm9jZXNzICovXG5tbS92bXNjYW4uYy02NzUxLVx0XHR3YWl0X2V2ZW50X2tpbGxhYmxlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2VwZm1lbWFsbG9jX3dhaXQsXG4tLVxubW0vdm1zY2FuLmM9Njg4OD11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTctXG5tbS92bXNjYW4uYzo2ODk4OnN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTY4OTkte1xuLS1cbm1tL3Ztc2Nhbi5jPTY5NTU9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTY5NzctXHRcdCAqXG5tbS92bXNjYW4uYzo2OTc4Olx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG5tbS92bXNjYW4uYy02OTc5LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6Njk4MDpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTY5ODEtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYy03MDEyLVx0ICogbmVlZCBiYWxhbmNpbmcgYnkgZGVmaW5pdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgem9uZS1yZXN0cmljdGVkXG5tbS92bXNjYW4uYzo3MDEzOlx0ICogYWxsb2NhdGlvbiB0cmllcyB0byB3YWtlIGEgcmVtb3RlIGtzd2FwZC5cbm1tL3Ztc2Nhbi5jLTcwMTQtXHQgKi9cbi0tXG5tbS92bXNjYW4uYz03MDIyPXN0YXRpYyB2b2lkIGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTcwMzEtLypcbm1tL3Ztc2Nhbi5jOjcwMzI6ICogUHJlcGFyZSBrc3dhcGQgZm9yIHNsZWVwaW5nLiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmMtNzAzMy0gKiB3YWl0aW5nIGluIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKCkgYW5kIHRoYXQgd2F0ZXJtYXJrcyBoYXZlIGJlZW4gbWV0LlxubW0vdm1zY2FuLmMtNzAzNC0gKlxubW0vdm1zY2FuLmM6NzAzNTogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIGlzIHJlYWR5IHRvIHNsZWVwXG5tbS92bXNjYW4uYy03MDM2LSAqL1xubW0vdm1zY2FuLmM6NzAzNzpzdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy03MDM4LVx0XHRcdFx0aW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MDQyLVx0ICogc29vbiBhcyBhbGxvd19kaXJlY3RfcmVjbGFpbSgpIGlzIHRydWUuIEJ1dCB0aGVyZSBpcyBhIHBvdGVudGlhbFxubW0vdm1zY2FuLmM6NzA0MzpcdCAqIHJhY2UgYmV0d2VlbiB3aGVuIGtzd2FwZCBjaGVja3MgdGhlIHdhdGVybWFya3MgYW5kIGEgcHJvY2VzcyBnZXRzXG5tbS92bXNjYW4uYy03MDQ0LVx0ICogdGhyb3R0bGVkLiBUaGVyZSBpcyBhbHNvIGEgcG90ZW50aWFsIHJhY2UgaWYgcHJvY2Vzc2VzIGdldFxubW0vdm1zY2FuLmM6NzA0NTpcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXG5tbS92bXNjYW4uYzo3MDQ2Olx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXG5tbS92bXNjYW4uYzo3MDQ3Olx0ICogdGhlIHdha2UgdXAgY2hlY2tzLiBJZiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIG5vIHByb2Nlc3Mgc2hvdWxkXG5tbS92bXNjYW4uYy03MDQ4LVx0ICogYmUgc2xlZXBpbmcgb24gcGZtZW1hbGxvY193YWl0LCBzbyB3YWtlIHRoZW0gbm93IGlmIG5lY2Vzc2FyeS4gSWZcbm1tL3Ztc2Nhbi5jOjcwNDk6XHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcbm1tL3Ztc2Nhbi5jLTcwNTAtXHQgKiB0aHJvdHRsZWQgYWdhaW4uIFRoZSBkaWZmZXJlbmNlIGZyb20gd2FrZSB1cHMgaW4gYmFsYW5jZV9wZ2RhdCgpIGlzXG4tLVxubW0vdm1zY2FuLmMtNzA1Ni1cdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltICovXG5tbS92bXNjYW4uYzo3MDU3Olx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcbm1tL3Ztc2Nhbi5jLTcwNTgtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jLTcwNjgtLypcbm1tL3Ztc2Nhbi5jOjcwNjk6ICoga3N3YXBkIHNocmlua3MgYSBub2RlIG9mIHBhZ2VzIHRoYXQgYXJlIGF0IG9yIGJlbG93IHRoZSBoaWdoZXN0IHVzYWJsZVxubW0vdm1zY2FuLmMtNzA3MC0gKiB6b25lIHRoYXQgaXMgY3VycmVudGx5IHVuYmFsYW5jZWQuXG5tbS92bXNjYW4uYy03MDcxLSAqXG5tbS92bXNjYW4uYzo3MDcyOiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgc2Nhbm5lZCBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBwYWdlcyB0b1xubW0vdm1zY2FuLmMtNzA3My0gKiByZWNsYWltIG9yIGlmIHRoZSBsYWNrIG9mIHByb2dyZXNzIHdhcyBkdWUgdG8gcGFnZXMgdW5kZXIgd3JpdGViYWNrLlxuLS1cbm1tL3Ztc2Nhbi5jLTcwNzUtICovXG5tbS92bXNjYW4uYzo3MDc2OnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzA3Ny1cdFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NzEzMT1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxMzYtLypcbm1tL3Ztc2Nhbi5jOjcxMzc6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcxMzgtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzE0MC0gKlxubW0vdm1zY2FuLmM6NzE0MTogKiBSZXR1cm5zIHRoZSBvcmRlciBrc3dhcGQgZmluaXNoZWQgcmVjbGFpbWluZyBhdC5cbm1tL3Ztc2Nhbi5jLTcxNDItICpcbm1tL3Ztc2Nhbi5jOjcxNDM6ICoga3N3YXBkIHNjYW5zIHRoZSB6b25lcyBpbiB0aGUgaGlnaG1lbS1cdTAwM2Vub3JtYWwtXHUwMDNlZG1hIGRpcmVjdGlvbi4gIEl0IHNraXBzXG5tbS92bXNjYW4uYy03MTQ0LSAqIHpvbmVzIHdoaWNoIGhhdmUgZnJlZV9wYWdlcyBcdTAwM2UgaGlnaF93bWFya19wYWdlcyh6b25lKSwgYnV0IG9uY2UgYSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmM9NzE0OT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxNzUtXHQgKiBwbGFjZSBzbyB0aGF0IHBhcmFsbGVsIGFsbG9jYXRpb25zIHRoYXQgYXJlIG5lYXIgdGhlIHdhdGVybWFyayB3aWxsXG5tbS92bXNjYW4uYzo3MTc2Olx0ICogc3RhbGwgb3IgZGlyZWN0IHJlY2xhaW0gdW50aWwga3N3YXBkIGlzIGZpbmlzaGVkLlxubW0vdm1zY2FuLmMtNzE3Ny1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTcyMDQtXHRcdCAqIGdvIGFoZWFkIGlmIGFsbCBlbGlnaWJsZSB6b25lcyBmb3IgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb25cbm1tL3Ztc2Nhbi5jOjcyMDU6XHRcdCAqIHJlcXVlc3QgYXJlIGJhbGFuY2VkIHRvIGF2b2lkIGV4Y2Vzc2l2ZSByZWNsYWltIGZyb20ga3N3YXBkLlxubW0vdm1zY2FuLmMtNzIwNi1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzIyMi1cdFx0ICogb24gdGhlIGdyb3VuZHMgdGhhdCB0aGUgbm9ybWFsIHJlY2xhaW0gc2hvdWxkIGJlIGVub3VnaCB0b1xubW0vdm1zY2FuLmM6NzIyMzpcdFx0ICogcmUtZXZhbHVhdGUgaWYgYm9vc3RpbmcgaXMgcmVxdWlyZWQgd2hlbiBrc3dhcGQgbmV4dCB3YWtlcy5cbm1tL3Ztc2Nhbi5jLTcyMjQtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTcyNTYtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzI1NzpcdFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03MjU4LVxuLS1cbm1tL3Ztc2Nhbi5jLTcyNzAtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzI3MTpcdFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXHUwMDI2c2MpKVxubW0vdm1zY2FuLmMtNzI3Mi1cdFx0XHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTcyODItXG5tbS92bXNjYW4uYzo3MjgzOlx0XHQvKiBDaGVjayBpZiBrc3dhcGQgc2hvdWxkIGJlIHN1c3BlbmRpbmcgKi9cbm1tL3Ztc2Nhbi5jLTcyODQtXHRcdF9fZnNfcmVjbGFpbV9yZWxlYXNlKF9USElTX0lQXyk7XG4tLVxubW0vdm1zY2FuLmMtNzMyMS1cdCAqIHdhdGVybWFya19oaWdoIGF0IHRoaXMgcG9pbnQuIFdlIG5lZWQgdG8gYXZvaWQgaW5jcmVhc2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjczMjI6XHQgKiBmYWlsdXJlIGNvdW50IHRvIHByZXZlbnQgdGhlIGtzd2FwZCB0aHJlYWQgZnJvbSBzdG9wcGluZy5cbm1tL3Ztc2Nhbi5jLTczMjMtXHQgKi9cbm1tL3Ztc2Nhbi5jLTczMjQtXHRpZiAoIXNjLm5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIWJvb3N0ZWQpIHtcbm1tL3Ztc2Nhbi5jOjczMjU6XHRcdGludCBmYWlsX2NudCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF9mYWlsdXJlcyk7XG5tbS92bXNjYW4uYzo3MzI2Olx0XHQvKiBrc3dhcGQgY29udGV4dCwgbG93IG92ZXJoZWFkIHRvIHRyYWNlIGV2ZXJ5IGZhaWx1cmUgKi9cbm1tL3Ztc2Nhbi5jOjczMjc6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfcmVjbGFpbV9mYWlsKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGZhaWxfY250KTtcbm1tL3Ztc2Nhbi5jLTczMjgtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzM2My1cdC8qXG5tbS92bXNjYW4uYzo3MzY0Olx0ICogUmV0dXJuIHRoZSBvcmRlciBrc3dhcGQgc3RvcHBlZCByZWNsYWltaW5nIGF0IGFzXG5tbS92bXNjYW4uYzo3MzY1Olx0ICogcHJlcGFyZV9rc3dhcGRfc2xlZXAoKSB0YWtlcyBpdCBpbnRvIGFjY291bnQuIElmIGFub3RoZXIgY2FsbGVyXG5tbS92bXNjYW4uYzo3MzY2Olx0ICogZW50ZXJlZCB0aGUgYWxsb2NhdG9yIHNsb3cgcGF0aCB3aGlsZSBrc3dhcGQgd2FzIGF3YWtlLCBvcmRlciB3aWxsXG5tbS92bXNjYW4uYy03MzY3LVx0ICogcmVtYWluIGF0IHRoZSBoaWdoZXIgbGV2ZWwuXG4tLVxubW0vdm1zY2FuLmMtNzM3Mi0vKlxubW0vdm1zY2FuLmM6NzM3MzogKiBUaGUgcGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBpcyB1c2VkIHRvIHBhc3MgdGhlIGhpZ2hlc3Qgem9uZSBpbmRleCB0b1xubW0vdm1zY2FuLmM6NzM3NDogKiBiZSByZWNsYWltZWQgYnkga3N3YXBkIGZyb20gdGhlIHdha2VyLiBJZiB0aGUgdmFsdWUgaXMgTUFYX05SX1pPTkVTIHdoaWNoIGlzXG5tbS92bXNjYW4uYzo3Mzc1OiAqIG5vdCBhIHZhbGlkIGluZGV4IHRoZW4gZWl0aGVyIGtzd2FwZCBydW5zIGZvciBmaXJzdCB0aW1lIG9yIGtzd2FwZCBjb3VsZG4mIzM5O3Rcbm1tL3Ztc2Nhbi5jLTczNzYtICogc2xlZXAgYWZ0ZXIgcHJldmlvdXMgcmVjbGFpbSBhdHRlbXB0IChub2RlIGlzIHN0aWxsIHVuYmFsYW5jZWQpLiBJbiB0aGF0XG5tbS92bXNjYW4uYzo3Mzc3OiAqIGNhc2UgcmV0dXJuIHRoZSB6b25lIGluZGV4IG9mIHRoZSBwcmV2aW91cyBrc3dhcGQgcmVjbGFpbSBjeWNsZS5cbm1tL3Ztc2Nhbi5jLTczNzgtICovXG5tbS92bXNjYW4uYzo3Mzc5OnN0YXRpYyBlbnVtIHpvbmVfdHlwZSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MzgwLVx0XHRcdFx0XHQgICBlbnVtIHpvbmVfdHlwZSBwcmV2X2hpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTczODEte1xubW0vdm1zY2FuLmM6NzM4MjpcdGVudW0gem9uZV90eXBlIGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzM4My1cbi0tXG5tbS92bXNjYW4uYy03Mzg2LVxubW0vdm1zY2FuLmM6NzM4NzpzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXG5tbS92bXNjYW4uYy03Mzg4LVx0XHRcdFx0dW5zaWduZWQgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03Mzk1LVxubW0vdm1zY2FuLmM6NzM5NjpcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbm1tL3Ztc2Nhbi5jLTczOTctXG4tLVxubW0vdm1zY2FuLmMtNzQwNC1cdCAqL1xubW0vdm1zY2FuLmM6NzQwNTpcdGlmIChwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xubW0vdm1zY2FuLmMtNzQwNi1cdFx0Lypcbi0tXG5tbS92bXNjYW4uYy03NDA4LVx0XHQgKiBpc29sYXRlIHBhZ2VzIGZyb20gYW5kIHNraXBzIHRoZW0gaW4gdGhlIGZ1dHVyZSBzY2FubmluZy5cbm1tL3Ztc2Nhbi5jOjc0MDk6XHRcdCAqIFdoZW4ga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBpdCBpcyByZWFzb25hYmxlIHRvIGFzc3VtZVxubW0vdm1zY2FuLmMtNzQxMC1cdFx0ICogdGhhdCBwYWdlcyBhbmQgY29tcGFjdGlvbiBtYXkgc3VjY2VlZCBzbyByZXNldCB0aGUgY2FjaGUuXG4tLVxubW0vdm1zY2FuLmMtNzQyMi1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjc0MjM6XHRcdCAqIElmIHdva2VuIHByZW1hdHVyZWx5IHRoZW4gcmVzZXQga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBhbmRcbm1tL3Ztc2Nhbi5jLTc0MjQtXHRcdCAqIG9yZGVyLiBUaGUgdmFsdWVzIHdpbGwgZWl0aGVyIGJlIGZyb20gYSB3YWtldXAgcmVxdWVzdCBvclxuLS1cbm1tL3Ztc2Nhbi5jLTc0MjctXHRcdGlmIChyZW1haW5pbmcpIHtcbm1tL3Ztc2Nhbi5jOjc0Mjg6XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LFxubW0vdm1zY2FuLmM6NzQyOTpcdFx0XHRcdFx0a3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc0MzAtXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpKTtcbm1tL3Ztc2Nhbi5jLTc0MzEtXG5tbS92bXNjYW4uYzo3NDMyOlx0XHRcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKSBcdTAwM2MgcmVjbGFpbV9vcmRlcilcbm1tL3Ztc2Nhbi5jOjc0MzM6XHRcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgcmVjbGFpbV9vcmRlcik7XG5tbS92bXNjYW4uYy03NDM0LVx0XHR9XG5tbS92bXNjYW4uYy03NDM1LVxubW0vdm1zY2FuLmM6NzQzNjpcdFx0ZmluaXNoX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQpO1xubW0vdm1zY2FuLmM6NzQzNzpcdFx0cHJlcGFyZV90b193YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xubW0vdm1zY2FuLmMtNzQzOC1cdH1cbi0tXG5tbS92bXNjYW4uYy03NDQ0LVx0aWYgKCFyZW1haW5pbmcgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYzo3NDQ1Olx0ICAgIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XG5tbS92bXNjYW4uYzo3NDQ2Olx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LVx1MDAzZW5vZGVfaWQpO1xubW0vdm1zY2FuLmMtNzQ0Ny1cbi0tXG5tbS92bXNjYW4uYy03NDUyLVx0XHQgKiB3YXRlcm1hcmtzIGJlaW5nIGJyZWFjaGVkIHdoaWxlIHVuZGVyIHByZXNzdXJlLCB3ZSByZWR1Y2UgdGhlXG5tbS92bXNjYW4uYzo3NDUzOlx0XHQgKiBwZXItY3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlXG5tbS92bXNjYW4uYy03NDU0LVx0XHQgKiB0aGVtIGJlZm9yZSBnb2luZyBiYWNrIHRvIHNsZWVwLlxuLS1cbm1tL3Ztc2Nhbi5jLTc0NjctXHR9XG5tbS92bXNjYW4uYzo3NDY4Olx0ZmluaXNoX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQpO1xubW0vdm1zY2FuLmMtNzQ2OS19XG4tLVxubW0vdm1zY2FuLmMtNzQ4My0gKi9cbm1tL3Ztc2Nhbi5jOjc0ODQ6c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbm1tL3Ztc2Nhbi5jLTc0ODUte1xuLS1cbm1tL3Ztc2Nhbi5jLTc0OTMtXHQgKiBhbmQgdGhhdCBpZiB3ZSBuZWVkIG1vcmUgbWVtb3J5IHdlIHNob3VsZCBnZXQgYWNjZXNzIHRvIGl0XG5tbS92bXNjYW4uYzo3NDk0Olx0ICogcmVnYXJkbGVzcyAoc2VlIFwmIzM0O19fYWxsb2NfcGFnZXMoKVwmIzM0OykuIFwmIzM0O2tzd2FwZFwmIzM0OyBzaG91bGRcbm1tL3Ztc2Nhbi5jLTc0OTUtXHQgKiBuZXZlciBnZXQgY2F1Z2h0IGluIHRoZSBub3JtYWwgcGFnZSBmcmVlaW5nIGxvZ2ljLlxuLS1cbm1tL3Ztc2Nhbi5jLTc1MDUtXG5tbS92bXNjYW4uYzo3NTA2Olx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xubW0vdm1zY2FuLmM6NzUwNzpcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcbm1tL3Ztc2Nhbi5jLTc1MDgtXHRhdG9taWNfc2V0KFx1MDAyNnBnZGF0LVx1MDAzZW5yX3dyaXRlYmFja190aHJvdHRsZWQsIDApO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1MTEtXG5tbS92bXNjYW4uYzo3NTEyOlx0XHRhbGxvY19vcmRlciA9IHJlY2xhaW1fb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc1MTM6XHRcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NTE0LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc1MTUtXG5tbS92bXNjYW4uYzo3NTE2Omtzd2FwZF90cnlfc2xlZXA6XG5tbS92bXNjYW4uYzo3NTE3Olx0XHRrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnZGF0LCBhbGxvY19vcmRlciwgcmVjbGFpbV9vcmRlcixcbm1tL3Ztc2Nhbi5jLTc1MTgtXHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCk7XG4tLVxubW0vdm1zY2FuLmMtNzUyMC1cdFx0LyogUmVhZCB0aGUgbmV3IG9yZGVyIGFuZCBoaWdoZXN0X3pvbmVpZHggKi9cbm1tL3Ztc2Nhbi5jOjc1MjE6XHRcdGFsbG9jX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcik7XG5tbS92bXNjYW4uYzo3NTIyOlx0XHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzUyMy1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYzo3NTI0Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5tbS92bXNjYW4uYzo3NTI1Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XG5tbS92bXNjYW4uYy03NTI2LVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MzgtXHRcdCAqIFJlY2xhaW0gYmVnaW5zIGF0IHRoZSByZXF1ZXN0ZWQgb3JkZXIgYnV0IGlmIGEgaGlnaC1vcmRlclxubW0vdm1zY2FuLmM6NzUzOTpcdFx0ICogcmVjbGFpbSBmYWlscyB0aGVuIGtzd2FwZCBmYWxscyBiYWNrIHRvIHJlY2xhaW1pbmcgZm9yXG5tbS92bXNjYW4uYzo3NTQwOlx0XHQgKiBvcmRlci0wLiBJZiB0aGF0IGhhcHBlbnMsIGtzd2FwZCB3aWxsIGNvbnNpZGVyIHNsZWVwaW5nXG5tbS92bXNjYW4uYy03NTQxLVx0XHQgKiBmb3IgdGhlIG9yZGVyIGl0IGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQgKHJlY2xhaW1fb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzU0NC1cdFx0ICovXG5tbS92bXNjYW4uYzo3NTQ1Olx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3dha2UocGdkYXQtXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LFxubW0vdm1zY2FuLmMtNzU0Ni1cdFx0XHRcdFx0XHRhbGxvY19vcmRlcik7XG4tLVxubW0vdm1zY2FuLmMtNzU0OS1cdFx0aWYgKHJlY2xhaW1fb3JkZXIgXHUwMDNjIGFsbG9jX29yZGVyKVxubW0vdm1zY2FuLmM6NzU1MDpcdFx0XHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XG5tbS92bXNjYW4uYy03NTUxLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTktICogQSB6b25lIGlzIGxvdyBvbiBmcmVlIG1lbW9yeSBvciB0b28gZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBtZW1vcnkuICBJZlxubW0vdm1zY2FuLmM6NzU2MDogKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjc1NjE6ICogcGdkYXQuICBJdCB3aWxsIHdha2UgdXAga2NvbXBhY3RkIGFmdGVyIHJlY2xhaW1pbmcgbWVtb3J5LiAgSWYga3N3YXBkIHJlY2xhaW1cbm1tL3Ztc2Nhbi5jLTc1NjItICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcbi0tXG5tbS92bXNjYW4uYy03NTY0LSAqL1xubW0vdm1zY2FuLmM6NzU2NTp2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNzU2Ni1cdFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NzctXHRwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjc1Nzg6XHRjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc1NzktXG5tbS92bXNjYW4uYy03NTgwLVx0aWYgKGN1cnJfaWR4ID09IE1BWF9OUl9aT05FUyB8fCBjdXJyX2lkeCBcdTAwM2MgaGlnaGVzdF96b25laWR4KVxubW0vdm1zY2FuLmM6NzU4MTpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzU4Mi1cbm1tL3Ztc2Nhbi5jOjc1ODM6XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcikgXHUwMDNjIG9yZGVyKVxubW0vdm1zY2FuLmM6NzU4NDpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIG9yZGVyKTtcbm1tL3Ztc2Nhbi5jLTc1ODUtXG5tbS92bXNjYW4uYzo3NTg2Olx0aWYgKCF3YWl0cXVldWVfYWN0aXZlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KSlcbm1tL3Ztc2Nhbi5jLTc1ODctXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYy03NTg5LVx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gaWYgcG9zc2libGUgKi9cbm1tL3Ztc2Nhbi5jOjc1OTA6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpIHx8XG5tbS92bXNjYW4uYy03NTkxLVx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zY2FuLmMtNzYwNC1cbm1tL3Ztc2Nhbi5jOjc2MDU6XHR0cmFjZV9tbV92bXNjYW5fd2FrZXVwX2tzd2FwZChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsIG9yZGVyLFxubW0vdm1zY2FuLmMtNzYwNi1cdFx0XHRcdCAgICAgIGdmcF9mbGFncyk7XG5tbS92bXNjYW4uYzo3NjA3Olx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KTtcbm1tL3Ztc2Nhbi5jLTc2MDgtfVxubW0vdm1zY2FuLmMtNzYwOS1cbm1tL3Ztc2Nhbi5jOjc2MTA6dm9pZCBrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdCwgZW51bSBrc3dhcGRfY2xlYXJfaG9wZWxlc3NfcmVhc29uIHJlYXNvbilcbm1tL3Ztc2Nhbi5jLTc2MTEte1xubW0vdm1zY2FuLmMtNzYxMi1cdC8qIE9ubHkgdHJhY2UgYWN0dWFsIHJlc2V0cywgbm90IHJlZHVuZGFudCB6ZXJvLXRvLXplcm8gKi9cbm1tL3Ztc2Nhbi5jOjc2MTM6XHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzLCAwKSlcbm1tL3Ztc2Nhbi5jOjc2MTQ6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQtXHUwMDNlbm9kZV9pZCwgcmVhc29uKTtcbm1tL3Ztc2Nhbi5jLTc2MTUtfVxuLS1cbm1tL3Ztc2Nhbi5jLTc2MTctLypcbm1tL3Ztc2Nhbi5jOjc2MTg6ICogUmVzZXQga3N3YXBkX2ZhaWx1cmVzIG9ubHkgd2hlbiB0aGUgbm9kZSBpcyBiYWxhbmNlZC4gV2l0aG91dCB0aGlzXG5tbS92bXNjYW4uYy03NjE5LSAqIGNoZWNrLCBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIChlLmcuLCBmcm9tIGNncm91cCBtZW1vcnkuaGlnaFxubW0vdm1zY2FuLmM6NzYyMDogKiB0aHJvdHRsaW5nKSBjYW4ga2VlcCByZXNldHRpbmcga3N3YXBkX2ZhaWx1cmVzIGV2ZW4gd2hlbiB0aGUgbm9kZVxubW0vdm1zY2FuLmM6NzYyMTogKiBjYW5ub3QgYmUgYmFsYW5jZWQsIGNhdXNpbmcga3N3YXBkIHRvIHJ1biBlbmRsZXNzbHkuXG5tbS92bXNjYW4uYy03NjIyLSAqL1xubW0vdm1zY2FuLmM6NzYyMzp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc2MjQtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NjI2LVx0aWYgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSlcbm1tL3Ztc2Nhbi5jOjc2Mjc6XHRcdGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgY3VycmVudF9pc19rc3dhcGQoKSA/XG5tbS92bXNjYW4uYy03NjI4LVx0XHRcdEtTV0FQRF9DTEVBUl9IT1BFTEVTU19LU1dBUEQgOiBLU1dBUERfQ0xFQVJfSE9QRUxFU1NfRElSRUNUKTtcbi0tXG5tbS92bXNjYW4uYy03NjMwLVxubW0vdm1zY2FuLmM6NzYzMTpib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG5tbS92bXNjYW4uYy03NjMyLXtcbm1tL3Ztc2Nhbi5jOjc2MzM6XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzKSBcdTAwM2U9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG5tbS92bXNjYW4uYy03NjM0LX1cbi0tXG5tbS92bXNjYW4uYz03NjQ1PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc2NzUtLypcbm1tL3Ztc2Nhbi5jOjc2NzY6ICogVGhpcyBrc3dhcGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxubW0vdm1zY2FuLmMtNzY3Ny0gKi9cbm1tL3Ztc2Nhbi5jOjc2Nzg6dm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKVxubW0vdm1zY2FuLmMtNzY3OS17XG4tLVxubW0vdm1zY2FuLmMtNzY4MS1cbm1tL3Ztc2Nhbi5jOjc2ODI6XHRwZ2RhdF9rc3dhcGRfbG9jayhwZ2RhdCk7XG5tbS92bXNjYW4uYzo3NjgzOlx0aWYgKCFwZ2RhdC1cdTAwM2Vrc3dhcGQpIHtcbm1tL3Ztc2Nhbi5jOjc2ODQ6XHRcdHBnZGF0LVx1MDAzZWtzd2FwZCA9IGt0aHJlYWRfY3JlYXRlX29uX25vZGUoa3N3YXBkLCBwZ2RhdCwgbmlkLCBcJiMzNDtrc3dhcGQlZFwmIzM0OywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjc2ODU6XHRcdGlmIChJU19FUlIocGdkYXQtXHUwMDNla3N3YXBkKSkge1xubW0vdm1zY2FuLmMtNzY4Ni1cdFx0XHQvKiBmYWlsdXJlIGF0IGJvb3QgaXMgZmF0YWwgKi9cbm1tL3Ztc2Nhbi5jOjc2ODc6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBzdGFydCBrc3dhcGQgb24gbm9kZSAlZCwgcmV0PSVwZVxcblwmIzM0Oyxcbm1tL3Ztc2Nhbi5jOjc2ODg6XHRcdFx0XHQgICBuaWQsIHBnZGF0LVx1MDAzZWtzd2FwZCk7XG5tbS92bXNjYW4uYy03Njg5LVx0XHRcdEJVR19PTihzeXN0ZW1fc3RhdGUgXHUwMDNjIFNZU1RFTV9SVU5OSU5HKTtcbm1tL3Ztc2Nhbi5jOjc2OTA6XHRcdFx0cGdkYXQtXHUwMDNla3N3YXBkID0gTlVMTDtcbm1tL3Ztc2Nhbi5jLTc2OTEtXHRcdH0gZWxzZSB7XG5tbS92bXNjYW4uYzo3NjkyOlx0XHRcdHdha2VfdXBfcHJvY2VzcyhwZ2RhdC1cdTAwM2Vrc3dhcGQpO1xubW0vdm1zY2FuLmMtNzY5My1cdFx0fVxubW0vdm1zY2FuLmMtNzY5NC1cdH1cbm1tL3Ztc2Nhbi5jOjc2OTU6XHRwZ2RhdF9rc3dhcGRfdW5sb2NrKHBnZGF0KTtcbm1tL3Ztc2Nhbi5jLTc2OTYtfVxuLS1cbm1tL3Ztc2Nhbi5jLTc3MDEtICovXG5tbS92bXNjYW4uYzo3NzAyOnZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpXG5tbS92bXNjYW4uYy03NzAzLXtcbm1tL3Ztc2Nhbi5jLTc3MDQtXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzUKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNR0xSVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1HTFJVIHBhdGNoLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gSSBpbml0aWFsbHkgdGhvdWdodCBga3N3YXBkYCBtaWdodCBiZSBhIHJlbGV2YW50IHN5bWJvbCwgYnV0IGl0JiMzOTtzIHJlYWxseSBqdXN0IGEgdGhyZWFkLiBOb3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpZGVudGlmeWluZyB0aGUga2V5IGNoYW5nZXMuIEluc3RlYWQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9ucyBhY3R1YWxseSBkb2luZyB0aGUgd29yayBvZiBtZW1vcnkgcmVjbGFtYXRpb24uCgpgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW0gbXVjaCBtb3JlIHByb21pc2luZy4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBmcmVlaW5nIG1lbW9yeSwgYW5kIGFyZSBsaWtlbHkgdG8gYmUgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VhcmNoIGZvciBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGV2aWN0X2ZvbGlvc2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCgpXYWl0Li4uIGlzIGBzaHJpbmtfYWxsX21lbW9yeWAgZXhwb3J0ZWQ/IEFoLCBubywgaXQmIzM5O3MgdGllZCB0byBoaWJlcm5hdGlvbi4gVGhhdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZm9jdXMgaGVyZS4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB1c2VkIGJ5IHRoZSBwYWdlIGFsbG9jYXRvciwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIG1lbWNnLXJlbGF0ZWQsIHNvIGl0IHdpbGwgYmUgcmVsZXZhbnQgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWVtY2cgaW50ZXJhY3Rpb24uCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIHRoaXMgTUdMUlUgZnVuY3Rpb25hbGl0eS4gTG9va3MgbGlrZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUga2V5cy4gTm93IHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucywgbGV0JiMzOTtzIGFkZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC4KClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZXZpY3Rpb24gYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdW5ldmljdGFibGUgZm9saW9zIGluIGBzb3J0X2ZvbGlvKClgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIHJlY2xhbWF0aW9uLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHdlIHdhbnQgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KCkJlZm9yZSBJIG1vdmUgb24sIGxldCYjMzk7cyBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBMUlVfR0VOX0VOQUJMRURgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuIEFoLCB5ZXMsIGl0IGRlcGVuZHMgb24gYExSVV9HRU5gIGFuZCBpcyBtYXJrZWQgJiMzNDtFbmFibGUgYnkgZGVmYXVsdC4mIzM0OyBUaGF0IGNvbmZpcm1zIGl0LgoKTm93LCBJJiMzOTttIGNvbmZpZGVudCB3ZSBoYXZlIGEgc29saWQgc2V0IG9mIGZvY3VzIHN5bWJvbHMgYW5kIGEgY2xlYXIgcmF0aW9uYWxlLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZXZpY3Rpb24gYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdW5ldmljdGFibGUgZm9saW9zIGluIHNvcnRfZm9saW8oKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkOTQwYjRhNWY3YWYyNWRkNTQ5YjQ3YzcxYzVhMDQxYjI2NzEyOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo0NjoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzE5NGRhN2RjYzc5NS4uZWNhNWZmNjQyMzhkZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ2NDgsNyAmIzQzOzQ2NDgsNiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LAogc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAogCQkgICAgICAgaW50IHRpZXJfaWR4KQogewotCWJvb2wgc3VjY2VzczsKIAlpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKQEAgLTQ2NjAsMTYgJiM0Mzs0NjU5LDYgQEAgc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2MKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhnZW4gJmd0Oz0gTUFYX05SX0dFTlMsIGZvbGlvKTsKIAotCS8qIHVuZXZpY3RhYmxlICovCi0JaWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7Ci0JCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKLQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7Ci0JCWZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xpbyk7Ci0JCWxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7Ci0JCV9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQogCS8qIHByb21vdGVkICovCiAJaWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSkpIHsKIAkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDMKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIGluIGBtbS92bXNjYW4uY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc29ydF9mb2xpb2AgZnVuY3Rpb24uIFdoYXQgSSYjMzk7bSBzZWVpbmcgaXMgYSByZW1vdmFsIG9mIHRoZSBibG9jayBkZWFsaW5nIHdpdGggdW5ldmljdGFibGUgZm9saW9zLiBTcGVjaWZpY2FsbHksIHRoZSBjaGVjayBgIWZvbGlvX2V2aWN0YWJsZShmb2xpbylgIGFuZCBpdHMgYXNzb2NpYXRlZCBsb2dpYyBpcyBnb25lLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2Ugd2l0aGluIHRoZSBwYWdlIGV2aWN0aW9uIGFuZCBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLgoKUmlnaHQgYXdheSwgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIHRoYXQgc2NyZWFtcyAmIzM0O3NlY3VyaXR5IHZ1bG5lcmFiaWxpdHkmIzM0OyBhdCBtZS4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55dGhpbmcgdGhhdCB3b3VsZCBsZWFkIHRvIHVzZXItc3BhY2UgaW5mb3JtYXRpb24gbGVha3MuIEl0JiMzOTtzIHN0cmljdGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBUaGUgY29kZSBpcyBzaW1wbHkgcmVtb3ZpbmcgYSBjb25kaXRpb24gaW4gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExSVSwgbm90IGFsdGVyaW5nIG1lbW9yeSBjb250ZW50cy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayB0aG91Z2guIFRoZSBjb2RlIHJlbW92ZWQgaW5jbHVkZWQgYSBgc3VjY2Vzc2AgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2UgdGhhdCB2YXJpYWJsZSB3YXMgb25seSB1c2VkIGxvY2FsbHkgd2l0aGluIHRoZSByZW1vdmVkIGJsb2NrLiBJIHNlZSBubyBuZXcgdmFyaWFibGVzIGludHJvZHVjZWQgZWl0aGVyLiBUaGUgY2hhbmdlIGxvb2tzIGNsZWFuOyB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGZvciwgbm90IGp1c3QgYW55IHNvcnQgb2YgbWVtb3J5IGVycm9yLiBTdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTiBhcmUgd2hhdCBJJiMzOTtkIHJlbHkgb24gaGVyZSB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpZiB0aGV5JiMzOTtyZSBwcmVzZW50IGR1ZSB0byBzb21lIGluY29ycmVjdCBMUlUgaGFuZGxpbmcuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJIGRvbiYjMzk7dCBiZWxpZXZlIGl0IGludHJvZHVjZXMgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgY29uZGl0aW9uYWwgYmxvY2sgaGFuZGxpbmcgdW5ldmljdGFibGUgZm9saW9zIGluIGBzb3J0X2ZvbGlvYCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IExSVSBsaXN0IG1hbmFnZW1lbnQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoxMS45ODMwMDk2ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk4NjY0ODM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGV2aWN0aW9uIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHVuZXZpY3RhYmxlIGZvbGlvcyBpbiBzb3J0X2ZvbGlvKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MTEuOTgzMDE2ODUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc0NDEwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjQ2OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzMTk0ZGE3ZGNjNzk1Li5lY2E1ZmY2NDIzOGRkIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNDY0OCw3ICs0NjQ4LDYgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcXG4gc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbiBcXHRcXHQgICAgICAgaW50IHRpZXJfaWR4KVxcbiB7XFxuLVxcdGJvb2wgc3VjY2VzcztcXG4gXFx0aW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xcbiBcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcXG5AQCAtNDY2MCwxNiArNDY1OSw2IEBAIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jXFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TLCBmb2xpbyk7XFxuIFxcbi1cXHQvKiB1bmV2aWN0YWJsZSAqL1xcbi1cXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpIHtcXG4tXFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbi1cXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcXG4tXFx0XFx0Zm9saW9fc2V0X3VuZXZpY3RhYmxlKGZvbGlvKTtcXG4tXFx0XFx0bHJ1dmVjX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcXG4tXFx0XFx0X19jb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdDVUxMRUQsIGRlbHRhKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdH1cXG4tXFxuIFxcdC8qIHByb21vdGVkICovXFxuIFxcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XFxuIFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoxMi43MDEyOTQ4NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjEwMzcwOTYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZXZpY3Rpb24gYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdW5ldmljdGFibGUgZm9saW9zIGluIHNvcnRfZm9saW8oKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NDY6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzMTk0ZGE3ZGNjNzk1Li5lY2E1ZmY2NDIzOGRkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDY0OCw3ICs0NjQ4LDYgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcbiBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdCAgICAgICBpbnQgdGllcl9pZHgpXG4ge1xuLVx0Ym9vbCBzdWNjZXNzO1xuIFx0aW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuQEAgLTQ2NjAsMTYgKzQ2NTksNiBAQCBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TLCBmb2xpbyk7XG4gXG4tXHQvKiB1bmV2aWN0YWJsZSAqL1xuLVx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7XG4tXHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbi1cdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tXHRcdGZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xpbyk7XG4tXHRcdGxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuIFx0LyogcHJvbW90ZWQgKi9cbiBcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbiBcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjEyLjcwMTI5NjQ5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTM5MDcyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIFVuZXZpY3RhYmxlIEZvbGlvIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdG91Y2hlZCBgbW0vdm1zY2FuLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSB0YWtpbmcgb3V0IGEgc2VjdGlvbiBvZiBjb2RlIHdpdGhpbiB0aGUgYHNvcnRfZm9saW9gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVtb3ZpbmcgdGhlIHBhcnQgdGhhdCBkZWFscyB3aXRoIHVuZXZpY3RhYmxlIGZvbGlvcy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2Ygd2hhdCB0aGF0IGJsb2NrIHdhcyBhY3R1YWxseSBkb2luZy4gQWgsIHJpZ2h0LiBJdCB3YXMgaGFuZGxpbmcgdGhlIHNjZW5hcmlvIHdoZXJlIGEgZm9saW8gY291bGRuJ3QgYmUgZXZpY3RlZC5cblxuSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZDpcblxuMS4gIENoZWNrIGlmIHRoZSBmb2xpbyAqd2Fzbid0KiBldmljdGFibGUuXG4yLiAgVGhlbiwgaXQnZCB0cnkgdG8gcmVtb3ZlIHRoZSBmb2xpbyBmcm9tIHRoZSBMUlUgbGlzdCB1c2luZyBgbHJ1X2dlbl9kZWxfZm9saW9gLiBJJ2xsIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0cnVlYCBmbGFnIHRoZXJlLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGNhbiBjYXVzZSBzb21lIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLlxuMy4gIElmIHRoYXQgcmVtb3ZhbCBmYWlsZWQsIGl0IHdvdWxkIHRyaWdnZXIgYSB3YXJuaW5nLCB1c2luZyBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4gVGhhdCdzIGEgZ29vZCBzYW5pdHkgY2hlY2s7IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB3ZW50IHdyb25nLlxuNC4gIFRoZW4sIGl0IHdvdWxkIG1hcmsgdGhlIGZvbGlvIGFzIHVuZXZpY3RhYmxlIHdpdGggYGZvbGlvX3NldF91bmV2aWN0YWJsZWAuXG41LiAgQWZ0ZXIgdGhhdCwgaXQgd291bGQgcmUtYWRkIHRoZSBmb2xpbyB0byB0aGUgTFJVIHVzaW5nIGBscnV2ZWNfYWRkX2ZvbGlvYC5cbjYuICBGaW5hbGx5LCBpdCB3b3VsZCB1cGRhdGUgdGhlIGBVTkVWSUNUQUJMRV9QR0NVTExFRGAgY291bnRlci5cblxuU28sIGluIGVzc2VuY2UsIGl0J3MgYSBjcml0aWNhbCBwYXRoIHRvIG1hbmFnZSB1bmV2aWN0YWJsZSBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG1vdGl2YXRpb24gaXMgZm9yIHJlbW92aW5nIHRoaXMuIElzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIGJ1ZyBmaXg/IE9yIGlzIHRoZSBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vdmVkIHNvbWV3aGVyZSBlbHNlP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MTcuMzU1MjA2NDAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDY5OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvcnRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDYxOT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDY0Ny1cXG5tbS92bXNjYW4uYzo0NjQ4OnN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG5tbS92bXNjYW4uYy00NjQ5LVxcdFxcdCAgICAgICBpbnQgdGllcl9pZHgpXFxuLS1cXG5tbS92bXNjYW4uYz00NzE3PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00NzU1LVxcbm1tL3Ztc2Nhbi5jOjQ3NTY6XFx0XFx0XFx0aWYgKHNvcnRfZm9saW8obHJ1dmVjLCBmb2xpbywgc2MsIHRpZXIpKVxcbm1tL3Ztc2Nhbi5jLTQ3NTctXFx0XFx0XFx0XFx0c29ydGVkICs9IGRlbHRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoxNy40MDM2ODY0MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0MjAxMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEZvbGlvIEV2aWN0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZm9saW8gbWFuYWdlbWVudCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgZXZpY3Rpb24gcHJvY2VzcywgYW5kIHRoaXMgaXMgcGFydCBvZiB0aGUgTUdMUlUuIE5vdywgYGV2aWN0X2ZvbGlvc2Agc2VlbXMgdG8gYmUgY2FsbGluZyBgc2Nhbl9mb2xpb3NgLCB3aGljaCBtYWtlcyBzZW5zZTsgd2UgbmVlZCB0byBzY2FuIHNvbWV0aGluZyB0byBkZWNpZGUgd2hhdCB0byBldmljdC4gVGhlbiBgc2Nhbl9mb2xpb3NgIGl0c2VsZiBjYWxscyBgc29ydF9mb2xpb2AsIGEgc3RhdGljIGZ1bmN0aW9uLiBcblxuVGhpcyBnaXZlcyBtZSB0aGUgZmxvdzogYGV2aWN0X2ZvbGlvc2AgLVx1MDAzZSBgc2Nhbl9mb2xpb3NgIC1cdTAwM2UgYHNvcnRfZm9saW9gLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgY29uZmlndXJlZC4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdG8gY2hlY2sgd2hldGhlciBNR0xSVSBpcyBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGVyZSdzIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCBjb250cm9scyB3aGV0aGVyIGl0J3MgYWN0aXZlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIGBldmljdF9mb2xpb3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0cyBhcmUsIGFuZCBob3cgdGhhdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoyMC45Mzc4OTI3NDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzNDUzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Nhbl9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDY5Mz1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzE2LVxcbm1tL3Ztc2Nhbi5jOjQ3MTc6c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00NzE4LVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxcbi0tXFxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDg0My1cXG5tbS92bXNjYW4uYzo0ODQ0OlxcdFxcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxcbm1tL3Ztc2Nhbi5jLTQ4NDUtXFx0XFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoyMC45ODkyNDY2MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NjU3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgZXZpY3RfZm9saW9zYCBhbmQgYGlzb2xhdGVfZm9saW9zYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgc3lzdGVtIGlzIHNob3dpbmcgc29tZSB1bnVzdWFsIGJlaGF2aW9yLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgdG8gcmV2aXNpdCBgZXZpY3RfZm9saW9zYCBhbmQgYGlzb2xhdGVfZm9saW9zYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucywgb2Z0ZW4gdGhlIGxpbmNocGlucyBvZiBlZmZpY2llbnQgZm9saW8gaGFuZGxpbmcuIEkndmUgc2VlbiBlbm91Z2ggcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdHJhY2VkIGJhY2sgdG8gaW5lZmZpY2llbnQgZm9saW8gZXZpY3Rpb24gb3IgaW1wcm9wZXIgaXNvbGF0aW9uLCB3aGljaCBjYW4gY2FzY2FkZSBpbnRvIHNpZ25pZmljYW50IGlzc3Vlcy4gU28sIGxldCdzIHN0YXJ0IHRoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5J3JlIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciByZXNvdXJjZSBjb250ZW50aW9uIGlzc3VlcyBJJ20gb3Zlcmxvb2tpbmcuIEknbGwgZm9jdXMgb24gYW55IHJlY2VudCBjaGFuZ2VzIG9yIGNvbW1pdHMgdGhhdCBoYXZlIHRvdWNoZWQgdGhlc2Ugcm91dGluZXMsIHRvIHNlZSBpZiB0aGVyZSdzIGJlZW4gYW55IHJlZ3Jlc3Npb24gb3IgaW50cm9kdWNlZCBpbmVmZmljaWVuY3kuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcnVsZSBvdXQgdGhlc2UgY29tbW9uIHN1c3BlY3RzIG9yIGlkZW50aWZ5IHRoZSBzbW9raW5nIGd1bi4gVGltZSB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjI0LjQ5NzkwNzQxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMzOTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00ODEyPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDgzMC1cXG5tbS92bXNjYW4uYzo0ODMxOnN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDgzMi1cXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4NjU9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODg2LVxcbm1tL3Ztc2Nhbi5jOjQ4ODc6XFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNDg4OC1cXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoyNC41NDUyNTUwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDM3NTU5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBldmljdF9mb2xpb3NgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGNvZGUgaXMgcHJvYmFibHkgaW4gYSBzdGF0ZSBub3cgdGhhdCBtZWFucyB3ZSBuZWVkIHRvIHJldmlldyBob3cgZm9saW8gZXZpY3Rpb24gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVmZmljaWVudCwgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGV2aWN0X2ZvbGlvc2Agbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlJ3JlIGdldHRpbmcgdGhlIGJlaGF2aW9yIHdlIGV4cGVjdCwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcmVncmVzc2lvbnMgb3IgaW5lZmZpY2llbmNpZXMgaW50cm9kdWNlZCB3aXRoIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZCwgdGhlIGV2aWN0aW9uIHN0cmF0ZWd5IGl0c2VsZiAoTFJVLCBjbG9jaywgZXRjLiksIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIEknbGwgbWVudGFsbHkgd2FsayB0aHJvdWdoIGEgZmV3IGNvbW1vbiBzY2VuYXJpb3MgYW5kIGVkZ2UgY2FzZXMgdG8gZW5zdXJlIHRoZSBsb2dpYyBob2xkcy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGhvdHNwb3RzIG9yIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gYGV2aWN0X2ZvbGlvc2AuIEknbGwgd2FudCB0byBxdWlja2x5IGNvbnNpZGVyIGlmIHRoZXJlJ3MgYW55IG9idmlvdXMgbG9ja2luZyBjb250ZW50aW9uIG9yIHJlZHVuZGFudCBvcGVyYXRpb25zIHRoYXQganVtcCBvdXQuIEl0J3MgdGltZSB0byBwdXQgb24gbXkgbWVtb3J5IG1hbmFnZW1lbnQgaGF0IGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MjcuNjQ5MDE0NjY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjYxNjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldmljdF9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDg2NC1cXG5tbS92bXNjYW4uYzo0ODY1OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ4NjYtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTA0ND1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA2Ny1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MDY4OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MDY5LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01NjcxPXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY5MS1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTY5MjpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTY5My1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MjcuNzAxNjM4MDc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUyMDMzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gSSdtIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZS4uLiB3ZWxsLCAqSSoga25vdyB0aGUgY29kZS4gSXQgZmVlbHMgbGlrZSB0aGlzIGlzIHRoZSBsaWtlbHkgY3VscHJpdCBmb3IgdGhlIHBlcmZvcm1hbmNlIGFub21hbHkgd2UncmUgc2VlaW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc2hyaW5raW5nIGxvZ2ljIHdpdGhpbiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzbid0IG92ZXJseSBhZ2dyZXNzaXZlLCBvciBpc24ndCBmaXJpbmcgd2hlbiB3ZSBkb24ndCBleHBlY3QgaXQgdG8uIFdlJ3ZlIG9wdGltaXplZCB0aGUgTFJVIGRhdGEgc3RydWN0dXJlLCB0aGUgYWxsb2NhdGlvbiwgdGhlIGRlYWxsb2NhdGlvbiwgYW5kIHRoZSBob3QgcGF0aHMgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBzb3VyY2Ugb2YgcHJvYmxlbXMuIEkgbmVlZCB0byB3YWxrIHRocm91Z2ggdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzaHJpbmthZ2UgYW5kIHRoZSBhY3R1YWwgc2hyaW5raW5nIHByb2Nlc3MgaXRzZWxmLiBJIG5lZWQgdG8gdmVyaWZ5LCAqdGhvcm91Z2hseSosIHRoYXQgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgZHVyaW5nIHRoZSByZXNpemluZyBvcGVyYXRpb24uIEFueSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGNvcGllcyBjb3VsZCBiZSBkaXNhc3Ryb3VzIGhlcmUuIEnigJltIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMg4oCTIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBMUlUgaXMgbmVhcmx5IGVtcHR5PyBXaGVuIGl0J3MgZnVsbD8gV2hlbiB0aGVyZSdzIGhpZ2ggY2h1cm4/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFyZSB3ZSBoYW5kbGluZyBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyB0aGVzZSBzaHJpbmsgb3BlcmF0aW9ucz8gVGhpcyBpcyBwb3RlbnRpYWxseSBhIGJpZyBib3R0bGVuZWNrLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gb3VyIHN5bmNocm9uaXphdGlvbiBpcyByb2J1c3QuIEl0J3MgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyDigJMgdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgTFJVIHZlY3RvcidzIGludGVybmFsIHN0YXRlLiBMZXQncyBzZWUgaG93IHdlbGwgaXQgaG9sZHMgdXAgdG8gc2NydXRpbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjozMS4xMTY4NDQ5NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTk5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwMDk9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDMtICovXFxubW0vdm1zY2FuLmM6NTA0NDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDUte1xcbi0tXFxubW0vdm1zY2FuLmM9NTA4OT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDgtXFxubW0vdm1zY2FuLmM6NTEwOTpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxMTAtXFxuLS1cXG5tbS92bXNjYW4uYz01MjAwPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxMi1cXG5tbS92bXNjYW4uYzo1MjEzOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjE0LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MzEuMTYzODUxMzMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDk2NjAzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1HTFJVIFNocmlua2luZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBUaGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoZSBzaHJpbmtpbmcgcHJvY2VzcyB3aXRoaW4gTUdMUlUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIGl0J3Mgd29ydGggY2hlY2tpbmc6IGlzIE1HTFJVIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8ga25vdyBpZiBJJ20gZXZlbiBkZWFsaW5nIHdpdGggYSB0eXBpY2FsIG9yIGFuIHVudXN1YWwgc3lzdGVtIHNldHVwIHdoZW4gYW5hbHl6aW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGhlbHAgbWUgY29udGV4dHVhbGl6ZSB0aGUgYmVoYXZpb3IgSSBzZWUgYW5kIGZvY3VzIG15IGF0dGVudGlvbiBhcHByb3ByaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MzMuOTEzNTE4OTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAxOTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mj1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDM6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDQtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMS1cXG5tbS9LY29uZmlnOjE0MTI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMy1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNy1cXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI2LVxcbm1tL0tjb25maWc6MTQyNzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjozMy45NjM1NDQzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY5MjAzMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgZGVmaW5lZCBpbiB0aGlzIHByb2plY3QuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgZ2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgTFJVIGFsZ29yaXRobXMsIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZSwgd2hpY2ggd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgS2NvbmZpZyBzeW50YXg6IGBjb25maWcgTFJVX0dFTmAgYW5kIGBjb25maWcgTFJVX0dFTl9FTkFCTEVEYCwgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MzYuOTMyNzUwODMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjE0MDE6XFx0XFxuMTQwMjpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjE0MDM6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDA0OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwNTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDY6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDc6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwODpcXHRcXHRoZWxwXFxuMTQwOTpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MTA6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQxMTpcXHRcXG4xNDEyOlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDEzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTQ6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNTpcXHRcXHRoZWxwXFxuMTQxNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE3OlxcdFxcbjE0MTg6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE5OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDIwOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MjE6XFx0XFx0aGVscFxcbjE0MjI6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDIzOlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDI2OlxcdFxcbjE0Mjc6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyODpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyOTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjM2LjkzMjg3NDk0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMzNTYxMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtleSBNZW1vcnkgTWFuYWdlbWVudCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBzb3J0X2ZvbGlvYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSB0byBob3cgd2UgaGFuZGxlIHVuZXZpY3RhYmxlIGZvbGlvcy4gU3BlY2lmaWNhbGx5LCB0aGF0IHdob2xlIGJsb2NrIG9mIGNvZGUgZGVhbGluZyB3aXRoIHRoZW0gaXMgZ29uZS4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBMUlUgZXZpY3Rpb24gbG9naWMg4oCTIGEgcHJldHR5IHNlbnNpdGl2ZSBhcmVhLCByZWFsbHkuIERlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgZGlyZWN0bHkgdG91Y2hlcyBMUlUgZXZpY3Rpb24sIEkga25vdyB0aGUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBjb25maWd1cmF0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHRlc3RpbmcgdGhpcyBlZmZlY3RpdmVseS4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzeW1ib2xzIHRvIHRhcmdldCB3aXRoIG15IGZ1enppbmcgZWZmb3J0cy4gYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBlc3BlY2lhbGx5IHNpbmNlIGBzb3J0X2ZvbGlvYCwgd2hpbGUgcmVsZXZhbnQsIGlzIHN0YXRpYyBhbmQgbWF5IHdlbGwgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFdlJ2xsIGFsc28gY29uc2lkZXIgYGV2aWN0X2ZvbGlvc2AgdG9vIGFzIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhpcyBpcyBub3QgaW5saW5lZCwgYWx0aG91Z2ggaXQncyBhbHNvIHN0YXRpYy4gYHNjYW5fZm9saW9zYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayB0b28uXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIGlmIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIHN0YXRpYywgd2hpY2ggd2lsbCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgdGhlIGZ1enppbmcgYXBwcm9hY2ggSSB0YWtlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjQyLjA2NjQzOTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDk5NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTMwPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5OS1cXG5tbS92bXNjYW4uYzo1MjAwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMDEte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk0ND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk0OC1cXG5tbS92bXNjYW4uYzo1OTQ5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NTAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk2MT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTcyLVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo1OTczOlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01OTc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo0Mi4xMTU5NDM2ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1ODYwNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC5cblxuKipEZWNvbnN0cnVjdGluZyBgc2hyaW5rX2xydXZlY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgYHNocmlua19scnV2ZWNgIGZ1bmN0aW9uLiBJJ20gZm9jdXNpbmcgb24gaXQgYmVjYXVzZSwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGl0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9wZXJhdGlvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IG1lY2hhbmljcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBtYW5hZ2VzIHNocmlua2luZyBhbiBMUlUgdmVjdG9yLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY29tbW9uIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGluIG15IGhlYWQ6IGlkZW50aWZ5aW5nIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2RzIGZvciB0aGlzIHRhc2sgaW4gdGhlIGRvbWFpbiBvZiBMUlUgaW1wbGVtZW50YXRpb25zLiBJdCBtdXN0IGJlIGFib3V0IGVmZmljaWVudGx5IHJlbW92aW5nIGxlYXN0IHJlY2VudGx5IHVzZWQgZWxlbWVudHMgdG8gZnJlZSB1cCBtZW1vcnkuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnM/IElzIGl0IGFib3V0IHNpbXBseSBmcmVlaW5nIG1lbW9yeSwgb3IgaXMgaXQgbW9yZSBudWFuY2VkIHRoYW4gdGhhdCwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgaW1wYWN0IG9mIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBiZWluZyBldmljdGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW4gcGxheSBoZXJlPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzaW1wbHkgZGVjcmVhc2luZyB0aGUgc2l6ZSBvZiBhIHZlY3Rvciwgb3IgaXMgdGhlcmUgbW9yZSBjb21wbGV4IHJlLWFycmFuZ2VtZW50P1xuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6NDUuMTc0NTUyMDg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0OTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwMDk9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDMtICovXFxubW0vdm1zY2FuLmM6NTA0NDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDUte1xcbi0tXFxubW0vdm1zY2FuLmM9NTA4OT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDgtXFxubW0vdm1zY2FuLmM6NTEwOTpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxMTAtXFxuLS1cXG5tbS92bXNjYW4uYz01MTMwPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5OS1cXG5tbS92bXNjYW4uYzo1MjAwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMDEte1xcbi0tXFxubW0vdm1zY2FuLmMtNTIxMi1cXG5tbS92bXNjYW4uYzo1MjEzOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjE0LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NDQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NDgtXFxubW0vdm1zY2FuLmM6NTk0OTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01OTUwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NTQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NjAtXFxubW0vdm1zY2FuLmM6NTk2MTpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTk2Mi17XFxuLS1cXG5tbS92bXNjYW4uYy01OTcyLVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo1OTczOlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01OTc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NjE1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjExLVxcbm1tL3Ztc2Nhbi5jOjYyMTI6XFx0XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MjEzLVxcbi0tXFxubW0vdm1zY2FuLmM9NjgwNz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzNy1cXHQgKi9cXG5tbS92bXNjYW4uYzo2ODM4OlxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4MzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjQ1LjIyNDYwMzg0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2MzE2ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQ29kZSBTdHJ1Y3R1cmU6IElkZW50aWZ5aW5nIFBvdGVudGlhbCBTY29wZSBmb3IgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gYHNocmlua19scnV2ZWNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCB3aGV0aGVyIGl0J3MgdHJ1bHkgdGhlIGJlc3QgcGxhY2UgZm9yIGl0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0J3Mgc3RhdGljLCBpdCdzIGxpbWl0ZWQgaW4gaXRzIGFjY2Vzc2liaWxpdHkuIE15IHByaW1hcnkgdGhvdWdodCBpcywgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldCBhbmQgaHVudCBmb3IgKm5vbiotc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSBtb3JlIGZsZXhpYmxlIG9yIGdsb2JhbGx5IHJlbGV2YW50IGFwcHJvYWNoIG1pZ2h0IGJlIGJlbmVmaWNpYWwuIFBlcmhhcHMgdGhlcmUgYXJlIHNpbWlsYXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGdlbmVyYWxpemVkLCBvciBwZXJoYXBzIHRoaXMgZnVuY3Rpb24gY291bGQgYmVuZWZpdCBmcm9tIGJyb2FkZXIgdmlzaWJpbGl0eSBvciBldmVuIHNvbWUgZm9ybSBvZiBtb2R1bGFyaXR5LiBUaGlzIHN1Z2dlc3RzIEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjQ4LjM3MDkyMzU2M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTAyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NzYxPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwNi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXFxubW0vdm1zY2FuLmM6NjgwNzp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4MDgtXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo0OC40MTY5MzgwNzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODgzNzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHlvdSwgdGhlIHVzZXIsIGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2YgZGV0YWlsOlxuXG4qKlRoaW5raW5nIEFib3V0IGB0cnlfdG9fZnJlZV9wYWdlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHRyeV90b19mcmVlX3BhZ2VzYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCdzIG5vdCBzaW1wbHkgYSB1dGlsaXR5IGZ1bmN0aW9uLCBvcGVyYXRpbmcgaW5kZXBlbmRlbnRseSBvZiBhbnkgc3BlY2lmaWMgb2JqZWN0IG9yIG1vZHVsZSBzdGF0ZS4gSXQgc3VnZ2VzdHMgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIHJlbGllcyBvbiwgb3IgcG90ZW50aWFsbHkgbW9kaWZpZXMsIGRhdGEgd2l0aGluIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb3Igb2JqZWN0LiBLbm93aW5nIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IG9iamVjdCBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciB0aGluZ3MgbGlrZSBjb25jdXJyZW5jeSwgZGF0YSBpbnRlZ3JpdHksIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6NTEuODM1Nzc5MDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjY2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY1MDg9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1MzgtICovXFxubW0vdm1zY2FuLmM6NjUzOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY1NDAtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzYwLVxcbm1tL3Ztc2Nhbi5jOjY3NjE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjc2Mi1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02Nzk1LVxcbm1tL3Ztc2Nhbi5jOjY3OTY6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc5Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NDc9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NzgtXFxubW0vdm1zY2FuLmM6Njg3OTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODgwLVxcbi0tXFxubW0vdm1zY2FuLmM9NzY0NT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NjQtXFxubW0vdm1zY2FuLmM6NzY2NTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NjY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo1MS44ODQwNTM4MDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDU5OTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gTWVtb3J5IFJlY2xhbWF0aW9uIFN0cmF0ZWdpZXMqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBlZmZlY3RpdmUgc3RyYXRlZ2llcyBmb3IgZnJlZWluZyB1cCBtZW1vcnkuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBzb2xpZCBmdW5jdGlvbiB0byBleHBsb3JlIGZ1cnRoZXIuIEl0IHNlZW1zIHRvIGJlIGEgZ29vZCBoaWdoLWxldmVsIHN0YXJ0aW5nIHBvaW50LiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgc2hyaW5rX2FsbF9tZW1vcnlgLCB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLiBBbmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbWVtb3J5IHByZXNzdXJlIGF0IHRoZSBjZ3JvdXAgbGV2ZWwsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBsb29rcyByZWxldmFudCB0b28uXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgc2xpZ2h0bHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgYHNocmlua19ub2RlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIElmIGl0J3Mgc3RhdGljLCBpdCBsaW1pdHMgaXRzIHV0aWxpdHkgZm9yIGdlbmVyYWwgYW5hbHlzaXMgb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiwgYnV0IGlmIGl0J3Mgbm9uLXN0YXRpYywgaXQgb3BlbnMgdXAgYSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcy4gR290dGEgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjU1LjUxNDY1Njk1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MzA2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MTk0MD1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE5NzgtLypcXG5tbS92bXNjYW4uYzoxOTc5OiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5tbS92bXNjYW4uYy0xOTgwLSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xcbi0tXFxubW0vdm1zY2FuLmM9NTIwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjAtXFxubW0vdm1zY2FuLmM6NTIyMTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMjIte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk0OT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTMtXFxubW0vdm1zY2FuLmM6NTk1NDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NTUte1xcbi0tXFxubW0vdm1zY2FuLmM9NjEwMD1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTEtXFxubW0vdm1zY2FuLmM6NjE1MjpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjE1My17XFxuLS1cXG5tbS92bXNjYW4uYy02MjMwLVxcbm1tL3Ztc2Nhbi5jOjYyMzE6c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjIzMi17XFxuLS1cXG5tbS92bXNjYW4uYy02MjM4LVxcdFxcdG1lbXNldChcXHUwMDI2c2MtXFx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXFx1MDAzZW5yKSk7XFxubW0vdm1zY2FuLmM6NjIzOTpcXHRcXHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjI0MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTUtXFxubW0vdm1zY2FuLmM6NjI1NjpcXHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MjU3LVxcbi0tXFxubW0vdm1zY2FuLmM9NjQxNj1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NDk0LVxcdFxcdGxhc3RfcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbm1tL3Ztc2Nhbi5jOjY0OTU6XFx0XFx0c2hyaW5rX25vZGUoem9uZS1cXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTY0OTYtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9Njc2MT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MDYtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY4MDc6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODA4LVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MzMtXFx0ICogaGVyZSBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IGxpbWl0cyB0aGUgcGFnZXMgd2UgY2FuIHNjYW4uXFxubW0vdm1zY2FuLmM6NjgzNDpcXHQgKiBpZiB3ZSBkb24ndCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcXG5tbS92bXNjYW4uYy02ODM1LVxcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAncyBhcyB3ZWxsLiBXZSBoYWNrXFxuLS1cXG5tbS92bXNjYW4uYz02OTU1PXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NzktXFx0XFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQnc1xcbm1tL3Ztc2Nhbi5jOjY5ODA6XFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG5tbS92bXNjYW4uYy02OTgxLVxcdFxcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMzc9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA3NS0gKi9cXG5tbS92bXNjYW4uYzo3MDc2OnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTcwNzctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNzA5Mi1cXHQgKi9cXG5tbS92bXNjYW4uYzo3MDkzOlxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNzA5NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcxNDk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNTgtXFxubW0vdm1zY2FuLmM6NzI1OTpcXHRcXHQvKiBDYWxsIHNvZnQgbGltaXQgcmVjbGFpbSBiZWZvcmUgY2FsbGluZyBzaHJpbmtfbm9kZS4gKi9cXG5tbS92bXNjYW4uYy03MjYwLVxcdFxcdHNjLm5yX3NjYW5uZWQgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmMtNzI3MC1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3MjcxOlxcdFxcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFxcdTAwMjZzYykpXFxubW0vdm1zY2FuLmMtNzI3Mi1cXHRcXHRcXHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9NzgyNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNzg1Mi1cXHRcXHRkbyB7XFxubW0vdm1zY2FuLmM6Nzg1MzpcXHRcXHRcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTc4NTQtXFx0XFx0fSB3aGlsZSAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IC0tc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwM2U9IDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo1NS41NjI1OTMwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyNTUxMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhleSdyZSAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgdGhleSdyZSBlaXRoZXIgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xgIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYXJlIGJlaW5nIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cbk15IG5leHQgbW92ZSBpcyB0byBkaXZlIGludG8gYG1tL3Ztc2Nhbi5jYC4gSSB3YW50IHRvIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBleHBvcnRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnl0aGluZyBlbHNlIGluIHRoYXQgZmlsZSB0aGF0ICppc24ndCogYHN0YXRpY2Ag4oCTIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbnRlbmRlZCBzY29wZSBpcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IGZvciB3aGF0ZXZlciBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24uIEEgcXVpY2sgYGdyZXBgIGZvciBgRVhQT1JUX1NZTUJPTGAgb3IgYSB2aXN1YWwgc2NhbiBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGFuc3dlci4gSSdtIHRyeWluZyB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgaW50ZW5kZWQgc2NvcGUgYW5kIHZpc2liaWxpdHkgb2YgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcywgaW4gb3JkZXIgdG8gZ2FpbiBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBvdmVyYWxsIHB1cnBvc2UgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhleSBtaWdodCBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjU5LjYxNTE0ODA4OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNjY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MDY1PXZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS92bXNjYW4uYy04MDk5LX1cXG5tbS92bXNjYW4uYzo4MTAwOkVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG5tbS92bXNjYW4uYy04MTAxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo1OS42NjEyMjA3MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMzYzMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdHJ5X3RvX2ZyZWVfcGFnZXNgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhZ2UgcmVjbGFpbSBpc3N1ZSwgYW5kIG5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgdGhlIGNvcmUgb2YgdGhlIGFjdGl2ZSBzY2FubmluZyBwcm9jZXNzLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBpbW1lZGlhdGVseSBvYnZpb3VzIGp1bXBpbmcgb3V0LiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiBob3cgcGFnZXMgYXJlIGJlaW5nIGV2YWx1YXRlZCBhbmQgcmVjbGFpbWVkLiBJcyBpdCBhIG1hdHRlciBvZiBob3cgYWdncmVzc2l2ZSB0aGUgc2Nhbm5pbmcgaXM/IE9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyB0eXBlcyBvZiBwYWdlcyBhcmUgY2F1c2luZyB0cm91YmxlPyBMZXQncyB0cmFjZSB0aHJvdWdoIHRoZSBsb2dpYyBhbmQgY2hlY2sgb3V0IHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyB1c2VkLiBXaGF0IGNvbmRpdGlvbnMgYXJlIGZhaWxpbmc/IEknbSBleHBlY3RpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggYHNocmlua19zbGFiYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYW5kIHRoZSBvdmVyYWxsIExSVSBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWVzIGFuZCBlcnJvciBoYW5kbGluZyBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzowMy4wNjQ4NTQ2MzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzk0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjY4MT1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NjAtXFxubW0vdm1zY2FuLmM6Njc2MTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02NzYyLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MDMuMTE3NjU3NTE2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTY3MTY2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKlxuXG5BbHJpZ2h0LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaWNraW5nIHVwIG9uIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHBvdGVudGlhbCBhcmVhcyBmb3IgbWVtb3J5IHJlY2xhbWF0aW9uLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCDigJMgaXQncyBhIGRpcmVjdCwgZm9jdXNlZCBhcHByb2FjaC4gQnV0IHRoZW4gYWdhaW4sIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgYWxzbyBpbnRyaWd1aW5nLiBJdCBzb3VuZHMgbGlrZSBhIGJyb2FkZXIsIG1vcmUgYWdncmVzc2l2ZSBzdHJhdGVneSwgcG90ZW50aWFsbHkgZW5jb21wYXNzaW5nIG1vcmUgYXNwZWN0cyBvZiB0aGUgbWVtb3J5IHN5c3RlbS5cblxuTGV0J3MgZGlnIGludG8gYHNocmlua19hbGxfbWVtb3J5YC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGFsbW9zdCBjZXJ0YWlubHkgYG1tL3Ztc2Nhbi5jYC4gSXQncyB0aGUgY29yZSBvZiB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgaW4gdGhlIGtlcm5lbC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNocmlua19hbGxfbWVtb3J5YCB0aGVyZSwgYWxvbmcgd2l0aCB0aGUgZGV0YWlscyBvZiBob3cgaXQgb3JjaGVzdHJhdGVzIHRoZSBwYWdlIHNjYW5uaW5nIGFuZCBldmljdGlvbiBwcm9jZXNzZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGl0IHByaW9yaXRpemVzIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgYW5kIHdoYXQgY3JpdGVyaWEgaXQgdXNlcyB0byBkZWNpZGUgd2hpY2ggcGFnZXMgYXJlIGVsaWdpYmxlIGZvciBldmljdGlvbi4gVGhpcyBjb3VsZCBiZSB3aGVyZSBJIGZpbmQgdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTY2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MDcuODc0Mzc2ODU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4NjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc2MzE9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzY0NC0gKi9cXG5tbS92bXNjYW4uYzo3NjQ1OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc2NDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzowNy45MjEyNjcyMTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNzgzNzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCB3ZSdyZSBsb29raW5nIGF0LCBzdW1tYXJpemVkIGZyb20gdGhhdCBwcm9tcHQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0byBsb2NhdGUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgcGFnZSBmcmVlaW5nIGlzIG1hbmFnZWQuIEZyb20gaGVyZSwgSSBuZWVkIHRvIHNlZSB3aGF0IGxvZ2ljIGlzIGluIHRoaXMgc3BlY2lmaWMgY2FsbCwgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVk0gc3lzdGVtLiBUaGlzIHdpbGwgb2ZmZXIgaW5zaWdodCBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHJlY2xhaW0gc3BlY2lmaWNhbGx5IGZyb20gd2l0aGluIGNncm91cHMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgdGhlbiB0cmFjZSB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZCwgd2hpY2ggc2hvdWxkIGluZm9ybSBtZSBhYm91dCBob3cgcHJvYWN0aXZlIG9yIHJlYWN0aXZlIHRoZSBtZW1vcnkgY2dyb3VwJ3MgcGFnZSBmcmVlaW5nIHNjaGVtZSBpcy4gSSdsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBbmQgaG93IHRoZSBwb2xpY3kgZGVjaXNpb25zIGFyZSBtYWRlIGhlcmUuIEluIGVzc2VuY2UsIG15IGdvYWwgaXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2xhaW0gcGF0aCBmb3IgbWVtb3J5IGNncm91cHMsIGFzIHRyaWdnZXJlZCBieSB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ3OjEyLjA1OTEwNzM0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjcxNzUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY4MDc9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NDYtXFxubW0vdm1zY2FuLmM6Njg0Nzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4NDgtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODctI2Vsc2VcXG5tbS92bXNjYW4uYzo2ODg4OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg4OS1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoxMi40MjYyOTI2OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM0ODYxMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzb3J0X2ZvbGlvYCwgd2hpY2ggaXMgYSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSBNR0xSVSBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHpvb20gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZC4gSSBzZWUgYExSVV9HRU5gIGFuZCwgY29uc2VxdWVudGx5LCBgTFJVX0dFTl9FTkFCTEVEYCBiZWluZyByZWxldmFudCBoZXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIGdlbmVyYXRpb25hbCBMUlUgYmVoYXZpb3IsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRldGVybWluZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBMUlVfR0VOYCBpdHNlbGYgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyBiZWZvcmUgSSBjYW4gZnVsbHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoxNS41NjExNTc4NTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjgxNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDExLVxcbm1tL0tjb25maWc6MTQxMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjYtXFxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ3OjE1LjYxMjQ1MDIzNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ0ODA2MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGJlZW4gcmV2aWV3aW5nIGxpbmVzIDE0MDAtMTQzMCB3aXRoaW4gYG1tL0tjb25maWdgIOKAkyB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgZmVhdHVyZS4gSSBzZWUgdGhhdCBgTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlnIG9wdGlvbiwgYWxvbmcgd2l0aCBhIHJlbGF0ZWQgYExSVV9HRU5fRU5BQkxFRGAuIFRoaXMgaXMgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgYW4gTU1VLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgZGVwZW5kZW5jeSBvbiBgNjRCSVRgLCBvciB0aGUgYWJzZW5jZSBvZiBgU1BBUlNFTUVNYCBvciBpdHMgdXNlIHdpdGggYFZNRU1NQVBgLCBpcyBpbXBvcnRhbnQsIGVuc3VyaW5nIHRoZXJlIGFyZSBlbm91Z2ggc3BhcmUgYml0cyBhdmFpbGFibGUgaW4gdGhlIGBmb2xpby1cdTAwM2VmbGFnc2Agc3RydWN0dXJlLCBhcyB0aGUgY29tbWVudCBzdWdnZXN0cy5cblxuTm93LCBteSBtaW5kIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGtleSBmdW5jdGlvbnMgbGlrZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFzIEkgZGlnIGRlZXBlciBpbnRvIGhvdyB0aGlzIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEFuZCBJIGNhbid0IGZvcmdldCBga3N3YXBkYCwgdGhlIGtlcm5lbCB0aHJlYWQuIEknbSBhc3N1bWluZyBpdHMgcm9sZSB3aWxsIGJlIGtleSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoyMC4yNTc0MzU5ODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQxODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyNCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmMtNS0gKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllLlxcbm1tL3Ztc2Nhbi5jOjY6ICogIGtzd2FwZCBhZGRlZDogNy4xLjk2ICBzY3RcXG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcXG5tbS92bXNjYW4uYy04LSAqICB0byBicmluZyB0aGUgc3lzdGVtIGJhY2sgdG8gZnJlZXBhZ2VzLmhpZ2g6IDIuNC45NywgUmlrIHZhbiBSaWVsLlxcbm1tL3Ztc2Nhbi5jOjk6ICogIFpvbmUgYXdhcmUga3N3YXBkIHN0YXJ0ZWQgMDIvMDAsIEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkuXFxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0Nj1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NTEtXFxubW0vdm1zY2FuLmM6NDUyOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTQ1My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4Mj1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4Ny1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjQ4ODpcXHQgKiBJZiBrc3dhcGQgaXMgZGlzYWJsZWQsIHJlc2NoZWR1bGUgaWYgbmVjZXNzYXJ5IGJ1dCBkbyBub3RcXG5tbS92bXNjYW4uYy00ODktXFx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXFxubW0vdm1zY2FuLmMtNDkwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjQ5MTpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTQ5Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMD12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2LVxcdC8qXFxubW0vdm1zY2FuLmM6NTE3OlxcdCAqIERvIG5vdCB0aHJvdHRsZSB1c2VyIHdvcmtlcnMsIGt0aHJlYWRzIG90aGVyIHRoYW4ga3N3YXBkIG9yXFxubW0vdm1zY2FuLmMtNTE4LVxcdCAqIHdvcmtxdWV1ZXMuIFRoZXkgbWF5IGJlIHJlcXVpcmVkIGZvciByZWNsYWltIHRvIG1ha2VcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMC1cXHQgKi9cXG5tbS92bXNjYW4uYzo1MjE6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNTIyLVxcdCAgICBjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9OTY1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk3NC1cXHQgKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgZmlyc3QgYWxzbyB0cnlpbmcgdG9cXG5tbS92bXNjYW4uYzo5NzU6XFx0ICogZGVtb3RlIG9yIHJlY2xhaW0gcGFnZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdmlhIGtzd2FwZCBpZiB3ZSBhcmVcXG5tbS92bXNjYW4uYy05NzYtXFx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzIGFuZCBpZlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1Nz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMTIwLVxcdFxcdCAqIFRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgZGV0ZXJtaW5lcyBpZiBhIG5vZGUgaXMgbWFya2VkXFxubW0vdm1zY2FuLmM6MTEyMTpcXHRcXHQgKiByZWNsYWltX2Nvbmdlc3RlZC4ga3N3YXBkIHdpbGwgc3RhbGwgYW5kIHN0YXJ0IHdyaXRpbmdcXG5tbS92bXNjYW4uYy0xMTIyLVxcdFxcdCAqIGZvbGlvcyBpZiB0aGUgdGFpbCBvZiB0aGUgTFJVIGlzIGFsbCBkaXJ0eSB1bnF1ZXVlZCBmb2xpb3MuXFxuLS1cXG5tbS92bXNjYW4uYy0xMTg5LVxcdFxcdFxcdC8qIENhc2UgMSBhYm92ZSAqL1xcbm1tL3Ztc2Nhbi5jOjExOTA6XFx0XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy0xMTkxLVxcdFxcdFxcdCAgICBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYz0xNTg4PXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2MTMtXFx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcXG5tbS92bXNjYW4uYzoxNjE0OlxcdCAqIHdlIGFyZSBub3Qga3N3YXBkIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdyaXRlIGRpcnR5IGZpbGUgcGFnZXMuIEJ1dFxcbm1tL3Ztc2Nhbi5jLTE2MTUtXFx0ICogY2FsbCBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlIGNvbmRpdGlvbnNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE4MjE9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXFxuLS1cXG5tbS92bXNjYW4uYy0xODI2LVxcbm1tL3Ztc2Nhbi5jOjE4Mjc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtMTgyOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYz0zODY2PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxcbi0tXFxubW0vdm1zY2FuLmMtMzg2OS1cXG5tbS92bXNjYW4uYzozODcwOlxcdGlmIChwZ2RhdCBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxubW0vdm1zY2FuLmMtMzg3MS1cXHRcXHRWTV9XQVJOX09OX09OQ0Uod2Fsayk7XFxuLS1cXG5tbS92bXNjYW4uYy0zODc0LVxcdH0gZWxzZSBpZiAoIXdhbGsgXFx1MDAyNlxcdTAwMjYgZm9yY2VfYWxsb2MpIHtcXG5tbS92bXNjYW4uYzozODc1OlxcdFxcdFZNX1dBUk5fT05fT05DRShjdXJyZW50X2lzX2tzd2FwZCgpKTtcXG5tbS92bXNjYW4uYy0zODc2LVxcbi0tXFxubW0vdm1zY2FuLmM9Mzg4Nj1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0zODk0LVxcbm1tL3Ztc2Nhbi5jOjM4OTU6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTM4OTYtXFx0XFx0a2ZyZWUod2Fsayk7XFxuLS1cXG5tbS92bXNjYW4uYz00MjA4PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjEzLVxcbm1tL3Ztc2Nhbi5jOjQyMTQ6XFx0Vk1fV0FSTl9PTl9PTkNFKCFjdXJyZW50X2lzX2tzd2FwZCgpKTtcXG5tbS92bXNjYW4uYy00MjE1LVxcbi0tXFxubW0vdm1zY2FuLmM9NTAwOT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTAyMC1cXHQvKiBjaGVjayB0aGUgb3JkZXIgdG8gZXhjbHVkZSBjb21wYWN0aW9uLWluZHVjZWQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jOjUwMjE6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVxcdTAwM2VvcmRlcilcXG5tbS92bXNjYW4uYy01MDIyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMzQtXFxubW0vdm1zY2FuLmM6NTAzNTpcXHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xcbm1tL3Ztc2Nhbi5jLTUwMzYtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYz01MjIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MjQzLVxcbm1tL3Ztc2Nhbi5jOjUyNDQ6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTI0NS1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyNTEtXFxubW0vdm1zY2FuLmM6NTI1MjpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy01MjUzLVxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbi0tXFxubW0vdm1zY2FuLmMtNTI1OS1cXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlIHJlY2xhaW1lZClcXG5tbS92bXNjYW4uYzo1MjYwOlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy01MjYxLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NjE9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk5MC1cXHQgKiBERUZfUFJJT1JJVFkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZmFjdCB3ZSBhcmUgZGlyZWN0XFxubW0vdm1zY2FuLmM6NTk5MTpcXHQgKiByZWNsYWltaW5nIGltcGxpZXMgdGhhdCBrc3dhcGQgaXMgbm90IGtlZXBpbmcgdXAgYW5kIGl0IGlzIGJlc3QgdG9cXG5tbS92bXNjYW4uYy01OTkyLVxcdCAqIGRvIGEgYmF0Y2ggb2Ygd29yayBhdCBvbmNlLiBGb3IgbWVtY2cgcmVjbGFpbSBvbmUgY2hlY2sgaXMgbWFkZSB0b1xcbi0tXFxubW0vdm1zY2FuLmMtNTk5NS1cXHQgKi9cXG5tbS92bXNjYW4uYzo1OTk2OlxcdHByb3BvcnRpb25hbF9yZWNsYWltID0gKCFjZ3JvdXBfcmVjbGFpbShzYykgXFx1MDAyNlxcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy01OTk3LVxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjAyMC1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjYwMjE6XFx0XFx0ICogRm9yIGtzd2FwZCBhbmQgbWVtY2csIHJlY2xhaW0gYXQgbGVhc3QgdGhlIG51bWJlciBvZiBwYWdlc1xcbm1tL3Ztc2Nhbi5jLTYwMjItXFx0XFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXFxuLS1cXG5tbS92bXNjYW4uYz02MTUyPXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNjYtXFx0ICpcXG5tbS92bXNjYW4uYzo2MTY3OlxcdCAqIEZvciBrc3dhcGQsIHJlbGlhYmxlIGZvcndhcmQgcHJvZ3Jlc3MgaXMgbW9yZSBpbXBvcnRhbnRcXG5tbS92bXNjYW4uYy02MTY4LVxcdCAqIHRoYW4gYSBxdWljayByZXR1cm4gdG8gaWRsZS4gQWx3YXlzIGRvIGZ1bGwgd2Fsa3MuXFxubW0vdm1zY2FuLmMtNjE2OS1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MTcwOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVxcdTAwM2VtZW1jZ19mdWxsX3dhbGspXFxubW0vdm1zY2FuLmMtNjE3MS1cXHRcXHRwYXJ0aWFsID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyMzE9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjY5LVxcbm1tL3Ztc2Nhbi5jOjYyNzA6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5tbS92bXNjYW4uYy02MjcxLVxcdFxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYy02MjgyLVxcdFxcdCAqXFxubW0vdm1zY2FuLmM6NjI4MzpcXHRcXHQgKiBPbmNlIGEgbm9kZSBpcyBmbGFnZ2VkIFBHREFUX1dSSVRFQkFDSywga3N3YXBkIHdpbGxcXG5tbS92bXNjYW4uYy02Mjg0LVxcdFxcdCAqIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgdW5kZXIgcGFnZXMgZmxhZ2dlZCBmb3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyOTEtXFx0XFx0LypcXG5tbS92bXNjYW4uYzo2MjkyOlxcdFxcdCAqIElmIGtzd2FwZCBzY2FucyBwYWdlcyBtYXJrZWQgZm9yIGltbWVkaWF0ZVxcbm1tL3Ztc2Nhbi5jLTYyOTMtXFx0XFx0ICogcmVjbGFpbSBhbmQgdW5kZXIgd3JpdGViYWNrIChucl9pbW1lZGlhdGUpLCBpdFxcbi0tXFxubW0vdm1zY2FuLmMtNjMxMi1cXG5tbS92bXNjYW4uYzo2MzEzOlxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTYzMTQtXFx0XFx0XFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy02MzE4LVxcdCAqIFN0YWxsIGRpcmVjdCByZWNsYWltIGZvciBJTyBjb21wbGV0aW9ucyBpZiB0aGUgbHJ1dmVjIGlzXFxubW0vdm1zY2FuLmM6NjMxOTpcXHQgKiBub2RlIGlzIGNvbmdlc3RlZC4gQWxsb3cga3N3YXBkIHRvIGNvbnRpbnVlIHVudGlsIGl0XFxubW0vdm1zY2FuLmMtNjMyMC1cXHQgKiBzdGFydHMgZW5jb3VudGVyaW5nIHVucXVldWVkIGRpcnR5IHBhZ2VzIG9yIGN5Y2xpbmcgdGhyb3VnaFxcbi0tXFxubW0vdm1zY2FuLmMtNjMyMi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MzIzOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjMyNC1cXHQgICAgIXNjLVxcdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYy02MzM1LVxcdCAqIHNsZWVwLiBPbiByZWNsYWltIHByb2dyZXNzLCByZXNldCB0aGUgZmFpbHVyZSBjb3VudGVyLiBBXFxubW0vdm1zY2FuLmM6NjMzNjpcXHQgKiBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIHJ1biB3aWxsIHJldml2ZSBhIGRvcm1hbnQga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTYzMzctXFx0ICovXFxubW0vdm1zY2FuLmMtNjMzOC1cXHRpZiAocmVjbGFpbWFibGUpXFxubW0vdm1zY2FuLmM6NjMzOTpcXHRcXHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VyZWNsYWltX2lkeCk7XFxubW0vdm1zY2FuLmMtNjM0MC1cXHRlbHNlIGlmIChzYy1cXHUwMDNlY2FjaGVfdHJpbV9tb2RlKVxcbi0tXFxubW0vdm1zY2FuLmM9NjM3OD1zdGF0aWMgdm9pZCBjb25zaWRlcl9yZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM5NC1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjYzOTU6XFx0ICogRG8gbm90IHRocm90dGxlIGtzd2FwZCBvciBjZ3JvdXAgcmVjbGFpbSBvbiBOT1BST0dSRVNTIGFzIGl0IHdpbGxcXG5tbS92bXNjYW4uYy02Mzk2LVxcdCAqIHRocm90dGxlIG9uIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0sgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzXFxuLS1cXG5tbS92bXNjYW4uYy02Mzk5LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY0MDA6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxcbm1tL3Ztc2Nhbi5jLTY0MDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NjYzNj1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjY0My1cXG5tbS92bXNjYW4uYzo2NjQ0OlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNjY0NS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2NjAtXFxubW0vdm1zY2FuLmM6NjY2MTpcXHQvKiBrc3dhcGQgbXVzdCBiZSBhd2FrZSBpZiBwcm9jZXNzZXMgYXJlIGJlaW5nIHRocm90dGxlZCAqL1xcbm1tL3Ztc2Nhbi5jOjY2NjI6XFx0aWYgKCF3bWFya19vayBcXHUwMDI2XFx1MDAyNiB3YWl0cXVldWVfYWN0aXZlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpKSB7XFxubW0vdm1zY2FuLmM6NjY2MzpcXHRcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KSBcXHUwMDNlIFpPTkVfTk9STUFMKVxcbm1tL3Ztc2Nhbi5jOjY2NjQ6XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgWk9ORV9OT1JNQUwpO1xcbm1tL3Ztc2Nhbi5jLTY2NjUtXFxubW0vdm1zY2FuLmM6NjY2NjpcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCk7XFxubW0vdm1zY2FuLmMtNjY2Ny1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy02Njc0LSAqIGFuZCB0aGUgUEZNRU1BTExPQyByZXNlcnZlIGZvciB0aGUgcHJlZmVycmVkIG5vZGUgaXMgZ2V0dGluZyBkYW5nZXJvdXNseVxcbm1tL3Ztc2Nhbi5jOjY2NzU6ICogZGVwbGV0ZWQuIGtzd2FwZCB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIHdha2UgdGhlIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jLTY2NzYtICogd2hlbiB0aGUgbG93IHdhdGVybWFyayBpcyByZWFjaGVkLlxcbi0tXFxubW0vdm1zY2FuLmM9NjY4MT1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MTEtXFx0ICogVGhyb3R0bGluZyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgdXNhYmxlIG5vZGUgYW5kIHRocm90dGxlZCBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYzo2NzEyOlxcdCAqIHdhaXQgb24gYSBxdWV1ZSB1bnRpbCBrc3dhcGQgbWFrZXMgcHJvZ3Jlc3MgYW5kIHdha2VzIHRoZW0uIFRoZXJlXFxubW0vdm1zY2FuLmMtNjcxMy1cXHQgKiBpcyBhbiBhZmZpbml0eSB0aGVuIGJldHdlZW4gcHJvY2Vzc2VzIHdha2luZyB1cCBhbmQgd2hlcmUgcmVjbGFpbVxcbi0tXFxubW0vdm1zY2FuLmMtNjc0MS1cXHQgKiB0cmFuc2FjdGlvbiBpbiB0aGUgY2FzZSBvZiBhIGZpbGVzeXN0ZW0gbGlrZSBleHRbM3w0XS4gSW4gdGhpcyBjYXNlLFxcbm1tL3Ztc2Nhbi5jOjY3NDI6XFx0ICogaXQgaXMgbm90IHNhZmUgdG8gYmxvY2sgb24gcGZtZW1hbGxvY193YWl0IGFzIGtzd2FwZCBjb3VsZCBiZVxcbm1tL3Ztc2Nhbi5jLTY3NDMtXFx0ICogYmxvY2tlZCB3YWl0aW5nIG9uIHRoZSBzYW1lIGxvY2suIEluc3RlYWQsIHRocm90dGxlIGZvciB1cCB0byBhXFxuLS1cXG5tbS92bXNjYW4uYy02NzQ5LVxcdGVsc2VcXG5tbS92bXNjYW4uYzo2NzUwOlxcdFxcdC8qIFRocm90dGxlIHVudGlsIGtzd2FwZCB3YWtlcyB0aGUgcHJvY2VzcyAqL1xcbm1tL3Ztc2Nhbi5jLTY3NTEtXFx0XFx0d2FpdF9ldmVudF9raWxsYWJsZSh6b25lLVxcdTAwM2V6b25lX3BnZGF0LVxcdTAwM2VwZm1lbWFsbG9jX3dhaXQsXFxuLS1cXG5tbS92bXNjYW4uYz02ODg4PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODk3LVxcbm1tL3Ztc2Nhbi5jOjY4OTg6c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTY4OTkte1xcbi0tXFxubW0vdm1zY2FuLmM9Njk1NT1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTc3LVxcdFxcdCAqXFxubW0vdm1zY2FuLmM6Njk3ODpcXHRcXHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXFxubW0vdm1zY2FuLmMtNjk3OS1cXHRcXHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCdzXFxubW0vdm1zY2FuLmM6Njk4MDpcXHRcXHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxcbm1tL3Ztc2Nhbi5jLTY5ODEtXFx0XFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxcbi0tXFxubW0vdm1zY2FuLmMtNzAxMi1cXHQgKiBuZWVkIGJhbGFuY2luZyBieSBkZWZpbml0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSB6b25lLXJlc3RyaWN0ZWRcXG5tbS92bXNjYW4uYzo3MDEzOlxcdCAqIGFsbG9jYXRpb24gdHJpZXMgdG8gd2FrZSBhIHJlbW90ZSBrc3dhcGQuXFxubW0vdm1zY2FuLmMtNzAxNC1cXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMjI9c3RhdGljIHZvaWQgY2xlYXJfcGdkYXRfY29uZ2VzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03MDMxLS8qXFxubW0vdm1zY2FuLmM6NzAzMjogKiBQcmVwYXJlIGtzd2FwZCBmb3Igc2xlZXBpbmcuIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmMtNzAzMy0gKiB3YWl0aW5nIGluIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKCkgYW5kIHRoYXQgd2F0ZXJtYXJrcyBoYXZlIGJlZW4gbWV0Llxcbm1tL3Ztc2Nhbi5jLTcwMzQtICpcXG5tbS92bXNjYW4uYzo3MDM1OiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgaXMgcmVhZHkgdG8gc2xlZXBcXG5tbS92bXNjYW4uYy03MDM2LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwMzc6c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTcwMzgtXFx0XFx0XFx0XFx0aW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNDItXFx0ICogc29vbiBhcyBhbGxvd19kaXJlY3RfcmVjbGFpbSgpIGlzIHRydWUuIEJ1dCB0aGVyZSBpcyBhIHBvdGVudGlhbFxcbm1tL3Ztc2Nhbi5jOjcwNDM6XFx0ICogcmFjZSBiZXR3ZWVuIHdoZW4ga3N3YXBkIGNoZWNrcyB0aGUgd2F0ZXJtYXJrcyBhbmQgYSBwcm9jZXNzIGdldHNcXG5tbS92bXNjYW4uYy03MDQ0LVxcdCAqIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmIHByb2Nlc3NlcyBnZXRcXG5tbS92bXNjYW4uYzo3MDQ1OlxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzA0NjpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYzo3MDQ3OlxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbm1tL3Ztc2Nhbi5jLTcwNDgtXFx0ICogYmUgc2xlZXBpbmcgb24gcGZtZW1hbGxvY193YWl0LCBzbyB3YWtlIHRoZW0gbm93IGlmIG5lY2Vzc2FyeS4gSWZcXG5tbS92bXNjYW4uYzo3MDQ5OlxcdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxcbm1tL3Ztc2Nhbi5jLTcwNTAtXFx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzA1Ni1cXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jOjcwNTc6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcXG5tbS92bXNjYW4uYy03MDU4LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNzA2OC0vKlxcbm1tL3Ztc2Nhbi5jOjcwNjk6ICoga3N3YXBkIHNocmlua3MgYSBub2RlIG9mIHBhZ2VzIHRoYXQgYXJlIGF0IG9yIGJlbG93IHRoZSBoaWdoZXN0IHVzYWJsZVxcbm1tL3Ztc2Nhbi5jLTcwNzAtICogem9uZSB0aGF0IGlzIGN1cnJlbnRseSB1bmJhbGFuY2VkLlxcbm1tL3Ztc2Nhbi5jLTcwNzEtICpcXG5tbS92bXNjYW4uYzo3MDcyOiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgc2Nhbm5lZCBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBwYWdlcyB0b1xcbm1tL3Ztc2Nhbi5jLTcwNzMtICogcmVjbGFpbSBvciBpZiB0aGUgbGFjayBvZiBwcm9ncmVzcyB3YXMgZHVlIHRvIHBhZ2VzIHVuZGVyIHdyaXRlYmFjay5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNzUtICovXFxubW0vdm1zY2FuLmM6NzA3NjpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MDc3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcxMzE9Y2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMzYtLypcXG5tbS92bXNjYW4uYzo3MTM3OiAqIEZvciBrc3dhcGQsIGJhbGFuY2VfcGdkYXQoKSB3aWxsIHJlY2xhaW0gcGFnZXMgYWNyb3NzIGEgbm9kZSBmcm9tIHpvbmVzXFxubW0vdm1zY2FuLmMtNzEzOC0gKiB0aGF0IGFyZSBlbGlnaWJsZSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgdW50aWwgYXQgbGVhc3Qgb25lIHpvbmUgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNDAtICpcXG5tbS92bXNjYW4uYzo3MTQxOiAqIFJldHVybnMgdGhlIG9yZGVyIGtzd2FwZCBmaW5pc2hlZCByZWNsYWltaW5nIGF0Llxcbm1tL3Ztc2Nhbi5jLTcxNDItICpcXG5tbS92bXNjYW4uYzo3MTQzOiAqIGtzd2FwZCBzY2FucyB0aGUgem9uZXMgaW4gdGhlIGhpZ2htZW0tXFx1MDAzZW5vcm1hbC1cXHUwMDNlZG1hIGRpcmVjdGlvbi4gIEl0IHNraXBzXFxubW0vdm1zY2FuLmMtNzE0NC0gKiB6b25lcyB3aGljaCBoYXZlIGZyZWVfcGFnZXMgXFx1MDAzZSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBidXQgb25jZSBhIHpvbmUgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcxNDk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNzUtXFx0ICogcGxhY2Ugc28gdGhhdCBwYXJhbGxlbCBhbGxvY2F0aW9ucyB0aGF0IGFyZSBuZWFyIHRoZSB3YXRlcm1hcmsgd2lsbFxcbm1tL3Ztc2Nhbi5jOjcxNzY6XFx0ICogc3RhbGwgb3IgZGlyZWN0IHJlY2xhaW0gdW50aWwga3N3YXBkIGlzIGZpbmlzaGVkLlxcbm1tL3Ztc2Nhbi5jLTcxNzctXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MjA0LVxcdFxcdCAqIGdvIGFoZWFkIGlmIGFsbCBlbGlnaWJsZSB6b25lcyBmb3IgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb25cXG5tbS92bXNjYW4uYzo3MjA1OlxcdFxcdCAqIHJlcXVlc3QgYXJlIGJhbGFuY2VkIHRvIGF2b2lkIGV4Y2Vzc2l2ZSByZWNsYWltIGZyb20ga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTcyMDYtXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MjIyLVxcdFxcdCAqIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlIG5vcm1hbCByZWNsYWltIHNob3VsZCBiZSBlbm91Z2ggdG9cXG5tbS92bXNjYW4uYzo3MjIzOlxcdFxcdCAqIHJlLWV2YWx1YXRlIGlmIGJvb3N0aW5nIGlzIHJlcXVpcmVkIHdoZW4ga3N3YXBkIG5leHQgd2FrZXMuXFxubW0vdm1zY2FuLmMtNzIyNC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNTYtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzI1NzpcXHRcXHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzI1OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNzAtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzI3MTpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTcyNzItXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyODItXFxubW0vdm1zY2FuLmM6NzI4MzpcXHRcXHQvKiBDaGVjayBpZiBrc3dhcGQgc2hvdWxkIGJlIHN1c3BlbmRpbmcgKi9cXG5tbS92bXNjYW4uYy03Mjg0LVxcdFxcdF9fZnNfcmVjbGFpbV9yZWxlYXNlKF9USElTX0lQXyk7XFxuLS1cXG5tbS92bXNjYW4uYy03MzIxLVxcdCAqIHdhdGVybWFya19oaWdoIGF0IHRoaXMgcG9pbnQuIFdlIG5lZWQgdG8gYXZvaWQgaW5jcmVhc2luZyB0aGVcXG5tbS92bXNjYW4uYzo3MzIyOlxcdCAqIGZhaWx1cmUgY291bnQgdG8gcHJldmVudCB0aGUga3N3YXBkIHRocmVhZCBmcm9tIHN0b3BwaW5nLlxcbm1tL3Ztc2Nhbi5jLTczMjMtXFx0ICovXFxubW0vdm1zY2FuLmMtNzMyNC1cXHRpZiAoIXNjLm5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhYm9vc3RlZCkge1xcbm1tL3Ztc2Nhbi5jOjczMjU6XFx0XFx0aW50IGZhaWxfY250ID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMpO1xcbm1tL3Ztc2Nhbi5jOjczMjY6XFx0XFx0Lyoga3N3YXBkIGNvbnRleHQsIGxvdyBvdmVyaGVhZCB0byB0cmFjZSBldmVyeSBmYWlsdXJlICovXFxubW0vdm1zY2FuLmM6NzMyNzpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3JlY2xhaW1fZmFpbChwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgZmFpbF9jbnQpO1xcbm1tL3Ztc2Nhbi5jLTczMjgtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzM2My1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjczNjQ6XFx0ICogUmV0dXJuIHRoZSBvcmRlciBrc3dhcGQgc3RvcHBlZCByZWNsYWltaW5nIGF0IGFzXFxubW0vdm1zY2FuLmM6NzM2NTpcXHQgKiBwcmVwYXJlX2tzd2FwZF9zbGVlcCgpIHRha2VzIGl0IGludG8gYWNjb3VudC4gSWYgYW5vdGhlciBjYWxsZXJcXG5tbS92bXNjYW4uYzo3MzY2OlxcdCAqIGVudGVyZWQgdGhlIGFsbG9jYXRvciBzbG93IHBhdGggd2hpbGUga3N3YXBkIHdhcyBhd2FrZSwgb3JkZXIgd2lsbFxcbm1tL3Ztc2Nhbi5jLTczNjctXFx0ICogcmVtYWluIGF0IHRoZSBoaWdoZXIgbGV2ZWwuXFxuLS1cXG5tbS92bXNjYW4uYy03MzcyLS8qXFxubW0vdm1zY2FuLmM6NzM3MzogKiBUaGUgcGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHggaXMgdXNlZCB0byBwYXNzIHRoZSBoaWdoZXN0IHpvbmUgaW5kZXggdG9cXG5tbS92bXNjYW4uYzo3Mzc0OiAqIGJlIHJlY2xhaW1lZCBieSBrc3dhcGQgZnJvbSB0aGUgd2FrZXIuIElmIHRoZSB2YWx1ZSBpcyBNQVhfTlJfWk9ORVMgd2hpY2ggaXNcXG5tbS92bXNjYW4uYzo3Mzc1OiAqIG5vdCBhIHZhbGlkIGluZGV4IHRoZW4gZWl0aGVyIGtzd2FwZCBydW5zIGZvciBmaXJzdCB0aW1lIG9yIGtzd2FwZCBjb3VsZG4ndFxcbm1tL3Ztc2Nhbi5jLTczNzYtICogc2xlZXAgYWZ0ZXIgcHJldmlvdXMgcmVjbGFpbSBhdHRlbXB0IChub2RlIGlzIHN0aWxsIHVuYmFsYW5jZWQpLiBJbiB0aGF0XFxubW0vdm1zY2FuLmM6NzM3NzogKiBjYXNlIHJldHVybiB0aGUgem9uZSBpbmRleCBvZiB0aGUgcHJldmlvdXMga3N3YXBkIHJlY2xhaW0gY3ljbGUuXFxubW0vdm1zY2FuLmMtNzM3OC0gKi9cXG5tbS92bXNjYW4uYzo3Mzc5OnN0YXRpYyBlbnVtIHpvbmVfdHlwZSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzM4MC1cXHRcXHRcXHRcXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBwcmV2X2hpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MzgxLXtcXG5tbS92bXNjYW4uYzo3MzgyOlxcdGVudW0gem9uZV90eXBlIGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03MzgzLVxcbi0tXFxubW0vdm1zY2FuLmMtNzM4Ni1cXG5tbS92bXNjYW4uYzo3Mzg3OnN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcXG5tbS92bXNjYW4uYy03Mzg4LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03Mzk1LVxcbm1tL3Ztc2Nhbi5jOjczOTY6XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm1tL3Ztc2Nhbi5jLTczOTctXFxuLS1cXG5tbS92bXNjYW4uYy03NDA0LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc0MDU6XFx0aWYgKHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XFxubW0vdm1zY2FuLmMtNzQwNi1cXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNzQwOC1cXHRcXHQgKiBpc29sYXRlIHBhZ2VzIGZyb20gYW5kIHNraXBzIHRoZW0gaW4gdGhlIGZ1dHVyZSBzY2FubmluZy5cXG5tbS92bXNjYW4uYzo3NDA5OlxcdFxcdCAqIFdoZW4ga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBpdCBpcyByZWFzb25hYmxlIHRvIGFzc3VtZVxcbm1tL3Ztc2Nhbi5jLTc0MTAtXFx0XFx0ICogdGhhdCBwYWdlcyBhbmQgY29tcGFjdGlvbiBtYXkgc3VjY2VlZCBzbyByZXNldCB0aGUgY2FjaGUuXFxuLS1cXG5tbS92bXNjYW4uYy03NDIyLVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NzQyMzpcXHRcXHQgKiBJZiB3b2tlbiBwcmVtYXR1cmVseSB0aGVuIHJlc2V0IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHggYW5kXFxubW0vdm1zY2FuLmMtNzQyNC1cXHRcXHQgKiBvcmRlci4gVGhlIHZhbHVlcyB3aWxsIGVpdGhlciBiZSBmcm9tIGEgd2FrZXVwIHJlcXVlc3Qgb3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjctXFx0XFx0aWYgKHJlbWFpbmluZykge1xcbm1tL3Ztc2Nhbi5jOjc0Mjg6XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCxcXG5tbS92bXNjYW4uYzo3NDI5OlxcdFxcdFxcdFxcdFxcdGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzQzMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpKTtcXG5tbS92bXNjYW4uYy03NDMxLVxcbm1tL3Ztc2Nhbi5jOjc0MzI6XFx0XFx0XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKSBcXHUwMDNjIHJlY2xhaW1fb3JkZXIpXFxubW0vdm1zY2FuLmM6NzQzMzpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIHJlY2xhaW1fb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jLTc0MzQtXFx0XFx0fVxcbm1tL3Ztc2Nhbi5jLTc0MzUtXFxubW0vdm1zY2FuLmM6NzQzNjpcXHRcXHRmaW5pc2hfd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0vdm1zY2FuLmM6NzQzNzpcXHRcXHRwcmVwYXJlX3RvX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxubW0vdm1zY2FuLmMtNzQzOC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03NDQ0LVxcdGlmICghcmVtYWluaW5nIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmM6NzQ0NTpcXHQgICAgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcXG5tbS92bXNjYW4uYzo3NDQ2OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAocGdkYXQtXFx1MDAzZW5vZGVfaWQpO1xcbm1tL3Ztc2Nhbi5jLTc0NDctXFxuLS1cXG5tbS92bXNjYW4uYy03NDUyLVxcdFxcdCAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGVcXG5tbS92bXNjYW4uYzo3NDUzOlxcdFxcdCAqIHBlci1jcHUgdm1zdGF0IHRocmVzaG9sZCB3aGlsZSBrc3dhcGQgaXMgYXdha2UgYW5kIHJlc3RvcmVcXG5tbS92bXNjYW4uYy03NDU0LVxcdFxcdCAqIHRoZW0gYmVmb3JlIGdvaW5nIGJhY2sgdG8gc2xlZXAuXFxuLS1cXG5tbS92bXNjYW4uYy03NDY3LVxcdH1cXG5tbS92bXNjYW4uYzo3NDY4OlxcdGZpbmlzaF93YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0KTtcXG5tbS92bXNjYW4uYy03NDY5LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0ODMtICovXFxubW0vdm1zY2FuLmM6NzQ4NDpzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbm1tL3Ztc2Nhbi5jLTc0ODUte1xcbi0tXFxubW0vdm1zY2FuLmMtNzQ5My1cXHQgKiBhbmQgdGhhdCBpZiB3ZSBuZWVkIG1vcmUgbWVtb3J5IHdlIHNob3VsZCBnZXQgYWNjZXNzIHRvIGl0XFxubW0vdm1zY2FuLmM6NzQ5NDpcXHQgKiByZWdhcmRsZXNzIChzZWUgXFxcIl9fYWxsb2NfcGFnZXMoKVxcXCIpLiBcXFwia3N3YXBkXFxcIiBzaG91bGRcXG5tbS92bXNjYW4uYy03NDk1LVxcdCAqIG5ldmVyIGdldCBjYXVnaHQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVpbmcgbG9naWMuXFxuLS1cXG5tbS92bXNjYW4uYy03NTA1LVxcbm1tL3Ztc2Nhbi5jOjc1MDY6XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcXG5tbS92bXNjYW4uYzo3NTA3OlxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XFxubW0vdm1zY2FuLmMtNzUwOC1cXHRhdG9taWNfc2V0KFxcdTAwMjZwZ2RhdC1cXHUwMDNlbnJfd3JpdGViYWNrX3Rocm90dGxlZCwgMCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NTExLVxcbm1tL3Ztc2Nhbi5jOjc1MTI6XFx0XFx0YWxsb2Nfb3JkZXIgPSByZWNsYWltX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc1MTM6XFx0XFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcXG5tbS92bXNjYW4uYy03NTE0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzUxNS1cXG5tbS92bXNjYW4uYzo3NTE2Omtzd2FwZF90cnlfc2xlZXA6XFxubW0vdm1zY2FuLmM6NzUxNzpcXHRcXHRrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnZGF0LCBhbGxvY19vcmRlciwgcmVjbGFpbV9vcmRlcixcXG5tbS92bXNjYW4uYy03NTE4LVxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NTIwLVxcdFxcdC8qIFJlYWQgdGhlIG5ldyBvcmRlciBhbmQgaGlnaGVzdF96b25laWR4ICovXFxubW0vdm1zY2FuLmM6NzUyMTpcXHRcXHRhbGxvY19vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NTIyOlxcdFxcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzUyMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jOjc1MjQ6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcXG5tbS92bXNjYW4uYzo3NTI1OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XFxubW0vdm1zY2FuLmMtNzUyNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1MzgtXFx0XFx0ICogUmVjbGFpbSBiZWdpbnMgYXQgdGhlIHJlcXVlc3RlZCBvcmRlciBidXQgaWYgYSBoaWdoLW9yZGVyXFxubW0vdm1zY2FuLmM6NzUzOTpcXHRcXHQgKiByZWNsYWltIGZhaWxzIHRoZW4ga3N3YXBkIGZhbGxzIGJhY2sgdG8gcmVjbGFpbWluZyBmb3JcXG5tbS92bXNjYW4uYzo3NTQwOlxcdFxcdCAqIG9yZGVyLTAuIElmIHRoYXQgaGFwcGVucywga3N3YXBkIHdpbGwgY29uc2lkZXIgc2xlZXBpbmdcXG5tbS92bXNjYW4uYy03NTQxLVxcdFxcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDQtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzU0NTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3dha2UocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCxcXG5tbS92bXNjYW4uYy03NTQ2LVxcdFxcdFxcdFxcdFxcdFxcdGFsbG9jX29yZGVyKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDktXFx0XFx0aWYgKHJlY2xhaW1fb3JkZXIgXFx1MDAzYyBhbGxvY19vcmRlcilcXG5tbS92bXNjYW4uYzo3NTUwOlxcdFxcdFxcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcXG5tbS92bXNjYW4uYy03NTUxLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTktICogQSB6b25lIGlzIGxvdyBvbiBmcmVlIG1lbW9yeSBvciB0b28gZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBtZW1vcnkuICBJZlxcbm1tL3Ztc2Nhbi5jOjc1NjA6ICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJ3NcXG5tbS92bXNjYW4uYzo3NTYxOiAqIHBnZGF0LiAgSXQgd2lsbCB3YWtlIHVwIGtjb21wYWN0ZCBhZnRlciByZWNsYWltaW5nIG1lbW9yeS4gIElmIGtzd2FwZCByZWNsYWltXFxubW0vdm1zY2FuLmMtNzU2Mi0gKiBoYXMgZmFpbGVkIG9yIGlzIG5vdCBuZWVkZWQsIHN0aWxsIHdha2UgdXAga2NvbXBhY3RkIGlmIG9ubHkgY29tcGFjdGlvbiBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzU2NC0gKi9cXG5tbS92bXNjYW4uYzo3NTY1OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU2Ni1cXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NTc3LVxcdHBnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo3NTc4OlxcdGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03NTc5LVxcbm1tL3Ztc2Nhbi5jLTc1ODAtXFx0aWYgKGN1cnJfaWR4ID09IE1BWF9OUl9aT05FUyB8fCBjdXJyX2lkeCBcXHUwMDNjIGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYzo3NTgxOlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzU4Mi1cXG5tbS92bXNjYW4uYzo3NTgzOlxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcikgXFx1MDAzYyBvcmRlcilcXG5tbS92bXNjYW4uYzo3NTg0OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jLTc1ODUtXFxubW0vdm1zY2FuLmM6NzU4NjpcXHRpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCkpXFxubW0vdm1zY2FuLmMtNzU4Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYy03NTg5LVxcdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltIGlmIHBvc3NpYmxlICovXFxubW0vdm1zY2FuLmM6NzU5MDpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpIHx8XFxubW0vdm1zY2FuLmMtNzU5MS1cXHQgICAgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmMtNzYwNC1cXG5tbS92bXNjYW4uYzo3NjA1OlxcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsIG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc2MDYtXFx0XFx0XFx0XFx0ICAgICAgZ2ZwX2ZsYWdzKTtcXG5tbS92bXNjYW4uYzo3NjA3OlxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KTtcXG5tbS92bXNjYW4uYy03NjA4LX1cXG5tbS92bXNjYW4uYy03NjA5LVxcbm1tL3Ztc2Nhbi5jOjc2MTA6dm9pZCBrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdCwgZW51bSBrc3dhcGRfY2xlYXJfaG9wZWxlc3NfcmVhc29uIHJlYXNvbilcXG5tbS92bXNjYW4uYy03NjExLXtcXG5tbS92bXNjYW4uYy03NjEyLVxcdC8qIE9ubHkgdHJhY2UgYWN0dWFsIHJlc2V0cywgbm90IHJlZHVuZGFudCB6ZXJvLXRvLXplcm8gKi9cXG5tbS92bXNjYW4uYzo3NjEzOlxcdGlmIChhdG9taWNfeGNoZyhcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcywgMCkpXFxubW0vdm1zY2FuLmM6NzYxNDpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCByZWFzb24pO1xcbm1tL3Ztc2Nhbi5jLTc2MTUtfVxcbi0tXFxubW0vdm1zY2FuLmMtNzYxNy0vKlxcbm1tL3Ztc2Nhbi5jOjc2MTg6ICogUmVzZXQga3N3YXBkX2ZhaWx1cmVzIG9ubHkgd2hlbiB0aGUgbm9kZSBpcyBiYWxhbmNlZC4gV2l0aG91dCB0aGlzXFxubW0vdm1zY2FuLmMtNzYxOS0gKiBjaGVjaywgc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSAoZS5nLiwgZnJvbSBjZ3JvdXAgbWVtb3J5LmhpZ2hcXG5tbS92bXNjYW4uYzo3NjIwOiAqIHRocm90dGxpbmcpIGNhbiBrZWVwIHJlc2V0dGluZyBrc3dhcGRfZmFpbHVyZXMgZXZlbiB3aGVuIHRoZSBub2RlXFxubW0vdm1zY2FuLmM6NzYyMTogKiBjYW5ub3QgYmUgYmFsYW5jZWQsIGNhdXNpbmcga3N3YXBkIHRvIHJ1biBlbmRsZXNzbHkuXFxubW0vdm1zY2FuLmMtNzYyMi0gKi9cXG5tbS92bXNjYW4uYzo3NjIzOnZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc2MjQtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MjYtXFx0aWYgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSlcXG5tbS92bXNjYW4uYzo3NjI3OlxcdFxcdGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgY3VycmVudF9pc19rc3dhcGQoKSA/XFxubW0vdm1zY2FuLmMtNzYyOC1cXHRcXHRcXHRLU1dBUERfQ0xFQVJfSE9QRUxFU1NfS1NXQVBEIDogS1NXQVBEX0NMRUFSX0hPUEVMRVNTX0RJUkVDVCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NjMwLVxcbm1tL3Ztc2Nhbi5jOjc2MzE6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTc2MzIte1xcbm1tL3Ztc2Nhbi5jOjc2MzM6XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzKSBcXHUwMDNlPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbm1tL3Ztc2Nhbi5jLTc2MzQtfVxcbi0tXFxubW0vdm1zY2FuLmM9NzY0NT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NzUtLypcXG5tbS92bXNjYW4uYzo3Njc2OiAqIFRoaXMga3N3YXBkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC5cXG5tbS92bXNjYW4uYy03Njc3LSAqL1xcbm1tL3Ztc2Nhbi5jOjc2Nzg6dm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc2Nzkte1xcbi0tXFxubW0vdm1zY2FuLmMtNzY4MS1cXG5tbS92bXNjYW4uYzo3NjgyOlxcdHBnZGF0X2tzd2FwZF9sb2NrKHBnZGF0KTtcXG5tbS92bXNjYW4uYzo3NjgzOlxcdGlmICghcGdkYXQtXFx1MDAzZWtzd2FwZCkge1xcbm1tL3Ztc2Nhbi5jOjc2ODQ6XFx0XFx0cGdkYXQtXFx1MDAzZWtzd2FwZCA9IGt0aHJlYWRfY3JlYXRlX29uX25vZGUoa3N3YXBkLCBwZ2RhdCwgbmlkLCBcXFwia3N3YXBkJWRcXFwiLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjc2ODU6XFx0XFx0aWYgKElTX0VSUihwZ2RhdC1cXHUwMDNla3N3YXBkKSkge1xcbm1tL3Ztc2Nhbi5jLTc2ODYtXFx0XFx0XFx0LyogZmFpbHVyZSBhdCBib290IGlzIGZhdGFsICovXFxubW0vdm1zY2FuLmM6NzY4NzpcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBzdGFydCBrc3dhcGQgb24gbm9kZSAlZCwgcmV0PSVwZVxcXFxuXFxcIixcXG5tbS92bXNjYW4uYzo3Njg4OlxcdFxcdFxcdFxcdCAgIG5pZCwgcGdkYXQtXFx1MDAzZWtzd2FwZCk7XFxubW0vdm1zY2FuLmMtNzY4OS1cXHRcXHRcXHRCVUdfT04oc3lzdGVtX3N0YXRlIFxcdTAwM2MgU1lTVEVNX1JVTk5JTkcpO1xcbm1tL3Ztc2Nhbi5jOjc2OTA6XFx0XFx0XFx0cGdkYXQtXFx1MDAzZWtzd2FwZCA9IE5VTEw7XFxubW0vdm1zY2FuLmMtNzY5MS1cXHRcXHR9IGVsc2Uge1xcbm1tL3Ztc2Nhbi5jOjc2OTI6XFx0XFx0XFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVxcdTAwM2Vrc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc2OTMtXFx0XFx0fVxcbm1tL3Ztc2Nhbi5jLTc2OTQtXFx0fVxcbm1tL3Ztc2Nhbi5jOjc2OTU6XFx0cGdkYXRfa3N3YXBkX3VubG9jayhwZ2RhdCk7XFxubW0vdm1zY2FuLmMtNzY5Ni19XFxuLS1cXG5tbS92bXNjYW4uYy03NzAxLSAqL1xcbm1tL3Ztc2Nhbi5jOjc3MDI6dm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZClcXG5tbS92bXNjYW4uYy03NzAzLXtcXG5tbS92bXNjYW4uYy03NzA0LVxcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjAuMzA0NDgxODU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDI4Nzg1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE1HTFJVIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE1HTFJVIHBhdGNoLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gSSBpbml0aWFsbHkgdGhvdWdodCBga3N3YXBkYCBtaWdodCBiZSBhIHJlbGV2YW50IHN5bWJvbCwgYnV0IGl0J3MgcmVhbGx5IGp1c3QgYSB0aHJlYWQuIE5vdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGlkZW50aWZ5aW5nIHRoZSBrZXkgY2hhbmdlcy4gSW5zdGVhZCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrIG9mIG1lbW9yeSByZWNsYW1hdGlvbi5cblxuYHRyeV90b19mcmVlX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBzZWVtIG11Y2ggbW9yZSBwcm9taXNpbmcuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gZnJlZWluZyBtZW1vcnksIGFuZCBhcmUgbGlrZWx5IHRvIGJlIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIExldCdzIGRlbHZlIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VhcmNoIGZvciBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGV2aWN0X2ZvbGlvc2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuXG5cbldhaXQuLi4gaXMgYHNocmlua19hbGxfbWVtb3J5YCBleHBvcnRlZD8gQWgsIG5vLCBpdCdzIHRpZWQgdG8gaGliZXJuYXRpb24uIFRoYXQncyBub3QgdGhlIHByaW1hcnkgZm9jdXMgaGVyZS4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB1c2VkIGJ5IHRoZSBwYWdlIGFsbG9jYXRvciwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIG1lbWNnLXJlbGF0ZWQsIHNvIGl0IHdpbGwgYmUgcmVsZXZhbnQgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWVtY2cgaW50ZXJhY3Rpb24uXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIE1HTFJVIGZ1bmN0aW9uYWxpdHkuIExvb2tzIGxpa2UgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGtleXMuIE5vdyB0aGF0IEkgaGF2ZSBpZGVudGlmaWVkIHRoZSBmdW5jdGlvbnMsIGxldCdzIGFkZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW8oKWAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgcmVjbGFtYXRpb24uIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2Ugd2Ugd2FudCB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBsZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBMUlVfR0VOX0VOQUJMRURgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuIEFoLCB5ZXMsIGl0IGRlcGVuZHMgb24gYExSVV9HRU5gIGFuZCBpcyBtYXJrZWQgXCJFbmFibGUgYnkgZGVmYXVsdC5cIiBUaGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3csIEknbSBjb25maWRlbnQgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiBmb2N1cyBzeW1ib2xzIGFuZCBhIGNsZWFyIHJhdGlvbmFsZS4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzNSwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjguNzA3MzY0MDk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2MzU3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGV2aWN0aW9uIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHVuZXZpY3RhYmxlIGZvbGlvcyBpbiBzb3J0X2ZvbGlvKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjguODA1MDEwMDE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY0NjM4MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjguODA1NjIxNzk0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxNjQwMjE0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQ5NDBiNGE1ZjdhZjI1ZGQ1NDliNDdjNzFjNWEwNDFiMjY3MTI5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjQ2OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzE5NGRhN2RjYzc5NS4uZWNhNWZmNjQyMzhkZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQ2NDgsNyArNDY0OCw2IEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0XHQgICAgICAgaW50IHRpZXJfaWR4KVxuIHtcbi1cdGJvb2wgc3VjY2VzcztcbiBcdGludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbkBAIC00NjYwLDE2ICs0NjU5LDYgQEAgc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUywgZm9saW8pO1xuIFxuLVx0LyogdW5ldmljdGFibGUgKi9cbi1cdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkge1xuLVx0XHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4tXHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuLVx0XHRmb2xpb19zZXRfdW5ldmljdGFibGUoZm9saW8pO1xuLVx0XHRscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuLVx0XHRfX2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR0NVTExFRCwgZGVsdGEpO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbiBcdC8qIHByb21vdGVkICovXG4gXHRpZiAoZ2VuICE9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XG4gXHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoyOC44MDU2MjMzNDRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE2Mzk5MTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCBpbiBgbW0vdm1zY2FuLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBzb3J0X2ZvbGlvYCBmdW5jdGlvbi4gV2hhdCBJJ20gc2VlaW5nIGlzIGEgcmVtb3ZhbCBvZiB0aGUgYmxvY2sgZGVhbGluZyB3aXRoIHVuZXZpY3RhYmxlIGZvbGlvcy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hlY2sgYCFmb2xpb19ldmljdGFibGUoZm9saW8pYCBhbmQgaXRzIGFzc29jaWF0ZWQgbG9naWMgaXMgZ29uZS4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgY2hhbmdlIHdpdGhpbiB0aGUgcGFnZSBldmljdGlvbiBhbmQgTFJVIGdlbmVyYXRpb24gcHJvY2Vzcy5cblxuUmlnaHQgYXdheSwgSSBkb24ndCBzZWUgYW55dGhpbmcgdGhhdCBzY3JlYW1zIFwic2VjdXJpdHkgdnVsbmVyYWJpbGl0eVwiIGF0IG1lLiBUaGlzIGlzbid0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIHRoYXQgd291bGQgbGVhZCB0byB1c2VyLXNwYWNlIGluZm9ybWF0aW9uIGxlYWtzLiBJdCdzIHN0cmljdGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBUaGUgY29kZSBpcyBzaW1wbHkgcmVtb3ZpbmcgYSBjb25kaXRpb24gaW4gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExSVSwgbm90IGFsdGVyaW5nIG1lbW9yeSBjb250ZW50cy5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgdGhvdWdoLiBUaGUgY29kZSByZW1vdmVkIGluY2x1ZGVkIGEgYHN1Y2Nlc3NgIHZhcmlhYmxlLiBJdCBsb29rcyBsaWtlIHRoYXQgdmFyaWFibGUgd2FzIG9ubHkgdXNlZCBsb2NhbGx5IHdpdGhpbiB0aGUgcmVtb3ZlZCBibG9jay4gSSBzZWUgbm8gbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGVpdGhlci4gVGhlIGNoYW5nZSBsb29rcyBjbGVhbjsgdGhlcmUncyBubyB3YXkgdGhpcyBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGZvciwgbm90IGp1c3QgYW55IHNvcnQgb2YgbWVtb3J5IGVycm9yLiBTdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTiBhcmUgd2hhdCBJJ2QgcmVseSBvbiBoZXJlIHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlmIHRoZXkncmUgcHJlc2VudCBkdWUgdG8gc29tZSBpbmNvcnJlY3QgTFJVIGhhbmRsaW5nLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEkgZG9uJ3QgYmVsaWV2ZSBpdCBpbnRyb2R1Y2VzIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQzLCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ3OjM1Ljk2OTYyMDEyMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIGNvbmRpdGlvbmFsIGJsb2NrIGhhbmRsaW5nIHVuZXZpY3RhYmxlIGZvbGlvcyBpbiBgc29ydF9mb2xpb2Agd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBMUlUgbGlzdCBtYW5hZ2VtZW50LCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY29uZGl0aW9uYWwgYmxvY2sgaGFuZGxpbmcgdW5ldmljdGFibGUgZm9saW9zIGluIGBzb3J0X2ZvbGlvYCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IExSVSBsaXN0IG1hbmFnZW1lbnQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6j6nl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 09:44:20 +0000 UTC FinishedAt: 2026-08-11 09:47:37 +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": "1029098ee3275ea5b78e329ce132262affa2f8cc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "1029098ee3275ea5b78e329ce132262affa2f8cc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "c456008a-6ce0-4824-9d60-149b7ee06aa4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "shrink_all_memory", "try_to_free_mem_cgroup_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NDY6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzE5NGRhN2RjYzc5NS4uZWNhNWZmNjQyMzhkZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTQ2NDgsNyAmIzQzOzQ2NDgsNiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdFx0ICAgICAgIGludCB0aWVyX2lkeClcbiB7XG4tXHRib29sIHN1Y2Nlc3M7XG4gXHRpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG5AQCAtNDY2MCwxNiAmIzQzOzQ2NTksNiBAQCBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TLCBmb2xpbyk7XG4gXG4tXHQvKiB1bmV2aWN0YWJsZSAqL1xuLVx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7XG4tXHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbi1cdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tXHRcdGZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xpbyk7XG4tXHRcdGxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuIFx0LyogcHJvbW90ZWQgKi9cbiBcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbiBcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NDY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDMxOTRkYTdkY2M3OTUuLmVjYTVmZjY0MjM4ZGQgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00NjQ4LDcgJiM0Mzs0NjQ4LDYgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwKIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAkJICAgICAgIGludCB0aWVyX2lkeCkKIHsKLQlib29sIHN1Y2Nlc3M7CiAJaW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CkBAIC00NjYwLDE2ICYjNDM7NDY1OSw2IEBAIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jCiAKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZ2VuICZndDs9IE1BWF9OUl9HRU5TLCBmb2xpbyk7CiAKLQkvKiB1bmV2aWN0YWJsZSAqLwotCWlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkgewotCQlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7Ci0JCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwotCQlmb2xpb19zZXRfdW5ldmljdGFibGUoZm9saW8pOwotCQlscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pOwotCQlfX2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR0NVTExFRCwgZGVsdGEpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KIAkvKiBwcm9tb3RlZCAqLwogCWlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pKSB7CiAJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7bHJ1Z2VuLSZndDtmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIFVuZXZpY3RhYmxlIEZvbGlvIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgbW0vdm1zY2FuLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSB0YWtpbmcgb3V0IGEgc2VjdGlvbiBvZiBjb2RlIHdpdGhpbiB0aGUgYHNvcnRfZm9saW9gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBwYXJ0IHRoYXQgZGVhbHMgd2l0aCB1bmV2aWN0YWJsZSBmb2xpb3MuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHdoYXQgdGhhdCBibG9jayB3YXMgYWN0dWFsbHkgZG9pbmcuIEFoLCByaWdodC4gSXQgd2FzIGhhbmRsaW5nIHRoZSBzY2VuYXJpbyB3aGVyZSBhIGZvbGlvIGNvdWxkbiYjMzk7dCBiZSBldmljdGVkLgoKSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZDoKCjEuICBDaGVjayBpZiB0aGUgZm9saW8gKndhc24mIzM5O3QqIGV2aWN0YWJsZS4KMi4gIFRoZW4sIGl0JiMzOTtkIHRyeSB0byByZW1vdmUgdGhlIGZvbGlvIGZyb20gdGhlIExSVSBsaXN0IHVzaW5nIGBscnVfZ2VuX2RlbF9mb2xpb2AuIEkmIzM5O2xsIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0cnVlYCBmbGFnIHRoZXJlLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGNhbiBjYXVzZSBzb21lIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLgozLiAgSWYgdGhhdCByZW1vdmFsIGZhaWxlZCwgaXQgd291bGQgdHJpZ2dlciBhIHdhcm5pbmcsIHVzaW5nIGBWTV9XQVJOX09OX09OQ0VfRk9MSU9gLiBUaGF0JiMzOTtzIGEgZ29vZCBzYW5pdHkgY2hlY2s7IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB3ZW50IHdyb25nLgo0LiAgVGhlbiwgaXQgd291bGQgbWFyayB0aGUgZm9saW8gYXMgdW5ldmljdGFibGUgd2l0aCBgZm9saW9fc2V0X3VuZXZpY3RhYmxlYC4KNS4gIEFmdGVyIHRoYXQsIGl0IHdvdWxkIHJlLWFkZCB0aGUgZm9saW8gdG8gdGhlIExSVSB1c2luZyBgbHJ1dmVjX2FkZF9mb2xpb2AuCjYuICBGaW5hbGx5LCBpdCB3b3VsZCB1cGRhdGUgdGhlIGBVTkVWSUNUQUJMRV9QR0NVTExFRGAgY291bnRlci4KClNvLCBpbiBlc3NlbmNlLCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGggdG8gbWFuYWdlIHVuZXZpY3RhYmxlIGZvbGlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbW90aXZhdGlvbiBpcyBmb3IgcmVtb3ZpbmcgdGhpcy4gSXMgaXQgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEEgYnVnIGZpeD8gT3IgaXMgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgbW92ZWQgc29tZXdoZXJlIGVsc2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ydF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ2MTk9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjQ3LVxubW0vdm1zY2FuLmM6NDY0ODpzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG5tbS92bXNjYW4uYy00NjQ5LVx0XHQgICAgICAgaW50IHRpZXJfaWR4KVxuLS1cbm1tL3Ztc2Nhbi5jPTQ3MTc9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00NzU1LVxubW0vdm1zY2FuLmM6NDc1NjpcdFx0XHRpZiAoc29ydF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBzYywgdGllcikpXG5tbS92bXNjYW4uYy00NzU3LVx0XHRcdFx0c29ydGVkICYjNDM7PSBkZWx0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgRm9saW8gRXZpY3Rpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGZvbGlvIG1hbmFnZW1lbnQgc3R1ZmYsIHNwZWNpZmljYWxseSB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIGFuZCB0aGlzIGlzIHBhcnQgb2YgdGhlIE1HTFJVLiBOb3csIGBldmljdF9mb2xpb3NgIHNlZW1zIHRvIGJlIGNhbGxpbmcgYHNjYW5fZm9saW9zYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gc2NhbiBzb21ldGhpbmcgdG8gZGVjaWRlIHdoYXQgdG8gZXZpY3QuIFRoZW4gYHNjYW5fZm9saW9zYCBpdHNlbGYgY2FsbHMgYHNvcnRfZm9saW9gLCBhIHN0YXRpYyBmdW5jdGlvbi4gCgpUaGlzIGdpdmVzIG1lIHRoZSBmbG93OiBgZXZpY3RfZm9saW9zYCAtJmd0OyBgc2Nhbl9mb2xpb3NgIC0mZ3Q7IGBzb3J0X2ZvbGlvYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIGNvbmZpZ3VyZWQuIFRoZSBtb3N0IGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIGNoZWNrIHdoZXRoZXIgTUdMUlUgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgaXQmIzM5O3MgYWN0aXZlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIGBldmljdF9mb2xpb3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0cyBhcmUsIGFuZCBob3cgdGhhdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Nhbl9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00NjkzPXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NzE2LVxubW0vdm1zY2FuLmM6NDcxNzpzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDcxOC1cdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXG4tLVxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4NDMtXG5tbS92bXNjYW4uYzo0ODQ0Olx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbm1tL3Ztc2Nhbi5jLTQ4NDUtXHRcdFx0XHQgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgZXZpY3RfZm9saW9zYCBhbmQgYGlzb2xhdGVfZm9saW9zYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHN5c3RlbSBpcyBzaG93aW5nIHNvbWUgdW51c3VhbCBiZWhhdmlvciwgYW5kIG15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHRvIHJldmlzaXQgYGV2aWN0X2ZvbGlvc2AgYW5kIGBpc29sYXRlX2ZvbGlvc2AuIFRoZXNlIGFyZSBjcml0aWNhbCBmdW5jdGlvbnMsIG9mdGVuIHRoZSBsaW5jaHBpbnMgb2YgZWZmaWNpZW50IGZvbGlvIGhhbmRsaW5nLiBJJiMzOTt2ZSBzZWVuIGVub3VnaCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0cmFjZWQgYmFjayB0byBpbmVmZmljaWVudCBmb2xpbyBldmljdGlvbiBvciBpbXByb3BlciBpc29sYXRpb24sIHdoaWNoIGNhbiBjYXNjYWRlIGludG8gc2lnbmlmaWNhbnQgaXNzdWVzLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXMgSSYjMzk7bSBvdmVybG9va2luZy4gSSYjMzk7bGwgZm9jdXMgb24gYW55IHJlY2VudCBjaGFuZ2VzIG9yIGNvbW1pdHMgdGhhdCBoYXZlIHRvdWNoZWQgdGhlc2Ugcm91dGluZXMsIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBiZWVuIGFueSByZWdyZXNzaW9uIG9yIGludHJvZHVjZWQgaW5lZmZpY2llbmN5LiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IHJ1bGUgb3V0IHRoZXNlIGNvbW1vbiBzdXNwZWN0cyBvciBpZGVudGlmeSB0aGUgc21va2luZyBndW4uIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNvbGF0ZV9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00ODEyPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MzAtXG5tbS92bXNjYW4uYzo0ODMxOnN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00ODMyLVx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuLS1cbm1tL3Ztc2Nhbi5jPTQ4NjU9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDg4Ni1cbm1tL3Ztc2Nhbi5jOjQ4ODc6XHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jLTQ4ODgtXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBldmljdF9mb2xpb3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBpcyBwcm9iYWJseSBpbiBhIHN0YXRlIG5vdyB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gcmV2aWV3IGhvdyBmb2xpbyBldmljdGlvbiBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZWZmaWNpZW50LCBnaXZlbiB0aGUgcmVjZW50IGNoYW5nZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZXZpY3RfZm9saW9zYCBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgd2UmIzM5O3JlIGdldHRpbmcgdGhlIGJlaGF2aW9yIHdlIGV4cGVjdCwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcmVncmVzc2lvbnMgb3IgaW5lZmZpY2llbmNpZXMgaW50cm9kdWNlZCB3aXRoIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIHRyaWdnZXJlZCwgdGhlIGV2aWN0aW9uIHN0cmF0ZWd5IGl0c2VsZiAoTFJVLCBjbG9jaywgZXRjLiksIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIEkmIzM5O2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBhIGZldyBjb21tb24gc2NlbmFyaW9zIGFuZCBlZGdlIGNhc2VzIHRvIGVuc3VyZSB0aGUgbG9naWMgaG9sZHMuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgaG90c3BvdHMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiBgZXZpY3RfZm9saW9zYC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGNvbnNpZGVyIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGxvY2tpbmcgY29udGVudGlvbiBvciByZWR1bmRhbnQgb3BlcmF0aW9ucyB0aGF0IGp1bXAgb3V0LiBJdCYjMzk7cyB0aW1lIHRvIHB1dCBvbiBteSBtZW1vcnkgbWFuYWdlbWVudCBoYXQgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00ODMxPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDg2NC1cbm1tL3Ztc2Nhbi5jOjQ4NjU6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00ODY2LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYz01MDQ0PXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA2Ny1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MDY4Olx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MDY5LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU2NzE9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTY5MS1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1NjkyOlx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01NjkzLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gSSYjMzk7bSBzdGFydGluZyBoZXJlIGJlY2F1c2UuLi4gd2VsbCwgKkkqIGtub3cgdGhlIGNvZGUuIEl0IGZlZWxzIGxpa2UgdGhpcyBpcyB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIHRoZSBwZXJmb3JtYW5jZSBhbm9tYWx5IHdlJiMzOTtyZSBzZWVpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzaHJpbmtpbmcgbG9naWMgd2l0aGluIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXNuJiMzOTt0IG92ZXJseSBhZ2dyZXNzaXZlLCBvciBpc24mIzM5O3QgZmlyaW5nIHdoZW4gd2UgZG9uJiMzOTt0IGV4cGVjdCBpdCB0by4gV2UmIzM5O3ZlIG9wdGltaXplZCB0aGUgTFJVIGRhdGEgc3RydWN0dXJlLCB0aGUgYWxsb2NhdGlvbiwgdGhlIGRlYWxsb2NhdGlvbiwgYW5kIHRoZSBob3QgcGF0aHMgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBzb3VyY2Ugb2YgcHJvYmxlbXMuIEkgbmVlZCB0byB3YWxrIHRocm91Z2ggdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzaHJpbmthZ2UgYW5kIHRoZSBhY3R1YWwgc2hyaW5raW5nIHByb2Nlc3MgaXRzZWxmLiBJIG5lZWQgdG8gdmVyaWZ5LCAqdGhvcm91Z2hseSosIHRoYXQgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgZHVyaW5nIHRoZSByZXNpemluZyBvcGVyYXRpb24uIEFueSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGNvcGllcyBjb3VsZCBiZSBkaXNhc3Ryb3VzIGhlcmUuIEnigJltIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMg4oCTIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBMUlUgaXMgbmVhcmx5IGVtcHR5PyBXaGVuIGl0JiMzOTtzIGZ1bGw/IFdoZW4gdGhlcmUmIzM5O3MgaGlnaCBjaHVybj8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgYXJlIHdlIGhhbmRsaW5nIGNvbmN1cnJlbnQgYWNjZXNzZXMgZHVyaW5nIHRoZXNlIHNocmluayBvcGVyYXRpb25zPyBUaGlzIGlzIHBvdGVudGlhbGx5IGEgYmlnIGJvdHRsZW5lY2ssIGFuZCBJIG5lZWQgdG8gY29uZmlybSBvdXIgc3luY2hyb25pemF0aW9uIGlzIHJvYnVzdC4gSXQmIzM5O3MgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyDigJMgdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgTFJVIHZlY3RvciYjMzk7cyBpbnRlcm5hbCBzdGF0ZS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCBob2xkcyB1cCB0byBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDA5PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA0My0gKi9cbm1tL3Ztc2Nhbi5jOjUwNDQ6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUwNDUte1xuLS1cbm1tL3Ztc2Nhbi5jPTUwODk9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEwOC1cbm1tL3Ztc2Nhbi5jOjUxMDk6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTExMC1cbi0tXG5tbS92bXNjYW4uYz01MjAwPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMTItXG5tbS92bXNjYW4uYzo1MjEzOlx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTIxNC1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUdMUlUgU2hyaW5raW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGUgc2hyaW5raW5nIHByb2Nlc3Mgd2l0aGluIE1HTFJVLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZzogaXMgTUdMUlUgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byBrbm93IGlmIEkmIzM5O20gZXZlbiBkZWFsaW5nIHdpdGggYSB0eXBpY2FsIG9yIGFuIHVudXN1YWwgc3lzdGVtIHNldHVwIHdoZW4gYW5hbHl6aW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGhlbHAgbWUgY29udGV4dHVhbGl6ZSB0aGUgYmVoYXZpb3IgSSBzZWUgYW5kIGZvY3VzIG15IGF0dGVudGlvbiBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA0LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDExLVxubW0vS2NvbmZpZzoxNDEyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTctXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI2LVxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI4LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZSBmb3IgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSBkZWZpbmVkIGluIHRoaXMgcHJvamVjdC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgZ2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgTFJVIGFsZ29yaXRobXMsIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IHRoZXJlLCB3aGljaCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBLY29uZmlnIHN5bnRheDogYGNvbmZpZyBMUlVfR0VOYCBhbmQgYGNvbmZpZyBMUlVfR0VOX0VOQUJMRURgLCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTQwMTpcdFxuMTQwMjpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDAzOlx0Y29uZmlnIExSVV9HRU5cbjE0MDQ6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwNTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDY6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwNzpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA4Olx0XHRoZWxwXG4xNDA5Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQxMDpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDExOlx0XG4xNDEyOlx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQxMzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxNDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE1Olx0XHRoZWxwXG4xNDE2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTc6XHRcbjE0MTg6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxOTpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MjA6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQyMTpcdFx0aGVscFxuMTQyMjpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MjM6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MjQ6XHRcbjE0MjU6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDI2Olx0XG4xNDI3Olx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDI4Olx0XHRkZWZfYm9vbCB5XG4xNDI5Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtleSBNZW1vcnkgTWFuYWdlbWVudCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYHNvcnRfZm9saW9gIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgY2hhbmdlIHRvIGhvdyB3ZSBoYW5kbGUgdW5ldmljdGFibGUgZm9saW9zLiBTcGVjaWZpY2FsbHksIHRoYXQgd2hvbGUgYmxvY2sgb2YgY29kZSBkZWFsaW5nIHdpdGggdGhlbSBpcyBnb25lLiBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBMUlUgZXZpY3Rpb24gbG9naWMg4oCTIGEgcHJldHR5IHNlbnNpdGl2ZSBhcmVhLCByZWFsbHkuIERlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nLgoKR2l2ZW4gdGhhdCB0aGlzIGRpcmVjdGx5IHRvdWNoZXMgTFJVIGV2aWN0aW9uLCBJIGtub3cgdGhlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgY29uZmlndXJhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB0ZXN0aW5nIHRoaXMgZWZmZWN0aXZlbHkuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9scyB0byB0YXJnZXQgd2l0aCBteSBmdXp6aW5nIGVmZm9ydHMuIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgZXNwZWNpYWxseSBzaW5jZSBgc29ydF9mb2xpb2AsIHdoaWxlIHJlbGV2YW50LCBpcyBzdGF0aWMgYW5kIG1heSB3ZWxsIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBXZSYjMzk7bGwgYWxzbyBjb25zaWRlciBgZXZpY3RfZm9saW9zYCB0b28gYXMgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGlzIGlzIG5vdCBpbmxpbmVkLCBhbHRob3VnaCBpdCYjMzk7cyBhbHNvIHN0YXRpYy4gYHNjYW5fZm9saW9zYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayB0b28uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayBpZiBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBpcyBzdGF0aWMsIHdoaWNoIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBmdXp6aW5nIGFwcHJvYWNoIEkgdGFrZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTMwPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTktXG5tbS92bXNjYW4uYzo1MjAwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIwMS17XG4tLVxubW0vdm1zY2FuLmM9NTk0ND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NDgtXG5tbS92bXNjYW4uYzo1OTQ5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTk1MC17XG4tLVxubW0vdm1zY2FuLmM9NTk2MT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk3Mi1cdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYzo1OTczOlx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01OTc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC4KCioqRGVjb25zdHJ1Y3RpbmcgYHNocmlua19scnV2ZWNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHNocmlua19scnV2ZWNgIGZ1bmN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIGl0IGJlY2F1c2UsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBpdCBzZWVtcyB0byBiZSB0aGUgY29yZSBvcGVyYXRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBtZWNoYW5pY3MsIHNwZWNpZmljYWxseSBob3cgaXQgbWFuYWdlcyBzaHJpbmtpbmcgYW4gTFJVIHZlY3Rvci4gSSBpbW1lZGlhdGVseSBzdGFydCBydW5uaW5nIHRocm91Z2ggdGhlIGNvbW1vbiBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBpbiBteSBoZWFkOiBpZGVudGlmeWluZyB0aGUgbW9zdCBlZmZpY2llbnQgbWV0aG9kcyBmb3IgdGhpcyB0YXNrIGluIHRoZSBkb21haW4gb2YgTFJVIGltcGxlbWVudGF0aW9ucy4gSXQgbXVzdCBiZSBhYm91dCBlZmZpY2llbnRseSByZW1vdmluZyBsZWFzdCByZWNlbnRseSB1c2VkIGVsZW1lbnRzIHRvIGZyZWUgdXAgbWVtb3J5LiBXaGF0IGFyZSB0aGUga2V5IGNvbnNpZGVyYXRpb25zPyBJcyBpdCBhYm91dCBzaW1wbHkgZnJlZWluZyBtZW1vcnksIG9yIGlzIGl0IG1vcmUgbnVhbmNlZCB0aGFuIHRoYXQsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGltcGFjdCBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgZXZpY3RlZD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXkgaGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc2ltcGx5IGRlY3JlYXNpbmcgdGhlIHNpemUgb2YgYSB2ZWN0b3IsIG9yIGlzIHRoZXJlIG1vcmUgY29tcGxleCByZS1hcnJhbmdlbWVudD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUwMDk9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQzLSAqL1xubW0vdm1zY2FuLmM6NTA0NDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTA0NS17XG4tLVxubW0vdm1zY2FuLmM9NTA4OT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTA4LVxubW0vdm1zY2FuLmM6NTEwOTpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MTEwLVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMzA9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5OS1cbm1tL3Ztc2Nhbi5jOjUyMDA6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MjAxLXtcbi0tXG5tbS92bXNjYW4uYy01MjEyLVxubW0vdm1zY2FuLmM6NTIxMzpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUyMTQtXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbi0tXG5tbS92bXNjYW4uYz01OTQ0PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk0OC1cbm1tL3Ztc2Nhbi5jOjU5NDk6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01OTUwLXtcbi0tXG5tbS92bXNjYW4uYz01OTU0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk2MC1cbm1tL3Ztc2Nhbi5jOjU5NjE6c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTk2Mi17XG4tLVxubW0vdm1zY2FuLmMtNTk3Mi1cdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXHUwMDI2XHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XG5tbS92bXNjYW4uYzo1OTczOlx0XHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01OTc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTYxNTI9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMTEtXG5tbS92bXNjYW4uYzo2MjEyOlx0XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjIxMy1cbi0tXG5tbS92bXNjYW4uYz02ODA3PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgzNy1cdCAqL1xubW0vdm1zY2FuLmM6NjgzODpcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIENvZGUgU3RydWN0dXJlOiBJZGVudGlmeWluZyBQb3RlbnRpYWwgU2NvcGUgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBgc2hyaW5rX2xydXZlY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHdoZXRoZXIgaXQmIzM5O3MgdHJ1bHkgdGhlIGJlc3QgcGxhY2UgZm9yIGl0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgbGltaXRlZCBpbiBpdHMgYWNjZXNzaWJpbGl0eS4gTXkgcHJpbWFyeSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgY2FzdCBhIHdpZGVyIG5ldCBhbmQgaHVudCBmb3IgKm5vbiotc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSBtb3JlIGZsZXhpYmxlIG9yIGdsb2JhbGx5IHJlbGV2YW50IGFwcHJvYWNoIG1pZ2h0IGJlIGJlbmVmaWNpYWwuIFBlcmhhcHMgdGhlcmUgYXJlIHNpbWlsYXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGdlbmVyYWxpemVkLCBvciBwZXJoYXBzIHRoaXMgZnVuY3Rpb24gY291bGQgYmVuZWZpdCBmcm9tIGJyb2FkZXIgdmlzaWJpbGl0eSBvciBldmVuIHNvbWUgZm9ybSBvZiBtb2R1bGFyaXR5LiBUaGlzIHN1Z2dlc3RzIEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY3NjE9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjgwNi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODA3OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODA4LVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHlvdSwgdGhlIHVzZXIsIGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2YgZGV0YWlsOgoKKipUaGlua2luZyBBYm91dCBgdHJ5X3RvX2ZyZWVfcGFnZXNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHRyeV90b19mcmVlX3BhZ2VzYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IHNpbXBseSBhIHV0aWxpdHkgZnVuY3Rpb24sIG9wZXJhdGluZyBpbmRlcGVuZGVudGx5IG9mIGFueSBzcGVjaWZpYyBvYmplY3Qgb3IgbW9kdWxlIHN0YXRlLiBJdCBzdWdnZXN0cyB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgcmVsaWVzIG9uLCBvciBwb3RlbnRpYWxseSBtb2RpZmllcywgZGF0YSB3aXRoaW4gYSBzcGVjaWZpYyBpbnN0YW5jZSBvciBvYmplY3QuIEtub3dpbmcgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgb2JqZWN0IGNvbnRleHQgaXQgb3BlcmF0ZXMgd2l0aGluLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgZm9yIHRoaW5ncyBsaWtlIGNvbmN1cnJlbmN5LCBkYXRhIGludGVncml0eSwgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NjUwOD1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1MzgtICovXG5tbS92bXNjYW4uYzo2NTM5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NTQwLVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjc2MC1cbm1tL3Ztc2Nhbi5jOjY3NjE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02NzYyLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY3OTUtXG5tbS92bXNjYW4uYzo2Nzk2Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY3OTctXG4tLVxubW0vdm1zY2FuLmM9Njg0Nz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NzgtXG5tbS92bXNjYW4uYzo2ODc5Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4ODAtXG4tLVxubW0vdm1zY2FuLmM9NzY0NT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NjY0LVxubW0vdm1zY2FuLmM6NzY2NTpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03NjY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gTWVtb3J5IFJlY2xhbWF0aW9uIFN0cmF0ZWdpZXMqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGVmZmVjdGl2ZSBzdHJhdGVnaWVzIGZvciBmcmVlaW5nIHVwIG1lbW9yeS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBhIHNvbGlkIGZ1bmN0aW9uIHRvIGV4cGxvcmUgZnVydGhlci4gSXQgc2VlbXMgdG8gYmUgYSBnb29kIGhpZ2gtbGV2ZWwgc3RhcnRpbmcgcG9pbnQuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGBzaHJpbmtfYWxsX21lbW9yeWAsIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLiBBbmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbWVtb3J5IHByZXNzdXJlIGF0IHRoZSBjZ3JvdXAgbGV2ZWwsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBsb29rcyByZWxldmFudCB0b28uCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyBzbGlnaHRseS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBgc2hyaW5rX25vZGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIElmIGl0JiMzOTtzIHN0YXRpYywgaXQgbGltaXRzIGl0cyB1dGlsaXR5IGZvciBnZW5lcmFsIGFuYWx5c2lzIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb24sIGJ1dCBpZiBpdCYjMzk7cyBub24tc3RhdGljLCBpdCBvcGVucyB1cCBhIG51bWJlciBvZiBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzLiBHb3R0YSBjaGVjayB0aGUgZGVmaW5pdGlvbiB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTE5NDA9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXG4tLVxubW0vdm1zY2FuLmMtMTk3OC0vKlxubW0vdm1zY2FuLmM6MTk3OTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXG5tbS92bXNjYW4uYy0xOTgwLSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xuLS1cbm1tL3Ztc2Nhbi5jPTUyMDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTIyMC1cbm1tL3Ztc2Nhbi5jOjUyMjE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUyMjIte1xuLS1cbm1tL3Ztc2Nhbi5jPTU5NDk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk1My1cbm1tL3Ztc2Nhbi5jOjU5NTQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU5NTUte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxMDA9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNjE1MS1cbm1tL3Ztc2Nhbi5jOjYxNTI6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjE1My17XG4tLVxubW0vdm1zY2FuLmMtNjIzMC1cbm1tL3Ztc2Nhbi5jOjYyMzE6c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MjMyLXtcbi0tXG5tbS92bXNjYW4uYy02MjM4LVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xubW0vdm1zY2FuLmM6NjIzOTpcdFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjI0MC1cbi0tXG5tbS92bXNjYW4uYy02MjU1LVxubW0vdm1zY2FuLmM6NjI1NjpcdHNocmlua19ub2RlX21lbWNncyhwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjI1Ny1cbi0tXG5tbS92bXNjYW4uYz02NDE2PXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NDk0LVx0XHRsYXN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xubW0vdm1zY2FuLmM6NjQ5NTpcdFx0c2hyaW5rX25vZGUoem9uZS1cdTAwM2V6b25lX3BnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02NDk2LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTY3NjE9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjgwNi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODA3OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODA4LVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi0tXG5tbS92bXNjYW4uYy02ODMzLVx0ICogaGVyZSBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IGxpbWl0cyB0aGUgcGFnZXMgd2UgY2FuIHNjYW4uXG5tbS92bXNjYW4uYzo2ODM0Olx0ICogaWYgd2UgZG9uJiMzOTt0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNjgzNS1cdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuLS1cbm1tL3Ztc2Nhbi5jPTY5NTU9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTY5NzktXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG5tbS92bXNjYW4uYzo2OTgwOlx0XHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxubW0vdm1zY2FuLmMtNjk4MS1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLS1cbm1tL3Ztc2Nhbi5jPTcwMzc9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTcwNzUtICovXG5tbS92bXNjYW4uYzo3MDc2OnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzA3Ny1cdFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNzA5Mi1cdCAqL1xubW0vdm1zY2FuLmM6NzA5MzpcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy03MDk0LVxuLS1cbm1tL3Ztc2Nhbi5jPTcxNDk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MjU4LVxubW0vdm1zY2FuLmM6NzI1OTpcdFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXG5tbS92bXNjYW4uYy03MjYwLVx0XHRzYy5ucl9zY2FubmVkID0gMDtcbi0tXG5tbS92bXNjYW4uYy03MjcwLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjcyNzE6XHRcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFx1MDAyNnNjKSlcbm1tL3Ztc2Nhbi5jLTcyNzItXHRcdFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcbi0tXG5tbS92bXNjYW4uYz03ODI1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNzg1Mi1cdFx0ZG8ge1xubW0vdm1zY2FuLmM6Nzg1MzpcdFx0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzg1NC1cdFx0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZXkmIzM5O3JlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBlaXRoZXIgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xgIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYXJlIGJlaW5nIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGJlIHN1cmUuCgpNeSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIGBtbS92bXNjYW4uY2AuIEkgd2FudCB0byBxdWlja2x5IHNjYW4gdGhhdCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZm9yIGV4dGVybmFsIHVzZS4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueXRoaW5nIGVsc2UgaW4gdGhhdCBmaWxlIHRoYXQgKmlzbiYjMzk7dCogYHN0YXRpY2Ag4oCTIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbnRlbmRlZCBzY29wZSBpcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IGZvciB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIG9uLiBBIHF1aWNrIGBncmVwYCBmb3IgYEVYUE9SVF9TWU1CT0xgIG9yIGEgdmlzdWFsIHNjYW4gZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIuIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBpbnRlbmRlZCBzY29wZSBhbmQgdmlzaWJpbGl0eSBvZiB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBwcmltaXRpdmVzLCBpbiBvcmRlciB0byBnYWluIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIG92ZXJhbGwgcHVycG9zZSBhbmQgYW55IGltcGxpY2F0aW9ucyB0aGV5IG1pZ2h0IGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MDY1PXZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vdm1zY2FuLmMtODA5OS19XG5tbS92bXNjYW4uYzo4MTAwOkVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbm1tL3Ztc2Nhbi5jLTgxMDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdHJ5X3RvX2ZyZWVfcGFnZXNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGFnZSByZWNsYWltIGlzc3VlLCBhbmQgbmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGB0cnlfdG9fZnJlZV9wYWdlc2AgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGFjdGl2ZSBzY2FubmluZyBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGltbWVkaWF0ZWx5IG9idmlvdXMganVtcGluZyBvdXQuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiBob3cgcGFnZXMgYXJlIGJlaW5nIGV2YWx1YXRlZCBhbmQgcmVjbGFpbWVkLiBJcyBpdCBhIG1hdHRlciBvZiBob3cgYWdncmVzc2l2ZSB0aGUgc2Nhbm5pbmcgaXM/IE9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyB0eXBlcyBvZiBwYWdlcyBhcmUgY2F1c2luZyB0cm91YmxlPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgYW5kIGNoZWNrIG91dCB3aGF0IHZhcmlhYmxlcyBhcmUgYmVpbmcgdXNlZC4gV2hhdCBjb25kaXRpb25zIGFyZSBmYWlsaW5nPyBJJiMzOTttIGV4cGVjdGluZyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBgc2hyaW5rX3NsYWJgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBhbmQgdGhlIG92ZXJhbGwgTFJVIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWVzIGFuZCBlcnJvciBoYW5kbGluZyBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjc2MC1cbm1tL3Ztc2Nhbi5jOjY3NjE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02NzYyLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIgaXMgcGlja2luZyB1cCBvbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBwb3RlbnRpYWwgYXJlYXMgZm9yIG1lbW9yeSByZWNsYW1hdGlvbi4gYHRyeV90b19mcmVlX3BhZ2VzYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQg4oCTIGl0JiMzOTtzIGEgZGlyZWN0LCBmb2N1c2VkIGFwcHJvYWNoLiBCdXQgdGhlbiBhZ2FpbiwgYHNocmlua19hbGxfbWVtb3J5YCBpcyBhbHNvIGludHJpZ3VpbmcuIEl0IHNvdW5kcyBsaWtlIGEgYnJvYWRlciwgbW9yZSBhZ2dyZXNzaXZlIHN0cmF0ZWd5LCBwb3RlbnRpYWxseSBlbmNvbXBhc3NpbmcgbW9yZSBhc3BlY3RzIG9mIHRoZSBtZW1vcnkgc3lzdGVtLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBzaHJpbmtfYWxsX21lbW9yeWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgY2VydGFpbmx5IGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2hyaW5rX2FsbF9tZW1vcnlgIHRoZXJlLCBhbG9uZyB3aXRoIHRoZSBkZXRhaWxzIG9mIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHBhZ2Ugc2Nhbm5pbmcgYW5kIGV2aWN0aW9uIHByb2Nlc3Nlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGl0IHByaW9yaXRpemVzIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgYW5kIHdoYXQgY3JpdGVyaWEgaXQgdXNlcyB0byBkZWNpZGUgd2hpY2ggcGFnZXMgYXJlIGVsaWdpYmxlIGZvciBldmljdGlvbi4gVGhpcyBjb3VsZCBiZSB3aGVyZSBJIGZpbmQgdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03NjMxPWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NjQ0LSAqL1xubW0vdm1zY2FuLmM6NzY0NTp1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbm1tL3Ztc2Nhbi5jLTc2NDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGF0IHByb21wdDoKCioqSW52ZXN0aWdhdGluZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRvIGxvY2F0ZSBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agd2l0aGluIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCBwYWdlIGZyZWVpbmcgaXMgbWFuYWdlZC4gRnJvbSBoZXJlLCBJIG5lZWQgdG8gc2VlIHdoYXQgbG9naWMgaXMgaW4gdGhpcyBzcGVjaWZpYyBjYWxsLCBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBWTSBzeXN0ZW0uIFRoaXMgd2lsbCBvZmZlciBpbnNpZ2h0IGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgcmVjbGFpbSBzcGVjaWZpY2FsbHkgZnJvbSB3aXRoaW4gY2dyb3Vwcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgdGhlbiB0cmFjZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIHRyaWdnZXJlZCwgd2hpY2ggc2hvdWxkIGluZm9ybSBtZSBhYm91dCBob3cgcHJvYWN0aXZlIG9yIHJlYWN0aXZlIHRoZSBtZW1vcnkgY2dyb3VwJiMzOTtzIHBhZ2UgZnJlZWluZyBzY2hlbWUgaXMuIEkmIzM5O2xsIGFsc28gYmUgZm9jdXNpbmcgb24gcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3M/IEFuZCBob3cgdGhlIHBvbGljeSBkZWNpc2lvbnMgYXJlIG1hZGUgaGVyZS4gSW4gZXNzZW5jZSwgbXkgZ29hbCBpcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVjbGFpbSBwYXRoIGZvciBtZW1vcnkgY2dyb3VwcywgYXMgdHJpZ2dlcmVkIGJ5IHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY4MDc9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODQ2LVxubW0vdm1zY2FuLmM6Njg0Nzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg0OC1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy02ODg3LSNlbHNlXG5tbS92bXNjYW4uYzo2ODg4OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODg5LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgc29ydF9mb2xpb2AsIHdoaWNoIGlzIGEga2V5IGZ1bmN0aW9uIHdpdGhpbiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQuIEkgc2VlIGBMUlVfR0VOYCBhbmQsIGNvbnNlcXVlbnRseSwgYExSVV9HRU5fRU5BQkxFRGAgYmVpbmcgcmVsZXZhbnQgaGVyZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGFscmVhZHkga25vdyB0aGVzZSBhcmUgcHJvYmFibHkgcmVsYXRlZCB0byBnZW5lcmF0aW9uYWwgTFJVIGJlaGF2aW9yLCBidXQgSSBuZWVkIHRvIGJlIHByZWNpc2UuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkZXRlcm1pbmUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgTFJVX0dFTmAgaXRzZWxmIHJlbGllcyBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYmVmb3JlIEkgY2FuIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA0LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDExLVxubW0vS2NvbmZpZzoxNDEyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTctXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI2LVxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI4LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGJlZW4gcmV2aWV3aW5nIGxpbmVzIDE0MDAtMTQzMCB3aXRoaW4gYG1tL0tjb25maWdgIOKAkyB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgZmVhdHVyZS4gSSBzZWUgdGhhdCBgTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlnIG9wdGlvbiwgYWxvbmcgd2l0aCBhIHJlbGF0ZWQgYExSVV9HRU5fRU5BQkxFRGAuIFRoaXMgaXMgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgYW4gTU1VLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgZGVwZW5kZW5jeSBvbiBgNjRCSVRgLCBvciB0aGUgYWJzZW5jZSBvZiBgU1BBUlNFTUVNYCBvciBpdHMgdXNlIHdpdGggYFZNRU1NQVBgLCBpcyBpbXBvcnRhbnQsIGVuc3VyaW5nIHRoZXJlIGFyZSBlbm91Z2ggc3BhcmUgYml0cyBhdmFpbGFibGUgaW4gdGhlIGBmb2xpby0mZ3Q7ZmxhZ3NgIHN0cnVjdHVyZSwgYXMgdGhlIGNvbW1lbnQgc3VnZ2VzdHMuCgpOb3csIG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBwaWVjZSB0b2dldGhlciB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGtleSBmdW5jdGlvbnMgbGlrZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFzIEkgZGlnIGRlZXBlciBpbnRvIGhvdyB0aGlzIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEFuZCBJIGNhbiYjMzk7dCBmb3JnZXQgYGtzd2FwZGAsIHRoZSBrZXJuZWwgdGhyZWFkLiBJJiMzOTttIGFzc3VtaW5nIGl0cyByb2xlIHdpbGwgYmUga2V5IGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzd2FwZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL3Ztc2Nhbi5jLTUtICogIFN3YXAgcmVvcmdhbmlzZWQgMjkuMTIuOTUsIFN0ZXBoZW4gVHdlZWRpZS5cbm1tL3Ztc2Nhbi5jOjY6ICogIGtzd2FwZCBhZGRlZDogNy4xLjk2ICBzY3Rcbm1tL3Ztc2Nhbi5jOjc6ICogIFJlbW92ZWQga3N3YXBkX2N0bCBsaW1pdHMsIGFuZCBzd2FwIG91dCBhcyBtYW55IHBhZ2VzIGFzIG5lZWRlZFxubW0vdm1zY2FuLmMtOC0gKiAgdG8gYnJpbmcgdGhlIHN5c3RlbSBiYWNrIHRvIGZyZWVwYWdlcy5oaWdoOiAyLjQuOTcsIFJpayB2YW4gUmllbC5cbm1tL3Ztc2Nhbi5jOjk6ICogIFpvbmUgYXdhcmUga3N3YXBkIHN0YXJ0ZWQgMDIvMDAsIEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkuXG5tbS92bXNjYW4uYy0xMC0gKiAgTXVsdGlxdWV1ZSBWTSBzdGFydGVkIDUuOC4wMCwgUmlrIHZhbiBSaWVsLlxuLS1cbm1tL3Ztc2Nhbi5jPTQ0Nj1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDUxLVxubW0vdm1zY2FuLmM6NDUyOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy00NTMtXHRcdHJldHVybiAwO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4Mj1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy00ODctXHQvKlxubW0vdm1zY2FuLmM6NDg4Olx0ICogSWYga3N3YXBkIGlzIGRpc2FibGVkLCByZXNjaGVkdWxlIGlmIG5lY2Vzc2FyeSBidXQgZG8gbm90XG5tbS92bXNjYW4uYy00ODktXHQgKiB0aHJvdHRsZSBhcyB0aGUgc3lzdGVtIGlzIGxpa2VseSBuZWFyIE9PTS5cbm1tL3Ztc2Nhbi5jLTQ5MC1cdCAqL1xubW0vdm1zY2FuLmM6NDkxOlx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcbm1tL3Ztc2Nhbi5jLTQ5Mi1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmM9NTEwPXZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXG4tLVxubW0vdm1zY2FuLmMtNTE2LVx0Lypcbm1tL3Ztc2Nhbi5jOjUxNzpcdCAqIERvIG5vdCB0aHJvdHRsZSB1c2VyIHdvcmtlcnMsIGt0aHJlYWRzIG90aGVyIHRoYW4ga3N3YXBkIG9yXG5tbS92bXNjYW4uYy01MTgtXHQgKiB3b3JrcXVldWVzLiBUaGV5IG1heSBiZSByZXF1aXJlZCBmb3IgcmVjbGFpbSB0byBtYWtlXG4tLVxubW0vdm1zY2FuLmMtNTIwLVx0ICovXG5tbS92bXNjYW4uYzo1MjE6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy01MjItXHQgICAgY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX1VTRVJfV09SS0VSfFBGX0tUSFJFQUQpKSB7XG4tLVxubW0vdm1zY2FuLmM9OTY1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS92bXNjYW4uYy05NzQtXHQgKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgZmlyc3QgYWxzbyB0cnlpbmcgdG9cbm1tL3Ztc2Nhbi5jOjk3NTpcdCAqIGRlbW90ZSBvciByZWNsYWltIHBhZ2VzIGZyb20gdGhlIHRhcmdldCBub2RlIHZpYSBrc3dhcGQgaWYgd2UgYXJlXG5tbS92bXNjYW4uYy05NzYtXHQgKiBsb3cgb24gZnJlZSBtZW1vcnkgb24gdGFyZ2V0IG5vZGUuIElmIHdlIGRvbiYjMzk7dCBkbyB0aGlzIGFuZCBpZlxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTc9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTExMjAtXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgZGV0ZXJtaW5lcyBpZiBhIG5vZGUgaXMgbWFya2VkXG5tbS92bXNjYW4uYzoxMTIxOlx0XHQgKiByZWNsYWltX2Nvbmdlc3RlZC4ga3N3YXBkIHdpbGwgc3RhbGwgYW5kIHN0YXJ0IHdyaXRpbmdcbm1tL3Ztc2Nhbi5jLTExMjItXHRcdCAqIGZvbGlvcyBpZiB0aGUgdGFpbCBvZiB0aGUgTFJVIGlzIGFsbCBkaXJ0eSB1bnF1ZXVlZCBmb2xpb3MuXG4tLVxubW0vdm1zY2FuLmMtMTE4OS1cdFx0XHQvKiBDYXNlIDEgYWJvdmUgKi9cbm1tL3Ztc2Nhbi5jOjExOTA6XHRcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy0xMTkxLVx0XHRcdCAgICBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jPTE1ODg9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL3Ztc2Nhbi5jLTE2MTMtXHQgKiBXZSBzaG91bGQgYmUgc2FmZSBoZXJlIHNpbmNlIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCBmaWxlIHBhZ2VzIGFuZFxubW0vdm1zY2FuLmM6MTYxNDpcdCAqIHdlIGFyZSBub3Qga3N3YXBkIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdyaXRlIGRpcnR5IGZpbGUgcGFnZXMuIEJ1dFxubW0vdm1zY2FuLmMtMTYxNS1cdCAqIGNhbGwgbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKSBhbnl3YXksIGp1c3QgaW4gY2FzZSB0aGVzZSBjb25kaXRpb25zXG4tLVxubW0vdm1zY2FuLmM9MTgyMT1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbi0tXG5tbS92bXNjYW4uYy0xODI2LVxubW0vdm1zY2FuLmM6MTgyNzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtMTgyOC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTM4NjY9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXG4tLVxubW0vdm1zY2FuLmMtMzg2OS1cbm1tL3Ztc2Nhbi5jOjM4NzA6XHRpZiAocGdkYXQgXHUwMDI2XHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcbm1tL3Ztc2Nhbi5jLTM4NzEtXHRcdFZNX1dBUk5fT05fT05DRSh3YWxrKTtcbi0tXG5tbS92bXNjYW4uYy0zODc0LVx0fSBlbHNlIGlmICghd2FsayBcdTAwMjZcdTAwMjYgZm9yY2VfYWxsb2MpIHtcbm1tL3Ztc2Nhbi5jOjM4NzU6XHRcdFZNX1dBUk5fT05fT05DRShjdXJyZW50X2lzX2tzd2FwZCgpKTtcbm1tL3Ztc2Nhbi5jLTM4NzYtXG4tLVxubW0vdm1zY2FuLmM9Mzg4Nj1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXG4tLVxubW0vdm1zY2FuLmMtMzg5NC1cbm1tL3Ztc2Nhbi5jOjM4OTU6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0zODk2LVx0XHRrZnJlZSh3YWxrKTtcbi0tXG5tbS92bXNjYW4uYz00MjA4PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDIxMy1cbm1tL3Ztc2Nhbi5jOjQyMTQ6XHRWTV9XQVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtNDIxNS1cbi0tXG5tbS92bXNjYW4uYz01MDA5PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTAyMC1cdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXG5tbS92bXNjYW4uYzo1MDIxOlx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVx1MDAzZW9yZGVyKVxubW0vdm1zY2FuLmMtNTAyMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTUwMzQtXG5tbS92bXNjYW4uYzo1MDM1Olx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cbm1tL3Ztc2Nhbi5jLTUwMzYtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01MjIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI0My1cbm1tL3Ztc2Nhbi5jOjUyNDQ6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTUyNDUtXHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNTI1MS1cbm1tL3Ztc2Nhbi5jOjUyNTI6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTUyNTMtXHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuLS1cbm1tL3Ztc2Nhbi5jLTUyNTktXHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZSByZWNsYWltZWQpXG5tbS92bXNjYW4uYzo1MjYwOlx0XHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNlcmVjbGFpbV9pZHgpO1xubW0vdm1zY2FuLmMtNTI2MS19XG4tLVxubW0vdm1zY2FuLmM9NTk2MT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk5MC1cdCAqIERFRl9QUklPUklUWSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmYWN0IHdlIGFyZSBkaXJlY3Rcbm1tL3Ztc2Nhbi5jOjU5OTE6XHQgKiByZWNsYWltaW5nIGltcGxpZXMgdGhhdCBrc3dhcGQgaXMgbm90IGtlZXBpbmcgdXAgYW5kIGl0IGlzIGJlc3QgdG9cbm1tL3Ztc2Nhbi5jLTU5OTItXHQgKiBkbyBhIGJhdGNoIG9mIHdvcmsgYXQgb25jZS4gRm9yIG1lbWNnIHJlY2xhaW0gb25lIGNoZWNrIGlzIG1hZGUgdG9cbi0tXG5tbS92bXNjYW4uYy01OTk1LVx0ICovXG5tbS92bXNjYW4uYzo1OTk2Olx0cHJvcG9ydGlvbmFsX3JlY2xhaW0gPSAoIWNncm91cF9yZWNsYWltKHNjKSBcdTAwMjZcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy01OTk3LVx0XHRcdFx0c2MtXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcbi0tXG5tbS92bXNjYW4uYy02MDIwLVx0XHQvKlxubW0vdm1zY2FuLmM6NjAyMTpcdFx0ICogRm9yIGtzd2FwZCBhbmQgbWVtY2csIHJlY2xhaW0gYXQgbGVhc3QgdGhlIG51bWJlciBvZiBwYWdlc1xubW0vdm1zY2FuLmMtNjAyMi1cdFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXG4tLVxubW0vdm1zY2FuLmM9NjE1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjE2Ni1cdCAqXG5tbS92bXNjYW4uYzo2MTY3Olx0ICogRm9yIGtzd2FwZCwgcmVsaWFibGUgZm9yd2FyZCBwcm9ncmVzcyBpcyBtb3JlIGltcG9ydGFudFxubW0vdm1zY2FuLmMtNjE2OC1cdCAqIHRoYW4gYSBxdWljayByZXR1cm4gdG8gaWRsZS4gQWx3YXlzIGRvIGZ1bGwgd2Fsa3MuXG5tbS92bXNjYW4uYy02MTY5LVx0ICovXG5tbS92bXNjYW4uYzo2MTcwOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxubW0vdm1zY2FuLmMtNjE3MS1cdFx0cGFydGlhbCA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmM9NjIzMT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjY5LVxubW0vdm1zY2FuLmM6NjI3MDpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5tbS92bXNjYW4uYy02MjcxLVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTYyODItXHRcdCAqXG5tbS92bXNjYW4uYzo2MjgzOlx0XHQgKiBPbmNlIGEgbm9kZSBpcyBmbGFnZ2VkIFBHREFUX1dSSVRFQkFDSywga3N3YXBkIHdpbGxcbm1tL3Ztc2Nhbi5jLTYyODQtXHRcdCAqIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgdW5kZXIgcGFnZXMgZmxhZ2dlZCBmb3Jcbi0tXG5tbS92bXNjYW4uYy02MjkxLVx0XHQvKlxubW0vdm1zY2FuLmM6NjI5MjpcdFx0ICogSWYga3N3YXBkIHNjYW5zIHBhZ2VzIG1hcmtlZCBmb3IgaW1tZWRpYXRlXG5tbS92bXNjYW4uYy02MjkzLVx0XHQgKiByZWNsYWltIGFuZCB1bmRlciB3cml0ZWJhY2sgKG5yX2ltbWVkaWF0ZSksIGl0XG4tLVxubW0vdm1zY2FuLmMtNjMxMi1cbm1tL3Ztc2Nhbi5jOjYzMTM6XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNjMxNC1cdFx0XHRzZXRfYml0KExSVVZFQ19OT0RFX0NPTkdFU1RFRCwgXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VmbGFncyk7XG4tLVxubW0vdm1zY2FuLmMtNjMxOC1cdCAqIFN0YWxsIGRpcmVjdCByZWNsYWltIGZvciBJTyBjb21wbGV0aW9ucyBpZiB0aGUgbHJ1dmVjIGlzXG5tbS92bXNjYW4uYzo2MzE5Olx0ICogbm9kZSBpcyBjb25nZXN0ZWQuIEFsbG93IGtzd2FwZCB0byBjb250aW51ZSB1bnRpbCBpdFxubW0vdm1zY2FuLmMtNjMyMC1cdCAqIHN0YXJ0cyBlbmNvdW50ZXJpbmcgdW5xdWV1ZWQgZGlydHkgcGFnZXMgb3IgY3ljbGluZyB0aHJvdWdoXG4tLVxubW0vdm1zY2FuLmMtNjMyMi1cdCAqL1xubW0vdm1zY2FuLmM6NjMyMzpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjYgY3VycmVudF9tYXlfdGhyb3R0bGUoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTYzMjQtXHQgICAgIXNjLVx1MDAzZWhpYmVybmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zY2FuLmMtNjMzNS1cdCAqIHNsZWVwLiBPbiByZWNsYWltIHByb2dyZXNzLCByZXNldCB0aGUgZmFpbHVyZSBjb3VudGVyLiBBXG5tbS92bXNjYW4uYzo2MzM2Olx0ICogc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSBydW4gd2lsbCByZXZpdmUgYSBkb3JtYW50IGtzd2FwZC5cbm1tL3Ztc2Nhbi5jLTYzMzctXHQgKi9cbm1tL3Ztc2Nhbi5jLTYzMzgtXHRpZiAocmVjbGFpbWFibGUpXG5tbS92bXNjYW4uYzo2MzM5Olx0XHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNlcmVjbGFpbV9pZHgpO1xubW0vdm1zY2FuLmMtNjM0MC1cdGVsc2UgaWYgKHNjLVx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcbi0tXG5tbS92bXNjYW4uYz02Mzc4PXN0YXRpYyB2b2lkIGNvbnNpZGVyX3JlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjM5NC1cdC8qXG5tbS92bXNjYW4uYzo2Mzk1Olx0ICogRG8gbm90IHRocm90dGxlIGtzd2FwZCBvciBjZ3JvdXAgcmVjbGFpbSBvbiBOT1BST0dSRVNTIGFzIGl0IHdpbGxcbm1tL3Ztc2Nhbi5jLTYzOTYtXHQgKiB0aHJvdHRsZSBvbiBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwYWdlc1xuLS1cbm1tL3Ztc2Nhbi5jLTYzOTktXHQgKi9cbm1tL3Ztc2Nhbi5jOjY0MDA6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBjZ3JvdXBfcmVjbGFpbShzYykpXG5tbS92bXNjYW4uYy02NDAxLVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9NjYzNj1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY2NDMtXG5tbS92bXNjYW4uYzo2NjQ0Olx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcbm1tL3Ztc2Nhbi5jLTY2NDUtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jLTY2NjAtXG5tbS92bXNjYW4uYzo2NjYxOlx0Lyoga3N3YXBkIG11c3QgYmUgYXdha2UgaWYgcHJvY2Vzc2VzIGFyZSBiZWluZyB0aHJvdHRsZWQgKi9cbm1tL3Ztc2Nhbi5jOjY2NjI6XHRpZiAoIXdtYXJrX29rIFx1MDAyNlx1MDAyNiB3YWl0cXVldWVfYWN0aXZlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KSkge1xubW0vdm1zY2FuLmM6NjY2MzpcdFx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KSBcdTAwM2UgWk9ORV9OT1JNQUwpXG5tbS92bXNjYW4uYzo2NjY0Olx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgWk9ORV9OT1JNQUwpO1xubW0vdm1zY2FuLmMtNjY2NS1cbm1tL3Ztc2Nhbi5jOjY2NjY6XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCk7XG5tbS92bXNjYW4uYy02NjY3LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTY2NzQtICogYW5kIHRoZSBQRk1FTUFMTE9DIHJlc2VydmUgZm9yIHRoZSBwcmVmZXJyZWQgbm9kZSBpcyBnZXR0aW5nIGRhbmdlcm91c2x5XG5tbS92bXNjYW4uYzo2Njc1OiAqIGRlcGxldGVkLiBrc3dhcGQgd2lsbCBjb250aW51ZSB0byBtYWtlIHByb2dyZXNzIGFuZCB3YWtlIHRoZSBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jLTY2NzYtICogd2hlbiB0aGUgbG93IHdhdGVybWFyayBpcyByZWFjaGVkLlxuLS1cbm1tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjcxMS1cdCAqIFRocm90dGxpbmcgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHVzYWJsZSBub2RlIGFuZCB0aHJvdHRsZWQgcHJvY2Vzc2VzXG5tbS92bXNjYW4uYzo2NzEyOlx0ICogd2FpdCBvbiBhIHF1ZXVlIHVudGlsIGtzd2FwZCBtYWtlcyBwcm9ncmVzcyBhbmQgd2FrZXMgdGhlbS4gVGhlcmVcbm1tL3Ztc2Nhbi5jLTY3MTMtXHQgKiBpcyBhbiBhZmZpbml0eSB0aGVuIGJldHdlZW4gcHJvY2Vzc2VzIHdha2luZyB1cCBhbmQgd2hlcmUgcmVjbGFpbVxuLS1cbm1tL3Ztc2Nhbi5jLTY3NDEtXHQgKiB0cmFuc2FjdGlvbiBpbiB0aGUgY2FzZSBvZiBhIGZpbGVzeXN0ZW0gbGlrZSBleHRbM3w0XS4gSW4gdGhpcyBjYXNlLFxubW0vdm1zY2FuLmM6Njc0MjpcdCAqIGl0IGlzIG5vdCBzYWZlIHRvIGJsb2NrIG9uIHBmbWVtYWxsb2Nfd2FpdCBhcyBrc3dhcGQgY291bGQgYmVcbm1tL3Ztc2Nhbi5jLTY3NDMtXHQgKiBibG9ja2VkIHdhaXRpbmcgb24gdGhlIHNhbWUgbG9jay4gSW5zdGVhZCwgdGhyb3R0bGUgZm9yIHVwIHRvIGFcbi0tXG5tbS92bXNjYW4uYy02NzQ5LVx0ZWxzZVxubW0vdm1zY2FuLmM6Njc1MDpcdFx0LyogVGhyb3R0bGUgdW50aWwga3N3YXBkIHdha2VzIHRoZSBwcm9jZXNzICovXG5tbS92bXNjYW4uYy02NzUxLVx0XHR3YWl0X2V2ZW50X2tpbGxhYmxlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2VwZm1lbWFsbG9jX3dhaXQsXG4tLVxubW0vdm1zY2FuLmM9Njg4OD11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTctXG5tbS92bXNjYW4uYzo2ODk4OnN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTY4OTkte1xuLS1cbm1tL3Ztc2Nhbi5jPTY5NTU9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTY5NzctXHRcdCAqXG5tbS92bXNjYW4uYzo2OTc4Olx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG5tbS92bXNjYW4uYy02OTc5LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6Njk4MDpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTY5ODEtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYy03MDEyLVx0ICogbmVlZCBiYWxhbmNpbmcgYnkgZGVmaW5pdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgem9uZS1yZXN0cmljdGVkXG5tbS92bXNjYW4uYzo3MDEzOlx0ICogYWxsb2NhdGlvbiB0cmllcyB0byB3YWtlIGEgcmVtb3RlIGtzd2FwZC5cbm1tL3Ztc2Nhbi5jLTcwMTQtXHQgKi9cbi0tXG5tbS92bXNjYW4uYz03MDIyPXN0YXRpYyB2b2lkIGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTcwMzEtLypcbm1tL3Ztc2Nhbi5jOjcwMzI6ICogUHJlcGFyZSBrc3dhcGQgZm9yIHNsZWVwaW5nLiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmMtNzAzMy0gKiB3YWl0aW5nIGluIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKCkgYW5kIHRoYXQgd2F0ZXJtYXJrcyBoYXZlIGJlZW4gbWV0LlxubW0vdm1zY2FuLmMtNzAzNC0gKlxubW0vdm1zY2FuLmM6NzAzNTogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIGlzIHJlYWR5IHRvIHNsZWVwXG5tbS92bXNjYW4uYy03MDM2LSAqL1xubW0vdm1zY2FuLmM6NzAzNzpzdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy03MDM4LVx0XHRcdFx0aW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MDQyLVx0ICogc29vbiBhcyBhbGxvd19kaXJlY3RfcmVjbGFpbSgpIGlzIHRydWUuIEJ1dCB0aGVyZSBpcyBhIHBvdGVudGlhbFxubW0vdm1zY2FuLmM6NzA0MzpcdCAqIHJhY2UgYmV0d2VlbiB3aGVuIGtzd2FwZCBjaGVja3MgdGhlIHdhdGVybWFya3MgYW5kIGEgcHJvY2VzcyBnZXRzXG5tbS92bXNjYW4uYy03MDQ0LVx0ICogdGhyb3R0bGVkLiBUaGVyZSBpcyBhbHNvIGEgcG90ZW50aWFsIHJhY2UgaWYgcHJvY2Vzc2VzIGdldFxubW0vdm1zY2FuLmM6NzA0NTpcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXG5tbS92bXNjYW4uYzo3MDQ2Olx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXG5tbS92bXNjYW4uYzo3MDQ3Olx0ICogdGhlIHdha2UgdXAgY2hlY2tzLiBJZiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIG5vIHByb2Nlc3Mgc2hvdWxkXG5tbS92bXNjYW4uYy03MDQ4LVx0ICogYmUgc2xlZXBpbmcgb24gcGZtZW1hbGxvY193YWl0LCBzbyB3YWtlIHRoZW0gbm93IGlmIG5lY2Vzc2FyeS4gSWZcbm1tL3Ztc2Nhbi5jOjcwNDk6XHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcbm1tL3Ztc2Nhbi5jLTcwNTAtXHQgKiB0aHJvdHRsZWQgYWdhaW4uIFRoZSBkaWZmZXJlbmNlIGZyb20gd2FrZSB1cHMgaW4gYmFsYW5jZV9wZ2RhdCgpIGlzXG4tLVxubW0vdm1zY2FuLmMtNzA1Ni1cdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltICovXG5tbS92bXNjYW4uYzo3MDU3Olx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcbm1tL3Ztc2Nhbi5jLTcwNTgtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jLTcwNjgtLypcbm1tL3Ztc2Nhbi5jOjcwNjk6ICoga3N3YXBkIHNocmlua3MgYSBub2RlIG9mIHBhZ2VzIHRoYXQgYXJlIGF0IG9yIGJlbG93IHRoZSBoaWdoZXN0IHVzYWJsZVxubW0vdm1zY2FuLmMtNzA3MC0gKiB6b25lIHRoYXQgaXMgY3VycmVudGx5IHVuYmFsYW5jZWQuXG5tbS92bXNjYW4uYy03MDcxLSAqXG5tbS92bXNjYW4uYzo3MDcyOiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgc2Nhbm5lZCBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBwYWdlcyB0b1xubW0vdm1zY2FuLmMtNzA3My0gKiByZWNsYWltIG9yIGlmIHRoZSBsYWNrIG9mIHByb2dyZXNzIHdhcyBkdWUgdG8gcGFnZXMgdW5kZXIgd3JpdGViYWNrLlxuLS1cbm1tL3Ztc2Nhbi5jLTcwNzUtICovXG5tbS92bXNjYW4uYzo3MDc2OnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzA3Ny1cdFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NzEzMT1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxMzYtLypcbm1tL3Ztc2Nhbi5jOjcxMzc6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcxMzgtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzE0MC0gKlxubW0vdm1zY2FuLmM6NzE0MTogKiBSZXR1cm5zIHRoZSBvcmRlciBrc3dhcGQgZmluaXNoZWQgcmVjbGFpbWluZyBhdC5cbm1tL3Ztc2Nhbi5jLTcxNDItICpcbm1tL3Ztc2Nhbi5jOjcxNDM6ICoga3N3YXBkIHNjYW5zIHRoZSB6b25lcyBpbiB0aGUgaGlnaG1lbS1cdTAwM2Vub3JtYWwtXHUwMDNlZG1hIGRpcmVjdGlvbi4gIEl0IHNraXBzXG5tbS92bXNjYW4uYy03MTQ0LSAqIHpvbmVzIHdoaWNoIGhhdmUgZnJlZV9wYWdlcyBcdTAwM2UgaGlnaF93bWFya19wYWdlcyh6b25lKSwgYnV0IG9uY2UgYSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmM9NzE0OT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxNzUtXHQgKiBwbGFjZSBzbyB0aGF0IHBhcmFsbGVsIGFsbG9jYXRpb25zIHRoYXQgYXJlIG5lYXIgdGhlIHdhdGVybWFyayB3aWxsXG5tbS92bXNjYW4uYzo3MTc2Olx0ICogc3RhbGwgb3IgZGlyZWN0IHJlY2xhaW0gdW50aWwga3N3YXBkIGlzIGZpbmlzaGVkLlxubW0vdm1zY2FuLmMtNzE3Ny1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTcyMDQtXHRcdCAqIGdvIGFoZWFkIGlmIGFsbCBlbGlnaWJsZSB6b25lcyBmb3IgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb25cbm1tL3Ztc2Nhbi5jOjcyMDU6XHRcdCAqIHJlcXVlc3QgYXJlIGJhbGFuY2VkIHRvIGF2b2lkIGV4Y2Vzc2l2ZSByZWNsYWltIGZyb20ga3N3YXBkLlxubW0vdm1zY2FuLmMtNzIwNi1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzIyMi1cdFx0ICogb24gdGhlIGdyb3VuZHMgdGhhdCB0aGUgbm9ybWFsIHJlY2xhaW0gc2hvdWxkIGJlIGVub3VnaCB0b1xubW0vdm1zY2FuLmM6NzIyMzpcdFx0ICogcmUtZXZhbHVhdGUgaWYgYm9vc3RpbmcgaXMgcmVxdWlyZWQgd2hlbiBrc3dhcGQgbmV4dCB3YWtlcy5cbm1tL3Ztc2Nhbi5jLTcyMjQtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jLTcyNTYtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzI1NzpcdFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03MjU4LVxuLS1cbm1tL3Ztc2Nhbi5jLTcyNzAtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzI3MTpcdFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXHUwMDI2c2MpKVxubW0vdm1zY2FuLmMtNzI3Mi1cdFx0XHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jLTcyODItXG5tbS92bXNjYW4uYzo3MjgzOlx0XHQvKiBDaGVjayBpZiBrc3dhcGQgc2hvdWxkIGJlIHN1c3BlbmRpbmcgKi9cbm1tL3Ztc2Nhbi5jLTcyODQtXHRcdF9fZnNfcmVjbGFpbV9yZWxlYXNlKF9USElTX0lQXyk7XG4tLVxubW0vdm1zY2FuLmMtNzMyMS1cdCAqIHdhdGVybWFya19oaWdoIGF0IHRoaXMgcG9pbnQuIFdlIG5lZWQgdG8gYXZvaWQgaW5jcmVhc2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjczMjI6XHQgKiBmYWlsdXJlIGNvdW50IHRvIHByZXZlbnQgdGhlIGtzd2FwZCB0aHJlYWQgZnJvbSBzdG9wcGluZy5cbm1tL3Ztc2Nhbi5jLTczMjMtXHQgKi9cbm1tL3Ztc2Nhbi5jLTczMjQtXHRpZiAoIXNjLm5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIWJvb3N0ZWQpIHtcbm1tL3Ztc2Nhbi5jOjczMjU6XHRcdGludCBmYWlsX2NudCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF9mYWlsdXJlcyk7XG5tbS92bXNjYW4uYzo3MzI2Olx0XHQvKiBrc3dhcGQgY29udGV4dCwgbG93IG92ZXJoZWFkIHRvIHRyYWNlIGV2ZXJ5IGZhaWx1cmUgKi9cbm1tL3Ztc2Nhbi5jOjczMjc6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfcmVjbGFpbV9mYWlsKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGZhaWxfY250KTtcbm1tL3Ztc2Nhbi5jLTczMjgtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzM2My1cdC8qXG5tbS92bXNjYW4uYzo3MzY0Olx0ICogUmV0dXJuIHRoZSBvcmRlciBrc3dhcGQgc3RvcHBlZCByZWNsYWltaW5nIGF0IGFzXG5tbS92bXNjYW4uYzo3MzY1Olx0ICogcHJlcGFyZV9rc3dhcGRfc2xlZXAoKSB0YWtlcyBpdCBpbnRvIGFjY291bnQuIElmIGFub3RoZXIgY2FsbGVyXG5tbS92bXNjYW4uYzo3MzY2Olx0ICogZW50ZXJlZCB0aGUgYWxsb2NhdG9yIHNsb3cgcGF0aCB3aGlsZSBrc3dhcGQgd2FzIGF3YWtlLCBvcmRlciB3aWxsXG5tbS92bXNjYW4uYy03MzY3LVx0ICogcmVtYWluIGF0IHRoZSBoaWdoZXIgbGV2ZWwuXG4tLVxubW0vdm1zY2FuLmMtNzM3Mi0vKlxubW0vdm1zY2FuLmM6NzM3MzogKiBUaGUgcGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBpcyB1c2VkIHRvIHBhc3MgdGhlIGhpZ2hlc3Qgem9uZSBpbmRleCB0b1xubW0vdm1zY2FuLmM6NzM3NDogKiBiZSByZWNsYWltZWQgYnkga3N3YXBkIGZyb20gdGhlIHdha2VyLiBJZiB0aGUgdmFsdWUgaXMgTUFYX05SX1pPTkVTIHdoaWNoIGlzXG5tbS92bXNjYW4uYzo3Mzc1OiAqIG5vdCBhIHZhbGlkIGluZGV4IHRoZW4gZWl0aGVyIGtzd2FwZCBydW5zIGZvciBmaXJzdCB0aW1lIG9yIGtzd2FwZCBjb3VsZG4mIzM5O3Rcbm1tL3Ztc2Nhbi5jLTczNzYtICogc2xlZXAgYWZ0ZXIgcHJldmlvdXMgcmVjbGFpbSBhdHRlbXB0IChub2RlIGlzIHN0aWxsIHVuYmFsYW5jZWQpLiBJbiB0aGF0XG5tbS92bXNjYW4uYzo3Mzc3OiAqIGNhc2UgcmV0dXJuIHRoZSB6b25lIGluZGV4IG9mIHRoZSBwcmV2aW91cyBrc3dhcGQgcmVjbGFpbSBjeWNsZS5cbm1tL3Ztc2Nhbi5jLTczNzgtICovXG5tbS92bXNjYW4uYzo3Mzc5OnN0YXRpYyBlbnVtIHpvbmVfdHlwZSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MzgwLVx0XHRcdFx0XHQgICBlbnVtIHpvbmVfdHlwZSBwcmV2X2hpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTczODEte1xubW0vdm1zY2FuLmM6NzM4MjpcdGVudW0gem9uZV90eXBlIGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzM4My1cbi0tXG5tbS92bXNjYW4uYy03Mzg2LVxubW0vdm1zY2FuLmM6NzM4NzpzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXG5tbS92bXNjYW4uYy03Mzg4LVx0XHRcdFx0dW5zaWduZWQgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03Mzk1LVxubW0vdm1zY2FuLmM6NzM5NjpcdHByZXBhcmVfdG9fd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbm1tL3Ztc2Nhbi5jLTczOTctXG4tLVxubW0vdm1zY2FuLmMtNzQwNC1cdCAqL1xubW0vdm1zY2FuLmM6NzQwNTpcdGlmIChwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xubW0vdm1zY2FuLmMtNzQwNi1cdFx0Lypcbi0tXG5tbS92bXNjYW4uYy03NDA4LVx0XHQgKiBpc29sYXRlIHBhZ2VzIGZyb20gYW5kIHNraXBzIHRoZW0gaW4gdGhlIGZ1dHVyZSBzY2FubmluZy5cbm1tL3Ztc2Nhbi5jOjc0MDk6XHRcdCAqIFdoZW4ga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBpdCBpcyByZWFzb25hYmxlIHRvIGFzc3VtZVxubW0vdm1zY2FuLmMtNzQxMC1cdFx0ICogdGhhdCBwYWdlcyBhbmQgY29tcGFjdGlvbiBtYXkgc3VjY2VlZCBzbyByZXNldCB0aGUgY2FjaGUuXG4tLVxubW0vdm1zY2FuLmMtNzQyMi1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjc0MjM6XHRcdCAqIElmIHdva2VuIHByZW1hdHVyZWx5IHRoZW4gcmVzZXQga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCBhbmRcbm1tL3Ztc2Nhbi5jLTc0MjQtXHRcdCAqIG9yZGVyLiBUaGUgdmFsdWVzIHdpbGwgZWl0aGVyIGJlIGZyb20gYSB3YWtldXAgcmVxdWVzdCBvclxuLS1cbm1tL3Ztc2Nhbi5jLTc0MjctXHRcdGlmIChyZW1haW5pbmcpIHtcbm1tL3Ztc2Nhbi5jOjc0Mjg6XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LFxubW0vdm1zY2FuLmM6NzQyOTpcdFx0XHRcdFx0a3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc0MzAtXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpKTtcbm1tL3Ztc2Nhbi5jLTc0MzEtXG5tbS92bXNjYW4uYzo3NDMyOlx0XHRcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKSBcdTAwM2MgcmVjbGFpbV9vcmRlcilcbm1tL3Ztc2Nhbi5jOjc0MzM6XHRcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgcmVjbGFpbV9vcmRlcik7XG5tbS92bXNjYW4uYy03NDM0LVx0XHR9XG5tbS92bXNjYW4uYy03NDM1LVxubW0vdm1zY2FuLmM6NzQzNjpcdFx0ZmluaXNoX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQpO1xubW0vdm1zY2FuLmM6NzQzNzpcdFx0cHJlcGFyZV90b193YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xubW0vdm1zY2FuLmMtNzQzOC1cdH1cbi0tXG5tbS92bXNjYW4uYy03NDQ0LVx0aWYgKCFyZW1haW5pbmcgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYzo3NDQ1Olx0ICAgIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XG5tbS92bXNjYW4uYzo3NDQ2Olx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LVx1MDAzZW5vZGVfaWQpO1xubW0vdm1zY2FuLmMtNzQ0Ny1cbi0tXG5tbS92bXNjYW4uYy03NDUyLVx0XHQgKiB3YXRlcm1hcmtzIGJlaW5nIGJyZWFjaGVkIHdoaWxlIHVuZGVyIHByZXNzdXJlLCB3ZSByZWR1Y2UgdGhlXG5tbS92bXNjYW4uYzo3NDUzOlx0XHQgKiBwZXItY3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlXG5tbS92bXNjYW4uYy03NDU0LVx0XHQgKiB0aGVtIGJlZm9yZSBnb2luZyBiYWNrIHRvIHNsZWVwLlxuLS1cbm1tL3Ztc2Nhbi5jLTc0NjctXHR9XG5tbS92bXNjYW4uYzo3NDY4Olx0ZmluaXNoX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQpO1xubW0vdm1zY2FuLmMtNzQ2OS19XG4tLVxubW0vdm1zY2FuLmMtNzQ4My0gKi9cbm1tL3Ztc2Nhbi5jOjc0ODQ6c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbm1tL3Ztc2Nhbi5jLTc0ODUte1xuLS1cbm1tL3Ztc2Nhbi5jLTc0OTMtXHQgKiBhbmQgdGhhdCBpZiB3ZSBuZWVkIG1vcmUgbWVtb3J5IHdlIHNob3VsZCBnZXQgYWNjZXNzIHRvIGl0XG5tbS92bXNjYW4uYzo3NDk0Olx0ICogcmVnYXJkbGVzcyAoc2VlIFwmIzM0O19fYWxsb2NfcGFnZXMoKVwmIzM0OykuIFwmIzM0O2tzd2FwZFwmIzM0OyBzaG91bGRcbm1tL3Ztc2Nhbi5jLTc0OTUtXHQgKiBuZXZlciBnZXQgY2F1Z2h0IGluIHRoZSBub3JtYWwgcGFnZSBmcmVlaW5nIGxvZ2ljLlxuLS1cbm1tL3Ztc2Nhbi5jLTc1MDUtXG5tbS92bXNjYW4uYzo3NTA2Olx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIDApO1xubW0vdm1zY2FuLmM6NzUwNzpcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcbm1tL3Ztc2Nhbi5jLTc1MDgtXHRhdG9taWNfc2V0KFx1MDAyNnBnZGF0LVx1MDAzZW5yX3dyaXRlYmFja190aHJvdHRsZWQsIDApO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1MTEtXG5tbS92bXNjYW4uYzo3NTEyOlx0XHRhbGxvY19vcmRlciA9IHJlY2xhaW1fb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc1MTM6XHRcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NTE0LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc1MTUtXG5tbS92bXNjYW4uYzo3NTE2Omtzd2FwZF90cnlfc2xlZXA6XG5tbS92bXNjYW4uYzo3NTE3Olx0XHRrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnZGF0LCBhbGxvY19vcmRlciwgcmVjbGFpbV9vcmRlcixcbm1tL3Ztc2Nhbi5jLTc1MTgtXHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCk7XG4tLVxubW0vdm1zY2FuLmMtNzUyMC1cdFx0LyogUmVhZCB0aGUgbmV3IG9yZGVyIGFuZCBoaWdoZXN0X3pvbmVpZHggKi9cbm1tL3Ztc2Nhbi5jOjc1MjE6XHRcdGFsbG9jX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcik7XG5tbS92bXNjYW4uYzo3NTIyOlx0XHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzUyMy1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYzo3NTI0Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5tbS92bXNjYW4uYzo3NTI1Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XG5tbS92bXNjYW4uYy03NTI2LVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MzgtXHRcdCAqIFJlY2xhaW0gYmVnaW5zIGF0IHRoZSByZXF1ZXN0ZWQgb3JkZXIgYnV0IGlmIGEgaGlnaC1vcmRlclxubW0vdm1zY2FuLmM6NzUzOTpcdFx0ICogcmVjbGFpbSBmYWlscyB0aGVuIGtzd2FwZCBmYWxscyBiYWNrIHRvIHJlY2xhaW1pbmcgZm9yXG5tbS92bXNjYW4uYzo3NTQwOlx0XHQgKiBvcmRlci0wLiBJZiB0aGF0IGhhcHBlbnMsIGtzd2FwZCB3aWxsIGNvbnNpZGVyIHNsZWVwaW5nXG5tbS92bXNjYW4uYy03NTQxLVx0XHQgKiBmb3IgdGhlIG9yZGVyIGl0IGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQgKHJlY2xhaW1fb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzU0NC1cdFx0ICovXG5tbS92bXNjYW4uYzo3NTQ1Olx0XHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3dha2UocGdkYXQtXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LFxubW0vdm1zY2FuLmMtNzU0Ni1cdFx0XHRcdFx0XHRhbGxvY19vcmRlcik7XG4tLVxubW0vdm1zY2FuLmMtNzU0OS1cdFx0aWYgKHJlY2xhaW1fb3JkZXIgXHUwMDNjIGFsbG9jX29yZGVyKVxubW0vdm1zY2FuLmM6NzU1MDpcdFx0XHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XG5tbS92bXNjYW4uYy03NTUxLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTktICogQSB6b25lIGlzIGxvdyBvbiBmcmVlIG1lbW9yeSBvciB0b28gZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBtZW1vcnkuICBJZlxubW0vdm1zY2FuLmM6NzU2MDogKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjc1NjE6ICogcGdkYXQuICBJdCB3aWxsIHdha2UgdXAga2NvbXBhY3RkIGFmdGVyIHJlY2xhaW1pbmcgbWVtb3J5LiAgSWYga3N3YXBkIHJlY2xhaW1cbm1tL3Ztc2Nhbi5jLTc1NjItICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcbi0tXG5tbS92bXNjYW4uYy03NTY0LSAqL1xubW0vdm1zY2FuLmM6NzU2NTp2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNzU2Ni1cdFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NzctXHRwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjc1Nzg6XHRjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc1NzktXG5tbS92bXNjYW4uYy03NTgwLVx0aWYgKGN1cnJfaWR4ID09IE1BWF9OUl9aT05FUyB8fCBjdXJyX2lkeCBcdTAwM2MgaGlnaGVzdF96b25laWR4KVxubW0vdm1zY2FuLmM6NzU4MTpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzU4Mi1cbm1tL3Ztc2Nhbi5jOjc1ODM6XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlcikgXHUwMDNjIG9yZGVyKVxubW0vdm1zY2FuLmM6NzU4NDpcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIsIG9yZGVyKTtcbm1tL3Ztc2Nhbi5jLTc1ODUtXG5tbS92bXNjYW4uYzo3NTg2Olx0aWYgKCF3YWl0cXVldWVfYWN0aXZlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KSlcbm1tL3Ztc2Nhbi5jLTc1ODctXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYy03NTg5LVx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gaWYgcG9zc2libGUgKi9cbm1tL3Ztc2Nhbi5jOjc1OTA6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpIHx8XG5tbS92bXNjYW4uYy03NTkxLVx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zY2FuLmMtNzYwNC1cbm1tL3Ztc2Nhbi5jOjc2MDU6XHR0cmFjZV9tbV92bXNjYW5fd2FrZXVwX2tzd2FwZChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsIG9yZGVyLFxubW0vdm1zY2FuLmMtNzYwNi1cdFx0XHRcdCAgICAgIGdmcF9mbGFncyk7XG5tbS92bXNjYW4uYzo3NjA3Olx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KTtcbm1tL3Ztc2Nhbi5jLTc2MDgtfVxubW0vdm1zY2FuLmMtNzYwOS1cbm1tL3Ztc2Nhbi5jOjc2MTA6dm9pZCBrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdCwgZW51bSBrc3dhcGRfY2xlYXJfaG9wZWxlc3NfcmVhc29uIHJlYXNvbilcbm1tL3Ztc2Nhbi5jLTc2MTEte1xubW0vdm1zY2FuLmMtNzYxMi1cdC8qIE9ubHkgdHJhY2UgYWN0dWFsIHJlc2V0cywgbm90IHJlZHVuZGFudCB6ZXJvLXRvLXplcm8gKi9cbm1tL3Ztc2Nhbi5jOjc2MTM6XHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzLCAwKSlcbm1tL3Ztc2Nhbi5jOjc2MTQ6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQtXHUwMDNlbm9kZV9pZCwgcmVhc29uKTtcbm1tL3Ztc2Nhbi5jLTc2MTUtfVxuLS1cbm1tL3Ztc2Nhbi5jLTc2MTctLypcbm1tL3Ztc2Nhbi5jOjc2MTg6ICogUmVzZXQga3N3YXBkX2ZhaWx1cmVzIG9ubHkgd2hlbiB0aGUgbm9kZSBpcyBiYWxhbmNlZC4gV2l0aG91dCB0aGlzXG5tbS92bXNjYW4uYy03NjE5LSAqIGNoZWNrLCBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIChlLmcuLCBmcm9tIGNncm91cCBtZW1vcnkuaGlnaFxubW0vdm1zY2FuLmM6NzYyMDogKiB0aHJvdHRsaW5nKSBjYW4ga2VlcCByZXNldHRpbmcga3N3YXBkX2ZhaWx1cmVzIGV2ZW4gd2hlbiB0aGUgbm9kZVxubW0vdm1zY2FuLmM6NzYyMTogKiBjYW5ub3QgYmUgYmFsYW5jZWQsIGNhdXNpbmcga3N3YXBkIHRvIHJ1biBlbmRsZXNzbHkuXG5tbS92bXNjYW4uYy03NjIyLSAqL1xubW0vdm1zY2FuLmM6NzYyMzp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc2MjQtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NjI2LVx0aWYgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSlcbm1tL3Ztc2Nhbi5jOjc2Mjc6XHRcdGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgY3VycmVudF9pc19rc3dhcGQoKSA/XG5tbS92bXNjYW4uYy03NjI4LVx0XHRcdEtTV0FQRF9DTEVBUl9IT1BFTEVTU19LU1dBUEQgOiBLU1dBUERfQ0xFQVJfSE9QRUxFU1NfRElSRUNUKTtcbi0tXG5tbS92bXNjYW4uYy03NjMwLVxubW0vdm1zY2FuLmM6NzYzMTpib29sIGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG5tbS92bXNjYW4uYy03NjMyLXtcbm1tL3Ztc2Nhbi5jOjc2MzM6XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzKSBcdTAwM2U9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG5tbS92bXNjYW4uYy03NjM0LX1cbi0tXG5tbS92bXNjYW4uYz03NjQ1PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc2NzUtLypcbm1tL3Ztc2Nhbi5jOjc2NzY6ICogVGhpcyBrc3dhcGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxubW0vdm1zY2FuLmMtNzY3Ny0gKi9cbm1tL3Ztc2Nhbi5jOjc2Nzg6dm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKVxubW0vdm1zY2FuLmMtNzY3OS17XG4tLVxubW0vdm1zY2FuLmMtNzY4MS1cbm1tL3Ztc2Nhbi5jOjc2ODI6XHRwZ2RhdF9rc3dhcGRfbG9jayhwZ2RhdCk7XG5tbS92bXNjYW4uYzo3NjgzOlx0aWYgKCFwZ2RhdC1cdTAwM2Vrc3dhcGQpIHtcbm1tL3Ztc2Nhbi5jOjc2ODQ6XHRcdHBnZGF0LVx1MDAzZWtzd2FwZCA9IGt0aHJlYWRfY3JlYXRlX29uX25vZGUoa3N3YXBkLCBwZ2RhdCwgbmlkLCBcJiMzNDtrc3dhcGQlZFwmIzM0OywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjc2ODU6XHRcdGlmIChJU19FUlIocGdkYXQtXHUwMDNla3N3YXBkKSkge1xubW0vdm1zY2FuLmMtNzY4Ni1cdFx0XHQvKiBmYWlsdXJlIGF0IGJvb3QgaXMgZmF0YWwgKi9cbm1tL3Ztc2Nhbi5jOjc2ODc6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBzdGFydCBrc3dhcGQgb24gbm9kZSAlZCwgcmV0PSVwZVxcblwmIzM0Oyxcbm1tL3Ztc2Nhbi5jOjc2ODg6XHRcdFx0XHQgICBuaWQsIHBnZGF0LVx1MDAzZWtzd2FwZCk7XG5tbS92bXNjYW4uYy03Njg5LVx0XHRcdEJVR19PTihzeXN0ZW1fc3RhdGUgXHUwMDNjIFNZU1RFTV9SVU5OSU5HKTtcbm1tL3Ztc2Nhbi5jOjc2OTA6XHRcdFx0cGdkYXQtXHUwMDNla3N3YXBkID0gTlVMTDtcbm1tL3Ztc2Nhbi5jLTc2OTEtXHRcdH0gZWxzZSB7XG5tbS92bXNjYW4uYzo3NjkyOlx0XHRcdHdha2VfdXBfcHJvY2VzcyhwZ2RhdC1cdTAwM2Vrc3dhcGQpO1xubW0vdm1zY2FuLmMtNzY5My1cdFx0fVxubW0vdm1zY2FuLmMtNzY5NC1cdH1cbm1tL3Ztc2Nhbi5jOjc2OTU6XHRwZ2RhdF9rc3dhcGRfdW5sb2NrKHBnZGF0KTtcbm1tL3Ztc2Nhbi5jLTc2OTYtfVxuLS1cbm1tL3Ztc2Nhbi5jLTc3MDEtICovXG5tbS92bXNjYW4uYzo3NzAyOnZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpXG5tbS92bXNjYW4uYy03NzAzLXtcbm1tL3Ztc2Nhbi5jLTc3MDQtXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzUKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNR0xSVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1HTFJVIHBhdGNoLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gSSBpbml0aWFsbHkgdGhvdWdodCBga3N3YXBkYCBtaWdodCBiZSBhIHJlbGV2YW50IHN5bWJvbCwgYnV0IGl0JiMzOTtzIHJlYWxseSBqdXN0IGEgdGhyZWFkLiBOb3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpZGVudGlmeWluZyB0aGUga2V5IGNoYW5nZXMuIEluc3RlYWQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9ucyBhY3R1YWxseSBkb2luZyB0aGUgd29yayBvZiBtZW1vcnkgcmVjbGFtYXRpb24uCgpgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW0gbXVjaCBtb3JlIHByb21pc2luZy4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBmcmVlaW5nIG1lbW9yeSwgYW5kIGFyZSBsaWtlbHkgdG8gYmUgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VhcmNoIGZvciBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGV2aWN0X2ZvbGlvc2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCgpXYWl0Li4uIGlzIGBzaHJpbmtfYWxsX21lbW9yeWAgZXhwb3J0ZWQ/IEFoLCBubywgaXQmIzM5O3MgdGllZCB0byBoaWJlcm5hdGlvbi4gVGhhdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZm9jdXMgaGVyZS4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB1c2VkIGJ5IHRoZSBwYWdlIGFsbG9jYXRvciwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIG1lbWNnLXJlbGF0ZWQsIHNvIGl0IHdpbGwgYmUgcmVsZXZhbnQgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWVtY2cgaW50ZXJhY3Rpb24uCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIHRoaXMgTUdMUlUgZnVuY3Rpb25hbGl0eS4gTG9va3MgbGlrZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGFyZSB0aGUga2V5cy4gTm93IHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucywgbGV0JiMzOTtzIGFkZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC4KClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZXZpY3Rpb24gYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdW5ldmljdGFibGUgZm9saW9zIGluIGBzb3J0X2ZvbGlvKClgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIHJlY2xhbWF0aW9uLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHdlIHdhbnQgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KCkJlZm9yZSBJIG1vdmUgb24sIGxldCYjMzk7cyBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBMUlVfR0VOX0VOQUJMRURgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuIEFoLCB5ZXMsIGl0IGRlcGVuZHMgb24gYExSVV9HRU5gIGFuZCBpcyBtYXJrZWQgJiMzNDtFbmFibGUgYnkgZGVmYXVsdC4mIzM0OyBUaGF0IGNvbmZpcm1zIGl0LgoKTm93LCBJJiMzOTttIGNvbmZpZGVudCB3ZSBoYXZlIGEgc29saWQgc2V0IG9mIGZvY3VzIHN5bWJvbHMgYW5kIGEgY2xlYXIgcmF0aW9uYWxlLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZXZpY3Rpb24gYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdW5ldmljdGFibGUgZm9saW9zIGluIHNvcnRfZm9saW8oKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkOTQwYjRhNWY3YWYyNWRkNTQ5YjQ3YzcxYzVhMDQxYjI2NzEyOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo0NjoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzE5NGRhN2RjYzc5NS4uZWNhNWZmNjQyMzhkZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ2NDgsNyAmIzQzOzQ2NDgsNiBAQCB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LAogc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAogCQkgICAgICAgaW50IHRpZXJfaWR4KQogewotCWJvb2wgc3VjY2VzczsKIAlpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKQEAgLTQ2NjAsMTYgJiM0Mzs0NjU5LDYgQEAgc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2MKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhnZW4gJmd0Oz0gTUFYX05SX0dFTlMsIGZvbGlvKTsKIAotCS8qIHVuZXZpY3RhYmxlICovCi0JaWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7Ci0JCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKLQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7Ci0JCWZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xpbyk7Ci0JCWxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7Ci0JCV9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQogCS8qIHByb21vdGVkICovCiAJaWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSkpIHsKIAkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtscnVnZW4tJmd0O2ZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDMKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIGluIGBtbS92bXNjYW4uY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc29ydF9mb2xpb2AgZnVuY3Rpb24uIFdoYXQgSSYjMzk7bSBzZWVpbmcgaXMgYSByZW1vdmFsIG9mIHRoZSBibG9jayBkZWFsaW5nIHdpdGggdW5ldmljdGFibGUgZm9saW9zLiBTcGVjaWZpY2FsbHksIHRoZSBjaGVjayBgIWZvbGlvX2V2aWN0YWJsZShmb2xpbylgIGFuZCBpdHMgYXNzb2NpYXRlZCBsb2dpYyBpcyBnb25lLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2Ugd2l0aGluIHRoZSBwYWdlIGV2aWN0aW9uIGFuZCBMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLgoKUmlnaHQgYXdheSwgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIHRoYXQgc2NyZWFtcyAmIzM0O3NlY3VyaXR5IHZ1bG5lcmFiaWxpdHkmIzM0OyBhdCBtZS4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55dGhpbmcgdGhhdCB3b3VsZCBsZWFkIHRvIHVzZXItc3BhY2UgaW5mb3JtYXRpb24gbGVha3MuIEl0JiMzOTtzIHN0cmljdGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBUaGUgY29kZSBpcyBzaW1wbHkgcmVtb3ZpbmcgYSBjb25kaXRpb24gaW4gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExSVSwgbm90IGFsdGVyaW5nIG1lbW9yeSBjb250ZW50cy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayB0aG91Z2guIFRoZSBjb2RlIHJlbW92ZWQgaW5jbHVkZWQgYSBgc3VjY2Vzc2AgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2UgdGhhdCB2YXJpYWJsZSB3YXMgb25seSB1c2VkIGxvY2FsbHkgd2l0aGluIHRoZSByZW1vdmVkIGJsb2NrLiBJIHNlZSBubyBuZXcgdmFyaWFibGVzIGludHJvZHVjZWQgZWl0aGVyLiBUaGUgY2hhbmdlIGxvb2tzIGNsZWFuOyB0aGVyZSYjMzk7cyBubyB3YXkgdGhpcyBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGZvciwgbm90IGp1c3QgYW55IHNvcnQgb2YgbWVtb3J5IGVycm9yLiBTdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTiBhcmUgd2hhdCBJJiMzOTtkIHJlbHkgb24gaGVyZSB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBsaWtlIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBpZiB0aGV5JiMzOTtyZSBwcmVzZW50IGR1ZSB0byBzb21lIGluY29ycmVjdCBMUlUgaGFuZGxpbmcuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJIGRvbiYjMzk7dCBiZWxpZXZlIGl0IGludHJvZHVjZXMgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgY29uZGl0aW9uYWwgYmxvY2sgaGFuZGxpbmcgdW5ldmljdGFibGUgZm9saW9zIGluIGBzb3J0X2ZvbGlvYCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IExSVSBsaXN0IG1hbmFnZW1lbnQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoxMS45ODMwMDk2ODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk4NjY0ODM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGV2aWN0aW9uIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHVuZXZpY3RhYmxlIGZvbGlvcyBpbiBzb3J0X2ZvbGlvKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MTEuOTgzMDE2ODUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc0NDEwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjQ2OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAzMTk0ZGE3ZGNjNzk1Li5lY2E1ZmY2NDIzOGRkIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNDY0OCw3ICs0NjQ4LDYgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcXG4gc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbiBcXHRcXHQgICAgICAgaW50IHRpZXJfaWR4KVxcbiB7XFxuLVxcdGJvb2wgc3VjY2VzcztcXG4gXFx0aW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xcbiBcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcXG5AQCAtNDY2MCwxNiArNDY1OSw2IEBAIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jXFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TLCBmb2xpbyk7XFxuIFxcbi1cXHQvKiB1bmV2aWN0YWJsZSAqL1xcbi1cXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpIHtcXG4tXFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbi1cXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcXG4tXFx0XFx0Zm9saW9fc2V0X3VuZXZpY3RhYmxlKGZvbGlvKTtcXG4tXFx0XFx0bHJ1dmVjX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcXG4tXFx0XFx0X19jb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdDVUxMRUQsIGRlbHRhKTtcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdH1cXG4tXFxuIFxcdC8qIHByb21vdGVkICovXFxuIFxcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XFxuIFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoxMi43MDEyOTQ4NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjEwMzcwOTYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgZXZpY3Rpb24gYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdW5ldmljdGFibGUgZm9saW9zIGluIHNvcnRfZm9saW8oKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDk0MGI0YTVmN2FmMjVkZDU0OWI0N2M3MWM1YTA0MWIyNjcxMjlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NDY6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzMTk0ZGE3ZGNjNzk1Li5lY2E1ZmY2NDIzOGRkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDY0OCw3ICs0NjQ4LDYgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcbiBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdCAgICAgICBpbnQgdGllcl9pZHgpXG4ge1xuLVx0Ym9vbCBzdWNjZXNzO1xuIFx0aW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuQEAgLTQ2NjAsMTYgKzQ2NTksNiBAQCBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TLCBmb2xpbyk7XG4gXG4tXHQvKiB1bmV2aWN0YWJsZSAqL1xuLVx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7XG4tXHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbi1cdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tXHRcdGZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xpbyk7XG4tXHRcdGxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdF9fY291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0fVxuLVxuIFx0LyogcHJvbW90ZWQgKi9cbiBcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbiBcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjEyLjcwMTI5NjQ5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTM5MDcyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIFVuZXZpY3RhYmxlIEZvbGlvIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdG91Y2hlZCBgbW0vdm1zY2FuLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSB0YWtpbmcgb3V0IGEgc2VjdGlvbiBvZiBjb2RlIHdpdGhpbiB0aGUgYHNvcnRfZm9saW9gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVtb3ZpbmcgdGhlIHBhcnQgdGhhdCBkZWFscyB3aXRoIHVuZXZpY3RhYmxlIGZvbGlvcy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2Ygd2hhdCB0aGF0IGJsb2NrIHdhcyBhY3R1YWxseSBkb2luZy4gQWgsIHJpZ2h0LiBJdCB3YXMgaGFuZGxpbmcgdGhlIHNjZW5hcmlvIHdoZXJlIGEgZm9saW8gY291bGRuJ3QgYmUgZXZpY3RlZC5cblxuSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZDpcblxuMS4gIENoZWNrIGlmIHRoZSBmb2xpbyAqd2Fzbid0KiBldmljdGFibGUuXG4yLiAgVGhlbiwgaXQnZCB0cnkgdG8gcmVtb3ZlIHRoZSBmb2xpbyBmcm9tIHRoZSBMUlUgbGlzdCB1c2luZyBgbHJ1X2dlbl9kZWxfZm9saW9gLiBJJ2xsIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0cnVlYCBmbGFnIHRoZXJlLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGNhbiBjYXVzZSBzb21lIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLlxuMy4gIElmIHRoYXQgcmVtb3ZhbCBmYWlsZWQsIGl0IHdvdWxkIHRyaWdnZXIgYSB3YXJuaW5nLCB1c2luZyBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4gVGhhdCdzIGEgZ29vZCBzYW5pdHkgY2hlY2s7IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB3ZW50IHdyb25nLlxuNC4gIFRoZW4sIGl0IHdvdWxkIG1hcmsgdGhlIGZvbGlvIGFzIHVuZXZpY3RhYmxlIHdpdGggYGZvbGlvX3NldF91bmV2aWN0YWJsZWAuXG41LiAgQWZ0ZXIgdGhhdCwgaXQgd291bGQgcmUtYWRkIHRoZSBmb2xpbyB0byB0aGUgTFJVIHVzaW5nIGBscnV2ZWNfYWRkX2ZvbGlvYC5cbjYuICBGaW5hbGx5LCBpdCB3b3VsZCB1cGRhdGUgdGhlIGBVTkVWSUNUQUJMRV9QR0NVTExFRGAgY291bnRlci5cblxuU28sIGluIGVzc2VuY2UsIGl0J3MgYSBjcml0aWNhbCBwYXRoIHRvIG1hbmFnZSB1bmV2aWN0YWJsZSBmb2xpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG1vdGl2YXRpb24gaXMgZm9yIHJlbW92aW5nIHRoaXMuIElzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIGJ1ZyBmaXg/IE9yIGlzIHRoZSBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vdmVkIHNvbWV3aGVyZSBlbHNlP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MTcuMzU1MjA2NDAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDY5OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvcnRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDYxOT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDY0Ny1cXG5tbS92bXNjYW4uYzo0NjQ4OnN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG5tbS92bXNjYW4uYy00NjQ5LVxcdFxcdCAgICAgICBpbnQgdGllcl9pZHgpXFxuLS1cXG5tbS92bXNjYW4uYz00NzE3PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00NzU1LVxcbm1tL3Ztc2Nhbi5jOjQ3NTY6XFx0XFx0XFx0aWYgKHNvcnRfZm9saW8obHJ1dmVjLCBmb2xpbywgc2MsIHRpZXIpKVxcbm1tL3Ztc2Nhbi5jLTQ3NTctXFx0XFx0XFx0XFx0c29ydGVkICs9IGRlbHRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoxNy40MDM2ODY0MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0MjAxMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEZvbGlvIEV2aWN0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZm9saW8gbWFuYWdlbWVudCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgZXZpY3Rpb24gcHJvY2VzcywgYW5kIHRoaXMgaXMgcGFydCBvZiB0aGUgTUdMUlUuIE5vdywgYGV2aWN0X2ZvbGlvc2Agc2VlbXMgdG8gYmUgY2FsbGluZyBgc2Nhbl9mb2xpb3NgLCB3aGljaCBtYWtlcyBzZW5zZTsgd2UgbmVlZCB0byBzY2FuIHNvbWV0aGluZyB0byBkZWNpZGUgd2hhdCB0byBldmljdC4gVGhlbiBgc2Nhbl9mb2xpb3NgIGl0c2VsZiBjYWxscyBgc29ydF9mb2xpb2AsIGEgc3RhdGljIGZ1bmN0aW9uLiBcblxuVGhpcyBnaXZlcyBtZSB0aGUgZmxvdzogYGV2aWN0X2ZvbGlvc2AgLVx1MDAzZSBgc2Nhbl9mb2xpb3NgIC1cdTAwM2UgYHNvcnRfZm9saW9gLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgY29uZmlndXJlZC4gVGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdG8gY2hlY2sgd2hldGhlciBNR0xSVSBpcyBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGVyZSdzIHNvbWUga2luZCBvZiBjb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCBjb250cm9scyB3aGV0aGVyIGl0J3MgYWN0aXZlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyaWdnZXJzIGBldmljdF9mb2xpb3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0cyBhcmUsIGFuZCBob3cgdGhhdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoyMC45Mzc4OTI3NDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzNDUzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Nhbl9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDY5Mz1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzE2LVxcbm1tL3Ztc2Nhbi5jOjQ3MTc6c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00NzE4LVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxcbi0tXFxubW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDg0My1cXG5tbS92bXNjYW4uYzo0ODQ0OlxcdFxcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxcbm1tL3Ztc2Nhbi5jLTQ4NDUtXFx0XFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoyMC45ODkyNDY2MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NjU3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgZXZpY3RfZm9saW9zYCBhbmQgYGlzb2xhdGVfZm9saW9zYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgc3lzdGVtIGlzIHNob3dpbmcgc29tZSB1bnVzdWFsIGJlaGF2aW9yLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgaXMgdG8gcmV2aXNpdCBgZXZpY3RfZm9saW9zYCBhbmQgYGlzb2xhdGVfZm9saW9zYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucywgb2Z0ZW4gdGhlIGxpbmNocGlucyBvZiBlZmZpY2llbnQgZm9saW8gaGFuZGxpbmcuIEkndmUgc2VlbiBlbm91Z2ggcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdHJhY2VkIGJhY2sgdG8gaW5lZmZpY2llbnQgZm9saW8gZXZpY3Rpb24gb3IgaW1wcm9wZXIgaXNvbGF0aW9uLCB3aGljaCBjYW4gY2FzY2FkZSBpbnRvIHNpZ25pZmljYW50IGlzc3Vlcy4gU28sIGxldCdzIHN0YXJ0IHRoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5J3JlIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciByZXNvdXJjZSBjb250ZW50aW9uIGlzc3VlcyBJJ20gb3Zlcmxvb2tpbmcuIEknbGwgZm9jdXMgb24gYW55IHJlY2VudCBjaGFuZ2VzIG9yIGNvbW1pdHMgdGhhdCBoYXZlIHRvdWNoZWQgdGhlc2Ugcm91dGluZXMsIHRvIHNlZSBpZiB0aGVyZSdzIGJlZW4gYW55IHJlZ3Jlc3Npb24gb3IgaW50cm9kdWNlZCBpbmVmZmljaWVuY3kuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcnVsZSBvdXQgdGhlc2UgY29tbW9uIHN1c3BlY3RzIG9yIGlkZW50aWZ5IHRoZSBzbW9raW5nIGd1bi4gVGltZSB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjI0LjQ5NzkwNzQxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMzOTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00ODEyPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDgzMC1cXG5tbS92bXNjYW4uYzo0ODMxOnN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDgzMi1cXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4NjU9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODg2LVxcbm1tL3Ztc2Nhbi5jOjQ4ODc6XFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNDg4OC1cXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjoyNC41NDUyNTUwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDM3NTU5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBldmljdF9mb2xpb3NgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGNvZGUgaXMgcHJvYmFibHkgaW4gYSBzdGF0ZSBub3cgdGhhdCBtZWFucyB3ZSBuZWVkIHRvIHJldmlldyBob3cgZm9saW8gZXZpY3Rpb24gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGVmZmljaWVudCwgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGV2aWN0X2ZvbGlvc2Agbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlJ3JlIGdldHRpbmcgdGhlIGJlaGF2aW9yIHdlIGV4cGVjdCwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcmVncmVzc2lvbnMgb3IgaW5lZmZpY2llbmNpZXMgaW50cm9kdWNlZCB3aXRoIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZCwgdGhlIGV2aWN0aW9uIHN0cmF0ZWd5IGl0c2VsZiAoTFJVLCBjbG9jaywgZXRjLiksIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIEknbGwgbWVudGFsbHkgd2FsayB0aHJvdWdoIGEgZmV3IGNvbW1vbiBzY2VuYXJpb3MgYW5kIGVkZ2UgY2FzZXMgdG8gZW5zdXJlIHRoZSBsb2dpYyBob2xkcy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGhvdHNwb3RzIG9yIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gYGV2aWN0X2ZvbGlvc2AuIEknbGwgd2FudCB0byBxdWlja2x5IGNvbnNpZGVyIGlmIHRoZXJlJ3MgYW55IG9idmlvdXMgbG9ja2luZyBjb250ZW50aW9uIG9yIHJlZHVuZGFudCBvcGVyYXRpb25zIHRoYXQganVtcCBvdXQuIEl0J3MgdGltZSB0byBwdXQgb24gbXkgbWVtb3J5IG1hbmFnZW1lbnQgaGF0IGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MjcuNjQ5MDE0NjY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjYxNjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJldmljdF9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDgzMT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDg2NC1cXG5tbS92bXNjYW4uYzo0ODY1OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTQ4NjYtXFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmM9NTA0ND1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA2Ny1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1MDY4OlxcdFxcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MDY5LVxcdFxcdGlmICghZGVsdGEpXFxuLS1cXG5tbS92bXNjYW4uYz01NjcxPXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTY5MS1cXHRcXHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTY5MjpcXHRcXHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXFxubW0vdm1zY2FuLmMtNTY5My1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MjcuNzAxNjM4MDc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUyMDMzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHRyeV90b19zaHJpbmtfbHJ1dmVjYC4gSSdtIHN0YXJ0aW5nIGhlcmUgYmVjYXVzZS4uLiB3ZWxsLCAqSSoga25vdyB0aGUgY29kZS4gSXQgZmVlbHMgbGlrZSB0aGlzIGlzIHRoZSBsaWtlbHkgY3VscHJpdCBmb3IgdGhlIHBlcmZvcm1hbmNlIGFub21hbHkgd2UncmUgc2VlaW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc2hyaW5raW5nIGxvZ2ljIHdpdGhpbiBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzbid0IG92ZXJseSBhZ2dyZXNzaXZlLCBvciBpc24ndCBmaXJpbmcgd2hlbiB3ZSBkb24ndCBleHBlY3QgaXQgdG8uIFdlJ3ZlIG9wdGltaXplZCB0aGUgTFJVIGRhdGEgc3RydWN0dXJlLCB0aGUgYWxsb2NhdGlvbiwgdGhlIGRlYWxsb2NhdGlvbiwgYW5kIHRoZSBob3QgcGF0aHMgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBzb3VyY2Ugb2YgcHJvYmxlbXMuIEkgbmVlZCB0byB3YWxrIHRocm91Z2ggdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBzaHJpbmthZ2UgYW5kIHRoZSBhY3R1YWwgc2hyaW5raW5nIHByb2Nlc3MgaXRzZWxmLiBJIG5lZWQgdG8gdmVyaWZ5LCAqdGhvcm91Z2hseSosIHRoYXQgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgZHVyaW5nIHRoZSByZXNpemluZyBvcGVyYXRpb24uIEFueSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGNvcGllcyBjb3VsZCBiZSBkaXNhc3Ryb3VzIGhlcmUuIEnigJltIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMg4oCTIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBMUlUgaXMgbmVhcmx5IGVtcHR5PyBXaGVuIGl0J3MgZnVsbD8gV2hlbiB0aGVyZSdzIGhpZ2ggY2h1cm4/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFyZSB3ZSBoYW5kbGluZyBjb25jdXJyZW50IGFjY2Vzc2VzIGR1cmluZyB0aGVzZSBzaHJpbmsgb3BlcmF0aW9ucz8gVGhpcyBpcyBwb3RlbnRpYWxseSBhIGJpZyBib3R0bGVuZWNrLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gb3VyIHN5bmNocm9uaXphdGlvbiBpcyByb2J1c3QuIEl0J3MgdGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyDigJMgdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgTFJVIHZlY3RvcidzIGludGVybmFsIHN0YXRlLiBMZXQncyBzZWUgaG93IHdlbGwgaXQgaG9sZHMgdXAgdG8gc2NydXRpbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjozMS4xMTY4NDQ5NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTk5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwMDk9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDMtICovXFxubW0vdm1zY2FuLmM6NTA0NDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDUte1xcbi0tXFxubW0vdm1zY2FuLmM9NTA4OT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDgtXFxubW0vdm1zY2FuLmM6NTEwOTpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxMTAtXFxuLS1cXG5tbS92bXNjYW4uYz01MjAwPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxMi1cXG5tbS92bXNjYW4uYzo1MjEzOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjE0LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MzEuMTYzODUxMzMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDk2NjAzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1HTFJVIFNocmlua2luZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBUaGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoZSBzaHJpbmtpbmcgcHJvY2VzcyB3aXRoaW4gTUdMUlUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAsIGl0J3Mgd29ydGggY2hlY2tpbmc6IGlzIE1HTFJVIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8ga25vdyBpZiBJJ20gZXZlbiBkZWFsaW5nIHdpdGggYSB0eXBpY2FsIG9yIGFuIHVudXN1YWwgc3lzdGVtIHNldHVwIHdoZW4gYW5hbHl6aW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGhlbHAgbWUgY29udGV4dHVhbGl6ZSB0aGUgYmVoYXZpb3IgSSBzZWUgYW5kIGZvY3VzIG15IGF0dGVudGlvbiBhcHByb3ByaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MzMuOTEzNTE4OTIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAxOTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mj1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDItIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDM6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDQtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMS1cXG5tbS9LY29uZmlnOjE0MTI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMy1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNy1cXG5tbS9LY29uZmlnOjE0MTg6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI2LVxcbm1tL0tjb25maWc6MTQyNzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NjozMy45NjM1NDQzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY5MjAzMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgZGVmaW5lZCBpbiB0aGlzIHByb2plY3QuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgZ2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgTFJVIGFsZ29yaXRobXMsIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZSwgd2hpY2ggd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgS2NvbmZpZyBzeW50YXg6IGBjb25maWcgTFJVX0dFTmAgYW5kIGBjb25maWcgTFJVX0dFTl9FTkFCTEVEYCwgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6MzYuOTMyNzUwODMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjE0MDE6XFx0XFxuMTQwMjpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjE0MDM6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDA0OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwNTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDY6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDc6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwODpcXHRcXHRoZWxwXFxuMTQwOTpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MTA6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQxMTpcXHRcXG4xNDEyOlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDEzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTQ6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNTpcXHRcXHRoZWxwXFxuMTQxNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE3OlxcdFxcbjE0MTg6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE5OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDIwOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MjE6XFx0XFx0aGVscFxcbjE0MjI6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDIzOlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDI0OlxcdFxcbjE0MjU6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDI2OlxcdFxcbjE0Mjc6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyODpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyOTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjM2LjkzMjg3NDk0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMzNTYxMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtleSBNZW1vcnkgTWFuYWdlbWVudCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBzb3J0X2ZvbGlvYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSB0byBob3cgd2UgaGFuZGxlIHVuZXZpY3RhYmxlIGZvbGlvcy4gU3BlY2lmaWNhbGx5LCB0aGF0IHdob2xlIGJsb2NrIG9mIGNvZGUgZGVhbGluZyB3aXRoIHRoZW0gaXMgZ29uZS4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBMUlUgZXZpY3Rpb24gbG9naWMg4oCTIGEgcHJldHR5IHNlbnNpdGl2ZSBhcmVhLCByZWFsbHkuIERlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgZGlyZWN0bHkgdG91Y2hlcyBMUlUgZXZpY3Rpb24sIEkga25vdyB0aGUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBjb25maWd1cmF0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHRlc3RpbmcgdGhpcyBlZmZlY3RpdmVseS4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzeW1ib2xzIHRvIHRhcmdldCB3aXRoIG15IGZ1enppbmcgZWZmb3J0cy4gYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBlc3BlY2lhbGx5IHNpbmNlIGBzb3J0X2ZvbGlvYCwgd2hpbGUgcmVsZXZhbnQsIGlzIHN0YXRpYyBhbmQgbWF5IHdlbGwgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFdlJ2xsIGFsc28gY29uc2lkZXIgYGV2aWN0X2ZvbGlvc2AgdG9vIGFzIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhpcyBpcyBub3QgaW5saW5lZCwgYWx0aG91Z2ggaXQncyBhbHNvIHN0YXRpYy4gYHNjYW5fZm9saW9zYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayB0b28uXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIGlmIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGlzIHN0YXRpYywgd2hpY2ggd2lsbCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgdGhlIGZ1enppbmcgYXBwcm9hY2ggSSB0YWtlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjQyLjA2NjQzOTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDk5NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTMwPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5OS1cXG5tbS92bXNjYW4uYzo1MjAwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMDEte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk0ND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk0OC1cXG5tbS92bXNjYW4uYzo1OTQ5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NTAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk2MT1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTcyLVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo1OTczOlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01OTc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo0Mi4xMTU5NDM2ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1ODYwNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC5cblxuKipEZWNvbnN0cnVjdGluZyBgc2hyaW5rX2xydXZlY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgYHNocmlua19scnV2ZWNgIGZ1bmN0aW9uLiBJJ20gZm9jdXNpbmcgb24gaXQgYmVjYXVzZSwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGl0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9wZXJhdGlvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUga2V5IG1lY2hhbmljcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBtYW5hZ2VzIHNocmlua2luZyBhbiBMUlUgdmVjdG9yLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY29tbW9uIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGluIG15IGhlYWQ6IGlkZW50aWZ5aW5nIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2RzIGZvciB0aGlzIHRhc2sgaW4gdGhlIGRvbWFpbiBvZiBMUlUgaW1wbGVtZW50YXRpb25zLiBJdCBtdXN0IGJlIGFib3V0IGVmZmljaWVudGx5IHJlbW92aW5nIGxlYXN0IHJlY2VudGx5IHVzZWQgZWxlbWVudHMgdG8gZnJlZSB1cCBtZW1vcnkuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnM/IElzIGl0IGFib3V0IHNpbXBseSBmcmVlaW5nIG1lbW9yeSwgb3IgaXMgaXQgbW9yZSBudWFuY2VkIHRoYW4gdGhhdCwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgaW1wYWN0IG9mIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBiZWluZyBldmljdGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW4gcGxheSBoZXJlPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzaW1wbHkgZGVjcmVhc2luZyB0aGUgc2l6ZSBvZiBhIHZlY3Rvciwgb3IgaXMgdGhlcmUgbW9yZSBjb21wbGV4IHJlLWFycmFuZ2VtZW50P1xuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6NDUuMTc0NTUyMDg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0OTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUwMDk9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDMtICovXFxubW0vdm1zY2FuLmM6NTA0NDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDUte1xcbi0tXFxubW0vdm1zY2FuLmM9NTA4OT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDgtXFxubW0vdm1zY2FuLmM6NTEwOTpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxMTAtXFxuLS1cXG5tbS92bXNjYW4uYz01MTMwPXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5OS1cXG5tbS92bXNjYW4uYzo1MjAwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMDEte1xcbi0tXFxubW0vdm1zY2FuLmMtNTIxMi1cXG5tbS92bXNjYW4uYzo1MjEzOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MjE0LVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NDQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NDgtXFxubW0vdm1zY2FuLmM6NTk0OTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01OTUwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NTQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NjAtXFxubW0vdm1zY2FuLmM6NTk2MTpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTk2Mi17XFxuLS1cXG5tbS92bXNjYW4uYy01OTcyLVxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYzo1OTczOlxcdFxcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01OTc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NjE1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjExLVxcbm1tL3Ztc2Nhbi5jOjYyMTI6XFx0XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy02MjEzLVxcbi0tXFxubW0vdm1zY2FuLmM9NjgwNz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzNy1cXHQgKi9cXG5tbS92bXNjYW4uYzo2ODM4OlxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4MzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjQ1LjIyNDYwMzg0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2MzE2ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQ29kZSBTdHJ1Y3R1cmU6IElkZW50aWZ5aW5nIFBvdGVudGlhbCBTY29wZSBmb3IgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gYHNocmlua19scnV2ZWNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCB3aGV0aGVyIGl0J3MgdHJ1bHkgdGhlIGJlc3QgcGxhY2UgZm9yIGl0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0J3Mgc3RhdGljLCBpdCdzIGxpbWl0ZWQgaW4gaXRzIGFjY2Vzc2liaWxpdHkuIE15IHByaW1hcnkgdGhvdWdodCBpcywgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldCBhbmQgaHVudCBmb3IgKm5vbiotc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSBtb3JlIGZsZXhpYmxlIG9yIGdsb2JhbGx5IHJlbGV2YW50IGFwcHJvYWNoIG1pZ2h0IGJlIGJlbmVmaWNpYWwuIFBlcmhhcHMgdGhlcmUgYXJlIHNpbWlsYXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGdlbmVyYWxpemVkLCBvciBwZXJoYXBzIHRoaXMgZnVuY3Rpb24gY291bGQgYmVuZWZpdCBmcm9tIGJyb2FkZXIgdmlzaWJpbGl0eSBvciBldmVuIHNvbWUgZm9ybSBvZiBtb2R1bGFyaXR5LiBUaGlzIHN1Z2dlc3RzIEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjQ4LjM3MDkyMzU2M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTAyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NzYxPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwNi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXFxubW0vdm1zY2FuLmM6NjgwNzp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4MDgtXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo0OC40MTY5MzgwNzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODgzNzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHlvdSwgdGhlIHVzZXIsIGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgbGV2ZWwgb2YgZGV0YWlsOlxuXG4qKlRoaW5raW5nIEFib3V0IGB0cnlfdG9fZnJlZV9wYWdlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHRyeV90b19mcmVlX3BhZ2VzYC4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCdzIG5vdCBzaW1wbHkgYSB1dGlsaXR5IGZ1bmN0aW9uLCBvcGVyYXRpbmcgaW5kZXBlbmRlbnRseSBvZiBhbnkgc3BlY2lmaWMgb2JqZWN0IG9yIG1vZHVsZSBzdGF0ZS4gSXQgc3VnZ2VzdHMgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIHJlbGllcyBvbiwgb3IgcG90ZW50aWFsbHkgbW9kaWZpZXMsIGRhdGEgd2l0aGluIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb3Igb2JqZWN0LiBLbm93aW5nIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IG9iamVjdCBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciB0aGluZ3MgbGlrZSBjb25jdXJyZW5jeSwgZGF0YSBpbnRlZ3JpdHksIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDY6NTEuODM1Nzc5MDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjY2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY1MDg9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1MzgtICovXFxubW0vdm1zY2FuLmM6NjUzOTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY1NDAtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2ODE9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NzYwLVxcbm1tL3Ztc2Nhbi5jOjY3NjE6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjc2Mi1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02Nzk1LVxcbm1tL3Ztc2Nhbi5jOjY3OTY6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc5Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NDc9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NzgtXFxubW0vdm1zY2FuLmM6Njg3OTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODgwLVxcbi0tXFxubW0vdm1zY2FuLmM9NzY0NT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NjQtXFxubW0vdm1zY2FuLmM6NzY2NTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NjY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo1MS44ODQwNTM4MDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDU5OTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gTWVtb3J5IFJlY2xhbWF0aW9uIFN0cmF0ZWdpZXMqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBlZmZlY3RpdmUgc3RyYXRlZ2llcyBmb3IgZnJlZWluZyB1cCBtZW1vcnkuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYSBzb2xpZCBmdW5jdGlvbiB0byBleHBsb3JlIGZ1cnRoZXIuIEl0IHNlZW1zIHRvIGJlIGEgZ29vZCBoaWdoLWxldmVsIHN0YXJ0aW5nIHBvaW50LiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgc2hyaW5rX2FsbF9tZW1vcnlgLCB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLiBBbmQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbWVtb3J5IHByZXNzdXJlIGF0IHRoZSBjZ3JvdXAgbGV2ZWwsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBsb29rcyByZWxldmFudCB0b28uXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgc2xpZ2h0bHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgYHNocmlua19ub2RlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIElmIGl0J3Mgc3RhdGljLCBpdCBsaW1pdHMgaXRzIHV0aWxpdHkgZm9yIGdlbmVyYWwgYW5hbHlzaXMgb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiwgYnV0IGlmIGl0J3Mgbm9uLXN0YXRpYywgaXQgb3BlbnMgdXAgYSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcy4gR290dGEgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjU1LjUxNDY1Njk1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MzA2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MTk0MD1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE5NzgtLypcXG5tbS92bXNjYW4uYzoxOTc5OiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5tbS92bXNjYW4uYy0xOTgwLSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xcbi0tXFxubW0vdm1zY2FuLmM9NTIwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjAtXFxubW0vdm1zY2FuLmM6NTIyMTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMjIte1xcbi0tXFxubW0vdm1zY2FuLmM9NTk0OT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTMtXFxubW0vdm1zY2FuLmM6NTk1NDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU5NTUte1xcbi0tXFxubW0vdm1zY2FuLmM9NjEwMD1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTEtXFxubW0vdm1zY2FuLmM6NjE1MjpzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjE1My17XFxuLS1cXG5tbS92bXNjYW4uYy02MjMwLVxcbm1tL3Ztc2Nhbi5jOjYyMzE6c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjIzMi17XFxuLS1cXG5tbS92bXNjYW4uYy02MjM4LVxcdFxcdG1lbXNldChcXHUwMDI2c2MtXFx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXFx1MDAzZW5yKSk7XFxubW0vdm1zY2FuLmM6NjIzOTpcXHRcXHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjI0MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTUtXFxubW0vdm1zY2FuLmM6NjI1NjpcXHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MjU3LVxcbi0tXFxubW0vdm1zY2FuLmM9NjQxNj1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NDk0LVxcdFxcdGxhc3RfcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbm1tL3Ztc2Nhbi5jOjY0OTU6XFx0XFx0c2hyaW5rX25vZGUoem9uZS1cXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTY0OTYtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9Njc2MT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MDYtLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY4MDc6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODA4LVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MzMtXFx0ICogaGVyZSBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IGxpbWl0cyB0aGUgcGFnZXMgd2UgY2FuIHNjYW4uXFxubW0vdm1zY2FuLmM6NjgzNDpcXHQgKiBpZiB3ZSBkb24ndCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcXG5tbS92bXNjYW4uYy02ODM1LVxcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAncyBhcyB3ZWxsLiBXZSBoYWNrXFxuLS1cXG5tbS92bXNjYW4uYz02OTU1PXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NzktXFx0XFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQnc1xcbm1tL3Ztc2Nhbi5jOjY5ODA6XFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG5tbS92bXNjYW4uYy02OTgxLVxcdFxcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMzc9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA3NS0gKi9cXG5tbS92bXNjYW4uYzo3MDc2OnN0YXRpYyBib29sIGtzd2FwZF9zaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTcwNzctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNzA5Mi1cXHQgKi9cXG5tbS92bXNjYW4uYzo3MDkzOlxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNzA5NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcxNDk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNTgtXFxubW0vdm1zY2FuLmM6NzI1OTpcXHRcXHQvKiBDYWxsIHNvZnQgbGltaXQgcmVjbGFpbSBiZWZvcmUgY2FsbGluZyBzaHJpbmtfbm9kZS4gKi9cXG5tbS92bXNjYW4uYy03MjYwLVxcdFxcdHNjLm5yX3NjYW5uZWQgPSAwO1xcbi0tXFxubW0vdm1zY2FuLmMtNzI3MC1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3MjcxOlxcdFxcdGlmIChrc3dhcGRfc2hyaW5rX25vZGUocGdkYXQsIFxcdTAwMjZzYykpXFxubW0vdm1zY2FuLmMtNzI3Mi1cXHRcXHRcXHRyYWlzZV9wcmlvcml0eSA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9NzgyNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNzg1Mi1cXHRcXHRkbyB7XFxubW0vdm1zY2FuLmM6Nzg1MzpcXHRcXHRcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTc4NTQtXFx0XFx0fSB3aGlsZSAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IC0tc2MtXFx1MDAzZXByaW9yaXR5IFxcdTAwM2U9IDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo1NS41NjI1OTMwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyNTUxMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhleSdyZSAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgdGhleSdyZSBlaXRoZXIgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xgIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYXJlIGJlaW5nIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cbk15IG5leHQgbW92ZSBpcyB0byBkaXZlIGludG8gYG1tL3Ztc2Nhbi5jYC4gSSB3YW50IHRvIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBleHBvcnRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnl0aGluZyBlbHNlIGluIHRoYXQgZmlsZSB0aGF0ICppc24ndCogYHN0YXRpY2Ag4oCTIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbnRlbmRlZCBzY29wZSBpcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IGZvciB3aGF0ZXZlciBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24uIEEgcXVpY2sgYGdyZXBgIGZvciBgRVhQT1JUX1NZTUJPTGAgb3IgYSB2aXN1YWwgc2NhbiBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGFuc3dlci4gSSdtIHRyeWluZyB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgaW50ZW5kZWQgc2NvcGUgYW5kIHZpc2liaWxpdHkgb2YgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcywgaW4gb3JkZXIgdG8gZ2FpbiBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBvdmVyYWxsIHB1cnBvc2UgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhleSBtaWdodCBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ2OjU5LjYxNTE0ODA4OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNjY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MDY1PXZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS92bXNjYW4uYy04MDk5LX1cXG5tbS92bXNjYW4uYzo4MTAwOkVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG5tbS92bXNjYW4uYy04MTAxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0Njo1OS42NjEyMjA3MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMzYzMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdHJ5X3RvX2ZyZWVfcGFnZXNgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhZ2UgcmVjbGFpbSBpc3N1ZSwgYW5kIG5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgdGhlIGNvcmUgb2YgdGhlIGFjdGl2ZSBzY2FubmluZyBwcm9jZXNzLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBpbW1lZGlhdGVseSBvYnZpb3VzIGp1bXBpbmcgb3V0LiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiBob3cgcGFnZXMgYXJlIGJlaW5nIGV2YWx1YXRlZCBhbmQgcmVjbGFpbWVkLiBJcyBpdCBhIG1hdHRlciBvZiBob3cgYWdncmVzc2l2ZSB0aGUgc2Nhbm5pbmcgaXM/IE9yIHBlcmhhcHMgc29tZSBzcGVjaWZpYyB0eXBlcyBvZiBwYWdlcyBhcmUgY2F1c2luZyB0cm91YmxlPyBMZXQncyB0cmFjZSB0aHJvdWdoIHRoZSBsb2dpYyBhbmQgY2hlY2sgb3V0IHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyB1c2VkLiBXaGF0IGNvbmRpdGlvbnMgYXJlIGZhaWxpbmc/IEknbSBleHBlY3RpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggYHNocmlua19zbGFiYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYW5kIHRoZSBvdmVyYWxsIExSVSBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSByZXR1cm4gdmFsdWVzIGFuZCBlcnJvciBoYW5kbGluZyBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzowMy4wNjQ4NTQ2MzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzk0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjY4MT1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NjAtXFxubW0vdm1zY2FuLmM6Njc2MTp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02NzYyLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MDMuMTE3NjU3NTE2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTY3MTY2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN0cmF0ZWdpZXMqKlxuXG5BbHJpZ2h0LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaWNraW5nIHVwIG9uIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHBvdGVudGlhbCBhcmVhcyBmb3IgbWVtb3J5IHJlY2xhbWF0aW9uLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCDigJMgaXQncyBhIGRpcmVjdCwgZm9jdXNlZCBhcHByb2FjaC4gQnV0IHRoZW4gYWdhaW4sIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgYWxzbyBpbnRyaWd1aW5nLiBJdCBzb3VuZHMgbGlrZSBhIGJyb2FkZXIsIG1vcmUgYWdncmVzc2l2ZSBzdHJhdGVneSwgcG90ZW50aWFsbHkgZW5jb21wYXNzaW5nIG1vcmUgYXNwZWN0cyBvZiB0aGUgbWVtb3J5IHN5c3RlbS5cblxuTGV0J3MgZGlnIGludG8gYHNocmlua19hbGxfbWVtb3J5YC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGFsbW9zdCBjZXJ0YWlubHkgYG1tL3Ztc2Nhbi5jYC4gSXQncyB0aGUgY29yZSBvZiB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgaW4gdGhlIGtlcm5lbC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNocmlua19hbGxfbWVtb3J5YCB0aGVyZSwgYWxvbmcgd2l0aCB0aGUgZGV0YWlscyBvZiBob3cgaXQgb3JjaGVzdHJhdGVzIHRoZSBwYWdlIHNjYW5uaW5nIGFuZCBldmljdGlvbiBwcm9jZXNzZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGl0IHByaW9yaXRpemVzIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgYW5kIHdoYXQgY3JpdGVyaWEgaXQgdXNlcyB0byBkZWNpZGUgd2hpY2ggcGFnZXMgYXJlIGVsaWdpYmxlIGZvciBldmljdGlvbi4gVGhpcyBjb3VsZCBiZSB3aGVyZSBJIGZpbmQgdGhlIHJvb3QgY2F1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTY2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MDcuODc0Mzc2ODU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4NjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc2MzE9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzY0NC0gKi9cXG5tbS92bXNjYW4uYzo3NjQ1OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc2NDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzowNy45MjEyNjcyMTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNzgzNzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCB3ZSdyZSBsb29raW5nIGF0LCBzdW1tYXJpemVkIGZyb20gdGhhdCBwcm9tcHQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0byBsb2NhdGUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgcGFnZSBmcmVlaW5nIGlzIG1hbmFnZWQuIEZyb20gaGVyZSwgSSBuZWVkIHRvIHNlZSB3aGF0IGxvZ2ljIGlzIGluIHRoaXMgc3BlY2lmaWMgY2FsbCwgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVk0gc3lzdGVtLiBUaGlzIHdpbGwgb2ZmZXIgaW5zaWdodCBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IHJlY2xhaW0gc3BlY2lmaWNhbGx5IGZyb20gd2l0aGluIGNncm91cHMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgdGhlbiB0cmFjZSB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZCwgd2hpY2ggc2hvdWxkIGluZm9ybSBtZSBhYm91dCBob3cgcHJvYWN0aXZlIG9yIHJlYWN0aXZlIHRoZSBtZW1vcnkgY2dyb3VwJ3MgcGFnZSBmcmVlaW5nIHNjaGVtZSBpcy4gSSdsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBbmQgaG93IHRoZSBwb2xpY3kgZGVjaXNpb25zIGFyZSBtYWRlIGhlcmUuIEluIGVzc2VuY2UsIG15IGdvYWwgaXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlY2xhaW0gcGF0aCBmb3IgbWVtb3J5IGNncm91cHMsIGFzIHRyaWdnZXJlZCBieSB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ3OjEyLjA1OTEwNzM0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjcxNzUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTY4MDc9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4NDYtXFxubW0vdm1zY2FuLmM6Njg0Nzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY4NDgtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODctI2Vsc2VcXG5tbS92bXNjYW4uYzo2ODg4OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg4OS1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoxMi40MjYyOTI2OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM0ODYxMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBzb3J0X2ZvbGlvYCwgd2hpY2ggaXMgYSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSBNR0xSVSBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHpvb20gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZC4gSSBzZWUgYExSVV9HRU5gIGFuZCwgY29uc2VxdWVudGx5LCBgTFJVX0dFTl9FTkFCTEVEYCBiZWluZyByZWxldmFudCBoZXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoZXNlIGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIGdlbmVyYXRpb25hbCBMUlUgYmVoYXZpb3IsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRldGVybWluZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBMUlVfR0VOYCBpdHNlbGYgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyBiZWZvcmUgSSBjYW4gZnVsbHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoxNS41NjExNTc4NTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjgxNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkyPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDExLVxcbm1tL0tjb25maWc6MTQxMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE3LVxcbm1tL0tjb25maWc6MTQxODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjYtXFxubW0vS2NvbmZpZzoxNDI3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ3OjE1LjYxMjQ1MDIzNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ0ODA2MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGJlZW4gcmV2aWV3aW5nIGxpbmVzIDE0MDAtMTQzMCB3aXRoaW4gYG1tL0tjb25maWdgIOKAkyB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgZmVhdHVyZS4gSSBzZWUgdGhhdCBgTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlnIG9wdGlvbiwgYWxvbmcgd2l0aCBhIHJlbGF0ZWQgYExSVV9HRU5fRU5BQkxFRGAuIFRoaXMgaXMgdGllZCB0byB0aGUgcHJlc2VuY2Ugb2YgYW4gTU1VLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgZGVwZW5kZW5jeSBvbiBgNjRCSVRgLCBvciB0aGUgYWJzZW5jZSBvZiBgU1BBUlNFTUVNYCBvciBpdHMgdXNlIHdpdGggYFZNRU1NQVBgLCBpcyBpbXBvcnRhbnQsIGVuc3VyaW5nIHRoZXJlIGFyZSBlbm91Z2ggc3BhcmUgYml0cyBhdmFpbGFibGUgaW4gdGhlIGBmb2xpby1cdTAwM2VmbGFnc2Agc3RydWN0dXJlLCBhcyB0aGUgY29tbWVudCBzdWdnZXN0cy5cblxuTm93LCBteSBtaW5kIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGtleSBmdW5jdGlvbnMgbGlrZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFzIEkgZGlnIGRlZXBlciBpbnRvIGhvdyB0aGlzIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEFuZCBJIGNhbid0IGZvcmdldCBga3N3YXBkYCwgdGhlIGtlcm5lbCB0aHJlYWQuIEknbSBhc3N1bWluZyBpdHMgcm9sZSB3aWxsIGJlIGtleSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoyMC4yNTc0MzU5ODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQxODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyNCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmMtNS0gKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllLlxcbm1tL3Ztc2Nhbi5jOjY6ICogIGtzd2FwZCBhZGRlZDogNy4xLjk2ICBzY3RcXG5tbS92bXNjYW4uYzo3OiAqICBSZW1vdmVkIGtzd2FwZF9jdGwgbGltaXRzLCBhbmQgc3dhcCBvdXQgYXMgbWFueSBwYWdlcyBhcyBuZWVkZWRcXG5tbS92bXNjYW4uYy04LSAqICB0byBicmluZyB0aGUgc3lzdGVtIGJhY2sgdG8gZnJlZXBhZ2VzLmhpZ2g6IDIuNC45NywgUmlrIHZhbiBSaWVsLlxcbm1tL3Ztc2Nhbi5jOjk6ICogIFpvbmUgYXdhcmUga3N3YXBkIHN0YXJ0ZWQgMDIvMDAsIEthbm9qIFNhcmNhciAoa2Fub2pAc2dpLmNvbSkuXFxubW0vdm1zY2FuLmMtMTAtICogIE11bHRpcXVldWUgVk0gc3RhcnRlZCA1LjguMDAsIFJpayB2YW4gUmllbC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0Nj1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NTEtXFxubW0vdm1zY2FuLmM6NDUyOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTQ1My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4Mj1zdGF0aWMgYm9vbCBza2lwX3Rocm90dGxlX25vcHJvZ3Jlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4Ny1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjQ4ODpcXHQgKiBJZiBrc3dhcGQgaXMgZGlzYWJsZWQsIHJlc2NoZWR1bGUgaWYgbmVjZXNzYXJ5IGJ1dCBkbyBub3RcXG5tbS92bXNjYW4uYy00ODktXFx0ICogdGhyb3R0bGUgYXMgdGhlIHN5c3RlbSBpcyBsaWtlbHkgbmVhciBPT00uXFxubW0vdm1zY2FuLmMtNDkwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjQ5MTpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTQ5Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMD12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2LVxcdC8qXFxubW0vdm1zY2FuLmM6NTE3OlxcdCAqIERvIG5vdCB0aHJvdHRsZSB1c2VyIHdvcmtlcnMsIGt0aHJlYWRzIG90aGVyIHRoYW4ga3N3YXBkIG9yXFxubW0vdm1zY2FuLmMtNTE4LVxcdCAqIHdvcmtxdWV1ZXMuIFRoZXkgbWF5IGJlIHJlcXVpcmVkIGZvciByZWNsYWltIHRvIG1ha2VcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMC1cXHQgKi9cXG5tbS92bXNjYW4uYzo1MjE6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNTIyLVxcdCAgICBjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9OTY1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2RlbW90ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk3NC1cXHQgKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgZmlyc3QgYWxzbyB0cnlpbmcgdG9cXG5tbS92bXNjYW4uYzo5NzU6XFx0ICogZGVtb3RlIG9yIHJlY2xhaW0gcGFnZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdmlhIGtzd2FwZCBpZiB3ZSBhcmVcXG5tbS92bXNjYW4uYy05NzYtXFx0ICogbG93IG9uIGZyZWUgbWVtb3J5IG9uIHRhcmdldCBub2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzIGFuZCBpZlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1Nz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMTIwLVxcdFxcdCAqIFRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgZGV0ZXJtaW5lcyBpZiBhIG5vZGUgaXMgbWFya2VkXFxubW0vdm1zY2FuLmM6MTEyMTpcXHRcXHQgKiByZWNsYWltX2Nvbmdlc3RlZC4ga3N3YXBkIHdpbGwgc3RhbGwgYW5kIHN0YXJ0IHdyaXRpbmdcXG5tbS92bXNjYW4uYy0xMTIyLVxcdFxcdCAqIGZvbGlvcyBpZiB0aGUgdGFpbCBvZiB0aGUgTFJVIGlzIGFsbCBkaXJ0eSB1bnF1ZXVlZCBmb2xpb3MuXFxuLS1cXG5tbS92bXNjYW4uYy0xMTg5LVxcdFxcdFxcdC8qIENhc2UgMSBhYm92ZSAqL1xcbm1tL3Ztc2Nhbi5jOjExOTA6XFx0XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy0xMTkxLVxcdFxcdFxcdCAgICBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYz0xNTg4PXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2MTMtXFx0ICogV2Ugc2hvdWxkIGJlIHNhZmUgaGVyZSBzaW5jZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggZmlsZSBwYWdlcyBhbmRcXG5tbS92bXNjYW4uYzoxNjE0OlxcdCAqIHdlIGFyZSBub3Qga3N3YXBkIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdyaXRlIGRpcnR5IGZpbGUgcGFnZXMuIEJ1dFxcbm1tL3Ztc2Nhbi5jLTE2MTUtXFx0ICogY2FsbCBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlIGNvbmRpdGlvbnNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE4MjE9c3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXFxuLS1cXG5tbS92bXNjYW4uYy0xODI2LVxcbm1tL3Ztc2Nhbi5jOjE4Mjc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtMTgyOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYz0zODY2PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxcbi0tXFxubW0vdm1zY2FuLmMtMzg2OS1cXG5tbS92bXNjYW4uYzozODcwOlxcdGlmIChwZ2RhdCBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxubW0vdm1zY2FuLmMtMzg3MS1cXHRcXHRWTV9XQVJOX09OX09OQ0Uod2Fsayk7XFxuLS1cXG5tbS92bXNjYW4uYy0zODc0LVxcdH0gZWxzZSBpZiAoIXdhbGsgXFx1MDAyNlxcdTAwMjYgZm9yY2VfYWxsb2MpIHtcXG5tbS92bXNjYW4uYzozODc1OlxcdFxcdFZNX1dBUk5fT05fT05DRShjdXJyZW50X2lzX2tzd2FwZCgpKTtcXG5tbS92bXNjYW4uYy0zODc2LVxcbi0tXFxubW0vdm1zY2FuLmM9Mzg4Nj1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0zODk0LVxcbm1tL3Ztc2Nhbi5jOjM4OTU6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTM4OTYtXFx0XFx0a2ZyZWUod2Fsayk7XFxuLS1cXG5tbS92bXNjYW4uYz00MjA4PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjEzLVxcbm1tL3Ztc2Nhbi5jOjQyMTQ6XFx0Vk1fV0FSTl9PTl9PTkNFKCFjdXJyZW50X2lzX2tzd2FwZCgpKTtcXG5tbS92bXNjYW4uYy00MjE1LVxcbi0tXFxubW0vdm1zY2FuLmM9NTAwOT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTAyMC1cXHQvKiBjaGVjayB0aGUgb3JkZXIgdG8gZXhjbHVkZSBjb21wYWN0aW9uLWluZHVjZWQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jOjUwMjE6XFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVxcdTAwM2VvcmRlcilcXG5tbS92bXNjYW4uYy01MDIyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMzQtXFxubW0vdm1zY2FuLmM6NTAzNTpcXHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xcbm1tL3Ztc2Nhbi5jLTUwMzYtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYz01MjIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MjQzLVxcbm1tL3Ztc2Nhbi5jOjUyNDQ6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTI0NS1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyNTEtXFxubW0vdm1zY2FuLmM6NTI1MjpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy01MjUzLVxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbi0tXFxubW0vdm1zY2FuLmMtNTI1OS1cXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlIHJlY2xhaW1lZClcXG5tbS92bXNjYW4uYzo1MjYwOlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy01MjYxLX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5NjE9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk5MC1cXHQgKiBERUZfUFJJT1JJVFkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZmFjdCB3ZSBhcmUgZGlyZWN0XFxubW0vdm1zY2FuLmM6NTk5MTpcXHQgKiByZWNsYWltaW5nIGltcGxpZXMgdGhhdCBrc3dhcGQgaXMgbm90IGtlZXBpbmcgdXAgYW5kIGl0IGlzIGJlc3QgdG9cXG5tbS92bXNjYW4uYy01OTkyLVxcdCAqIGRvIGEgYmF0Y2ggb2Ygd29yayBhdCBvbmNlLiBGb3IgbWVtY2cgcmVjbGFpbSBvbmUgY2hlY2sgaXMgbWFkZSB0b1xcbi0tXFxubW0vdm1zY2FuLmMtNTk5NS1cXHQgKi9cXG5tbS92bXNjYW4uYzo1OTk2OlxcdHByb3BvcnRpb25hbF9yZWNsYWltID0gKCFjZ3JvdXBfcmVjbGFpbShzYykgXFx1MDAyNlxcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy01OTk3LVxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjAyMC1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjYwMjE6XFx0XFx0ICogRm9yIGtzd2FwZCBhbmQgbWVtY2csIHJlY2xhaW0gYXQgbGVhc3QgdGhlIG51bWJlciBvZiBwYWdlc1xcbm1tL3Ztc2Nhbi5jLTYwMjItXFx0XFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXFxuLS1cXG5tbS92bXNjYW4uYz02MTUyPXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNjYtXFx0ICpcXG5tbS92bXNjYW4uYzo2MTY3OlxcdCAqIEZvciBrc3dhcGQsIHJlbGlhYmxlIGZvcndhcmQgcHJvZ3Jlc3MgaXMgbW9yZSBpbXBvcnRhbnRcXG5tbS92bXNjYW4uYy02MTY4LVxcdCAqIHRoYW4gYSBxdWljayByZXR1cm4gdG8gaWRsZS4gQWx3YXlzIGRvIGZ1bGwgd2Fsa3MuXFxubW0vdm1zY2FuLmMtNjE2OS1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MTcwOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IHNjLVxcdTAwM2VtZW1jZ19mdWxsX3dhbGspXFxubW0vdm1zY2FuLmMtNjE3MS1cXHRcXHRwYXJ0aWFsID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyMzE9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjY5LVxcbm1tL3Ztc2Nhbi5jOjYyNzA6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5tbS92bXNjYW4uYy02MjcxLVxcdFxcdC8qXFxuLS1cXG5tbS92bXNjYW4uYy02MjgyLVxcdFxcdCAqXFxubW0vdm1zY2FuLmM6NjI4MzpcXHRcXHQgKiBPbmNlIGEgbm9kZSBpcyBmbGFnZ2VkIFBHREFUX1dSSVRFQkFDSywga3N3YXBkIHdpbGxcXG5tbS92bXNjYW4uYy02Mjg0LVxcdFxcdCAqIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgdW5kZXIgcGFnZXMgZmxhZ2dlZCBmb3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyOTEtXFx0XFx0LypcXG5tbS92bXNjYW4uYzo2MjkyOlxcdFxcdCAqIElmIGtzd2FwZCBzY2FucyBwYWdlcyBtYXJrZWQgZm9yIGltbWVkaWF0ZVxcbm1tL3Ztc2Nhbi5jLTYyOTMtXFx0XFx0ICogcmVjbGFpbSBhbmQgdW5kZXIgd3JpdGViYWNrIChucl9pbW1lZGlhdGUpLCBpdFxcbi0tXFxubW0vdm1zY2FuLmMtNjMxMi1cXG5tbS92bXNjYW4uYzo2MzEzOlxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTYzMTQtXFx0XFx0XFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy02MzE4LVxcdCAqIFN0YWxsIGRpcmVjdCByZWNsYWltIGZvciBJTyBjb21wbGV0aW9ucyBpZiB0aGUgbHJ1dmVjIGlzXFxubW0vdm1zY2FuLmM6NjMxOTpcXHQgKiBub2RlIGlzIGNvbmdlc3RlZC4gQWxsb3cga3N3YXBkIHRvIGNvbnRpbnVlIHVudGlsIGl0XFxubW0vdm1zY2FuLmMtNjMyMC1cXHQgKiBzdGFydHMgZW5jb3VudGVyaW5nIHVucXVldWVkIGRpcnR5IHBhZ2VzIG9yIGN5Y2xpbmcgdGhyb3VnaFxcbi0tXFxubW0vdm1zY2FuLmMtNjMyMi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MzIzOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjMyNC1cXHQgICAgIXNjLVxcdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYy02MzM1LVxcdCAqIHNsZWVwLiBPbiByZWNsYWltIHByb2dyZXNzLCByZXNldCB0aGUgZmFpbHVyZSBjb3VudGVyLiBBXFxubW0vdm1zY2FuLmM6NjMzNjpcXHQgKiBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIHJ1biB3aWxsIHJldml2ZSBhIGRvcm1hbnQga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTYzMzctXFx0ICovXFxubW0vdm1zY2FuLmMtNjMzOC1cXHRpZiAocmVjbGFpbWFibGUpXFxubW0vdm1zY2FuLmM6NjMzOTpcXHRcXHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VyZWNsYWltX2lkeCk7XFxubW0vdm1zY2FuLmMtNjM0MC1cXHRlbHNlIGlmIChzYy1cXHUwMDNlY2FjaGVfdHJpbV9tb2RlKVxcbi0tXFxubW0vdm1zY2FuLmM9NjM3OD1zdGF0aWMgdm9pZCBjb25zaWRlcl9yZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM5NC1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjYzOTU6XFx0ICogRG8gbm90IHRocm90dGxlIGtzd2FwZCBvciBjZ3JvdXAgcmVjbGFpbSBvbiBOT1BST0dSRVNTIGFzIGl0IHdpbGxcXG5tbS92bXNjYW4uYy02Mzk2LVxcdCAqIHRocm90dGxlIG9uIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0sgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzXFxuLS1cXG5tbS92bXNjYW4uYy02Mzk5LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY0MDA6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxcbm1tL3Ztc2Nhbi5jLTY0MDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NjYzNj1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjY0My1cXG5tbS92bXNjYW4uYzo2NjQ0OlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNjY0NS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2NjAtXFxubW0vdm1zY2FuLmM6NjY2MTpcXHQvKiBrc3dhcGQgbXVzdCBiZSBhd2FrZSBpZiBwcm9jZXNzZXMgYXJlIGJlaW5nIHRocm90dGxlZCAqL1xcbm1tL3Ztc2Nhbi5jOjY2NjI6XFx0aWYgKCF3bWFya19vayBcXHUwMDI2XFx1MDAyNiB3YWl0cXVldWVfYWN0aXZlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpKSB7XFxubW0vdm1zY2FuLmM6NjY2MzpcXHRcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KSBcXHUwMDNlIFpPTkVfTk9STUFMKVxcbm1tL3Ztc2Nhbi5jOjY2NjQ6XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgWk9ORV9OT1JNQUwpO1xcbm1tL3Ztc2Nhbi5jLTY2NjUtXFxubW0vdm1zY2FuLmM6NjY2NjpcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCk7XFxubW0vdm1zY2FuLmMtNjY2Ny1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy02Njc0LSAqIGFuZCB0aGUgUEZNRU1BTExPQyByZXNlcnZlIGZvciB0aGUgcHJlZmVycmVkIG5vZGUgaXMgZ2V0dGluZyBkYW5nZXJvdXNseVxcbm1tL3Ztc2Nhbi5jOjY2NzU6ICogZGVwbGV0ZWQuIGtzd2FwZCB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIHdha2UgdGhlIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jLTY2NzYtICogd2hlbiB0aGUgbG93IHdhdGVybWFyayBpcyByZWFjaGVkLlxcbi0tXFxubW0vdm1zY2FuLmM9NjY4MT1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MTEtXFx0ICogVGhyb3R0bGluZyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgdXNhYmxlIG5vZGUgYW5kIHRocm90dGxlZCBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYzo2NzEyOlxcdCAqIHdhaXQgb24gYSBxdWV1ZSB1bnRpbCBrc3dhcGQgbWFrZXMgcHJvZ3Jlc3MgYW5kIHdha2VzIHRoZW0uIFRoZXJlXFxubW0vdm1zY2FuLmMtNjcxMy1cXHQgKiBpcyBhbiBhZmZpbml0eSB0aGVuIGJldHdlZW4gcHJvY2Vzc2VzIHdha2luZyB1cCBhbmQgd2hlcmUgcmVjbGFpbVxcbi0tXFxubW0vdm1zY2FuLmMtNjc0MS1cXHQgKiB0cmFuc2FjdGlvbiBpbiB0aGUgY2FzZSBvZiBhIGZpbGVzeXN0ZW0gbGlrZSBleHRbM3w0XS4gSW4gdGhpcyBjYXNlLFxcbm1tL3Ztc2Nhbi5jOjY3NDI6XFx0ICogaXQgaXMgbm90IHNhZmUgdG8gYmxvY2sgb24gcGZtZW1hbGxvY193YWl0IGFzIGtzd2FwZCBjb3VsZCBiZVxcbm1tL3Ztc2Nhbi5jLTY3NDMtXFx0ICogYmxvY2tlZCB3YWl0aW5nIG9uIHRoZSBzYW1lIGxvY2suIEluc3RlYWQsIHRocm90dGxlIGZvciB1cCB0byBhXFxuLS1cXG5tbS92bXNjYW4uYy02NzQ5LVxcdGVsc2VcXG5tbS92bXNjYW4uYzo2NzUwOlxcdFxcdC8qIFRocm90dGxlIHVudGlsIGtzd2FwZCB3YWtlcyB0aGUgcHJvY2VzcyAqL1xcbm1tL3Ztc2Nhbi5jLTY3NTEtXFx0XFx0d2FpdF9ldmVudF9raWxsYWJsZSh6b25lLVxcdTAwM2V6b25lX3BnZGF0LVxcdTAwM2VwZm1lbWFsbG9jX3dhaXQsXFxuLS1cXG5tbS92bXNjYW4uYz02ODg4PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODk3LVxcbm1tL3Ztc2Nhbi5jOjY4OTg6c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTY4OTkte1xcbi0tXFxubW0vdm1zY2FuLmM9Njk1NT1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTc3LVxcdFxcdCAqXFxubW0vdm1zY2FuLmM6Njk3ODpcXHRcXHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXFxubW0vdm1zY2FuLmMtNjk3OS1cXHRcXHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCdzXFxubW0vdm1zY2FuLmM6Njk4MDpcXHRcXHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxcbm1tL3Ztc2Nhbi5jLTY5ODEtXFx0XFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxcbi0tXFxubW0vdm1zY2FuLmMtNzAxMi1cXHQgKiBuZWVkIGJhbGFuY2luZyBieSBkZWZpbml0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSB6b25lLXJlc3RyaWN0ZWRcXG5tbS92bXNjYW4uYzo3MDEzOlxcdCAqIGFsbG9jYXRpb24gdHJpZXMgdG8gd2FrZSBhIHJlbW90ZSBrc3dhcGQuXFxubW0vdm1zY2FuLmMtNzAxNC1cXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMjI9c3RhdGljIHZvaWQgY2xlYXJfcGdkYXRfY29uZ2VzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03MDMxLS8qXFxubW0vdm1zY2FuLmM6NzAzMjogKiBQcmVwYXJlIGtzd2FwZCBmb3Igc2xlZXBpbmcuIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmMtNzAzMy0gKiB3YWl0aW5nIGluIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKCkgYW5kIHRoYXQgd2F0ZXJtYXJrcyBoYXZlIGJlZW4gbWV0Llxcbm1tL3Ztc2Nhbi5jLTcwMzQtICpcXG5tbS92bXNjYW4uYzo3MDM1OiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgaXMgcmVhZHkgdG8gc2xlZXBcXG5tbS92bXNjYW4uYy03MDM2LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwMzc6c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTcwMzgtXFx0XFx0XFx0XFx0aW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNDItXFx0ICogc29vbiBhcyBhbGxvd19kaXJlY3RfcmVjbGFpbSgpIGlzIHRydWUuIEJ1dCB0aGVyZSBpcyBhIHBvdGVudGlhbFxcbm1tL3Ztc2Nhbi5jOjcwNDM6XFx0ICogcmFjZSBiZXR3ZWVuIHdoZW4ga3N3YXBkIGNoZWNrcyB0aGUgd2F0ZXJtYXJrcyBhbmQgYSBwcm9jZXNzIGdldHNcXG5tbS92bXNjYW4uYy03MDQ0LVxcdCAqIHRocm90dGxlZC4gVGhlcmUgaXMgYWxzbyBhIHBvdGVudGlhbCByYWNlIGlmIHByb2Nlc3NlcyBnZXRcXG5tbS92bXNjYW4uYzo3MDQ1OlxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzA0NjpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYzo3MDQ3OlxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbm1tL3Ztc2Nhbi5jLTcwNDgtXFx0ICogYmUgc2xlZXBpbmcgb24gcGZtZW1hbGxvY193YWl0LCBzbyB3YWtlIHRoZW0gbm93IGlmIG5lY2Vzc2FyeS4gSWZcXG5tbS92bXNjYW4uYzo3MDQ5OlxcdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxcbm1tL3Ztc2Nhbi5jLTcwNTAtXFx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzA1Ni1cXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jOjcwNTc6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcXG5tbS92bXNjYW4uYy03MDU4LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNzA2OC0vKlxcbm1tL3Ztc2Nhbi5jOjcwNjk6ICoga3N3YXBkIHNocmlua3MgYSBub2RlIG9mIHBhZ2VzIHRoYXQgYXJlIGF0IG9yIGJlbG93IHRoZSBoaWdoZXN0IHVzYWJsZVxcbm1tL3Ztc2Nhbi5jLTcwNzAtICogem9uZSB0aGF0IGlzIGN1cnJlbnRseSB1bmJhbGFuY2VkLlxcbm1tL3Ztc2Nhbi5jLTcwNzEtICpcXG5tbS92bXNjYW4uYzo3MDcyOiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgc2Nhbm5lZCBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBwYWdlcyB0b1xcbm1tL3Ztc2Nhbi5jLTcwNzMtICogcmVjbGFpbSBvciBpZiB0aGUgbGFjayBvZiBwcm9ncmVzcyB3YXMgZHVlIHRvIHBhZ2VzIHVuZGVyIHdyaXRlYmFjay5cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNzUtICovXFxubW0vdm1zY2FuLmM6NzA3NjpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MDc3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcxMzE9Y2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMzYtLypcXG5tbS92bXNjYW4uYzo3MTM3OiAqIEZvciBrc3dhcGQsIGJhbGFuY2VfcGdkYXQoKSB3aWxsIHJlY2xhaW0gcGFnZXMgYWNyb3NzIGEgbm9kZSBmcm9tIHpvbmVzXFxubW0vdm1zY2FuLmMtNzEzOC0gKiB0aGF0IGFyZSBlbGlnaWJsZSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgdW50aWwgYXQgbGVhc3Qgb25lIHpvbmUgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNDAtICpcXG5tbS92bXNjYW4uYzo3MTQxOiAqIFJldHVybnMgdGhlIG9yZGVyIGtzd2FwZCBmaW5pc2hlZCByZWNsYWltaW5nIGF0Llxcbm1tL3Ztc2Nhbi5jLTcxNDItICpcXG5tbS92bXNjYW4uYzo3MTQzOiAqIGtzd2FwZCBzY2FucyB0aGUgem9uZXMgaW4gdGhlIGhpZ2htZW0tXFx1MDAzZW5vcm1hbC1cXHUwMDNlZG1hIGRpcmVjdGlvbi4gIEl0IHNraXBzXFxubW0vdm1zY2FuLmMtNzE0NC0gKiB6b25lcyB3aGljaCBoYXZlIGZyZWVfcGFnZXMgXFx1MDAzZSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBidXQgb25jZSBhIHpvbmUgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcxNDk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNzUtXFx0ICogcGxhY2Ugc28gdGhhdCBwYXJhbGxlbCBhbGxvY2F0aW9ucyB0aGF0IGFyZSBuZWFyIHRoZSB3YXRlcm1hcmsgd2lsbFxcbm1tL3Ztc2Nhbi5jOjcxNzY6XFx0ICogc3RhbGwgb3IgZGlyZWN0IHJlY2xhaW0gdW50aWwga3N3YXBkIGlzIGZpbmlzaGVkLlxcbm1tL3Ztc2Nhbi5jLTcxNzctXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MjA0LVxcdFxcdCAqIGdvIGFoZWFkIGlmIGFsbCBlbGlnaWJsZSB6b25lcyBmb3IgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb25cXG5tbS92bXNjYW4uYzo3MjA1OlxcdFxcdCAqIHJlcXVlc3QgYXJlIGJhbGFuY2VkIHRvIGF2b2lkIGV4Y2Vzc2l2ZSByZWNsYWltIGZyb20ga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTcyMDYtXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MjIyLVxcdFxcdCAqIG9uIHRoZSBncm91bmRzIHRoYXQgdGhlIG5vcm1hbCByZWNsYWltIHNob3VsZCBiZSBlbm91Z2ggdG9cXG5tbS92bXNjYW4uYzo3MjIzOlxcdFxcdCAqIHJlLWV2YWx1YXRlIGlmIGJvb3N0aW5nIGlzIHJlcXVpcmVkIHdoZW4ga3N3YXBkIG5leHQgd2FrZXMuXFxubW0vdm1zY2FuLmMtNzIyNC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNTYtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzI1NzpcXHRcXHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzI1OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyNzAtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzI3MTpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTcyNzItXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyODItXFxubW0vdm1zY2FuLmM6NzI4MzpcXHRcXHQvKiBDaGVjayBpZiBrc3dhcGQgc2hvdWxkIGJlIHN1c3BlbmRpbmcgKi9cXG5tbS92bXNjYW4uYy03Mjg0LVxcdFxcdF9fZnNfcmVjbGFpbV9yZWxlYXNlKF9USElTX0lQXyk7XFxuLS1cXG5tbS92bXNjYW4uYy03MzIxLVxcdCAqIHdhdGVybWFya19oaWdoIGF0IHRoaXMgcG9pbnQuIFdlIG5lZWQgdG8gYXZvaWQgaW5jcmVhc2luZyB0aGVcXG5tbS92bXNjYW4uYzo3MzIyOlxcdCAqIGZhaWx1cmUgY291bnQgdG8gcHJldmVudCB0aGUga3N3YXBkIHRocmVhZCBmcm9tIHN0b3BwaW5nLlxcbm1tL3Ztc2Nhbi5jLTczMjMtXFx0ICovXFxubW0vdm1zY2FuLmMtNzMyNC1cXHRpZiAoIXNjLm5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhYm9vc3RlZCkge1xcbm1tL3Ztc2Nhbi5jOjczMjU6XFx0XFx0aW50IGZhaWxfY250ID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMpO1xcbm1tL3Ztc2Nhbi5jOjczMjY6XFx0XFx0Lyoga3N3YXBkIGNvbnRleHQsIGxvdyBvdmVyaGVhZCB0byB0cmFjZSBldmVyeSBmYWlsdXJlICovXFxubW0vdm1zY2FuLmM6NzMyNzpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3JlY2xhaW1fZmFpbChwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgZmFpbF9jbnQpO1xcbm1tL3Ztc2Nhbi5jLTczMjgtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzM2My1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjczNjQ6XFx0ICogUmV0dXJuIHRoZSBvcmRlciBrc3dhcGQgc3RvcHBlZCByZWNsYWltaW5nIGF0IGFzXFxubW0vdm1zY2FuLmM6NzM2NTpcXHQgKiBwcmVwYXJlX2tzd2FwZF9zbGVlcCgpIHRha2VzIGl0IGludG8gYWNjb3VudC4gSWYgYW5vdGhlciBjYWxsZXJcXG5tbS92bXNjYW4uYzo3MzY2OlxcdCAqIGVudGVyZWQgdGhlIGFsbG9jYXRvciBzbG93IHBhdGggd2hpbGUga3N3YXBkIHdhcyBhd2FrZSwgb3JkZXIgd2lsbFxcbm1tL3Ztc2Nhbi5jLTczNjctXFx0ICogcmVtYWluIGF0IHRoZSBoaWdoZXIgbGV2ZWwuXFxuLS1cXG5tbS92bXNjYW4uYy03MzcyLS8qXFxubW0vdm1zY2FuLmM6NzM3MzogKiBUaGUgcGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHggaXMgdXNlZCB0byBwYXNzIHRoZSBoaWdoZXN0IHpvbmUgaW5kZXggdG9cXG5tbS92bXNjYW4uYzo3Mzc0OiAqIGJlIHJlY2xhaW1lZCBieSBrc3dhcGQgZnJvbSB0aGUgd2FrZXIuIElmIHRoZSB2YWx1ZSBpcyBNQVhfTlJfWk9ORVMgd2hpY2ggaXNcXG5tbS92bXNjYW4uYzo3Mzc1OiAqIG5vdCBhIHZhbGlkIGluZGV4IHRoZW4gZWl0aGVyIGtzd2FwZCBydW5zIGZvciBmaXJzdCB0aW1lIG9yIGtzd2FwZCBjb3VsZG4ndFxcbm1tL3Ztc2Nhbi5jLTczNzYtICogc2xlZXAgYWZ0ZXIgcHJldmlvdXMgcmVjbGFpbSBhdHRlbXB0IChub2RlIGlzIHN0aWxsIHVuYmFsYW5jZWQpLiBJbiB0aGF0XFxubW0vdm1zY2FuLmM6NzM3NzogKiBjYXNlIHJldHVybiB0aGUgem9uZSBpbmRleCBvZiB0aGUgcHJldmlvdXMga3N3YXBkIHJlY2xhaW0gY3ljbGUuXFxubW0vdm1zY2FuLmMtNzM3OC0gKi9cXG5tbS92bXNjYW4uYzo3Mzc5OnN0YXRpYyBlbnVtIHpvbmVfdHlwZSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzM4MC1cXHRcXHRcXHRcXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBwcmV2X2hpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MzgxLXtcXG5tbS92bXNjYW4uYzo3MzgyOlxcdGVudW0gem9uZV90eXBlIGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03MzgzLVxcbi0tXFxubW0vdm1zY2FuLmMtNzM4Ni1cXG5tbS92bXNjYW4uYzo3Mzg3OnN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcXG5tbS92bXNjYW4uYy03Mzg4LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03Mzk1LVxcbm1tL3Ztc2Nhbi5jOjczOTY6XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm1tL3Ztc2Nhbi5jLTczOTctXFxuLS1cXG5tbS92bXNjYW4uYy03NDA0LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc0MDU6XFx0aWYgKHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XFxubW0vdm1zY2FuLmMtNzQwNi1cXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNzQwOC1cXHRcXHQgKiBpc29sYXRlIHBhZ2VzIGZyb20gYW5kIHNraXBzIHRoZW0gaW4gdGhlIGZ1dHVyZSBzY2FubmluZy5cXG5tbS92bXNjYW4uYzo3NDA5OlxcdFxcdCAqIFdoZW4ga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBpdCBpcyByZWFzb25hYmxlIHRvIGFzc3VtZVxcbm1tL3Ztc2Nhbi5jLTc0MTAtXFx0XFx0ICogdGhhdCBwYWdlcyBhbmQgY29tcGFjdGlvbiBtYXkgc3VjY2VlZCBzbyByZXNldCB0aGUgY2FjaGUuXFxuLS1cXG5tbS92bXNjYW4uYy03NDIyLVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NzQyMzpcXHRcXHQgKiBJZiB3b2tlbiBwcmVtYXR1cmVseSB0aGVuIHJlc2V0IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHggYW5kXFxubW0vdm1zY2FuLmMtNzQyNC1cXHRcXHQgKiBvcmRlci4gVGhlIHZhbHVlcyB3aWxsIGVpdGhlciBiZSBmcm9tIGEgd2FrZXVwIHJlcXVlc3Qgb3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjctXFx0XFx0aWYgKHJlbWFpbmluZykge1xcbm1tL3Ztc2Nhbi5jOjc0Mjg6XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCxcXG5tbS92bXNjYW4uYzo3NDI5OlxcdFxcdFxcdFxcdFxcdGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzQzMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpKTtcXG5tbS92bXNjYW4uYy03NDMxLVxcbm1tL3Ztc2Nhbi5jOjc0MzI6XFx0XFx0XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKSBcXHUwMDNjIHJlY2xhaW1fb3JkZXIpXFxubW0vdm1zY2FuLmM6NzQzMzpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIHJlY2xhaW1fb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jLTc0MzQtXFx0XFx0fVxcbm1tL3Ztc2Nhbi5jLTc0MzUtXFxubW0vdm1zY2FuLmM6NzQzNjpcXHRcXHRmaW5pc2hfd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0vdm1zY2FuLmM6NzQzNzpcXHRcXHRwcmVwYXJlX3RvX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxubW0vdm1zY2FuLmMtNzQzOC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03NDQ0LVxcdGlmICghcmVtYWluaW5nIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmM6NzQ0NTpcXHQgICAgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcXG5tbS92bXNjYW4uYzo3NDQ2OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAocGdkYXQtXFx1MDAzZW5vZGVfaWQpO1xcbm1tL3Ztc2Nhbi5jLTc0NDctXFxuLS1cXG5tbS92bXNjYW4uYy03NDUyLVxcdFxcdCAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGVcXG5tbS92bXNjYW4uYzo3NDUzOlxcdFxcdCAqIHBlci1jcHUgdm1zdGF0IHRocmVzaG9sZCB3aGlsZSBrc3dhcGQgaXMgYXdha2UgYW5kIHJlc3RvcmVcXG5tbS92bXNjYW4uYy03NDU0LVxcdFxcdCAqIHRoZW0gYmVmb3JlIGdvaW5nIGJhY2sgdG8gc2xlZXAuXFxuLS1cXG5tbS92bXNjYW4uYy03NDY3LVxcdH1cXG5tbS92bXNjYW4uYzo3NDY4OlxcdGZpbmlzaF93YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0KTtcXG5tbS92bXNjYW4uYy03NDY5LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0ODMtICovXFxubW0vdm1zY2FuLmM6NzQ4NDpzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbm1tL3Ztc2Nhbi5jLTc0ODUte1xcbi0tXFxubW0vdm1zY2FuLmMtNzQ5My1cXHQgKiBhbmQgdGhhdCBpZiB3ZSBuZWVkIG1vcmUgbWVtb3J5IHdlIHNob3VsZCBnZXQgYWNjZXNzIHRvIGl0XFxubW0vdm1zY2FuLmM6NzQ5NDpcXHQgKiByZWdhcmRsZXNzIChzZWUgXFxcIl9fYWxsb2NfcGFnZXMoKVxcXCIpLiBcXFwia3N3YXBkXFxcIiBzaG91bGRcXG5tbS92bXNjYW4uYy03NDk1LVxcdCAqIG5ldmVyIGdldCBjYXVnaHQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVpbmcgbG9naWMuXFxuLS1cXG5tbS92bXNjYW4uYy03NTA1LVxcbm1tL3Ztc2Nhbi5jOjc1MDY6XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcXG5tbS92bXNjYW4uYzo3NTA3OlxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XFxubW0vdm1zY2FuLmMtNzUwOC1cXHRhdG9taWNfc2V0KFxcdTAwMjZwZ2RhdC1cXHUwMDNlbnJfd3JpdGViYWNrX3Rocm90dGxlZCwgMCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NTExLVxcbm1tL3Ztc2Nhbi5jOjc1MTI6XFx0XFx0YWxsb2Nfb3JkZXIgPSByZWNsYWltX29yZGVyID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc1MTM6XFx0XFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcXG5tbS92bXNjYW4uYy03NTE0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzUxNS1cXG5tbS92bXNjYW4uYzo3NTE2Omtzd2FwZF90cnlfc2xlZXA6XFxubW0vdm1zY2FuLmM6NzUxNzpcXHRcXHRrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnZGF0LCBhbGxvY19vcmRlciwgcmVjbGFpbV9vcmRlcixcXG5tbS92bXNjYW4uYy03NTE4LVxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NTIwLVxcdFxcdC8qIFJlYWQgdGhlIG5ldyBvcmRlciBhbmQgaGlnaGVzdF96b25laWR4ICovXFxubW0vdm1zY2FuLmM6NzUyMTpcXHRcXHRhbGxvY19vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NTIyOlxcdFxcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzUyMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jOjc1MjQ6XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcXG5tbS92bXNjYW4uYzo3NTI1OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIE1BWF9OUl9aT05FUyk7XFxubW0vdm1zY2FuLmMtNzUyNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1MzgtXFx0XFx0ICogUmVjbGFpbSBiZWdpbnMgYXQgdGhlIHJlcXVlc3RlZCBvcmRlciBidXQgaWYgYSBoaWdoLW9yZGVyXFxubW0vdm1zY2FuLmM6NzUzOTpcXHRcXHQgKiByZWNsYWltIGZhaWxzIHRoZW4ga3N3YXBkIGZhbGxzIGJhY2sgdG8gcmVjbGFpbWluZyBmb3JcXG5tbS92bXNjYW4uYzo3NTQwOlxcdFxcdCAqIG9yZGVyLTAuIElmIHRoYXQgaGFwcGVucywga3N3YXBkIHdpbGwgY29uc2lkZXIgc2xlZXBpbmdcXG5tbS92bXNjYW4uYy03NTQxLVxcdFxcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDQtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzU0NTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3dha2UocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCxcXG5tbS92bXNjYW4uYy03NTQ2LVxcdFxcdFxcdFxcdFxcdFxcdGFsbG9jX29yZGVyKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NDktXFx0XFx0aWYgKHJlY2xhaW1fb3JkZXIgXFx1MDAzYyBhbGxvY19vcmRlcilcXG5tbS92bXNjYW4uYzo3NTUwOlxcdFxcdFxcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcXG5tbS92bXNjYW4uYy03NTUxLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTktICogQSB6b25lIGlzIGxvdyBvbiBmcmVlIG1lbW9yeSBvciB0b28gZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBtZW1vcnkuICBJZlxcbm1tL3Ztc2Nhbi5jOjc1NjA6ICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJ3NcXG5tbS92bXNjYW4uYzo3NTYxOiAqIHBnZGF0LiAgSXQgd2lsbCB3YWtlIHVwIGtjb21wYWN0ZCBhZnRlciByZWNsYWltaW5nIG1lbW9yeS4gIElmIGtzd2FwZCByZWNsYWltXFxubW0vdm1zY2FuLmMtNzU2Mi0gKiBoYXMgZmFpbGVkIG9yIGlzIG5vdCBuZWVkZWQsIHN0aWxsIHdha2UgdXAga2NvbXBhY3RkIGlmIG9ubHkgY29tcGFjdGlvbiBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzU2NC0gKi9cXG5tbS92bXNjYW4uYzo3NTY1OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU2Ni1cXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NTc3LVxcdHBnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo3NTc4OlxcdGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYy03NTc5LVxcbm1tL3Ztc2Nhbi5jLTc1ODAtXFx0aWYgKGN1cnJfaWR4ID09IE1BWF9OUl9aT05FUyB8fCBjdXJyX2lkeCBcXHUwMDNjIGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYzo3NTgxOlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzU4Mi1cXG5tbS92bXNjYW4uYzo3NTgzOlxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcikgXFx1MDAzYyBvcmRlcilcXG5tbS92bXNjYW4uYzo3NTg0OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jLTc1ODUtXFxubW0vdm1zY2FuLmM6NzU4NjpcXHRpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCkpXFxubW0vdm1zY2FuLmMtNzU4Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYy03NTg5LVxcdC8qIEhvcGVsZXNzIG5vZGUsIGxlYXZlIGl0IHRvIGRpcmVjdCByZWNsYWltIGlmIHBvc3NpYmxlICovXFxubW0vdm1zY2FuLmM6NzU5MDpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpIHx8XFxubW0vdm1zY2FuLmMtNzU5MS1cXHQgICAgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmMtNzYwNC1cXG5tbS92bXNjYW4uYzo3NjA1OlxcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsIG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc2MDYtXFx0XFx0XFx0XFx0ICAgICAgZ2ZwX2ZsYWdzKTtcXG5tbS92bXNjYW4uYzo3NjA3OlxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KTtcXG5tbS92bXNjYW4uYy03NjA4LX1cXG5tbS92bXNjYW4uYy03NjA5LVxcbm1tL3Ztc2Nhbi5jOjc2MTA6dm9pZCBrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdCwgZW51bSBrc3dhcGRfY2xlYXJfaG9wZWxlc3NfcmVhc29uIHJlYXNvbilcXG5tbS92bXNjYW4uYy03NjExLXtcXG5tbS92bXNjYW4uYy03NjEyLVxcdC8qIE9ubHkgdHJhY2UgYWN0dWFsIHJlc2V0cywgbm90IHJlZHVuZGFudCB6ZXJvLXRvLXplcm8gKi9cXG5tbS92bXNjYW4uYzo3NjEzOlxcdGlmIChhdG9taWNfeGNoZyhcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcywgMCkpXFxubW0vdm1zY2FuLmM6NzYxNDpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCByZWFzb24pO1xcbm1tL3Ztc2Nhbi5jLTc2MTUtfVxcbi0tXFxubW0vdm1zY2FuLmMtNzYxNy0vKlxcbm1tL3Ztc2Nhbi5jOjc2MTg6ICogUmVzZXQga3N3YXBkX2ZhaWx1cmVzIG9ubHkgd2hlbiB0aGUgbm9kZSBpcyBiYWxhbmNlZC4gV2l0aG91dCB0aGlzXFxubW0vdm1zY2FuLmMtNzYxOS0gKiBjaGVjaywgc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSAoZS5nLiwgZnJvbSBjZ3JvdXAgbWVtb3J5LmhpZ2hcXG5tbS92bXNjYW4uYzo3NjIwOiAqIHRocm90dGxpbmcpIGNhbiBrZWVwIHJlc2V0dGluZyBrc3dhcGRfZmFpbHVyZXMgZXZlbiB3aGVuIHRoZSBub2RlXFxubW0vdm1zY2FuLmM6NzYyMTogKiBjYW5ub3QgYmUgYmFsYW5jZWQsIGNhdXNpbmcga3N3YXBkIHRvIHJ1biBlbmRsZXNzbHkuXFxubW0vdm1zY2FuLmMtNzYyMi0gKi9cXG5tbS92bXNjYW4uYzo3NjIzOnZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc2MjQtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MjYtXFx0aWYgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSlcXG5tbS92bXNjYW4uYzo3NjI3OlxcdFxcdGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgY3VycmVudF9pc19rc3dhcGQoKSA/XFxubW0vdm1zY2FuLmMtNzYyOC1cXHRcXHRcXHRLU1dBUERfQ0xFQVJfSE9QRUxFU1NfS1NXQVBEIDogS1NXQVBEX0NMRUFSX0hPUEVMRVNTX0RJUkVDVCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NjMwLVxcbm1tL3Ztc2Nhbi5jOjc2MzE6Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTc2MzIte1xcbm1tL3Ztc2Nhbi5jOjc2MzM6XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzKSBcXHUwMDNlPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbm1tL3Ztc2Nhbi5jLTc2MzQtfVxcbi0tXFxubW0vdm1zY2FuLmM9NzY0NT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NzUtLypcXG5tbS92bXNjYW4uYzo3Njc2OiAqIFRoaXMga3N3YXBkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC5cXG5tbS92bXNjYW4uYy03Njc3LSAqL1xcbm1tL3Ztc2Nhbi5jOjc2Nzg6dm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc2Nzkte1xcbi0tXFxubW0vdm1zY2FuLmMtNzY4MS1cXG5tbS92bXNjYW4uYzo3NjgyOlxcdHBnZGF0X2tzd2FwZF9sb2NrKHBnZGF0KTtcXG5tbS92bXNjYW4uYzo3NjgzOlxcdGlmICghcGdkYXQtXFx1MDAzZWtzd2FwZCkge1xcbm1tL3Ztc2Nhbi5jOjc2ODQ6XFx0XFx0cGdkYXQtXFx1MDAzZWtzd2FwZCA9IGt0aHJlYWRfY3JlYXRlX29uX25vZGUoa3N3YXBkLCBwZ2RhdCwgbmlkLCBcXFwia3N3YXBkJWRcXFwiLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjc2ODU6XFx0XFx0aWYgKElTX0VSUihwZ2RhdC1cXHUwMDNla3N3YXBkKSkge1xcbm1tL3Ztc2Nhbi5jLTc2ODYtXFx0XFx0XFx0LyogZmFpbHVyZSBhdCBib290IGlzIGZhdGFsICovXFxubW0vdm1zY2FuLmM6NzY4NzpcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBzdGFydCBrc3dhcGQgb24gbm9kZSAlZCwgcmV0PSVwZVxcXFxuXFxcIixcXG5tbS92bXNjYW4uYzo3Njg4OlxcdFxcdFxcdFxcdCAgIG5pZCwgcGdkYXQtXFx1MDAzZWtzd2FwZCk7XFxubW0vdm1zY2FuLmMtNzY4OS1cXHRcXHRcXHRCVUdfT04oc3lzdGVtX3N0YXRlIFxcdTAwM2MgU1lTVEVNX1JVTk5JTkcpO1xcbm1tL3Ztc2Nhbi5jOjc2OTA6XFx0XFx0XFx0cGdkYXQtXFx1MDAzZWtzd2FwZCA9IE5VTEw7XFxubW0vdm1zY2FuLmMtNzY5MS1cXHRcXHR9IGVsc2Uge1xcbm1tL3Ztc2Nhbi5jOjc2OTI6XFx0XFx0XFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVxcdTAwM2Vrc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc2OTMtXFx0XFx0fVxcbm1tL3Ztc2Nhbi5jLTc2OTQtXFx0fVxcbm1tL3Ztc2Nhbi5jOjc2OTU6XFx0cGdkYXRfa3N3YXBkX3VubG9jayhwZ2RhdCk7XFxubW0vdm1zY2FuLmMtNzY5Ni19XFxuLS1cXG5tbS92bXNjYW4uYy03NzAxLSAqL1xcbm1tL3Ztc2Nhbi5jOjc3MDI6dm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZClcXG5tbS92bXNjYW4uYy03NzAzLXtcXG5tbS92bXNjYW4uYy03NzA0LVxcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjAuMzA0NDgxODU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDI4Nzg1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE1HTFJVIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE1HTFJVIHBhdGNoLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gSSBpbml0aWFsbHkgdGhvdWdodCBga3N3YXBkYCBtaWdodCBiZSBhIHJlbGV2YW50IHN5bWJvbCwgYnV0IGl0J3MgcmVhbGx5IGp1c3QgYSB0aHJlYWQuIE5vdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGlkZW50aWZ5aW5nIHRoZSBrZXkgY2hhbmdlcy4gSW5zdGVhZCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrIG9mIG1lbW9yeSByZWNsYW1hdGlvbi5cblxuYHRyeV90b19mcmVlX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBzZWVtIG11Y2ggbW9yZSBwcm9taXNpbmcuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gZnJlZWluZyBtZW1vcnksIGFuZCBhcmUgbGlrZWx5IHRvIGJlIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIExldCdzIGRlbHZlIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VhcmNoIGZvciBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGV2aWN0X2ZvbGlvc2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE11bHRpLUdlbiBMUlUgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuXG5cbldhaXQuLi4gaXMgYHNocmlua19hbGxfbWVtb3J5YCBleHBvcnRlZD8gQWgsIG5vLCBpdCdzIHRpZWQgdG8gaGliZXJuYXRpb24uIFRoYXQncyBub3QgdGhlIHByaW1hcnkgZm9jdXMgaGVyZS4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyB1c2VkIGJ5IHRoZSBwYWdlIGFsbG9jYXRvciwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIG1lbWNnLXJlbGF0ZWQsIHNvIGl0IHdpbGwgYmUgcmVsZXZhbnQgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWVtY2cgaW50ZXJhY3Rpb24uXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIE1HTFJVIGZ1bmN0aW9uYWxpdHkuIExvb2tzIGxpa2UgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGtleXMuIE5vdyB0aGF0IEkgaGF2ZSBpZGVudGlmaWVkIHRoZSBmdW5jdGlvbnMsIGxldCdzIGFkZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW8oKWAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgcmVjbGFtYXRpb24uIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2Ugd2Ugd2FudCB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBsZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBMUlVfR0VOX0VOQUJMRURgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuIEFoLCB5ZXMsIGl0IGRlcGVuZHMgb24gYExSVV9HRU5gIGFuZCBpcyBtYXJrZWQgXCJFbmFibGUgYnkgZGVmYXVsdC5cIiBUaGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3csIEknbSBjb25maWRlbnQgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiBmb2N1cyBzeW1ib2xzIGFuZCBhIGNsZWFyIHJhdGlvbmFsZS4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzNSwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjguNzA3MzY0MDk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2MzU3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSBldmljdGlvbiBieSByZW1vdmluZyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gc29ydF9mb2xpbygpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIGV2aWN0aW9uIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsIGhhbmRsaW5nIG9mIHVuZXZpY3RhYmxlIGZvbGlvcyBpbiBzb3J0X2ZvbGlvKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjguODA1MDEwMDE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY0NjM4MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDc6MjguODA1NjIxNzk0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxNjQwMjE0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSBjb25kaXRpb25hbCBibG9jayBoYW5kbGluZyB1bmV2aWN0YWJsZSBmb2xpb3MgaW4gYHNvcnRfZm9saW9gIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vdm1zY2FuLmNgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgTFJVIGxpc3QgbWFuYWdlbWVudCwgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgdHlwZXMgb2YgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQ5NDBiNGE1ZjdhZjI1ZGQ1NDliNDdjNzFjNWEwNDFiMjY3MTI5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjQ2OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzE5NGRhN2RjYzc5NS4uZWNhNWZmNjQyMzhkZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQ2NDgsNyArNDY0OCw2IEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0XHQgICAgICAgaW50IHRpZXJfaWR4KVxuIHtcbi1cdGJvb2wgc3VjY2VzcztcbiBcdGludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbkBAIC00NjYwLDE2ICs0NjU5LDYgQEAgc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUywgZm9saW8pO1xuIFxuLVx0LyogdW5ldmljdGFibGUgKi9cbi1cdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkge1xuLVx0XHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4tXHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuLVx0XHRmb2xpb19zZXRfdW5ldmljdGFibGUoZm9saW8pO1xuLVx0XHRscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuLVx0XHRfX2NvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR0NVTExFRCwgZGVsdGEpO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbiBcdC8qIHByb21vdGVkICovXG4gXHRpZiAoZ2VuICE9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pKSB7XG4gXHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0NzoyOC44MDU2MjMzNDRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE2Mzk5MTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCBpbiBgbW0vdm1zY2FuLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBzb3J0X2ZvbGlvYCBmdW5jdGlvbi4gV2hhdCBJJ20gc2VlaW5nIGlzIGEgcmVtb3ZhbCBvZiB0aGUgYmxvY2sgZGVhbGluZyB3aXRoIHVuZXZpY3RhYmxlIGZvbGlvcy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hlY2sgYCFmb2xpb19ldmljdGFibGUoZm9saW8pYCBhbmQgaXRzIGFzc29jaWF0ZWQgbG9naWMgaXMgZ29uZS4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgY2hhbmdlIHdpdGhpbiB0aGUgcGFnZSBldmljdGlvbiBhbmQgTFJVIGdlbmVyYXRpb24gcHJvY2Vzcy5cblxuUmlnaHQgYXdheSwgSSBkb24ndCBzZWUgYW55dGhpbmcgdGhhdCBzY3JlYW1zIFwic2VjdXJpdHkgdnVsbmVyYWJpbGl0eVwiIGF0IG1lLiBUaGlzIGlzbid0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIHRoYXQgd291bGQgbGVhZCB0byB1c2VyLXNwYWNlIGluZm9ybWF0aW9uIGxlYWtzLiBJdCdzIHN0cmljdGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLiBUaGUgY29kZSBpcyBzaW1wbHkgcmVtb3ZpbmcgYSBjb25kaXRpb24gaW4gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIExSVSwgbm90IGFsdGVyaW5nIG1lbW9yeSBjb250ZW50cy5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgdGhvdWdoLiBUaGUgY29kZSByZW1vdmVkIGluY2x1ZGVkIGEgYHN1Y2Nlc3NgIHZhcmlhYmxlLiBJdCBsb29rcyBsaWtlIHRoYXQgdmFyaWFibGUgd2FzIG9ubHkgdXNlZCBsb2NhbGx5IHdpdGhpbiB0aGUgcmVtb3ZlZCBibG9jay4gSSBzZWUgbm8gbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGVpdGhlci4gVGhlIGNoYW5nZSBsb29rcyBjbGVhbjsgdGhlcmUncyBubyB3YXkgdGhpcyBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGZvciwgbm90IGp1c3QgYW55IHNvcnQgb2YgbWVtb3J5IGVycm9yLiBTdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTiBhcmUgd2hhdCBJJ2QgcmVseSBvbiBoZXJlIHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlmIHRoZXkncmUgcHJlc2VudCBkdWUgdG8gc29tZSBpbmNvcnJlY3QgTFJVIGhhbmRsaW5nLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEkgZG9uJ3QgYmVsaWV2ZSBpdCBpbnRyb2R1Y2VzIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQzLCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQ3OjM1Ljk2OTYyMDEyMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIGNvbmRpdGlvbmFsIGJsb2NrIGhhbmRsaW5nIHVuZXZpY3RhYmxlIGZvbGlvcyBpbiBgc29ydF9mb2xpb2Agd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS92bXNjYW4uY2ApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBMUlUgbGlzdCBtYW5hZ2VtZW50LCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVzZSB0eXBlcyBvZiBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgY29uZGl0aW9uYWwgYmxvY2sgaGFuZGxpbmcgdW5ldmljdGFibGUgZm9saW9zIGluIGBzb3J0X2ZvbGlvYCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL3Ztc2Nhbi5jYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IExSVSBsaXN0IG1hbmFnZW1lbnQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIHR5cGVzIG9mIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6j6nl[1] Phase: Succeeded StartedAt: 2026-08-11 09:47:47 +0000 UTC FinishedAt: 2026-08-11 09:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 09:47:47 +0000 UTC FinishedAt: 2026-08-11 09:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2] Phase: Succeeded StartedAt: 2026-08-11 09:47:47 +0000 UTC FinishedAt: 2026-08-11 13:31:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 09:47:47 +0000 UTC FinishedAt: 2026-08-11 13:31:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 09:47:47 +0000 UTC FinishedAt: 2026-08-11 09:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 09:47:47 +0000 UTC FinishedAt: 2026-08-11 09:47:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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-workflow6j6nl/series-workflow6j6nl-convert-artifact-3217924310/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 09:47:57 +0000 UTC FinishedAt: 2026-08-11 10:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 09:47:57 +0000 UTC FinishedAt: 2026-08-11 10:05:28 +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:*8c0da54f-3832-427f-bb3f-dddabac40978,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-workflow6j6nl/series-workflow6j6nl-convert-artifact-3217924310/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": "3fe68881-2821-4ce5-9d29-09b4d34fcff9", "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-workflow6j6nl/series-workflow6j6nl-build-action-4176641388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 09:47:57 +0000 UTC FinishedAt: 2026-08-11 10:05:18 +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:*8c0da54f-3832-427f-bb3f-dddabac40978,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-workflow6j6nl/series-workflow6j6nl-convert-artifact-3217924310/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": "3fe68881-2821-4ce5-9d29-09b4d34fcff9", "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-workflow6j6nl/series-workflow6j6nl-build-action-4176641388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:05:28 +0000 UTC FinishedAt: 2026-08-11 10:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:05:28 +0000 UTC FinishedAt: 2026-08-11 10:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:05:28 +0000 UTC FinishedAt: 2026-08-11 10:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:05:28 +0000 UTC FinishedAt: 2026-08-11 10:05:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-workflow6j6nl/series-workflow6j6nl-convert-artifact-951366249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:05:38 +0000 UTC FinishedAt: 2026-08-11 10:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:05:38 +0000 UTC FinishedAt: 2026-08-11 10:07:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3fe68881-2821-4ce5-9d29-09b4d34fcff9,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-workflow6j6nl/series-workflow6j6nl-build-action-4176641388/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-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:07:51 +0000 UTC FinishedAt: 2026-08-11 10:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:07:51 +0000 UTC FinishedAt: 2026-08-11 10:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:07:51 +0000 UTC FinishedAt: 2026-08-11 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:07:51 +0000 UTC FinishedAt: 2026-08-11 10:24:19 +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:*8c0da54f-3832-427f-bb3f-dddabac40978,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-workflow6j6nl/series-workflow6j6nl-convert-artifact-951366249/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": "ca9d1e2d-186b-4359-b2bc-1dc69a8a0a21", "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-workflow6j6nl/series-workflow6j6nl-build-action-1147728453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:07:51 +0000 UTC FinishedAt: 2026-08-11 10:24:09 +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:*8c0da54f-3832-427f-bb3f-dddabac40978,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-workflow6j6nl/series-workflow6j6nl-convert-artifact-951366249/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": "ca9d1e2d-186b-4359-b2bc-1dc69a8a0a21", "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-workflow6j6nl/series-workflow6j6nl-build-action-1147728453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:24:19 +0000 UTC FinishedAt: 2026-08-11 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:24:19 +0000 UTC FinishedAt: 2026-08-11 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:24:19 +0000 UTC FinishedAt: 2026-08-11 10:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:24:19 +0000 UTC FinishedAt: 2026-08-11 10:26:13 +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:*ca9d1e2d-186b-4359-b2bc-1dc69a8a0a21,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-workflow6j6nl/series-workflow6j6nl-build-action-1147728453/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-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 13:31:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 13:31:39 +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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"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:*3fe68881-2821-4ce5-9d29-09b4d34fcff9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ca9d1e2d-186b-4359-b2bc-1dc69a8a0a21,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-workflow6j6nl/series-workflow6j6nl-build-action-4176641388/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-workflow6j6nl/series-workflow6j6nl-build-action-1147728453/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 10:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 10:26:28 +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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"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-workflow6j6nl/series-workflow6j6nl-convert-artifact-2245841086/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 10:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 10:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:22 +0000 UTC FinishedAt: 2026-08-11 10:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:32 +0000 UTC FinishedAt: 2026-08-11 13:31:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j6nl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["try_to_free_pages","shrink_all_memory","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1029098ee3275ea5b78e329ce132262affa2f8cc","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"c456008a-6ce0-4824-9d60-149b7ee06aa4","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-08-11 10:26:32 +0000 UTC FinishedAt: 2026-08-11 13:31:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3fe68881-2821-4ce5-9d29-09b4d34fcff9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ca9d1e2d-186b-4359-b2bc-1dc69a8a0a21,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-workflow6j6nl/series-workflow6j6nl-build-action-4176641388/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-workflow6j6nl/series-workflow6j6nl-build-action-1147728453/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-workflow6j6nl/series-workflow6j6nl-convert-artifact-2245841086/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,}