Name: series-workflowqtm8g Phase: Succeeded StartedAt: 2026-09-08 06:44:46 +0000 UTC FinishedAt: 2026-09-08 11:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[0] Phase: Succeeded StartedAt: 2026-09-08 06:44:46 +0000 UTC FinishedAt: 2026-09-08 07:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 06:44:46 +0000 UTC FinishedAt: 2026-09-08 07:26: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": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "c7cbbd20-9603-41e3-a97f-48a844c65892" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "reclaimable_anon_is_low", "can_reclaim_anon_pages", "get_scan_count", "shrink_lruvec", "zone_reclaimable_pages", "set_initial_priority" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzZXRfaW5pdGlhbF9wcmlvcml0eSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBpbnRlcm5hbCBtZW1vcnkgcmVjbGFpbSBjb250cm9sIGZsb3cgYmFzZWQgb24gbm9kZS9scnV2ZWMgcGFnZSBzdGF0ZSBzdGF0aXN0aWNzIChgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGBOUl9TV0FQQ0FDSEVgKSBhbmQgdGhlIGZsYWdzIGluIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWtzIG9yIHBhZGRpbmcgaXNzdWVzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGFkZGluZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIHRvIHNraXAgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIHVuZGVyIEdGUF9OT0lPIHJlY2xhaW0gd2hlbiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbiBMUlUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGFjcm9zcyBnbG9iYWwgYW5kIG1lbWNnIHBhZ2UgcmVjbGFpbSBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MjU6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjI2Y2JkOWU0ODM2MiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTM2MiwyMCAmIzQzOzM2Miw3MiBAQCBzdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19TV0FQXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIEdGUF9OT0lPIHJlY2xhaW1lciBjYW4gb25seSByZWNsYWltIGFub24gdGhhdCBpcyBhbHJlYWR5IGluIHRoZVxuJiM0MztcdCAqIHN3YXBjYWNoZSAoYWRkaW5nIGFub24gdG8gdGhlIHN3YXBjYWNoZSBuZWVkcyBJTykuIFdoZW4gc3dhcGNhY2hlIGlzXG4mIzQzO1x0ICogZmFyIGJlbG93IHRoZSBhbm9uIExSVSwgc2Nhbm5pbmcgYW5vbiByZWNsYWltcyBub3RoaW5nIGFuZCBvbmx5IGJ1cm5zXG4mIzQzO1x0ICogQ1BVLiBUaGUgMS82NCB0aHJlc2hvbGQga2VlcHMgdGhpcyB0byB0aGUgY2FzZSB3aGVyZSBhbm9uIGlzXG4mIzQzO1x0ICogZWZmZWN0aXZlbHkgdW5yZWNsYWltYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZJWE1FOiBNR0xSVSBkb2VzbiYjMzk7dCBmdWxseSByZXNwZWN0IGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBmb3IgdGhlXG4mIzQzO1x0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1jZykge1xuJiM0MztcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiYjNDM7XG4mIzQzO1x0XHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuJiM0MztcdFx0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0FOT04pO1xuJiM0MztcdFx0c3dhcGNhY2hlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TV0FQQ0FDSEUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN3YXBjYWNoZSBcdTAwM2MgKGFub25fcGFnZXMgXHUwMDNlXHUwMDNlIDYpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRpZiAobWVtY2cgPT0gTlVMTCkge1xuIFx0XHQvKlxuLVx0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlXG4tXHRcdCAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbiYjNDM7XHRcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUgc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xuJiM0MztcdFx0ICogQW5kIHVuZGVyIEdGUF9OT0lPLCBpcyB0aGVyZSBlbm91Z2ggc3dhcGNhY2hlZCBhbm9uIHRvIG1ha2VcbiYjNDM7XHRcdCAqIHNjYW5uaW5nIGFub24gd29ydGh3aGlsZT9cbiBcdFx0ICovXG4tXHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwKVxuJiM0MztcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4tXHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbi1cdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwKVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdCwgYW5kIHVuZGVyIEdGUF9OT0lPIGRvZXNcbiYjNDM7XHRcdCAqIGl0IGhhdmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlIHNjYW5uaW5nIHdvcnRod2hpbGU/XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzZXRfaW5pdGlhbF9wcmlvcml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGFkZGluZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIHRvIHNraXAgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIHVuZGVyIEdGUF9OT0lPIHJlY2xhaW0gd2hlbiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbiBMUlUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGFjcm9zcyBnbG9iYWwgYW5kIG1lbWNnIHBhZ2UgcmVjbGFpbSBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDc6MjU6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI0NWY2OGM3NWIyODkuLjIyNmNiZDllNDgzNjIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0zNjIsMjAgJiM0MzszNjIsNzIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAlyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX1NXQVAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIEdGUF9OT0lPIHJlY2xhaW1lciBjYW4gb25seSByZWNsYWltIGFub24gdGhhdCBpcyBhbHJlYWR5IGluIHRoZQomIzQzOwkgKiBzd2FwY2FjaGUgKGFkZGluZyBhbm9uIHRvIHRoZSBzd2FwY2FjaGUgbmVlZHMgSU8pLiBXaGVuIHN3YXBjYWNoZSBpcwomIzQzOwkgKiBmYXIgYmVsb3cgdGhlIGFub24gTFJVLCBzY2FubmluZyBhbm9uIHJlY2xhaW1zIG5vdGhpbmcgYW5kIG9ubHkgYnVybnMKJiM0MzsJICogQ1BVLiBUaGUgMS82NCB0aHJlc2hvbGQga2VlcHMgdGhpcyB0byB0aGUgY2FzZSB3aGVyZSBhbm9uIGlzCiYjNDM7CSAqIGVmZmVjdGl2ZWx5IHVucmVjbGFpbWFibGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNjIHx8IChzYy0mZ3Q7Z2ZwX21hc2sgJmFtcDsgX19HRlBfSU8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGSVhNRTogTUdMUlUgZG9lc24mIzM5O3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZQomIzQzOwkgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93LgomIzQzOwkgKi8KJiM0MzsJaWYgKGxydV9nZW5fZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobWVtY2cpIHsKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiYjNDM7CiYjNDM7CQlhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJCSAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7CiYjNDM7CQlzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJCSAgICAgbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfQU5PTik7CiYjNDM7CQlzd2FwY2FjaGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX1NXQVBDQUNIRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHN3YXBjYWNoZSAmbHQ7IChhbm9uX3BhZ2VzICZndDsmZ3Q7IDYpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7CQlpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX1NXQVAgKi8KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCWlmIChtZW1jZyA9PSBOVUxMKSB7CiAJCS8qCi0JCSAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUKLQkJICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlPwomIzQzOwkJICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZSBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/CiYjNDM7CQkgKiBBbmQgdW5kZXIgR0ZQX05PSU8sIGlzIHRoZXJlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZQomIzQzOwkJICogc2Nhbm5pbmcgYW5vbiB3b3J0aHdoaWxlPwogCQkgKi8KLQkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwKQomIzQzOwkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKLQkJLyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqLwotCQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwKQomIzQzOwkJLyoKJiM0MzsJCSAqIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdCwgYW5kIHVuZGVyIEdGUF9OT0lPIGRvZXMKJiM0MzsJCSAqIGl0IGhhdmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlIHNjYW5uaW5nIHdvcnRod2hpbGU/CiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWTXNjYW4gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBBIHBhdGNoIHRhcmdldGluZyBgbW0vdm1zY2FuLmNgIOKAkyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBsb2dpYyBhcm91bmQgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbS4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBmdW5jdGlvbiwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhlIGRpcmVjdGlvbiB0aGlzIHBhdGNoIGlzIHRha2luZy4gSXQgc2VlbXMgdG8gYmUgaW50ZWdyYXRlZCB3aXRoIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLCB3aGljaCBpcyB0aGUgZ2F0ZWtlZXBlciBmb3IgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbnMuIFRoZSBsb2dpYyB1cGRhdGUgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGlzIG5vdyBjaGVja2luZyB0aGUgbmVnYXRpb24gb2YgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbmV3IGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBzYXlpbmcgJiMzNDtpZiBhbm9ueW1vdXMgcmVjbGFpbSBpc24mIzM5O3QgY29uc2lkZXJlZCAmIzM5O2xvdyYjMzk7IGFjY29yZGluZyB0byBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAsIHRoZW4gd2UgKmNhbiogcmVjbGFpbS4mIzM0OyBNYWtlcyBzZW5zZS4gVGhlIGAjaWZkZWYgQ09ORklHX1NXQVBgIGd1YXJkIGlzIGNydWNpYWw7IGl0JiMzOTtzIGNvbmZpcm1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHN3YXBwaW5nIGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtLCBzbyBhbm9ueW1vdXMgcGFnZXMgYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBzd2FwcGluZy4gSSB3YW50IHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQgd2l0aGluIGBtbS92bXNjYW4uY2AgbmVhciBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYDsgdGhpcyBnaXZlcyBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGNoYW5nZSBmaXRzIGludG8gdGhlIGxhcmdlciByZWNsYWltIHN0cmF0ZWd5LiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FuX3JlY2xhaW1fYW5vbl9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2Nj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4Mi1cdC8qXG5tbS92bXNjYW4uYzozODM6XHQgKiBGSVhNRTogTUdMUlUgZG9lc24mIzM5O3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxubW0vdm1zY2FuLmMtMzg0LVx0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cbi0tXG5tbS92bXNjYW4uYz00MDQ9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00MTAtXG5tbS92bXNjYW4uYzo0MTE6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNDEyLVx0XHRcdFx0XHQgIGludCBuaWQsXG4tLVxubW0vdm1zY2FuLmM9NDQ3PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS92bXNjYW4uYy00NTItXHRcdHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKTtcbm1tL3Ztc2Nhbi5jOjQ1MzpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHpvbmVfdG9fbmlkKHpvbmUpLCBOVUxMKSlcbm1tL3Ztc2Nhbi5jLTQ1NC1cdFx0bnIgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pICYjNDM7XG4tLVxubW0vdm1zY2FuLmM9MjYyNz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2NDYtXHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jOjI2NDc6XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG5tbS92bXNjYW4uYy0yNjQ4LVx0XHRcdG1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTI2NTUtXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG5tbS92bXNjYW4uYzoyNjU2Olx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG5tbS92bXNjYW4uYy0yNjU3LVx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG4tLVxubW0vdm1zY2FuLmM9NDI2MT1zdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjczLVx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NDI3NDpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQyNzUtXHRcdHJlY2xhaW1hYmxlICYjNDM7PSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMjM9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01MTM3LVx0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG5tbS92bXNjYW4uYzo1MTM4Olx0XHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUxMzktXHRcdFx0cmV0dXJuIDA7XG4tLVxubW0vdm1zY2FuLmM9NjI1OT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy02MzA0LVx0aW5hY3RpdmVfbHJ1X3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcbm1tL3Ztc2Nhbi5jOjYzMDU6XHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpXG5tbS92bXNjYW4uYy02MzA2LVx0XHRpbmFjdGl2ZV9scnVfcGFnZXMgJiM0Mzs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQ29uZmlybWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhZ2UgcmVjbGFpbSBsb2dpYywgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEFwcGx5aW5nIG15IG1lbnRhbCBjaGVja2xpc3QgYmFzZWQgb24gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgdGhlICYjMzQ7Q29yZSBTdWJzeXN0ZW1zJiMzNDsgY3JpdGVyaWEgZGVmaW5pdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBBbnkgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXMsIGJ5IGRlZmluaXRpb24sIHNpZ25pZmljYW50LiBJJiMzOTttIGFscmVhZHkgaW5jbGluZWQgdG8gZ2l2ZSB0aGlzIGEgcG9zaXRpdmUgc2NvcmUgZm9yIFdvcnRoRnV6emluZy4gVGhlICYjMzQ7UmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzJiMzNDsgY3JpdGVyaWEgaXMgYWxzbyBjbGVhcmx5IG1ldC4KCk5vdywgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuIEkgc2VlIGBDT05GSUdfU1dBUGAgYmVpbmcgYCNpZmRlZmAmIzM5O2QuIFN3YXAgaW50ZXJhY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBzY3J1dGluaXplLiBBbmQgdGhpcyBtZW50aW9ucyBgbWVtY2dgISBJIHNlZSB0aGUgYG1lbWNnYCB2YXJpYWJsZSBwYXNzZWQgYW5kIGBtZW1fY2dyb3VwX2xydXZlY2AsIGBscnV2ZWNfcGFnZV9zdGF0ZWAsIGFuZCBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AgY2FsbGVkLiBUaGlzIGlzIHZlcnkgZ29vZCwgaW5kaWNhdGluZyBsaWtlbHkgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1DR19TV0FQYCBkZXBlbmRlbmNpZXMsIGFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb2ludHMgb2YgcG90ZW50aWFsIGludGVyZXN0IGFuZCBpbnRlcmFjdGlvbi4gSSBzaG91bGQgY2hlY2sgaG93IHRoZXNlIG1lbWNnIGFuZCBzd2FwIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCBpbnRlZ3JhdGVkIGJlY2F1c2UgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gZmlsZTogYGluaXQvS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCBmb3IgbXVjaCBvZiB0aGUgZ2VuZXJhbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBvciBpZiB0aGUgZGVmaW5pdGlvbiBpcyBtb3JlIHNwZWNpZmljIHRoYW4gYSB0b3AgbGV2ZWwgY29uZmlnLCB0aGVuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgbW0vS2NvbmZpZ2AuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgKm1lbW9yeSogY29udHJvbCBncm91cHMsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0mIzM5O3MgS2NvbmZpZyBmaWxlIHNlZW1zIGxpa2UgdGhlIG5leHQgbW9zdCBsaWtlbHkgc3BvdC4gSXQmIzM5O3MgcmVhbGx5IGFib3V0IHF1aWNrbHkgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2ggdG8gZmluZCB0aGUgY29ycmVjdCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA3LVxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFub255bW91cyBQYWdlIFJlY2xhaW0gTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHJlY2xhaW0gbG9naWMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdywgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNhbGxlcnMgYW5kIHN5bWJvbHMgaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFub255bW91cyBwYWdlcyBhcmUgYWN0dWFsbHkgYmVpbmcgcmVjbGFpbWVkLgoKUmlnaHQsIHNvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgYm90aCBgc3RhdGljIGlubGluZWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbi4gTm93LCBiZWNhdXNlIHRoZXkmIzM5O3JlIGlubGluZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSAqbm9uLXN0YXRpYyogYW5kICpub24taW5saW5lKiBmdW5jdGlvbnMgd2l0aGluIGBtbS92bXNjYW4uY2AgdGhhdCB1c2UgdGhlbSDigJMgdGhvc2UgYXJlIHRoZSBhY3R1YWwgd29ya2hvcnNlcy4KCkxldCBtZSBsaXN0IG91dCB0aGUgY2FsbGVycyBvZiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2A6IEkgc2VlIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCAodGhhdCYjMzk7cyBpbXBvcnRhbnQpLCBgZ2V0X3NjYW5fY291bnRgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgZ2V0X25yX3RvX3NjYW5gLCBhbmQgYHNob3VsZF9jb250aW51ZV9yZWNsYWltYC4gSG1tLCBhIG1peCBvZiBzdGF0aWMgYW5kIGlubGluZSBmdW5jdGlvbnMuIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciByZWNsYWltaW5nLCBidXQgdGhlIG90aGVycyBhcmUgbGlrZWx5IGtleSBpbiB0aGUgc2NhbiBhbmQgc2hyaW5raW5nIHByb2Nlc3MuCgpOb3csIHdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgKmFjdHVhbGx5KiBkb2luZyB0aGUgaGVhdnkgbGlmdGluZz8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBjb2RlLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBjb3JlIHJlY2xhaW0gbG9naWMgaXMgZ29pbmcgdG8gYmUgd2l0aGluIGEgc3BlY2lmaWMgc2VjdGlvbiwgcGVyaGFwcyBhcm91bmQgdGhlIDI2MDAtMjgwMCBhbmQgNDIwMC00NDAwIGxpbmUgcmFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIFRpbWUgdG8gZ2V0IHRoZSBnb2dnbGVzIG9uIGFuZCBleGFtaW5lIHRob3NlIGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjI1Olx0ICogbnJbMl0gPSBmaWxlIGluYWN0aXZlIGZvbGlvcyB0byBzY2FuOyBuclszXSA9IGZpbGUgYWN0aXZlIGZvbGlvcyB0byBzY2FuXG4yNjI2Olx0ICovXG4yNjI3Olx0c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjI2Mjg6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpucilcbjI2Mjk6XHR7XG4yNjMwOlx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4yNjMxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbjI2MzI6XHRcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xuMjYzMzpcdFx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xuMjYzNDpcdFx0dTY0IGRlbm9taW5hdG9yID0gMDtcdC8qIGdjYyAqL1xuMjYzNTpcdFx0ZW51bSBzY2FuX2JhbGFuY2Ugc2Nhbl9iYWxhbmNlO1xuMjYzNjpcdFx0ZW51bSBscnVfbGlzdCBscnU7XG4yNjM3Olx0XG4yNjM4Olx0XHQvKlxuMjYzOTpcdFx0ICogUHJvYWN0aXZlIHJlY2xhaW0gaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5LlxuMjY0MDpcdFx0ICogU1dBUFBJTkVTU19BTk9OX09OTFkgaXMgc2V0IG9ubHkgb24gdGhlIHByb2FjdGl2ZSByZWNsYWltIHBhdGgsIHNvXG4yNjQxOlx0XHQgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy5cbjI2NDI6XHRcdCAqIG5vIHN3YXApLCBiYWlsIG91dCBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBldmljdGluZyBmaWxlIHBhZ2VzLFxuMjY0MzpcdFx0ICogd2hpY2ggd291bGQgdmlvbGF0ZSB0aGUgYW5vbi1vbmx5IHNlbWFudGljcy5cbjI2NDQ6XHRcdCAqL1xuMjY0NTpcdFx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcbjI2NDY6XHRcdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xuMjY0NzpcdFx0XHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuMjY0ODpcdFx0XHRcdG1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpO1xuMjY0OTpcdFx0XHRcdHJldHVybjtcbjI2NTA6XHRcdFx0fVxuMjY1MTpcdFx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XG4yNjUyOlx0XHRcdGdvdG8gb3V0O1xuMjY1MzpcdFx0fVxuMjY1NDpcdFxuMjY1NTpcdFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xuMjY1NjpcdFx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4yNjU3Olx0XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcbjI2NTg6XHRcdFx0Z290byBvdXQ7XG4yNjU5Olx0XHR9XG4yNjYwOlx0XG4yNjYxOlx0XHQvKlxuMjY2MjpcdFx0ICogR2xvYmFsIHJlY2xhaW0gd2lsbCBzd2FwIHRvIHByZXZlbnQgT09NIGV2ZW4gd2l0aCBub1xuMjY2MzpcdFx0ICogc3dhcHBpbmVzcywgYnV0IG1lbWNnIHVzZXJzIHdhbnQgdG8gdXNlIHRoaXMga25vYiB0b1xuMjY2NDpcdFx0ICogZGlzYWJsZSBzd2FwcGluZyBmb3IgaW5kaXZpZHVhbCBncm91cHMgY29tcGxldGVseSB3aGVuXG4yNjY1Olx0XHQgKiB1c2luZyB0aGUgbWVtb3J5IGNvbnRyb2xsZXImIzM5O3Mgc3dhcCBsaW1pdCBmZWF0dXJlIHdvdWxkIGJlXG4yNjY2Olx0XHQgKiB0b28gZXhwZW5zaXZlLlxuMjY2NzpcdFx0ICovXG4yNjY4Olx0XHRpZiAoY2dyb3VwX3JlY2xhaW0oc2MpIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzcykge1xuMjY2OTpcdFx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG4yNjcwOlx0XHRcdGdvdG8gb3V0O1xuMjY3MTpcdFx0fVxuMjY3MjpcdFxuMjY3MzpcdFx0LypcbjI2NzQ6XHRcdCAqIERvIG5vdCBhcHBseSBhbnkgcHJlc3N1cmUgYmFsYW5jaW5nIGNsZXZlcm5lc3Mgd2hlbiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBnZXRfc2Nhbl9jb3VudGAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBvZiBgZ2V0X3NjYW5fY291bnRgLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2FnZSBnaXZlcyBtZSBpbnNpZ2h0cyBpbnRvIGl0cyBwdXJwb3NlLCB0aGUgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24sIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUgcGF0aHMgdGhhdCAqcmVseSogb24gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBmb3VuZGF0aW9uYWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciB1bmRlcnN0YW5kaW5nIGhvdyBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkmIzM5O20gZXNzZW50aWFsbHkgcGVyZm9ybWluZyBhIHF1aWNrIHN0YXRpYyBhbmFseXNpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBpbmZsdWVuY2UsIGxvb2tpbmcgZm9yIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhbmQgYW55IGFyZ3VtZW50cyBiZWluZyBwYXNzZWQuIFRpbWUgdG8gaHVudCBkb3duIHRob3NlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjU1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtMjYyNi0gKi9cbm1tL3Ztc2Nhbi5jOjI2Mjc6c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbm1tL3Ztc2Nhbi5jLTI2MjgtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXG4tLVxubW0vdm1zY2FuLmM9NjEyMD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjEzOC1cbm1tL3Ztc2Nhbi5jOjYxMzk6XHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XG5tbS92bXNjYW4uYy02MTQwLVxuLS1cbm1tL3Ztc2Nhbi5jLTYxODEtXHRcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxubW0vdm1zY2FuLmM6NjE4MjpcdFx0ICogcHJvcG9ydGlvbmFsbHkgd2hhdCB3YXMgcmVxdWVzdGVkIGJ5IGdldF9zY2FuX2NvdW50KCkuIFdlXG5tbS92bXNjYW4uYy02MTgzLVx0XHQgKiBzdG9wIHJlY2xhaW1pbmcgb25lIExSVSBhbmQgcmVkdWNlIHRoZSBhbW91bnQgc2Nhbm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgUmVsZXZhbnQgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhZ2UgcmVjbGFpbSBhbmQgbWVtb3J5IGNncm91cHMuIFRoZSBpbml0aWFsIHRob3VnaHQgdHJhaW4gc3RhcnRlZCB3aXRoIGZvbGxvd2luZyB0aGUgY2FsbCBjaGFpbjogYHNocmlua19scnV2ZWNgIC0mZ3Q7IGBzaHJpbmtfbm9kZV9tZW1jZ3NgIC0mZ3Q7IGBzaHJpbmtfbm9kZWAgLSZndDsgYHNocmlua196b25lc2AgLSZndDsgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCAvIGBrc3dhcGRfc2hyaW5rX25vZGVgLiBJIGFsc28ga25vdyBgem9uZV9yZWNsYWltYWJsZV9wYWdlc2AgaXMgcmVsZXZhbnQuIFNvIEkgaGFkIGEgcXVpY2sgbWVudGFsIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNoZWNrOiBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBga3N3YXBkX3Nocmlua19ub2RlYCwgYW5kIGBzaHJpbmtfcGFnZV9saXN0YC4KCkJ1dCwgd2FpdC4uLiB0aGVyZSYjMzk7cyB0aGF0IGNydWNpYWwgZ3VpZGVsaW5lIGZvciB0aGUgZnV6emluZyBhbmFseXNpcyBJIG5lZWQgdG8gcmVtZW1iZXIhICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLiYjMzQ7IFJpZ2h0LCBubyBnZW5lcmljIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gTGlzdGluZyB0aGVtIGp1c3QgY3JlYXRlcyBub2lzZS4gSSBuZWVkIHRvIGZvY3VzIG9uICpzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljKiBhbmQgZW50cnlwb2ludHMuIElmIHRoZXkgYXJlIGlubGluZWQsIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGNhbGxlcnMuCgpTbywgdGhlIHBsYW4gc2hpZnRzLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBjb21tb24gbG93IGxldmVsIG1ldGhvZHMgYW5kIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGlubGluZWQgYW5kIHdoYXQgaXNuJiMzOTt0LCBhbmQgYWxzbyBjaGVjayBvdGhlciBub24taW5saW5lIGZ1bmN0aW9ucyBpbiB0aGVyZS4gSSYjMzk7bGwgZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2hyaW5rX2xydXZlY2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfbnJfdG9fc2NhbmAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgbm90IGlubGluZWQgb3Igc3RhdGljLgoKRmlyc3QsIEkgY2hlY2tlZCBgZ2V0X3NjYW5fY291bnRgLiBJdCYjMzk7cyBzdGF0aWMgaW4gYG1tL3Ztc2Nhbi5jYCwgc28gSSYjMzk7bGwgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzLiBUaGVuIEkgY2hlY2tlZCBpZiBgc2hyaW5rX2xydXZlY2AgaXMgc3RhdGljLiBZZXMgaXQgaXMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHRvIHZlcmlmeSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBnbG9iYWwuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBwaWVjZXMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9MjQ3OT1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1MDItXHRcdCAqL1xubW0vY29tcGFjdGlvbi5jOjI1MDM6XHRcdGF2YWlsYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgLyBvcmRlcjtcbm1tL2NvbXBhY3Rpb24uYy0yNTA0LVx0XHRhdmFpbGFibGUgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTU5PXZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5tbS9pbnRlcm5hbC5oLTYxLS8qIG1tL3Ztc2Nhbi5jICovXG5tbS9pbnRlcm5hbC5oOjYyOnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG5tbS9pbnRlcm5hbC5oLTYzLXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NjIyPXNob3VsZF9yZWNsYWltX3JldHJ5KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDY2MS1cbm1tL3BhZ2VfYWxsb2MuYzo0NjYyOlx0XHRhdmFpbGFibGUgPSByZWNsYWltYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7XG5tbS9wYWdlX2FsbG9jLmMtNDY2My1cdFx0YXZhaWxhYmxlICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4tLVxubW0vdm1zY2FuLmM9NDExPXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00NDYtICovXG5tbS92bXNjYW4uYzo0NDc6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxubW0vdm1zY2FuLmMtNDQ4LXtcbi0tXG5tbS92bXNjYW4uYz01NTU9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNTcyLVx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG5tbS92bXNjYW4uYzo1NzM6XHRcdHJlY2xhaW1hYmxlICYjNDM7PSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpO1xubW0vdm1zY2FuLmMtNTc0LVx0XHR3cml0ZV9wZW5kaW5nICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcbi0tXG5tbS92bXNjYW4uYz02Nzc1PXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjc4Ni1cdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgWk9ORV9OT1JNQUwpIHtcbm1tL3Ztc2Nhbi5jOjY3ODc6XHRcdGlmICghem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSBcdTAwMjZcdTAwMjYgem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpKVxubW0vdm1zY2FuLmMtNjc4OC1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgbW0vdm1zY2FuLmNgIGZvciBBbm9ueW1vdXMgUGFnZSBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBhbm9ueW1vdXMgcGFnZSByZWNsYW1hdGlvbiBidXNpbmVzcy4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBpcyB1c2VkLCBvciB3aGVyZSByZWxhdGVkIGZ1bmN0aW9ucyBjb21lIGludG8gcGxheSB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZywgaW5zdGVhZCBvZiBqdXN0IHRoZSBpbW1lZGlhdGUgY29udGV4dCwgbGV0JiMzOTtzIHRyYWNlIG91dCB0aGUgbG9naWNhbCBjYWxscyBhbmQgdGhlIHBvdGVudGlhbCBmbG93LgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHN3ZWVwLiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgYmxvY2tzIG9mIGNvZGUsIHRoZXNlIHNlY3Rpb25zIHNob3VsZCBwcm92aWRlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBsaW5lcyA0MjYwLTQzMDAsIHRoZW4gbGluZXMgNTEyMC01MTUwLCBhbmQgZmluYWxseSwgbGluZXMgNjI1MC02MzE1LiBUaG9zZSBzaG91bGQgYmUgdGhlIGhvdHNwb3RzIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyNTU6XHR9XG40MjU2Olx0XG40MjU3Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNDI1ODpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIHNldCBwcm90ZWN0aW9uXG40MjU5Olx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjQyNjA6XHRcbjQyNjE6XHRzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQyNjI6XHR7XG40MjYzOlx0XHRpbnQgcHJpb3JpdHk7XG40MjY0Olx0XHR1bnNpZ25lZCBsb25nIHJlY2xhaW1hYmxlO1xuNDI2NTpcdFxuNDI2NjpcdFx0aWYgKHNjLVx1MDAzZXByaW9yaXR5ICE9IERFRl9QUklPUklUWSB8fCBzYy1cdTAwM2Vucl90b19yZWNsYWltIFx1MDAzYyBNSU5fTFJVX0JBVENIKVxuNDI2NzpcdFx0XHRyZXR1cm47XG40MjY4Olx0XHQvKlxuNDI2OTpcdFx0ICogRGV0ZXJtaW5lIHRoZSBpbml0aWFsIHByaW9yaXR5IGJhc2VkIG9uXG40MjcwOlx0XHQgKiAodG90YWwgXHUwMDNlXHUwMDNlIHByaW9yaXR5KSAqIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gbnJfdG9fcmVjbGFpbSxcbjQyNzE6XHRcdCAqIHdoZXJlIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gaW5hY3RpdmUgLyB0b3RhbC5cbjQyNzI6XHRcdCAqL1xuNDI3MzpcdFx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xuNDI3NDpcdFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxuNDI3NTpcdFx0XHRyZWNsYWltYWJsZSAmIzQzOz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcbjQyNzY6XHRcbjQyNzc6XHRcdC8qIHJvdW5kIGRvd24gcmVjbGFpbWFibGUgYW5kIHJvdW5kIHVwIHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0gKi9cbjQyNzg6XHRcdHByaW9yaXR5ID0gZmxzX2xvbmcocmVjbGFpbWFibGUpIC0gMSAtIGZsc19sb25nKHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0gLSAxKTtcbjQyNzk6XHRcbjQyODA6XHRcdC8qXG40MjgxOlx0XHQgKiBUaGUgZXN0aW1hdGlvbiBpcyBiYXNlZCBvbiBMUlUgcGFnZXMgb25seSwgc28gY2FwIGl0IHRvIHByZXZlbnRcbjQyODI6XHRcdCAqIG92ZXJzaG9vdHMgb2Ygc2hyaW5rZXIgb2JqZWN0cyBieSBsYXJnZSBtYXJnaW5zLlxuNDI4MzpcdFx0ICovXG40Mjg0Olx0XHRzYy1cdTAwM2Vwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpO1xuNDI4NTpcdH1cbjQyODY6XHRcbjQyODc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbjQyODg6XHR7XG40Mjg5Olx0XHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgYSBjb2RpbmcgcHJvYmxlbToKCioqRXhhbWluaW5nIGBnZXRfbnJfdG9fc2NhbmAgYXQgNTEyMCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgZ2V0X25yX3RvX3NjYW5gLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBhcmVhIG9mIDUxMjAuIEkmIzM5O3ZlIGdvdCB0aGlzIG5pZ2dsaW5nIHN1c3BpY2lvbiB0aGVyZSYjMzk7cyBzb21ldGhpbmcgZ29pbmcgb24gd2l0aCB0aGF0IHBhcnRpY3VsYXIgdGhyZXNob2xkLCBvciBtYXliZSB0aGUgbG9naWMgc3Vycm91bmRpbmcgaXQuIEl0IGNvdWxkIGJlIGFuIGVkZ2UgY2FzZSBJIG1pc3NlZCwgYSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciwgb3IgZXZlbiBhbiBpbnRlcmFjdGlvbiB3aXRoIHNvbWUgb3RoZXIgY29tcG9uZW50IHRoYXQmIzM5O3MgY2F1c2luZyBwcm9ibGVtcy4gR3JhYmJpbmcgdGhlIGNvbnRleHQgYXJvdW5kIDUxMjAgZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGxlZCBpbiB0aGF0IHZpY2luaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTIwOlx0XHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcTtcbjUxMjE6XHR9XG41MTIyOlx0XG41MTIzOlx0c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjUxMjQ6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBzd2FwcGluZXNzKVxuNTEyNTpcdHtcbjUxMjY6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwgZXZpY3RhYmxlO1xuNTEyNzpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuNTEyODpcdFxuNTEyOTpcdFx0LypcbjUxMzA6XHRcdCAqIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seS5cbjUxMzE6XHRcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xuNTEzMjpcdFx0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXG41MTMzOlx0XHQgKiBubyBzd2FwKSwgcmV0dXJuIDAgdG8gc2tpcCB0aGUgc2NhbiBlbnRpcmVseSwgYXZvaWRpbmcgdXNlbGVzcyBzY2FuXG41MTM0Olx0XHQgKiB3b3JrIHdoZW4gdGhlcmUgaXMgbm90aGluZyBlbGlnaWJsZSB0byByZWNsYWltLlxuNTEzNTpcdFx0ICovXG41MTM2Olx0XHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuNTEzNzpcdFx0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG41MTM4Olx0XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxuNTEzOTpcdFx0XHRcdHJldHVybiAwO1xuNTE0MDpcdFx0fVxuNTE0MTpcdFxuNTE0MjpcdFx0ZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7XG41MTQzOlx0XG41MTQ0Olx0XHQvKiB0cnkgdG8gc2NyYXBlIGFsbCBpdHMgbWVtb3J5IGlmIHRoaXMgbWVtY2cgd2FzIGRlbGV0ZWQgKi9cbjUxNDU6XHRcdGlmICghbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKVxuNTE0NjpcdFx0XHRyZXR1cm4gZXZpY3RhYmxlO1xuNTE0NzpcdFxuNTE0ODpcdFx0bnJfdG9fc2NhbiA9IGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKG1lbWNnLCBzYywgZXZpY3RhYmxlKTtcbjUxNDk6XHRcdG5yX3RvX3NjYW4gXHUwMDNlXHUwMDNlPSBzYy1cdTAwM2Vwcmlvcml0eTtcbjUxNTA6XHRcbjUxNTE6XHRcdHJldHVybiBucl90b19zY2FuO1xuNTE1MjpcdH1cbjUxNTM6XHRcbjUxNTQ6XHRzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBSZWNsYW1hdGlvbiBMb29wKioKCk9rYXksIHNvIEkmIzM5O20gaG9taW5nIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoZSBjb2RlIGFyb3VuZCBsaW5lIDYyNjAgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJiMzOTttIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIGEgc2NlbmFyaW8gd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyByZXR1cm5pbmcgYW4gdW5leHBlY3RlZCB2YWx1ZSwgcGVyaGFwcyBsZWFkaW5nIHRvIGFuIGluZmluaXRlIGxvb3Agb3Igc29tZSBvdGhlciByZWNsYW1hdGlvbi1yZWxhdGVkIHByb2JsZW0uIEkgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgbG9naWMgd2l0aGluIGFuZCBhcm91bmQgdGhhdCBzcGVjaWZpYyBsaW5lLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGF0IHRoYXQgcG9pbnQgYW5kIG1lbnRhbGx5IHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB3aGF0IGNvbmRpdGlvbnMgY291bGQgY2F1c2UgYHNob3VsZF9jb250aW51ZV9yZWNsYWltYCB0byBiZWhhdmUgaW4gYW4gdW5leHBlY3RlZCBtYW5uZXIgaXMga2V5LiBHb3R0YSBmaWd1cmUgb3V0IHdoYXQgY291bGQgYmUgdHJpZ2dlcmluZyB0aGlzIGxvb3AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyNjA6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsXG42MjYxOlx0XHRcdFx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjI2MjpcdHtcbjYyNjM6XHRcdHVuc2lnbmVkIGxvbmcgcGFnZXNfZm9yX2NvbXBhY3Rpb247XG42MjY0Olx0XHR1bnNpZ25lZCBsb25nIGluYWN0aXZlX2xydV9wYWdlcztcbjYyNjU6XHRcdGludCB6O1xuNjI2NjpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG42MjY3Olx0XG42MjY4Olx0XHQvKiBJZiBub3QgaW4gcmVjbGFpbS9jb21wYWN0aW9uIG1vZGUsIHN0b3AgKi9cbjYyNjk6XHRcdGlmICghaW5fcmVjbGFpbV9jb21wYWN0aW9uKHNjKSlcbjYyNzA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNjI3MTpcdFxuNjI3MjpcdFx0LypcbjYyNzM6XHRcdCAqIFN0b3AgaWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55IHBhZ2VzIGZyb20gdGhlIGxhc3QgU1dBUF9DTFVTVEVSX01BWFxuNjI3NDpcdFx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLiBUaGlzIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXJcbjYyNzU6XHRcdCAqIHdpdGggdGhlIHJpc2sgcmVjbGFpbS9jb21wYWN0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGFsbG9jYXRpb24gYXR0ZW1wdFxuNjI3NjpcdFx0ICogZmFpbHMuIEluIHRoZSBwYXN0IHdlIGhhdmUgdHJpZWQgaGFyZGVyIGZvciBfX0dGUF9SRVRSWV9NQVlGQUlMXG42Mjc3Olx0XHQgKiBhbGxvY2F0aW9ucyB0aHJvdWdoIHJlcXVpcmluZyB0aGF0IHRoZSBmdWxsIExSVSBsaXN0IGhhcyBiZWVuIHNjYW5uZWRcbjYyNzg6XHRcdCAqIGZpcnN0LCBieSBhc3N1bWluZyB0aGF0IHplcm8gZGVsdGEgb2Ygc2MtXHUwMDNlbnJfc2Nhbm5lZCBtZWFucyBmdWxsIExSVVxuNjI3OTpcdFx0ICogc2NhbiwgYnV0IHRoYXQgYXBwcm94aW1hdGlvbiB3YXMgd3JvbmcsIGFuZCB0aGVyZSB3ZXJlIGNvcm5lciBjYXNlc1xuNjI4MDpcdFx0ICogd2hlcmUgYWx3YXlzIGEgbm9uLXplcm8gYW1vdW50IG9mIHBhZ2VzIHdlcmUgc2Nhbm5lZC5cbjYyODE6XHRcdCAqL1xuNjI4MjpcdFx0aWYgKCFucl9yZWNsYWltZWQpXG42MjgzOlx0XHRcdHJldHVybiBmYWxzZTtcbjYyODQ6XHRcbjYyODU6XHRcdC8qIElmIGNvbXBhY3Rpb24gd291bGQgZ28gYWhlYWQgb3IgdGhlIGFsbG9jYXRpb24gd291bGQgc3VjY2VlZCwgc3RvcCAqL1xuNjI4NjpcdFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCB6LCBzYy1cdTAwM2VyZWNsYWltX2lkeCkge1xuNjI4NzpcdFx0XHR1bnNpZ25lZCBsb25nIHdhdGVybWFyayA9IG1pbl93bWFya19wYWdlcyh6b25lKTtcbjYyODg6XHRcbjYyODk6XHRcdFx0LyogQWxsb2NhdGlvbiBjYW4gYWxyZWFkeSBzdWNjZWVkLCBub3RoaW5nIHRvIGRvICovXG42MjkwOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19vayh6b25lLCBzYy1cdTAwM2VvcmRlciwgd2F0ZXJtYXJrLFxuNjI5MTpcdFx0XHRcdFx0ICAgICAgc2MtXHUwMDNlcmVjbGFpbV9pZHgsIDApKVxuNjI5MjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjYyOTM6XHRcbjYyOTQ6XHRcdFx0aWYgKGNvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgc2MtXHUwMDNlb3JkZXIsIHdhdGVybWFyayxcbjYyOTU6XHRcdFx0XHRcdFx0c2MtXHUwMDNlcmVjbGFpbV9pZHgpKVxuNjI5NjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjYyOTc6XHRcdH1cbjYyOTg6XHRcbjYyOTk6XHRcdC8qXG42MzAwOlx0XHQgKiBJZiB3ZSBoYXZlIG5vdCByZWNsYWltZWQgZW5vdWdoIHBhZ2VzIGZvciBjb21wYWN0aW9uIGFuZCB0aGVcbjYzMDE6XHRcdCAqIGluYWN0aXZlIGxpc3RzIGFyZSBsYXJnZSBlbm91Z2gsIGNvbnRpbnVlIHJlY2xhaW1pbmdcbjYzMDI6XHRcdCAqL1xuNjMwMzpcdFx0cGFnZXNfZm9yX2NvbXBhY3Rpb24gPSBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcik7XG42MzA0Olx0XHRpbmFjdGl2ZV9scnVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xuNjMwNTpcdFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxuNjMwNjpcdFx0XHRpbmFjdGl2ZV9scnVfcGFnZXMgJiM0Mzs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XG42MzA3Olx0XG42MzA4Olx0XHRyZXR1cm4gaW5hY3RpdmVfbHJ1X3BhZ2VzIFx1MDAzZSBwYWdlc19mb3JfY29tcGFjdGlvbjtcbjYzMDk6XHR9XG42MzEwOlx0XG42MzExOlx0c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjMxMjpcdHtcbjYzMTM6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cgPSBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cDtcbjYzMTQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODIzCgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDEwNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBmb3IgVGFyZ2V0ZWQgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoaXMgbWVtb3J5IHJlY2xhbWF0aW9uIHBhdGNoLiBGaXJzdCwgSSBzZWUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGFuZCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIOKAkyB0aGV5JiMzOTtyZSB0aGUgZGlyZWN0IGZvY3VzLCBiZWluZyBpbmxpbmUgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AuIFNpbmNlIHRoZXkmIzM5O3JlIGlubGluZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZWlyIGNhbGxlcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGluIGBGb2N1c1N5bWJvbHNgLgoKVGhlIGNhbGxlcnMgb2YgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGFyZSBgZ2V0X3NjYW5fY291bnRgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgZ2V0X25yX3RvX3NjYW5gLCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLCBhbmQgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLiBGcm9tIHRoZXJlLCBgZ2V0X3NjYW5fY291bnRgIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2AsIHdoaWNoIGlzIGFsc28gY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAgdmlhIGBzaHJpbmtfbm9kZV9tZW1jZ3NgLCBhbmQgYHNldF9pbml0aWFsX3ByaW9yaXR5YCBpcyBjYWxsZWQgYnkgYHNocmlua19ub2RlYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgKmFjdHVhbGx5KiByZWxldmFudCBiYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLgoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgdG8gbGlzdCB0aGUgZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgbG9naWMsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMuIFRoZSBrZXkgaXMgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLiBTbywgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGluY2x1ZGUgZ2VuZXJpYyBhbGxvY2F0b3JzL2RlYWxsb2NhdG9ycy4KCmBzaHJpbmtfbHJ1dmVjYCBhbmQgYGdldF9zY2FuX2NvdW50YCBhcmUgb25seSBhY3RpdmUgZHVyaW5nIHBhZ2UgcmVjbGFtYXRpb24sIGFuZCB0aHVzIGFyZSBub3QgdWJpcXVpdG91cy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIGFsc28gcnVucyBkdXJpbmcgem9uZSBjaGVja3MsIGNvbXBhY3Rpb24sIGFuZCByZWNsYWltIHJldHJpZXMuIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgdGhlIGV4YWN0IGZ1bmN0aW9ucyBtb2RpZmllZCwgc28gdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgaW5jbHVkZWQuIFRoZXJlZm9yZSwgdGhlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGJlOiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBhbmQgYHNldF9pbml0aWFsX3ByaW9yaXR5YC4KCk5leHQsIHRoZSBjb25maWd1cmF0aW9ucy4gYENPTkZJR19TV0FQYCBpcyBleHBsaWNpdGx5IGluIGAjaWZkZWYgQ09ORklHX1NXQVBgLiBgQ09ORklHX01FTUNHYCBpcyBhbHNvIHVzZWQsIGFsdGhvdWdoIGl0IGNvbXBpbGVzIHdpdGhvdXQgaXQgZHVlIHRvIHN0dWJzLiBIb3dldmVyLCBlbmFibGluZyBib3RoIGFsbG93cyBmb3IgdGVzdGluZyBhbGwgY29kZSBicmFuY2hlcyBvZiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGlmIGBTV0FQYCBuZWVkcyBhbnl0aGluZyBlbHNlIOKAkyBpdCBkZXBlbmRzIG9uIGAhQVJDSF9OT19TV0FQYCBpbiBgbW0vS2NvbmZpZ2AsIHNvIHRob3NlIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncy4KClRvIHN1bW1hcml6ZSwgbXkgcmF0aW9uYWxlOiBUaGlzIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYW1hdGlvbiBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGFkZGluZyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIExSVSBsaXN0cyB1bmRlciBgR0ZQX05PSU9gIHdoZW4gdGhlIG51bWJlciBvZiBzd2FwY2FjaGVkIHBhZ2VzIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbnltb3VzIExSVSBzaXplLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgcGFnZSByZWNsYW1hdGlvbiBkZWNpc2lvbnMgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzIGFuZCBnbG9iYWwgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoZXJlZm9yZToKCi0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZQotICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFtYXRpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgYWRkaW5nIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCB0byBhdm9pZCBzY2FubmluZyBhbm9ueW1vdXMgTFJVIGxpc3RzIHVuZGVyIGBHRlBfTk9JT2Agd2hlbiB0aGUgbnVtYmVyIG9mIHN3YXBjYWNoZWQgcGFnZXMgaXMgbG93IHJlbGF0aXZlIHRvIHRoZSBhbm9ueW1vdXMgTFJVIHNpemUuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIHJlY2xhbWF0aW9uIGRlY2lzaW9ucyBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYW5kIGdsb2JhbCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWVtb3J5IHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS4KLSAgIGBGb2N1c1N5bWJvbHNgOiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLCBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgCi0gICBgRW5hYmxlQ29uZmlnc2A6IGBTV0FQYCwgYE1FTUNHYAoKTm93IEkmIzM5O20gcmVhZHkgdG8gcmV2aWV3IHRoZSByZXN1bHRzIGluIHRoZSByZXF1aXJlZCBmb3JtYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVjbGFpbWFibGVfYW5vbl9pc19sb3cmIzM0OywKICAgICYjMzQ7Y2FuX3JlY2xhaW1fYW5vbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3pvbmVfcmVjbGFpbWFibGVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2V0X2luaXRpYWxfcHJpb3JpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY2xhaW1hYmxlX2Fub25faXNfbG93JiMzNDssCiAgICAmIzM0O2Nhbl9yZWNsYWltX2Fub25fcGFnZXMmIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7LAogICAgJiMzNDt6b25lX3JlY2xhaW1hYmxlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3NldF9pbml0aWFsX3ByaW9yaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgYWRkaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgdG8gc2tpcCBzY2FubmluZyBhbm9ueW1vdXMgcGFnZXMgdW5kZXIgR0ZQX05PSU8gcmVjbGFpbSB3aGVuIHRoZSBzd2FwY2FjaGUgaXMgbG93IHJlbGF0aXZlIHRvIHRoZSBhbm9uIExSVS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgYWNyb3NzIGdsb2JhbCBhbmQgbWVtY2cgcGFnZSByZWNsYWltIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgaGV1cmlzdGljIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpbiBgbW0vdm1zY2FuLmNgIHRvIGF2b2lkIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyBkdXJpbmcgYEdGUF9OT0lPYCByZWNsYWltIHdoZW4gc3dhcGNhY2hlIHBhZ2VzIGFyZSBsb3cgcmVsYXRpdmUgdG8gdG90YWwgYW5vbnltb3VzIHBhZ2VzLiBcblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgaW50ZXJuYWwgbWVtb3J5IHJlY2xhaW0gY29udHJvbCBmbG93IGJhc2VkIG9uIG5vZGUvbHJ1dmVjIHBhZ2Ugc3RhdGUgc3RhdGlzdGljcyAoYE5SX0lOQUNUSVZFX0FOT05gLCBgTlJfQUNUSVZFX0FOT05gLCBgTlJfU1dBUENBQ0hFYCkgYW5kIHRoZSBmbGFncyBpbiBgc3RydWN0IHNjYW5fY29udHJvbGAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrcyBvciBwYWRkaW5nIGlzc3VlcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ODQ1NTNmYmQyMzQ2MjgwMjc1MDkwYWNmNzMyNzBhM2ExYjdlMjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjI1OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAyNDVmNjhjNzViMjg5Li4yMjZjYmQ5ZTQ4MzYyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMzYyLDIwICYjNDM7MzYyLDcyIEBAIHN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJcmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19TV0FQCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCWludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSBHRlBfTk9JTyByZWNsYWltZXIgY2FuIG9ubHkgcmVjbGFpbSBhbm9uIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUKJiM0MzsJICogc3dhcGNhY2hlIChhZGRpbmcgYW5vbiB0byB0aGUgc3dhcGNhY2hlIG5lZWRzIElPKS4gV2hlbiBzd2FwY2FjaGUgaXMKJiM0MzsJICogZmFyIGJlbG93IHRoZSBhbm9uIExSVSwgc2Nhbm5pbmcgYW5vbiByZWNsYWltcyBub3RoaW5nIGFuZCBvbmx5IGJ1cm5zCiYjNDM7CSAqIENQVS4gVGhlIDEvNjQgdGhyZXNob2xkIGtlZXBzIHRoaXMgdG8gdGhlIGNhc2Ugd2hlcmUgYW5vbiBpcwomIzQzOwkgKiBlZmZlY3RpdmVseSB1bnJlY2xhaW1hYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzYyB8fCAoc2MtJmd0O2dmcF9tYXNrICZhbXA7IF9fR0ZQX0lPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRklYTUU6IE1HTFJVIGRvZXNuJiMzOTt0IGZ1bGx5IHJlc3BlY3QgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGZvciB0aGUKJiM0MzsJICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfZ2VuX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnKSB7CiYjNDM7CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwomIzQzOwomIzQzOwkJYW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCQkgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pOwomIzQzOwkJc3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYW5vbl9wYWdlcyA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCQkgICAgIG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0FOT04pOwomIzQzOwkJc3dhcGNhY2hlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TV0FQQ0FDSEUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzd2FwY2FjaGUgJmx0OyAoYW5vbl9wYWdlcyAmZ3Q7Jmd0OyA2KTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19TV0FQICovCiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlpZiAobWVtY2cgPT0gTlVMTCkgewogCQkvKgotCQkgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlCi0JCSAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT8KJiM0MzsJCSAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUgc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlPwomIzQzOwkJICogQW5kIHVuZGVyIEdGUF9OT0lPLCBpcyB0aGVyZSBlbm91Z2ggc3dhcGNhY2hlZCBhbm9uIHRvIG1ha2UKJiM0MzsJCSAqIHNjYW5uaW5nIGFub24gd29ydGh3aGlsZT8KIAkJICovCi0JCWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZndDsgMCkKJiM0MzsJCWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZndDsgMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSkKIAkJCXJldHVybiB0cnVlOwogCX0gZWxzZSB7Ci0JCS8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi8KLQkJaWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpICZndDsgMCkKJiM0MzsJCS8qCiYjNDM7CQkgKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQsIGFuZCB1bmRlciBHRlBfTk9JTyBkb2VzCiYjNDM7CQkgKiBpdCBoYXZlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZSBzY2FubmluZyB3b3J0aHdoaWxlPwomIzQzOwkJICovCiYjNDM7CQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIGZvciBLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGVjaWRlIGlmIHRoaXMga2VybmVsIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgdGhpcyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uLiBVbmRlciBgQ09ORklHX1NXQVBgIGl0IGxvb2tzIGxpa2UgYSBuZXcgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHNjYW5uaW5nIGFub24gcGFnZXMgZHVyaW5nIHJlY2xhaW0sIHNwZWNpZmljYWxseSB3aGVuIHN3YXBjYWNoZSBpcyBsb3cgYW5kIHdlJiMzOTtyZSAqbm90KiBhbGxvd2VkIEkvTywgb3IgaWYgTFJVIGdlbiBpcyBlbmFibGVkLiBJdCYjMzk7cyBncmFiYmluZyBwYWdlIHN0YXRzIOKAkyBgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGFuZCBgTlJfU1dBUENBQ0hFYCDigJMgZnJvbSBgbHJ1dmVjX3BhZ2Vfc3RhdGVgIGFuZCBgbm9kZV9wYWdlX3N0YXRlYCwgdGhlbiBjb21wYXJpbmcgYHN3YXBjYWNoZWAgdG8gYSBmcmFjdGlvbiBvZiBgYW5vbl9wYWdlc2AuIEl0JiMzOTtzIHVzZWQgaW5zaWRlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYC4KCkFscmlnaHQsIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyAqdW5saWtlbHkqIHRvIGJlIGEgS01TQU4gY2FuZGlkYXRlLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOiBEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55IGRhdGEgdGhhdCBlbmRzIHVwIGluIHVzZXIgc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBJdCYjMzk7cyBhbGwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWxzLiBJcyBpdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vcGUuIEl0ICpkb2VzKiB1c2Ugc29tZSB2YXJpYWJsZXMgKGBzY2AsIGBtZW1jZ2AsIGBuaWRgLCBgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgKSwgYnV0IHRoZSBhcmd1bWVudHMgYHNjYCwgYG1lbWNnYCwgYG5pZGAgYXJlIHN0YW5kYXJkIHBhcmFtZXRlcnMsIHdlbGwtZGVmaW5lZCB3aXRoaW4gdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLiBBbmQgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYCBhcmUgbG9hZGVkIGZyb20gZXhpc3RpbmcgcGFnZSBzdGF0ZSBzdHJ1Y3R1cmVzLiBObyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBEb2VzIGl0IHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hpbmc/IE5vLiBJdCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcy4gSXQmIzM5O3MgcHVyZSByZWNsYWltIGxvZ2ljLCBhIGhldXJpc3RpYyBmb3Igb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBub3QgYWx0ZXJpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucywgZWl0aGVyLgoKVGhpcyBpcyBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gYmUgcmVsYXRlZCB0byByZWNsYWltIGxvZ2ljIGVycm9ycywgd2hpY2ggbWlnaHQgY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgcG90ZW50aWFsIE5VTEwgZGVyZWYgLyBsb2NrIGlzc3VlcywgYnV0IHRoZXNlIGFyZSBzdGFuZGFyZCBidWdzLCBub3QgcmVhbGx5IHRoZSBraW5kIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFdlIHdhbnQgdG8gYmUgc3VyZSB0aG91Z2gsIGxldCYjMzk7cyB2ZXJpZnkgd2hlcmUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGlzIGNhbGxlZCwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyB3ZWlyZCBoYXBwZW5pbmcgb3V0c2lkZSBvdXIgcHVydmlldy4gSXQmIzM5O3MgYWxyZWFkeSB1c2VkIGludGVybmFsbHksIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBpdCBpc24mIzM5O3QgYmVpbmcgdXNlZCBpbiBzb21lIHN0cmFuZ2Ugd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MzY2PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtMzgyLVx0Lypcbm1tL3Ztc2Nhbi5jOjM4MzpcdCAqIEZJWE1FOiBNR0xSVSBkb2VzbiYjMzk7dCBmdWxseSByZXNwZWN0IGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBmb3IgdGhlXG5tbS92bXNjYW4uYy0zODQtXHQgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93LlxuLS1cbm1tL3Ztc2Nhbi5jPTQwND1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQxMC1cbm1tL3Ztc2Nhbi5jOjQxMTpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy00MTItXHRcdFx0XHRcdCAgaW50IG5pZCxcbi0tXG5tbS92bXNjYW4uYz00NDc9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1Mi1cdFx0em9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NDUzOlx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgem9uZV90b19uaWQoem9uZSksIE5VTEwpKVxubW0vdm1zY2FuLmMtNDU0LVx0XHRuciAmIzQzOz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfSU5BQ1RJVkVfQU5PTikgJiM0Mztcbi0tXG5tbS92bXNjYW4uYz0yNjI3PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMjY0Ni1cdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmM6MjY0NzpcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbm1tL3Ztc2Nhbi5jLTI2NDgtXHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4tLVxubW0vdm1zY2FuLmMtMjY1NS1cdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cbm1tL3Ztc2Nhbi5jOjI2NTY6XHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbm1tL3Ztc2Nhbi5jLTI2NTctXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcbi0tXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNzMtXHRyZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XG5tbS92bXNjYW4uYzo0Mjc0Olx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxubW0vdm1zY2FuLmMtNDI3NS1cdFx0cmVjbGFpbWFibGUgJiM0Mzs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XG4tLVxubW0vdm1zY2FuLmM9NTEyMz1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUxMzctXHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jOjUxMzg6XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxubW0vdm1zY2FuLmMtNTEzOS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5tbS92bXNjYW4uYz02MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYzMDQtXHRpbmFjdGl2ZV9scnVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NjMwNTpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTYzMDYtXHRcdGluYWN0aXZlX2xydV9wYWdlcyAmIzQzOz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNAoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IFVubmVjZXNzYXJ5IEhlcmUqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoLCBhbmQgaG9uZXN0bHksIGl0JiMzOTtzIHByZXR0eSBjbGVhbi4gVGhlIGNoYW5nZXMgYXJlIGFsbCBmb2N1c2VkIG9uIG9wdGltaXppbmcgcGFnZSByZWNsYWltIGhldXJpc3RpY3MsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgcGFnZXMgYW5kIGxvdyBzd2FwY2FjaGUgc2NlbmFyaW9zIHVuZGVyIGBHRlBfTk9JT2AuIE5vIG1ham9yIHJlZCBmbGFncyBhcmUganVtcGluZyBvdXQgYXQgbWUuCgpJJiMzOTttIHNlZWluZyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMsIHdoaWNoIGlzIGEgaHVnZSByZWxpZWYgZnJvbSBhIGNvbXBsZXhpdHkgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBmYW50YXN0aWMg4oCTIG5vIHJpc2sgb2YgYGNvcHlfdG9fdXNlcmAgaXNzdWVzLCBpbmZvIGxlYWtzLCBvciBhbnkgcG90ZW50aWFsIHBhZGRpbmctcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMuIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIG9yIHByb3BhZ2F0aW9uIGlzc3Vlcy4gRXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGJhc2VkIG9uIGNhbGN1bGF0aW9ucyB1c2luZyBleGlzdGluZyBub2RlIGFuZCBscnV2ZWMgc3RhdGlzdGljcywgYW5kIHRoZSBgc2Nhbl9jb250cm9sYCBwb2ludGVycyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgdGhlIGxhY2sgb2YgYW55IG9idmlvdXMgZGF0YS1yZWxhdGVkIGdvdGNoYXMsIEtNU0FOIHNlZW1zIGVudGlyZWx5IHVubmVjZXNzYXJ5IGhlcmUuIEkmIzM5O2QgZXhwZWN0IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyB0byBiZSBzdWZmaWNpZW50LiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LgoKQWxyaWdodCwgbGV0JiMzOTtzIGdvIGFoZWFkIGFuZCB0cmlnZ2VyIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBUaGlzIHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgaGV1cmlzdGljIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpbiBgbW0vdm1zY2FuLmNgIHRvIGF2b2lkIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyBkdXJpbmcgYEdGUF9OT0lPYCByZWNsYWltIHdoZW4gc3dhcGNhY2hlIHBhZ2VzIGFyZSBsb3cgcmVsYXRpdmUgdG8gdG90YWwgYW5vbnltb3VzIHBhZ2VzLiBcblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgaW50ZXJuYWwgbWVtb3J5IHJlY2xhaW0gY29udHJvbCBmbG93IGJhc2VkIG9uIG5vZGUvbHJ1dmVjIHBhZ2Ugc3RhdGUgc3RhdGlzdGljcyAoYE5SX0lOQUNUSVZFX0FOT05gLCBgTlJfQUNUSVZFX0FOT05gLCBgTlJfU1dBUENBQ0hFYCkgYW5kIHRoZSBmbGFncyBpbiBgc3RydWN0IHNjYW5fY29udHJvbGAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrcyBvciBwYWRkaW5nIGlzc3VlcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBpbnRlcm5hbCBtZW1vcnkgcmVjbGFpbSBjb250cm9sIGZsb3cgYmFzZWQgb24gbm9kZS9scnV2ZWMgcGFnZSBzdGF0ZSBzdGF0aXN0aWNzIChgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGBOUl9TV0FQQ0FDSEVgKSBhbmQgdGhlIGZsYWdzIGluIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWtzIG9yIHBhZGRpbmcgaXNzdWVzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNToyNS40OTMyODIyMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc3MjAwNTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2V0X2luaXRpYWxfcHJpb3JpdHlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIGludGVybmFsIG1lbW9yeSByZWNsYWltIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBub2RlL2xydXZlYyBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgKGBOUl9JTkFDVElWRV9BTk9OYCwgYE5SX0FDVElWRV9BTk9OYCwgYE5SX1NXQVBDQUNIRWApIGFuZCB0aGUgZmxhZ3MgaW4gYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVha3Mgb3IgcGFkZGluZyBpc3N1ZXMpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MjUuNDkzMjg2Mzk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczNTQyMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjI1OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yMjZjYmQ5ZTQ4MzYyIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMzYyLDIwICszNjIsNzIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4gXFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX1NXQVBcXG4rc3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0aW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuK3tcXG4rXFx0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcbitcXHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgR0ZQX05PSU8gcmVjbGFpbWVyIGNhbiBvbmx5IHJlY2xhaW0gYW5vbiB0aGF0IGlzIGFscmVhZHkgaW4gdGhlXFxuK1xcdCAqIHN3YXBjYWNoZSAoYWRkaW5nIGFub24gdG8gdGhlIHN3YXBjYWNoZSBuZWVkcyBJTykuIFdoZW4gc3dhcGNhY2hlIGlzXFxuK1xcdCAqIGZhciBiZWxvdyB0aGUgYW5vbiBMUlUsIHNjYW5uaW5nIGFub24gcmVjbGFpbXMgbm90aGluZyBhbmQgb25seSBidXJuc1xcbitcXHQgKiBDUFUuIFRoZSAxLzY0IHRocmVzaG9sZCBrZWVwcyB0aGlzIHRvIHRoZSBjYXNlIHdoZXJlIGFub24gaXNcXG4rXFx0ICogZWZmZWN0aXZlbHkgdW5yZWNsYWltYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghc2MgfHwgKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRklYTUU6IE1HTFJVIGRvZXNuJ3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxcbitcXHQgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAobWVtY2cpIHtcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4rXFxuK1xcdFxcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4rXFx0XFx0XFx0ICAgICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKTtcXG4rXFx0XFx0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSArXFxuK1xcdFxcdFxcdCAgICAgbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfQU5PTik7XFxuK1xcdFxcdHN3YXBjYWNoZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfU1dBUENBQ0hFKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHN3YXBjYWNoZSBcXHUwMDNjIChhbm9uX3BhZ2VzIFxcdTAwM2VcXHUwMDNlIDYpO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xcbitcXG4gc3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0aWYgKG1lbWNnID09IE5VTEwpIHtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxcbi1cXHRcXHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XFxuK1xcdFxcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUgc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbitcXHRcXHQgKiBBbmQgdW5kZXIgR0ZQX05PSU8sIGlzIHRoZXJlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZVxcbitcXHRcXHQgKiBzY2FubmluZyBhbm9uIHdvcnRod2hpbGU/XFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDApXFxuK1xcdFxcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cXG4tXFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMClcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0LCBhbmQgdW5kZXIgR0ZQX05PSU8gZG9lc1xcbitcXHRcXHQgKiBpdCBoYXZlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZSBzY2FubmluZyB3b3J0aHdoaWxlP1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjI2Ljg2NzQ4NDY0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTIyOTQ5NjAwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWNsYWltYWJsZV9hbm9uX2lzX2xvd1wiLFxuICAgIFwiY2FuX3JlY2xhaW1fYW5vbl9wYWdlc1wiLFxuICAgIFwiZ2V0X3NjYW5fY291bnRcIixcbiAgICBcInNocmlua19scnV2ZWNcIixcbiAgICBcInpvbmVfcmVjbGFpbWFibGVfcGFnZXNcIixcbiAgICBcInNldF9pbml0aWFsX3ByaW9yaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiOTg0NTUzZmJkMjM0NjI4MDI3NTA5MGFjZjczMjcwYTNhMWI3ZTI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzoyNToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLjIyNmNiZDllNDgzNjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0zNjIsMjAgKzM2Miw3MiBAQCBzdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX1NXQVBcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG4rXHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbitcbitcdC8qXG4rXHQgKiBBIEdGUF9OT0lPIHJlY2xhaW1lciBjYW4gb25seSByZWNsYWltIGFub24gdGhhdCBpcyBhbHJlYWR5IGluIHRoZVxuK1x0ICogc3dhcGNhY2hlIChhZGRpbmcgYW5vbiB0byB0aGUgc3dhcGNhY2hlIG5lZWRzIElPKS4gV2hlbiBzd2FwY2FjaGUgaXNcbitcdCAqIGZhciBiZWxvdyB0aGUgYW5vbiBMUlUsIHNjYW5uaW5nIGFub24gcmVjbGFpbXMgbm90aGluZyBhbmQgb25seSBidXJuc1xuK1x0ICogQ1BVLiBUaGUgMS82NCB0aHJlc2hvbGQga2VlcHMgdGhpcyB0byB0aGUgY2FzZSB3aGVyZSBhbm9uIGlzXG4rXHQgKiBlZmZlY3RpdmVseSB1bnJlY2xhaW1hYmxlLlxuK1x0ICovXG4rXHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogRklYTUU6IE1HTFJVIGRvZXNuJ3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxuK1x0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cbitcdCAqL1xuK1x0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAobWVtY2cpIHtcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbitcbitcdFx0YW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgK1xuK1x0XHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4rXHRcdHN3YXBjYWNoZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfU1dBUENBQ0hFKTtcbitcdH0gZWxzZSB7XG4rXHRcdGFub25fcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pICtcbitcdFx0XHQgICAgIG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0FOT04pO1xuK1x0XHRzd2FwY2FjaGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX1NXQVBDQUNIRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyAoYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0aW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdGlmIChtZW1jZyA9PSBOVUxMKSB7XG4gXHRcdC8qXG4tXHRcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmVcbi1cdFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xuK1x0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbitcdFx0ICogQW5kIHVuZGVyIEdGUF9OT0lPLCBpcyB0aGVyZSBlbm91Z2ggc3dhcGNhY2hlZCBhbm9uIHRvIG1ha2VcbitcdFx0ICogc2Nhbm5pbmcgYW5vbiB3b3J0aHdoaWxlP1xuIFx0XHQgKi9cbi1cdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDApXG4rXHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4tXHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbi1cdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwKVxuK1x0XHQvKlxuK1x0XHQgKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQsIGFuZCB1bmRlciBHRlBfTk9JTyBkb2VzXG4rXHRcdCAqIGl0IGhhdmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlIHNjYW5uaW5nIHdvcnRod2hpbGU/XG4rXHRcdCAqL1xuK1x0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MjYuODY3NDg2MjU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwNjgwMjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWTXNjYW4gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQSBwYXRjaCB0YXJnZXRpbmcgYG1tL3Ztc2Nhbi5jYCDigJMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSBpdCdzIGFkZGluZyBzb21lIG5ldyBsb2dpYyBhcm91bmQgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbS4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uLCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvciBvZiB0aGUgZGlyZWN0aW9uIHRoaXMgcGF0Y2ggaXMgdGFraW5nLiBJdCBzZWVtcyB0byBiZSBpbnRlZ3JhdGVkIHdpdGggYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAsIHdoaWNoIGlzIHRoZSBnYXRla2VlcGVyIGZvciBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9ucy4gVGhlIGxvZ2ljIHVwZGF0ZSBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgbm93IGNoZWNraW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBuZXcgZnVuY3Rpb24sIGVzc2VudGlhbGx5IHNheWluZyBcImlmIGFub255bW91cyByZWNsYWltIGlzbid0IGNvbnNpZGVyZWQgJ2xvdycgYWNjb3JkaW5nIHRvIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCwgdGhlbiB3ZSAqY2FuKiByZWNsYWltLlwiIE1ha2VzIHNlbnNlLiBUaGUgYCNpZmRlZiBDT05GSUdfU1dBUGAgZ3VhcmQgaXMgY3J1Y2lhbDsgaXQncyBjb25maXJtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBzd2FwcGluZyBhbmQgdGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbSwgc28gYW5vbnltb3VzIHBhZ2VzIGFyZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3Igc3dhcHBpbmcuIEkgd2FudCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IHdpdGhpbiBgbW0vdm1zY2FuLmNgIG5lYXIgYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWA7IHRoaXMgZ2l2ZXMgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBjaGFuZ2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgcmVjbGFpbSBzdHJhdGVneS4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MzEuNDc0MjkyMTIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjE5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhbl9yZWNsYWltX2Fub25fcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MzY2PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy0zODItXFx0LypcXG5tbS92bXNjYW4uYzozODM6XFx0ICogRklYTUU6IE1HTFJVIGRvZXNuJ3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxcbm1tL3Ztc2Nhbi5jLTM4NC1cXHQgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93Llxcbi0tXFxubW0vdm1zY2FuLmM9NDA0PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00MTAtXFxubW0vdm1zY2FuLmM6NDExOnN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy00MTItXFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbi0tXFxubW0vdm1zY2FuLmM9NDQ3PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1Mi1cXHRcXHR6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfWk9ORV9BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NDUzOlxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHpvbmVfdG9fbmlkKHpvbmUpLCBOVUxMKSlcXG5tbS92bXNjYW4uYy00NTQtXFx0XFx0bnIgKz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfSU5BQ1RJVkVfQU5PTikgK1xcbi0tXFxubW0vdm1zY2FuLmM9MjYyNz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjY0Ni1cXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jOjI2NDc6XFx0XFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxubW0vdm1zY2FuLmMtMjY0OC1cXHRcXHRcXHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2NTUtXFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xcbm1tL3Ztc2Nhbi5jOjI2NTY6XFx0aWYgKCFzYy1cXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG5tbS92bXNjYW4uYy0yNjU3LVxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyNjE9c3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjczLVxcdHJlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcXG5tbS92bXNjYW4uYzo0Mjc0OlxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpXFxubW0vdm1zY2FuLmMtNDI3NS1cXHRcXHRyZWNsYWltYWJsZSArPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xcbi0tXFxubW0vdm1zY2FuLmM9NTEyMz1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTEzNy1cXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jOjUxMzg6XFx0XFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUxMzktXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS92bXNjYW4uYz02MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjMwNC1cXHRpbmFjdGl2ZV9scnVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jOjYzMDU6XFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MzA2LVxcdFxcdGluYWN0aXZlX2xydV9wYWdlcyArPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTozMS41MTg5MTQxNzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDA1MDk0ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBDb25maXJtYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFnZSByZWNsYWltIGxvZ2ljLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBBcHBseWluZyBteSBtZW50YWwgY2hlY2tsaXN0IGJhc2VkIG9uIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIHRoZSBcIkNvcmUgU3Vic3lzdGVtc1wiIGNyaXRlcmlhIGRlZmluaXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4gQW55IG1vZGlmaWNhdGlvbiB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGlzLCBieSBkZWZpbml0aW9uLCBzaWduaWZpY2FudC4gSSdtIGFscmVhZHkgaW5jbGluZWQgdG8gZ2l2ZSB0aGlzIGEgcG9zaXRpdmUgc2NvcmUgZm9yIFdvcnRoRnV6emluZy4gVGhlIFwiUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzXCIgY3JpdGVyaWEgaXMgYWxzbyBjbGVhcmx5IG1ldC5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBJIHNlZSBgQ09ORklHX1NXQVBgIGJlaW5nIGAjaWZkZWZgJ2QuIFN3YXAgaW50ZXJhY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBzY3J1dGluaXplLiBBbmQgdGhpcyBtZW50aW9ucyBgbWVtY2dgISBJIHNlZSB0aGUgYG1lbWNnYCB2YXJpYWJsZSBwYXNzZWQgYW5kIGBtZW1fY2dyb3VwX2xydXZlY2AsIGBscnV2ZWNfcGFnZV9zdGF0ZWAsIGFuZCBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AgY2FsbGVkLiBUaGlzIGlzIHZlcnkgZ29vZCwgaW5kaWNhdGluZyBsaWtlbHkgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1DR19TV0FQYCBkZXBlbmRlbmNpZXMsIGFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb2ludHMgb2YgcG90ZW50aWFsIGludGVyZXN0IGFuZCBpbnRlcmFjdGlvbi4gSSBzaG91bGQgY2hlY2sgaG93IHRoZXNlIG1lbWNnIGFuZCBzd2FwIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCBpbnRlZ3JhdGVkIGJlY2F1c2UgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjM1LjkyNDAxMTE2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5NTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MzUuOTgwNzEyNDg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0Mzk0MTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIGZpbGU6IGBpbml0L0tjb25maWdgLiBJdCdzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCBmb3IgbXVjaCBvZiB0aGUgZ2VuZXJhbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSWYgaXQncyBub3QgdGhlcmUsIG9yIGlmIHRoZSBkZWZpbml0aW9uIGlzIG1vcmUgc3BlY2lmaWMgdGhhbiBhIHRvcCBsZXZlbCBjb25maWcsIHRoZW4gSSdsbCBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1tL0tjb25maWdgLiBHaXZlbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgKm1lbW9yeSogY29udHJvbCBncm91cHMsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0ncyBLY29uZmlnIGZpbGUgc2VlbXMgbGlrZSB0aGUgbmV4dCBtb3N0IGxpa2VseSBzcG90LiBJdCdzIHJlYWxseSBhYm91dCBxdWlja2x5IG5hcnJvd2luZyBkb3duIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIHRvIGZpbmQgdGhlIGNvcnJlY3QgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczMiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjM3LjgyNDY1NjIxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE5MDI3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTozOS40NDM2ODk2MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTgyMzQyODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBbm9ueW1vdXMgUGFnZSBSZWNsYWltIExvZ2ljKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcmVjbGFpbSBsb2dpYy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIGFuZCBzeW1ib2xzIGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBhbm9ueW1vdXMgcGFnZXMgYXJlIGFjdHVhbGx5IGJlaW5nIHJlY2xhaW1lZC5cblxuUmlnaHQsIHNvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgYm90aCBgc3RhdGljIGlubGluZWAuIFRoYXQncyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uLiBOb3csIGJlY2F1c2UgdGhleSdyZSBpbmxpbmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgKm5vbi1zdGF0aWMqIGFuZCAqbm9uLWlubGluZSogZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRoYXQgdXNlIHRoZW0g4oCTIHRob3NlIGFyZSB0aGUgYWN0dWFsIHdvcmtob3JzZXMuXG5cbkxldCBtZSBsaXN0IG91dCB0aGUgY2FsbGVycyBvZiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2A6IEkgc2VlIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCAodGhhdCdzIGltcG9ydGFudCksIGBnZXRfc2Nhbl9jb3VudGAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAsIGBnZXRfbnJfdG9fc2NhbmAsIGFuZCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLiBIbW0sIGEgbWl4IG9mIHN0YXRpYyBhbmQgaW5saW5lIGZ1bmN0aW9ucy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHJlY2xhaW1pbmcsIGJ1dCB0aGUgb3RoZXJzIGFyZSBsaWtlbHkga2V5IGluIHRoZSBzY2FuIGFuZCBzaHJpbmtpbmcgcHJvY2Vzcy5cblxuTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zICphY3R1YWxseSogZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmc/IEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBjb2RlLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBjb3JlIHJlY2xhaW0gbG9naWMgaXMgZ29pbmcgdG8gYmUgd2l0aGluIGEgc3BlY2lmaWMgc2VjdGlvbiwgcGVyaGFwcyBhcm91bmQgdGhlIDI2MDAtMjgwMCBhbmQgNDIwMC00NDAwIGxpbmUgcmFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIFRpbWUgdG8gZ2V0IHRoZSBnb2dnbGVzIG9uIGFuZCBleGFtaW5lIHRob3NlIGFyZWFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjQ0LjYyNjAzNTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2MjU6XFx0ICogbnJbMl0gPSBmaWxlIGluYWN0aXZlIGZvbGlvcyB0byBzY2FuOyBuclszXSA9IGZpbGUgYWN0aXZlIGZvbGlvcyB0byBzY2FuXFxuMjYyNjpcXHQgKi9cXG4yNjI3OlxcdHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuMjYyODpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpucilcXG4yNjI5OlxcdHtcXG4yNjMwOlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4yNjMxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbjI2MzI6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XFxuMjYzMzpcXHRcXHR1NjQgZnJhY3Rpb25bQU5PTl9BTkRfRklMRV07XFxuMjYzNDpcXHRcXHR1NjQgZGVub21pbmF0b3IgPSAwO1xcdC8qIGdjYyAqL1xcbjI2MzU6XFx0XFx0ZW51bSBzY2FuX2JhbGFuY2Ugc2Nhbl9iYWxhbmNlO1xcbjI2MzY6XFx0XFx0ZW51bSBscnVfbGlzdCBscnU7XFxuMjYzNzpcXHRcXG4yNjM4OlxcdFxcdC8qXFxuMjYzOTpcXHRcXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXFxuMjY0MDpcXHRcXHQgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc29cXG4yNjQxOlxcdFxcdCAqIHdhcm4gaWYgaXQgc2hvd3MgdXAgZWxzZXdoZXJlLiBXaGVuIGFub24gY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLlxcbjI2NDI6XFx0XFx0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXFxuMjY0MzpcXHRcXHQgKiB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLlxcbjI2NDQ6XFx0XFx0ICovXFxuMjY0NTpcXHRcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbjI2NDY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG4yNjQ3OlxcdFxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSkge1xcbjI2NDg6XFx0XFx0XFx0XFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XFxuMjY0OTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjY1MDpcXHRcXHRcXHR9XFxuMjY1MTpcXHRcXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XFxuMjY1MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjUzOlxcdFxcdH1cXG4yNjU0OlxcdFxcbjI2NTU6XFx0XFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xcbjI2NTY6XFx0XFx0aWYgKCFzYy1cXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG4yNjU3OlxcdFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG4yNjU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NTk6XFx0XFx0fVxcbjI2NjA6XFx0XFxuMjY2MTpcXHRcXHQvKlxcbjI2NjI6XFx0XFx0ICogR2xvYmFsIHJlY2xhaW0gd2lsbCBzd2FwIHRvIHByZXZlbnQgT09NIGV2ZW4gd2l0aCBub1xcbjI2NjM6XFx0XFx0ICogc3dhcHBpbmVzcywgYnV0IG1lbWNnIHVzZXJzIHdhbnQgdG8gdXNlIHRoaXMga25vYiB0b1xcbjI2NjQ6XFx0XFx0ICogZGlzYWJsZSBzd2FwcGluZyBmb3IgaW5kaXZpZHVhbCBncm91cHMgY29tcGxldGVseSB3aGVuXFxuMjY2NTpcXHRcXHQgKiB1c2luZyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIncyBzd2FwIGxpbWl0IGZlYXR1cmUgd291bGQgYmVcXG4yNjY2OlxcdFxcdCAqIHRvbyBleHBlbnNpdmUuXFxuMjY2NzpcXHRcXHQgKi9cXG4yNjY4OlxcdFxcdGlmIChjZ3JvdXBfcmVjbGFpbShzYykgXFx1MDAyNlxcdTAwMjYgIXN3YXBwaW5lc3MpIHtcXG4yNjY5OlxcdFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG4yNjcwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NzE6XFx0XFx0fVxcbjI2NzI6XFx0XFxuMjY3MzpcXHRcXHQvKlxcbjI2NzQ6XFx0XFx0ICogRG8gbm90IGFwcGx5IGFueSBwcmVzc3VyZSBiYWxhbmNpbmcgY2xldmVybmVzcyB3aGVuIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo0NC42MjYzMjI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk5MjA3MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZ2V0X3NjYW5fY291bnRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIGBnZXRfc2Nhbl9jb3VudGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGdpdmVzIG1lIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0J3Mgb3BlcmF0aW5nIG9uLCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb2RlIHBhdGhzIHRoYXQgKnJlbHkqIG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgZm91bmRhdGlvbmFsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgb3IgdW5kZXJzdGFuZGluZyBob3cgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbiB3b3VsZCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLiBJJ20gZXNzZW50aWFsbHkgcGVyZm9ybWluZyBhIHF1aWNrIHN0YXRpYyBhbmFseXNpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbidzIGluZmx1ZW5jZSwgbG9va2luZyBmb3IgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCBhbnkgYXJndW1lbnRzIGJlaW5nIHBhc3NlZC4gVGltZSB0byBodW50IGRvd24gdGhvc2UgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6NDYuNzI1NTMyMjgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY4MzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc2Nhbl9jb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjYtICovXFxubW0vdm1zY2FuLmM6MjYyNzpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI2MjgtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuLS1cXG5tbS92bXNjYW4uYz02MTIwPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMzgtXFxubW0vdm1zY2FuLmM6NjEzOTpcXHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XFxubW0vdm1zY2FuLmMtNjE0MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxODEtXFx0XFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXFxubW0vdm1zY2FuLmM6NjE4MjpcXHRcXHQgKiBwcm9wb3J0aW9uYWxseSB3aGF0IHdhcyByZXF1ZXN0ZWQgYnkgZ2V0X3NjYW5fY291bnQoKS4gV2VcXG5tbS92bXNjYW4uYy02MTgzLVxcdFxcdCAqIHN0b3AgcmVjbGFpbWluZyBvbmUgTFJVIGFuZCByZWR1Y2UgdGhlIGFtb3VudCBzY2FubmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo0Ni43NzQyMTk0NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU4NzkzMjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgUmVsZXZhbnQgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhZ2UgcmVjbGFpbSBhbmQgbWVtb3J5IGNncm91cHMuIFRoZSBpbml0aWFsIHRob3VnaHQgdHJhaW4gc3RhcnRlZCB3aXRoIGZvbGxvd2luZyB0aGUgY2FsbCBjaGFpbjogYHNocmlua19scnV2ZWNgIC1cdTAwM2UgYHNocmlua19ub2RlX21lbWNnc2AgLVx1MDAzZSBgc2hyaW5rX25vZGVgIC1cdTAwM2UgYHNocmlua196b25lc2AgLVx1MDAzZSBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIC8gYGtzd2FwZF9zaHJpbmtfbm9kZWAuIEkgYWxzbyBrbm93IGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCBpcyByZWxldmFudC4gU28gSSBoYWQgYSBxdWljayBtZW50YWwgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2hlY2s6IGBzaHJpbmtfbHJ1dmVjYCwgYHNocmlua19ub2RlYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBrc3dhcGRfc2hyaW5rX25vZGVgLCBhbmQgYHNocmlua19wYWdlX2xpc3RgLlxuXG5CdXQsIHdhaXQuLi4gdGhlcmUncyB0aGF0IGNydWNpYWwgZ3VpZGVsaW5lIGZvciB0aGUgZnV6emluZyBhbmFseXNpcyBJIG5lZWQgdG8gcmVtZW1iZXIhIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLlwiIFJpZ2h0LCBubyBnZW5lcmljIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gTGlzdGluZyB0aGVtIGp1c3QgY3JlYXRlcyBub2lzZS4gSSBuZWVkIHRvIGZvY3VzIG9uICpzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljKiBhbmQgZW50cnlwb2ludHMuIElmIHRoZXkgYXJlIGlubGluZWQsIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGNhbGxlcnMuXG5cblNvLCB0aGUgcGxhbiBzaGlmdHMuIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGNvbW1vbiBsb3cgbGV2ZWwgbWV0aG9kcyBhbmQgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgYWN0dWFsIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLiBMZXQncyBkaWcgZGVlcGVyIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgZmlndXJlIG91dCB3aGF0J3MgaW5saW5lZCBhbmQgd2hhdCBpc24ndCwgYW5kIGFsc28gY2hlY2sgb3RoZXIgbm9uLWlubGluZSBmdW5jdGlvbnMgaW4gdGhlcmUuIEknbGwgZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2hyaW5rX2xydXZlY2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfbnJfdG9fc2NhbmAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgbm90IGlubGluZWQgb3Igc3RhdGljLlxuXG5GaXJzdCwgSSBjaGVja2VkIGBnZXRfc2Nhbl9jb3VudGAuIEl0J3Mgc3RhdGljIGluIGBtbS92bXNjYW4uY2AsIHNvIEknbGwgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzLiBUaGVuIEkgY2hlY2tlZCBpZiBgc2hyaW5rX2xydXZlY2AgaXMgc3RhdGljLiBZZXMgaXQgaXMsIHNvIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gVGhlbiBJJ2xsIGNoZWNrIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCB0byB2ZXJpZnkgaWYgaXQncyBleHBvcnRlZCBvciBnbG9iYWwuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBwaWVjZXMgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo1Mi4zNjIxNTQxMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODkzODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfcmVjbGFpbWFibGVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0yNDc5PWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNTAyLVxcdFxcdCAqL1xcbm1tL2NvbXBhY3Rpb24uYzoyNTAzOlxcdFxcdGF2YWlsYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgLyBvcmRlcjtcXG5tbS9jb21wYWN0aW9uLmMtMjUwNC1cXHRcXHRhdmFpbGFibGUgKz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD01OT12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTYxLS8qIG1tL3Ztc2Nhbi5jICovXFxubW0vaW50ZXJuYWwuaDo2Mjp1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbm1tL2ludGVybmFsLmgtNjMtdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDYyMj1zaG91bGRfcmVjbGFpbV9yZXRyeShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDY2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NDY2MjpcXHRcXHRhdmFpbGFibGUgPSByZWNsYWltYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7XFxubW0vcGFnZV9hbGxvYy5jLTQ2NjMtXFx0XFx0YXZhaWxhYmxlICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxMT1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00NDYtICovXFxubW0vdm1zY2FuLmM6NDQ3OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5tbS92bXNjYW4uYy00NDgte1xcbi0tXFxubW0vdm1zY2FuLmM9NTU1PXN0YXRpYyBib29sIHNraXBfdGhyb3R0bGVfbm9wcm9ncmVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNTcyLVxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgTUFYX05SX1pPTkVTIC0gMSkge1xcbm1tL3Ztc2Nhbi5jOjU3MzpcXHRcXHRyZWNsYWltYWJsZSArPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpO1xcbm1tL3Ztc2Nhbi5jLTU3NC1cXHRcXHR3cml0ZV9wZW5kaW5nICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxcbi0tXFxubW0vdm1zY2FuLmM9Njc3NT1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjc4Ni1cXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIFpPTkVfTk9STUFMKSB7XFxubW0vdm1zY2FuLmM6Njc4NzpcXHRcXHRpZiAoIXpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgXFx1MDAyNlxcdTAwMjYgem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpKVxcbm1tL3Ztc2Nhbi5jLTY3ODgtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjUyLjQxMDA1MDc5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk3ODQ1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgbW0vdm1zY2FuLmNgIGZvciBBbm9ueW1vdXMgUGFnZSBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgYW5vbnltb3VzIHBhZ2UgcmVjbGFtYXRpb24gYnVzaW5lc3MuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgdXNlZCwgb3Igd2hlcmUgcmVsYXRlZCBmdW5jdGlvbnMgY29tZSBpbnRvIHBsYXkgd2l0aGluIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEknbSB0aGlua2luZywgaW5zdGVhZCBvZiBqdXN0IHRoZSBpbW1lZGlhdGUgY29udGV4dCwgbGV0J3MgdHJhY2Ugb3V0IHRoZSBsb2dpY2FsIGNhbGxzIGFuZCB0aGUgcG90ZW50aWFsIGZsb3cuXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHN3ZWVwLiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBibG9ja3Mgb2YgY29kZSwgdGhlc2Ugc2VjdGlvbnMgc2hvdWxkIHByb3ZpZGUgZ29vZCBzdGFydGluZyBwb2ludHMuIEknbGwgdGFrZSBhIGxvb2sgYXQgbGluZXMgNDI2MC00MzAwLCB0aGVuIGxpbmVzIDUxMjAtNTE1MCwgYW5kIGZpbmFsbHksIGxpbmVzIDYyNTAtNjMxNS4gVGhvc2Ugc2hvdWxkIGJlIHRoZSBob3RzcG90cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6NTQuODA3ODk4NTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjU1OlxcdH1cXG40MjU2OlxcdFxcbjQyNTc6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbjQyNTg6XFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgc2V0IHByb3RlY3Rpb25cXG40MjU5OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuNDI2MDpcXHRcXG40MjYxOlxcdHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjQyNjI6XFx0e1xcbjQyNjM6XFx0XFx0aW50IHByaW9yaXR5O1xcbjQyNjQ6XFx0XFx0dW5zaWduZWQgbG9uZyByZWNsYWltYWJsZTtcXG40MjY1OlxcdFxcbjQyNjY6XFx0XFx0aWYgKHNjLVxcdTAwM2Vwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkgfHwgc2MtXFx1MDAzZW5yX3RvX3JlY2xhaW0gXFx1MDAzYyBNSU5fTFJVX0JBVENIKVxcbjQyNjc6XFx0XFx0XFx0cmV0dXJuO1xcbjQyNjg6XFx0XFx0LypcXG40MjY5OlxcdFxcdCAqIERldGVybWluZSB0aGUgaW5pdGlhbCBwcmlvcml0eSBiYXNlZCBvblxcbjQyNzA6XFx0XFx0ICogKHRvdGFsIFxcdTAwM2VcXHUwMDNlIHByaW9yaXR5KSAqIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gbnJfdG9fcmVjbGFpbSxcXG40MjcxOlxcdFxcdCAqIHdoZXJlIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gaW5hY3RpdmUgLyB0b3RhbC5cXG40MjcyOlxcdFxcdCAqL1xcbjQyNzM6XFx0XFx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xcbjQyNzQ6XFx0XFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG40Mjc1OlxcdFxcdFxcdHJlY2xhaW1hYmxlICs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XFxuNDI3NjpcXHRcXG40Mjc3OlxcdFxcdC8qIHJvdW5kIGRvd24gcmVjbGFpbWFibGUgYW5kIHJvdW5kIHVwIHNjLVxcdTAwM2Vucl90b19yZWNsYWltICovXFxuNDI3ODpcXHRcXHRwcmlvcml0eSA9IGZsc19sb25nKHJlY2xhaW1hYmxlKSAtIDEgLSBmbHNfbG9uZyhzYy1cXHUwMDNlbnJfdG9fcmVjbGFpbSAtIDEpO1xcbjQyNzk6XFx0XFxuNDI4MDpcXHRcXHQvKlxcbjQyODE6XFx0XFx0ICogVGhlIGVzdGltYXRpb24gaXMgYmFzZWQgb24gTFJVIHBhZ2VzIG9ubHksIHNvIGNhcCBpdCB0byBwcmV2ZW50XFxuNDI4MjpcXHRcXHQgKiBvdmVyc2hvb3RzIG9mIHNocmlua2VyIG9iamVjdHMgYnkgbGFyZ2UgbWFyZ2lucy5cXG40MjgzOlxcdFxcdCAqL1xcbjQyODQ6XFx0XFx0c2MtXFx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XFxuNDI4NTpcXHR9XFxuNDI4NjpcXHRcXG40Mjg3OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbjQyODg6XFx0e1xcbjQyODk6XFx0XFx0aW50IGdlbiwgdHlwZSwgem9uZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6NTQuODA4MzIzNTg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTY4MzA4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgYSBjb2RpbmcgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgYGdldF9ucl90b19zY2FuYCBhdCA1MTIwKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6b29tIGluIG9uIGBnZXRfbnJfdG9fc2NhbmAsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGFyZWEgb2YgNTEyMC4gSSd2ZSBnb3QgdGhpcyBuaWdnbGluZyBzdXNwaWNpb24gdGhlcmUncyBzb21ldGhpbmcgZ29pbmcgb24gd2l0aCB0aGF0IHBhcnRpY3VsYXIgdGhyZXNob2xkLCBvciBtYXliZSB0aGUgbG9naWMgc3Vycm91bmRpbmcgaXQuIEl0IGNvdWxkIGJlIGFuIGVkZ2UgY2FzZSBJIG1pc3NlZCwgYSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciwgb3IgZXZlbiBhbiBpbnRlcmFjdGlvbiB3aXRoIHNvbWUgb3RoZXIgY29tcG9uZW50IHRoYXQncyBjYXVzaW5nIHByb2JsZW1zLiBHcmFiYmluZyB0aGUgY29udGV4dCBhcm91bmQgNTEyMCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gdGhlIGZ1bmN0aW9uJ3MgY2FsbGVkIGluIHRoYXQgdmljaW5pdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo1Ny42MDUxNTc5MjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMjA6XFx0XFx0cmV0dXJuIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcTtcXG41MTIxOlxcdH1cXG41MTIyOlxcdFxcbjUxMjM6XFx0c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG41MTI0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHN3YXBwaW5lc3MpXFxuNTEyNTpcXHR7XFxuNTEyNjpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcXG41MTI3OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG41MTI4OlxcdFxcbjUxMjk6XFx0XFx0LypcXG41MTMwOlxcdFxcdCAqIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seS5cXG41MTMxOlxcdFxcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xcbjUxMzI6XFx0XFx0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXFxuNTEzMzpcXHRcXHQgKiBubyBzd2FwKSwgcmV0dXJuIDAgdG8gc2tpcCB0aGUgc2NhbiBlbnRpcmVseSwgYXZvaWRpbmcgdXNlbGVzcyBzY2FuXFxuNTEzNDpcXHRcXHQgKiB3b3JrIHdoZW4gdGhlcmUgaXMgbm90aGluZyBlbGlnaWJsZSB0byByZWNsYWltLlxcbjUxMzU6XFx0XFx0ICovXFxuNTEzNjpcXHRcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbjUxMzc6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG41MTM4OlxcdFxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG41MTM5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjUxNDA6XFx0XFx0fVxcbjUxNDE6XFx0XFxuNTE0MjpcXHRcXHRldmljdGFibGUgPSBscnV2ZWNfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG41MTQzOlxcdFxcbjUxNDQ6XFx0XFx0LyogdHJ5IHRvIHNjcmFwZSBhbGwgaXRzIG1lbW9yeSBpZiB0aGlzIG1lbWNnIHdhcyBkZWxldGVkICovXFxuNTE0NTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSlcXG41MTQ2OlxcdFxcdFxcdHJldHVybiBldmljdGFibGU7XFxuNTE0NzpcXHRcXG41MTQ4OlxcdFxcdG5yX3RvX3NjYW4gPSBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihtZW1jZywgc2MsIGV2aWN0YWJsZSk7XFxuNTE0OTpcXHRcXHRucl90b19zY2FuIFxcdTAwM2VcXHUwMDNlPSBzYy1cXHUwMDNlcHJpb3JpdHk7XFxuNTE1MDpcXHRcXG41MTUxOlxcdFxcdHJldHVybiBucl90b19zY2FuO1xcbjUxNTI6XFx0fVxcbjUxNTM6XFx0XFxuNTE1NDpcXHRzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo1Ny42MDU0MjMyMzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU1Mjg1NDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlY2xhbWF0aW9uIExvb3AqKlxuXG5Pa2F5LCBzbyBJJ20gaG9taW5nIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoZSBjb2RlIGFyb3VuZCBsaW5lIDYyNjAgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJ20gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHJldHVybmluZyBhbiB1bmV4cGVjdGVkIHZhbHVlLCBwZXJoYXBzIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBzb21lIG90aGVyIHJlY2xhbWF0aW9uLXJlbGF0ZWQgcHJvYmxlbS4gSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBsb2dpYyB3aXRoaW4gYW5kIGFyb3VuZCB0aGF0IHNwZWNpZmljIGxpbmUuIEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgaW5wdXQgcGFyYW1ldGVycyBhdCB0aGF0IHBvaW50IGFuZCBtZW50YWxseSB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFVuZGVyc3RhbmRpbmcgd2hhdCBjb25kaXRpb25zIGNvdWxkIGNhdXNlIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgdG8gYmVoYXZlIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyIGlzIGtleS4gR290dGEgZmlndXJlIG91dCB3aGF0IGNvdWxkIGJlIHRyaWdnZXJpbmcgdGhpcyBsb29wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MDIuMTU4MjgwOTE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjYwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MjYwOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLFxcbjYyNjE6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjI2MjpcXHR7XFxuNjI2MzpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VzX2Zvcl9jb21wYWN0aW9uO1xcbjYyNjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9scnVfcGFnZXM7XFxuNjI2NTpcXHRcXHRpbnQgejtcXG42MjY2OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjYyNjc6XFx0XFxuNjI2ODpcXHRcXHQvKiBJZiBub3QgaW4gcmVjbGFpbS9jb21wYWN0aW9uIG1vZGUsIHN0b3AgKi9cXG42MjY5OlxcdFxcdGlmICghaW5fcmVjbGFpbV9jb21wYWN0aW9uKHNjKSlcXG42MjcwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG42MjcxOlxcdFxcbjYyNzI6XFx0XFx0LypcXG42MjczOlxcdFxcdCAqIFN0b3AgaWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55IHBhZ2VzIGZyb20gdGhlIGxhc3QgU1dBUF9DTFVTVEVSX01BWFxcbjYyNzQ6XFx0XFx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLiBUaGlzIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXJcXG42Mjc1OlxcdFxcdCAqIHdpdGggdGhlIHJpc2sgcmVjbGFpbS9jb21wYWN0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGFsbG9jYXRpb24gYXR0ZW1wdFxcbjYyNzY6XFx0XFx0ICogZmFpbHMuIEluIHRoZSBwYXN0IHdlIGhhdmUgdHJpZWQgaGFyZGVyIGZvciBfX0dGUF9SRVRSWV9NQVlGQUlMXFxuNjI3NzpcXHRcXHQgKiBhbGxvY2F0aW9ucyB0aHJvdWdoIHJlcXVpcmluZyB0aGF0IHRoZSBmdWxsIExSVSBsaXN0IGhhcyBiZWVuIHNjYW5uZWRcXG42Mjc4OlxcdFxcdCAqIGZpcnN0LCBieSBhc3N1bWluZyB0aGF0IHplcm8gZGVsdGEgb2Ygc2MtXFx1MDAzZW5yX3NjYW5uZWQgbWVhbnMgZnVsbCBMUlVcXG42Mjc5OlxcdFxcdCAqIHNjYW4sIGJ1dCB0aGF0IGFwcHJveGltYXRpb24gd2FzIHdyb25nLCBhbmQgdGhlcmUgd2VyZSBjb3JuZXIgY2FzZXNcXG42MjgwOlxcdFxcdCAqIHdoZXJlIGFsd2F5cyBhIG5vbi16ZXJvIGFtb3VudCBvZiBwYWdlcyB3ZXJlIHNjYW5uZWQuXFxuNjI4MTpcXHRcXHQgKi9cXG42MjgyOlxcdFxcdGlmICghbnJfcmVjbGFpbWVkKVxcbjYyODM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjYyODQ6XFx0XFxuNjI4NTpcXHRcXHQvKiBJZiBjb21wYWN0aW9uIHdvdWxkIGdvIGFoZWFkIG9yIHRoZSBhbGxvY2F0aW9uIHdvdWxkIHN1Y2NlZWQsIHN0b3AgKi9cXG42Mjg2OlxcdFxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgeiwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KSB7XFxuNjI4NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyayA9IG1pbl93bWFya19wYWdlcyh6b25lKTtcXG42Mjg4OlxcdFxcbjYyODk6XFx0XFx0XFx0LyogQWxsb2NhdGlvbiBjYW4gYWxyZWFkeSBzdWNjZWVkLCBub3RoaW5nIHRvIGRvICovXFxuNjI5MDpcXHRcXHRcXHRpZiAoem9uZV93YXRlcm1hcmtfb2soem9uZSwgc2MtXFx1MDAzZW9yZGVyLCB3YXRlcm1hcmssXFxuNjI5MTpcXHRcXHRcXHRcXHRcXHQgICAgICBzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIDApKVxcbjYyOTI6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjYyOTM6XFx0XFxuNjI5NDpcXHRcXHRcXHRpZiAoY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBzYy1cXHUwMDNlb3JkZXIsIHdhdGVybWFyayxcXG42Mjk1OlxcdFxcdFxcdFxcdFxcdFxcdHNjLVxcdTAwM2VyZWNsYWltX2lkeCkpXFxuNjI5NjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjI5NzpcXHRcXHR9XFxuNjI5ODpcXHRcXG42Mjk5OlxcdFxcdC8qXFxuNjMwMDpcXHRcXHQgKiBJZiB3ZSBoYXZlIG5vdCByZWNsYWltZWQgZW5vdWdoIHBhZ2VzIGZvciBjb21wYWN0aW9uIGFuZCB0aGVcXG42MzAxOlxcdFxcdCAqIGluYWN0aXZlIGxpc3RzIGFyZSBsYXJnZSBlbm91Z2gsIGNvbnRpbnVlIHJlY2xhaW1pbmdcXG42MzAyOlxcdFxcdCAqL1xcbjYzMDM6XFx0XFx0cGFnZXNfZm9yX2NvbXBhY3Rpb24gPSBjb21wYWN0X2dhcChzYy1cXHUwMDNlb3JkZXIpO1xcbjYzMDQ6XFx0XFx0aW5hY3RpdmVfbHJ1X3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcXG42MzA1OlxcdFxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpXFxuNjMwNjpcXHRcXHRcXHRpbmFjdGl2ZV9scnVfcGFnZXMgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG42MzA3OlxcdFxcbjYzMDg6XFx0XFx0cmV0dXJuIGluYWN0aXZlX2xydV9wYWdlcyBcXHUwMDNlIHBhZ2VzX2Zvcl9jb21wYWN0aW9uO1xcbjYzMDk6XFx0fVxcbjYzMTA6XFx0XFxuNjMxMTpcXHRzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjMxMjpcXHR7XFxuNjMxMzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnID0gc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwO1xcbjYzMTQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUgcmVjbGFpbSA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MDIuMTU4NTQ2Nzc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTIyNzU5MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgZm9yIFRhcmdldGVkIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhpcyBtZW1vcnkgcmVjbGFtYXRpb24gcGF0Y2guIEZpcnN0LCBJIHNlZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgYW5kIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2Ag4oCTIHRoZXkncmUgdGhlIGRpcmVjdCBmb2N1cywgYmVpbmcgaW5saW5lIGZ1bmN0aW9ucyBpbiBgbW0vdm1zY2FuLmNgLiBTaW5jZSB0aGV5J3JlIGlubGluZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZWlyIGNhbGxlcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5UaGUgY2FsbGVycyBvZiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgYXJlIGBnZXRfc2Nhbl9jb3VudGAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAsIGBnZXRfbnJfdG9fc2NhbmAsIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAsIGFuZCBgem9uZV9yZWNsYWltYWJsZV9wYWdlc2AuIEZyb20gdGhlcmUsIGBnZXRfc2Nhbl9jb3VudGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCwgd2hpY2ggaXMgYWxzbyBjYWxsZWQgYnkgYHNocmlua19ub2RlYCB2aWEgYHNocmlua19ub2RlX21lbWNnc2AsIGFuZCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGFyZSAqYWN0dWFsbHkqIHJlbGV2YW50IGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHRvIGxpc3QgdGhlIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIGxvZ2ljLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBUaGUga2V5IGlzIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyIGZ1bmN0aW9ucy4gU28sIEkgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBpbmNsdWRlIGdlbmVyaWMgYWxsb2NhdG9ycy9kZWFsbG9jYXRvcnMuXG5cbmBzaHJpbmtfbHJ1dmVjYCBhbmQgYGdldF9zY2FuX2NvdW50YCBhcmUgb25seSBhY3RpdmUgZHVyaW5nIHBhZ2UgcmVjbGFtYXRpb24sIGFuZCB0aHVzIGFyZSBub3QgdWJpcXVpdG91cy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIGFsc28gcnVucyBkdXJpbmcgem9uZSBjaGVja3MsIGNvbXBhY3Rpb24sIGFuZCByZWNsYWltIHJldHJpZXMuIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgdGhlIGV4YWN0IGZ1bmN0aW9ucyBtb2RpZmllZCwgc28gdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgaW5jbHVkZWQuIFRoZXJlZm9yZSwgdGhlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGJlOiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBhbmQgYHNldF9pbml0aWFsX3ByaW9yaXR5YC5cblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1NXQVBgIGlzIGV4cGxpY2l0bHkgaW4gYCNpZmRlZiBDT05GSUdfU1dBUGAuIGBDT05GSUdfTUVNQ0dgIGlzIGFsc28gdXNlZCwgYWx0aG91Z2ggaXQgY29tcGlsZXMgd2l0aG91dCBpdCBkdWUgdG8gc3R1YnMuIEhvd2V2ZXIsIGVuYWJsaW5nIGJvdGggYWxsb3dzIGZvciB0ZXN0aW5nIGFsbCBjb2RlIGJyYW5jaGVzIG9mIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AuIEknbSBnb2luZyB0byBjaGVjayBpZiBgU1dBUGAgbmVlZHMgYW55dGhpbmcgZWxzZSDigJMgaXQgZGVwZW5kcyBvbiBgIUFSQ0hfTk9fU1dBUGAgaW4gYG1tL0tjb25maWdgLCBzbyB0aG9zZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3MuXG5cblRvIHN1bW1hcml6ZSwgbXkgcmF0aW9uYWxlOiBUaGlzIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYW1hdGlvbiBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGFkZGluZyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIExSVSBsaXN0cyB1bmRlciBgR0ZQX05PSU9gIHdoZW4gdGhlIG51bWJlciBvZiBzd2FwY2FjaGVkIHBhZ2VzIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbnltb3VzIExSVSBzaXplLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgcGFnZSByZWNsYW1hdGlvbiBkZWNpc2lvbnMgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzIGFuZCBnbG9iYWwgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoZXJlZm9yZTpcblxuLSAgIGBXb3J0aEZ1enppbmdgOiBUcnVlXG4tICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFtYXRpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgYWRkaW5nIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCB0byBhdm9pZCBzY2FubmluZyBhbm9ueW1vdXMgTFJVIGxpc3RzIHVuZGVyIGBHRlBfTk9JT2Agd2hlbiB0aGUgbnVtYmVyIG9mIHN3YXBjYWNoZWQgcGFnZXMgaXMgbG93IHJlbGF0aXZlIHRvIHRoZSBhbm9ueW1vdXMgTFJVIHNpemUuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIHJlY2xhbWF0aW9uIGRlY2lzaW9ucyBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYW5kIGdsb2JhbCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWVtb3J5IHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cbi0gICBgRm9jdXNTeW1ib2xzYDogYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLCBgZ2V0X3NjYW5fY291bnRgLCBgc2hyaW5rX2xydXZlY2AsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YFxuLSAgIGBFbmFibGVDb25maWdzYDogYFNXQVBgLCBgTUVNQ0dgXG5cbk5vdyBJJ20gcmVhZHkgdG8gcmV2aWV3IHRoZSByZXN1bHRzIGluIHRoZSByZXF1aXJlZCBmb3JtYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODIzLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNjoxOS4wODEzMjIzMDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTExNTQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWNsYWltYWJsZV9hbm9uX2lzX2xvd1wiLFxuICAgIFwiY2FuX3JlY2xhaW1fYW5vbl9wYWdlc1wiLFxuICAgIFwiZ2V0X3NjYW5fY291bnRcIixcbiAgICBcInNocmlua19scnV2ZWNcIixcbiAgICBcInpvbmVfcmVjbGFpbWFibGVfcGFnZXNcIixcbiAgICBcInNldF9pbml0aWFsX3ByaW9yaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2V0X2luaXRpYWxfcHJpb3JpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGFkZGluZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIHRvIHNraXAgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIHVuZGVyIEdGUF9OT0lPIHJlY2xhaW0gd2hlbiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbiBMUlUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGFjcm9zcyBnbG9iYWwgYW5kIG1lbWNnIHBhZ2UgcmVjbGFpbSBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNjoxOS4xNjI0NDkxNzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAyODI5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MTkuMTYyOTA2NTAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYxMDIzNjgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIGludGVybmFsIG1lbW9yeSByZWNsYWltIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBub2RlL2xydXZlYyBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgKGBOUl9JTkFDVElWRV9BTk9OYCwgYE5SX0FDVElWRV9BTk9OYCwgYE5SX1NXQVBDQUNIRWApIGFuZCB0aGUgZmxhZ3MgaW4gYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVha3Mgb3IgcGFkZGluZyBpc3N1ZXMpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MjU6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yMjZjYmQ5ZTQ4MzYyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzYyLDIwICszNjIsNzIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdHJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19TV0FQXG4rc3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0aW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4re1xuK1x0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuK1x0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4rXG4rXHQvKlxuK1x0ICogQSBHRlBfTk9JTyByZWNsYWltZXIgY2FuIG9ubHkgcmVjbGFpbSBhbm9uIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGVcbitcdCAqIHN3YXBjYWNoZSAoYWRkaW5nIGFub24gdG8gdGhlIHN3YXBjYWNoZSBuZWVkcyBJTykuIFdoZW4gc3dhcGNhY2hlIGlzXG4rXHQgKiBmYXIgYmVsb3cgdGhlIGFub24gTFJVLCBzY2FubmluZyBhbm9uIHJlY2xhaW1zIG5vdGhpbmcgYW5kIG9ubHkgYnVybnNcbitcdCAqIENQVS4gVGhlIDEvNjQgdGhyZXNob2xkIGtlZXBzIHRoaXMgdG8gdGhlIGNhc2Ugd2hlcmUgYW5vbiBpc1xuK1x0ICogZWZmZWN0aXZlbHkgdW5yZWNsYWltYWJsZS5cbitcdCAqL1xuK1x0aWYgKCFzYyB8fCAoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIEZJWE1FOiBNR0xSVSBkb2Vzbid0IGZ1bGx5IHJlc3BlY3QgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGZvciB0aGVcbitcdCAqIHNjYW5uaW5nIHR5cGUsIHNvIG9ubHkgYXBwbHkgdGhpcyB0byB0aGUgdHJhZGl0aW9uYWwgTFJVIGZvciBub3cuXG4rXHQgKi9cbitcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKG1lbWNnKSB7XG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4rXG4rXHRcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcbitcdFx0XHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuK1x0XHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdFx0ICAgICBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0FDVElWRV9BTk9OKTtcbitcdFx0c3dhcGNhY2hlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TV0FQQ0FDSEUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHN3YXBjYWNoZSBcdTAwM2MgKGFub25fcGFnZXMgXHUwMDNlXHUwMDNlIDYpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbisjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRpZiAobWVtY2cgPT0gTlVMTCkge1xuIFx0XHQvKlxuLVx0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlXG4tXHRcdCAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbitcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZSBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4rXHRcdCAqIEFuZCB1bmRlciBHRlBfTk9JTywgaXMgdGhlcmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlXG4rXHRcdCAqIHNjYW5uaW5nIGFub24gd29ydGh3aGlsZT9cbiBcdFx0ICovXG4tXHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwKVxuK1x0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9IGVsc2Uge1xuLVx0XHQvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovXG4tXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMClcbitcdFx0LypcbitcdFx0ICogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0LCBhbmQgdW5kZXIgR0ZQX05PSU8gZG9lc1xuK1x0XHQgKiBpdCBoYXZlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZSBzY2FubmluZyB3b3J0aHdoaWxlP1xuK1x0XHQgKi9cbitcdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI2OjE5LjE2MjkwNzQ0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDQwNTg4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIGZvciBLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBrZXJuZWwgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBkaWcgaW4uIEl0J3MgbW9kaWZ5aW5nIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgdGhpcyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uLiBVbmRlciBgQ09ORklHX1NXQVBgIGl0IGxvb2tzIGxpa2UgYSBuZXcgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHNjYW5uaW5nIGFub24gcGFnZXMgZHVyaW5nIHJlY2xhaW0sIHNwZWNpZmljYWxseSB3aGVuIHN3YXBjYWNoZSBpcyBsb3cgYW5kIHdlJ3JlICpub3QqIGFsbG93ZWQgSS9PLCBvciBpZiBMUlUgZ2VuIGlzIGVuYWJsZWQuIEl0J3MgZ3JhYmJpbmcgcGFnZSBzdGF0cyDigJMgYE5SX0lOQUNUSVZFX0FOT05gLCBgTlJfQUNUSVZFX0FOT05gLCBhbmQgYE5SX1NXQVBDQUNIRWAg4oCTIGZyb20gYGxydXZlY19wYWdlX3N0YXRlYCBhbmQgYG5vZGVfcGFnZV9zdGF0ZWAsIHRoZW4gY29tcGFyaW5nIGBzd2FwY2FjaGVgIHRvIGEgZnJhY3Rpb24gb2YgYGFub25fcGFnZXNgLiBJdCdzIHVzZWQgaW5zaWRlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYC5cblxuQWxyaWdodCwgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGlzICp1bmxpa2VseSogdG8gYmUgYSBLTVNBTiBjYW5kaWRhdGUuIExldCdzIHJ1biB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0czogRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGFueSBkYXRhIHRoYXQgZW5kcyB1cCBpbiB1c2VyIHNwYWNlPyBObywgbm90IGF0IGFsbC4gSXQncyBhbGwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWxzLiBJcyBpdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vcGUuIEl0ICpkb2VzKiB1c2Ugc29tZSB2YXJpYWJsZXMgKGBzY2AsIGBtZW1jZ2AsIGBuaWRgLCBgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgKSwgYnV0IHRoZSBhcmd1bWVudHMgYHNjYCwgYG1lbWNnYCwgYG5pZGAgYXJlIHN0YW5kYXJkIHBhcmFtZXRlcnMsIHdlbGwtZGVmaW5lZCB3aXRoaW4gdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLiBBbmQgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYCBhcmUgbG9hZGVkIGZyb20gZXhpc3RpbmcgcGFnZSBzdGF0ZSBzdHJ1Y3R1cmVzLiBObyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBEb2VzIGl0IHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hpbmc/IE5vLiBJdCBkb2Vzbid0IGFsbG9jYXRlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBJdCdzIHB1cmUgcmVjbGFpbSBsb2dpYywgYSBoZXVyaXN0aWMgZm9yIG9wdGltaXphdGlvbi4gSXQncyBub3QgYWx0ZXJpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucywgZWl0aGVyLlxuXG5UaGlzIGlzIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIHJlY2xhaW0gbG9naWMgZXJyb3JzLCB3aGljaCBtaWdodCBjYXVzZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgTlVMTCBkZXJlZiAvIGxvY2sgaXNzdWVzLCBidXQgdGhlc2UgYXJlIHN0YW5kYXJkIGJ1Z3MsIG5vdCByZWFsbHkgdGhlIGtpbmQgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gV2Ugd2FudCB0byBiZSBzdXJlIHRob3VnaCwgbGV0J3MgdmVyaWZ5IHdoZXJlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBpcyBjYWxsZWQsIGp1c3QgaW4gY2FzZSB0aGVyZSdzIHNvbWV0aGluZyB3ZWlyZCBoYXBwZW5pbmcgb3V0c2lkZSBvdXIgcHVydmlldy4gSXQncyBhbHJlYWR5IHVzZWQgaW50ZXJuYWxseSwgbGV0J3MganVzdCBtYWtlIHN1cmUgaXQgaXNuJ3QgYmVpbmcgdXNlZCBpbiBzb21lIHN0cmFuZ2Ugd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MjYuMjAzNDk4NTM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE0MjQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTM2Nj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtMzgyLVxcdC8qXFxubW0vdm1zY2FuLmM6MzgzOlxcdCAqIEZJWE1FOiBNR0xSVSBkb2Vzbid0IGZ1bGx5IHJlc3BlY3QgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGZvciB0aGVcXG5tbS92bXNjYW4uYy0zODQtXFx0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwND1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNDEwLVxcbm1tL3Ztc2Nhbi5jOjQxMTpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNDEyLVxcdFxcdFxcdFxcdFxcdCAgaW50IG5pZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0Nz11bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS92bXNjYW4uYy00NTItXFx0XFx0em9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jOjQ1MzpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCB6b25lX3RvX25pZCh6b25lKSwgTlVMTCkpXFxubW0vdm1zY2FuLmMtNDU0LVxcdFxcdG5yICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pICtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2Mjc9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2NDYtXFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYzoyNjQ3OlxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTI2NDgtXFx0XFx0XFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yNjU1LVxcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cXG5tbS92bXNjYW4uYzoyNjU2OlxcdGlmICghc2MtXFx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxubW0vdm1zY2FuLmMtMjY1Ny1cXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI3My1cXHRyZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NDI3NDpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQyNzUtXFx0XFx0cmVjbGFpbWFibGUgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMjM9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzctXFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYzo1MTM4OlxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG5tbS92bXNjYW4uYy01MTM5LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NjI1OT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMDQtXFx0aW5hY3RpdmVfbHJ1X3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcXG5tbS92bXNjYW4uYzo2MzA1OlxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpXFxubW0vdm1zY2FuLmMtNjMwNi1cXHRcXHRpbmFjdGl2ZV9scnVfcGFnZXMgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MjYuMjQ5NjQ1Mzg5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMTU2MTEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IFVubmVjZXNzYXJ5IEhlcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGhvbmVzdGx5LCBpdCdzIHByZXR0eSBjbGVhbi4gVGhlIGNoYW5nZXMgYXJlIGFsbCBmb2N1c2VkIG9uIG9wdGltaXppbmcgcGFnZSByZWNsYWltIGhldXJpc3RpY3MsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgcGFnZXMgYW5kIGxvdyBzd2FwY2FjaGUgc2NlbmFyaW9zIHVuZGVyIGBHRlBfTk9JT2AuIE5vIG1ham9yIHJlZCBmbGFncyBhcmUganVtcGluZyBvdXQgYXQgbWUuXG5cbkknbSBzZWVpbmcgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBidWZmZXJzLCB3aGljaCBpcyBhIGh1Z2UgcmVsaWVmIGZyb20gYSBjb21wbGV4aXR5IHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBmYW50YXN0aWMg4oCTIG5vIHJpc2sgb2YgYGNvcHlfdG9fdXNlcmAgaXNzdWVzLCBpbmZvIGxlYWtzLCBvciBhbnkgcG90ZW50aWFsIHBhZGRpbmctcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMuIEZ1cnRoZXJtb3JlLCB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMgb3IgcHJvcGFnYXRpb24gaXNzdWVzLiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgYmFzZWQgb24gY2FsY3VsYXRpb25zIHVzaW5nIGV4aXN0aW5nIG5vZGUgYW5kIGxydXZlYyBzdGF0aXN0aWNzLCBhbmQgdGhlIGBzY2FuX2NvbnRyb2xgIHBvaW50ZXJzIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMgYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIGRhdGEtcmVsYXRlZCBnb3RjaGFzLCBLTVNBTiBzZWVtcyBlbnRpcmVseSB1bm5lY2Vzc2FyeSBoZXJlLiBJJ2QgZXhwZWN0IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyB0byBiZSBzdWZmaWNpZW50LiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LlxuXG5BbHJpZ2h0LCBsZXQncyBnbyBhaGVhZCBhbmQgdHJpZ2dlciB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4gVGhpcyBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgcGFzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyNCwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MzUuMjY1MjU5MzgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgaGV1cmlzdGljIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpbiBgbW0vdm1zY2FuLmNgIHRvIGF2b2lkIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyBkdXJpbmcgYEdGUF9OT0lPYCByZWNsYWltIHdoZW4gc3dhcGNhY2hlIHBhZ2VzIGFyZSBsb3cgcmVsYXRpdmUgdG8gdG90YWwgYW5vbnltb3VzIHBhZ2VzLiBcXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBpbnRlcm5hbCBtZW1vcnkgcmVjbGFpbSBjb250cm9sIGZsb3cgYmFzZWQgb24gbm9kZS9scnV2ZWMgcGFnZSBzdGF0ZSBzdGF0aXN0aWNzIChgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGBOUl9TV0FQQ0FDSEVgKSBhbmQgdGhlIGZsYWdzIGluIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWtzIG9yIHBhZGRpbmcgaXNzdWVzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIGludGVybmFsIG1lbW9yeSByZWNsYWltIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBub2RlL2xydXZlYyBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgKGBOUl9JTkFDVElWRV9BTk9OYCwgYE5SX0FDVElWRV9BTk9OYCwgYE5SX1NXQVBDQUNIRWApIGFuZCB0aGUgZmxhZ3MgaW4gYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVha3Mgb3IgcGFkZGluZyBpc3N1ZXMpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowqtm8g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 06:44:46 +0000 UTC FinishedAt: 2026-09-08 07:26: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": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "180e97bd5d6329b8bf8878da3cf73e887368fc67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "c7cbbd20-9603-41e3-a97f-48a844c65892" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "reclaimable_anon_is_low", "can_reclaim_anon_pages", "get_scan_count", "shrink_lruvec", "zone_reclaimable_pages", "set_initial_priority" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzZXRfaW5pdGlhbF9wcmlvcml0eSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBpbnRlcm5hbCBtZW1vcnkgcmVjbGFpbSBjb250cm9sIGZsb3cgYmFzZWQgb24gbm9kZS9scnV2ZWMgcGFnZSBzdGF0ZSBzdGF0aXN0aWNzIChgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGBOUl9TV0FQQ0FDSEVgKSBhbmQgdGhlIGZsYWdzIGluIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWtzIG9yIHBhZGRpbmcgaXNzdWVzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGFkZGluZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIHRvIHNraXAgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIHVuZGVyIEdGUF9OT0lPIHJlY2xhaW0gd2hlbiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbiBMUlUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGFjcm9zcyBnbG9iYWwgYW5kIG1lbWNnIHBhZ2UgcmVjbGFpbSBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MjU6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjI2Y2JkOWU0ODM2MiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTM2MiwyMCAmIzQzOzM2Miw3MiBAQCBzdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19TV0FQXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIEdGUF9OT0lPIHJlY2xhaW1lciBjYW4gb25seSByZWNsYWltIGFub24gdGhhdCBpcyBhbHJlYWR5IGluIHRoZVxuJiM0MztcdCAqIHN3YXBjYWNoZSAoYWRkaW5nIGFub24gdG8gdGhlIHN3YXBjYWNoZSBuZWVkcyBJTykuIFdoZW4gc3dhcGNhY2hlIGlzXG4mIzQzO1x0ICogZmFyIGJlbG93IHRoZSBhbm9uIExSVSwgc2Nhbm5pbmcgYW5vbiByZWNsYWltcyBub3RoaW5nIGFuZCBvbmx5IGJ1cm5zXG4mIzQzO1x0ICogQ1BVLiBUaGUgMS82NCB0aHJlc2hvbGQga2VlcHMgdGhpcyB0byB0aGUgY2FzZSB3aGVyZSBhbm9uIGlzXG4mIzQzO1x0ICogZWZmZWN0aXZlbHkgdW5yZWNsYWltYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZJWE1FOiBNR0xSVSBkb2VzbiYjMzk7dCBmdWxseSByZXNwZWN0IGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBmb3IgdGhlXG4mIzQzO1x0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1jZykge1xuJiM0MztcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiYjNDM7XG4mIzQzO1x0XHRhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuJiM0MztcdFx0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0XHQgICAgIG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0FOT04pO1xuJiM0MztcdFx0c3dhcGNhY2hlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TV0FQQ0FDSEUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN3YXBjYWNoZSBcdTAwM2MgKGFub25fcGFnZXMgXHUwMDNlXHUwMDNlIDYpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRpZiAobWVtY2cgPT0gTlVMTCkge1xuIFx0XHQvKlxuLVx0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlXG4tXHRcdCAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbiYjNDM7XHRcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUgc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xuJiM0MztcdFx0ICogQW5kIHVuZGVyIEdGUF9OT0lPLCBpcyB0aGVyZSBlbm91Z2ggc3dhcGNhY2hlZCBhbm9uIHRvIG1ha2VcbiYjNDM7XHRcdCAqIHNjYW5uaW5nIGFub24gd29ydGh3aGlsZT9cbiBcdFx0ICovXG4tXHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwKVxuJiM0MztcdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4tXHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbi1cdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwKVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdCwgYW5kIHVuZGVyIEdGUF9OT0lPIGRvZXNcbiYjNDM7XHRcdCAqIGl0IGhhdmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlIHNjYW5uaW5nIHdvcnRod2hpbGU/XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyYjMzQ7LAogICAgJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgICAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgICAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtzZXRfaW5pdGlhbF9wcmlvcml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGFkZGluZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIHRvIHNraXAgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIHVuZGVyIEdGUF9OT0lPIHJlY2xhaW0gd2hlbiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbiBMUlUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGFjcm9zcyBnbG9iYWwgYW5kIG1lbWNnIHBhZ2UgcmVjbGFpbSBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDc6MjU6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI0NWY2OGM3NWIyODkuLjIyNmNiZDllNDgzNjIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0zNjIsMjAgJiM0MzszNjIsNzIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKIAlyZXR1cm4gIW5vZGVzX2VtcHR5KGFsbG93ZWRfbWFzayk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX1NXQVAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYW5vbl9wYWdlcywgc3dhcGNhY2hlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIEdGUF9OT0lPIHJlY2xhaW1lciBjYW4gb25seSByZWNsYWltIGFub24gdGhhdCBpcyBhbHJlYWR5IGluIHRoZQomIzQzOwkgKiBzd2FwY2FjaGUgKGFkZGluZyBhbm9uIHRvIHRoZSBzd2FwY2FjaGUgbmVlZHMgSU8pLiBXaGVuIHN3YXBjYWNoZSBpcwomIzQzOwkgKiBmYXIgYmVsb3cgdGhlIGFub24gTFJVLCBzY2FubmluZyBhbm9uIHJlY2xhaW1zIG5vdGhpbmcgYW5kIG9ubHkgYnVybnMKJiM0MzsJICogQ1BVLiBUaGUgMS82NCB0aHJlc2hvbGQga2VlcHMgdGhpcyB0byB0aGUgY2FzZSB3aGVyZSBhbm9uIGlzCiYjNDM7CSAqIGVmZmVjdGl2ZWx5IHVucmVjbGFpbWFibGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNjIHx8IChzYy0mZ3Q7Z2ZwX21hc2sgJmFtcDsgX19HRlBfSU8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGSVhNRTogTUdMUlUgZG9lc24mIzM5O3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZQomIzQzOwkgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93LgomIzQzOwkgKi8KJiM0MzsJaWYgKGxydV9nZW5fZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobWVtY2cpIHsKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiYjNDM7CiYjNDM7CQlhbm9uX3BhZ2VzID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJCSAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7CiYjNDM7CQlzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJCSAgICAgbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfQU5PTik7CiYjNDM7CQlzd2FwY2FjaGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX1NXQVBDQUNIRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHN3YXBjYWNoZSAmbHQ7IChhbm9uX3BhZ2VzICZndDsmZ3Q7IDYpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7CQlpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX1NXQVAgKi8KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCWlmIChtZW1jZyA9PSBOVUxMKSB7CiAJCS8qCi0JCSAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUKLQkJICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlPwomIzQzOwkJICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZSBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/CiYjNDM7CQkgKiBBbmQgdW5kZXIgR0ZQX05PSU8sIGlzIHRoZXJlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZQomIzQzOwkJICogc2Nhbm5pbmcgYW5vbiB3b3J0aHdoaWxlPwogCQkgKi8KLQkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwKQomIzQzOwkJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKLQkJLyogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0PyAqLwotCQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwKQomIzQzOwkJLyoKJiM0MzsJCSAqIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdCwgYW5kIHVuZGVyIEdGUF9OT0lPIGRvZXMKJiM0MzsJCSAqIGl0IGhhdmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlIHNjYW5uaW5nIHdvcnRod2hpbGU/CiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWTXNjYW4gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBBIHBhdGNoIHRhcmdldGluZyBgbW0vdm1zY2FuLmNgIOKAkyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBsb2dpYyBhcm91bmQgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbS4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBmdW5jdGlvbiwgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhlIGRpcmVjdGlvbiB0aGlzIHBhdGNoIGlzIHRha2luZy4gSXQgc2VlbXMgdG8gYmUgaW50ZWdyYXRlZCB3aXRoIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKClgLCB3aGljaCBpcyB0aGUgZ2F0ZWtlZXBlciBmb3IgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbSBkZWNpc2lvbnMuIFRoZSBsb2dpYyB1cGRhdGUgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGlzIG5vdyBjaGVja2luZyB0aGUgbmVnYXRpb24gb2YgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbmV3IGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBzYXlpbmcgJiMzNDtpZiBhbm9ueW1vdXMgcmVjbGFpbSBpc24mIzM5O3QgY29uc2lkZXJlZCAmIzM5O2xvdyYjMzk7IGFjY29yZGluZyB0byBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAsIHRoZW4gd2UgKmNhbiogcmVjbGFpbS4mIzM0OyBNYWtlcyBzZW5zZS4gVGhlIGAjaWZkZWYgQ09ORklHX1NXQVBgIGd1YXJkIGlzIGNydWNpYWw7IGl0JiMzOTtzIGNvbmZpcm1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHN3YXBwaW5nIGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtLCBzbyBhbm9ueW1vdXMgcGFnZXMgYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBzd2FwcGluZy4gSSB3YW50IHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQgd2l0aGluIGBtbS92bXNjYW4uY2AgbmVhciBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYDsgdGhpcyBnaXZlcyBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGNoYW5nZSBmaXRzIGludG8gdGhlIGxhcmdlciByZWNsYWltIHN0cmF0ZWd5LiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FuX3JlY2xhaW1fYW5vbl9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2Nj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4Mi1cdC8qXG5tbS92bXNjYW4uYzozODM6XHQgKiBGSVhNRTogTUdMUlUgZG9lc24mIzM5O3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxubW0vdm1zY2FuLmMtMzg0LVx0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cbi0tXG5tbS92bXNjYW4uYz00MDQ9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00MTAtXG5tbS92bXNjYW4uYzo0MTE6c3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNDEyLVx0XHRcdFx0XHQgIGludCBuaWQsXG4tLVxubW0vdm1zY2FuLmM9NDQ3PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS92bXNjYW4uYy00NTItXHRcdHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0FDVElWRV9GSUxFKTtcbm1tL3Ztc2Nhbi5jOjQ1MzpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHpvbmVfdG9fbmlkKHpvbmUpLCBOVUxMKSlcbm1tL3Ztc2Nhbi5jLTQ1NC1cdFx0bnIgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pICYjNDM7XG4tLVxubW0vdm1zY2FuLmM9MjYyNz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2NDYtXHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jOjI2NDc6XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG5tbS92bXNjYW4uYy0yNjQ4LVx0XHRcdG1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTI2NTUtXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG5tbS92bXNjYW4uYzoyNjU2Olx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG5tbS92bXNjYW4uYy0yNjU3LVx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG4tLVxubW0vdm1zY2FuLmM9NDI2MT1zdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MjczLVx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NDI3NDpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQyNzUtXHRcdHJlY2xhaW1hYmxlICYjNDM7PSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMjM9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01MTM3LVx0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG5tbS92bXNjYW4uYzo1MTM4Olx0XHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUxMzktXHRcdFx0cmV0dXJuIDA7XG4tLVxubW0vdm1zY2FuLmM9NjI1OT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy02MzA0LVx0aW5hY3RpdmVfbHJ1X3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcbm1tL3Ztc2Nhbi5jOjYzMDU6XHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpXG5tbS92bXNjYW4uYy02MzA2LVx0XHRpbmFjdGl2ZV9scnVfcGFnZXMgJiM0Mzs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQ29uZmlybWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhZ2UgcmVjbGFpbSBsb2dpYywgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEFwcGx5aW5nIG15IG1lbnRhbCBjaGVja2xpc3QgYmFzZWQgb24gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgdGhlICYjMzQ7Q29yZSBTdWJzeXN0ZW1zJiMzNDsgY3JpdGVyaWEgZGVmaW5pdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBBbnkgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXMsIGJ5IGRlZmluaXRpb24sIHNpZ25pZmljYW50LiBJJiMzOTttIGFscmVhZHkgaW5jbGluZWQgdG8gZ2l2ZSB0aGlzIGEgcG9zaXRpdmUgc2NvcmUgZm9yIFdvcnRoRnV6emluZy4gVGhlICYjMzQ7UmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzJiMzNDsgY3JpdGVyaWEgaXMgYWxzbyBjbGVhcmx5IG1ldC4KCk5vdywgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuIEkgc2VlIGBDT05GSUdfU1dBUGAgYmVpbmcgYCNpZmRlZmAmIzM5O2QuIFN3YXAgaW50ZXJhY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBzY3J1dGluaXplLiBBbmQgdGhpcyBtZW50aW9ucyBgbWVtY2dgISBJIHNlZSB0aGUgYG1lbWNnYCB2YXJpYWJsZSBwYXNzZWQgYW5kIGBtZW1fY2dyb3VwX2xydXZlY2AsIGBscnV2ZWNfcGFnZV9zdGF0ZWAsIGFuZCBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AgY2FsbGVkLiBUaGlzIGlzIHZlcnkgZ29vZCwgaW5kaWNhdGluZyBsaWtlbHkgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1DR19TV0FQYCBkZXBlbmRlbmNpZXMsIGFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb2ludHMgb2YgcG90ZW50aWFsIGludGVyZXN0IGFuZCBpbnRlcmFjdGlvbi4gSSBzaG91bGQgY2hlY2sgaG93IHRoZXNlIG1lbWNnIGFuZCBzd2FwIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCBpbnRlZ3JhdGVkIGJlY2F1c2UgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gZmlsZTogYGluaXQvS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCBmb3IgbXVjaCBvZiB0aGUgZ2VuZXJhbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBvciBpZiB0aGUgZGVmaW5pdGlvbiBpcyBtb3JlIHNwZWNpZmljIHRoYW4gYSB0b3AgbGV2ZWwgY29uZmlnLCB0aGVuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgbW0vS2NvbmZpZ2AuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgKm1lbW9yeSogY29udHJvbCBncm91cHMsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0mIzM5O3MgS2NvbmZpZyBmaWxlIHNlZW1zIGxpa2UgdGhlIG5leHQgbW9zdCBsaWtlbHkgc3BvdC4gSXQmIzM5O3MgcmVhbGx5IGFib3V0IHF1aWNrbHkgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2ggdG8gZmluZCB0aGUgY29ycmVjdCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA3LVxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFub255bW91cyBQYWdlIFJlY2xhaW0gTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHJlY2xhaW0gbG9naWMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdywgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNhbGxlcnMgYW5kIHN5bWJvbHMgaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFub255bW91cyBwYWdlcyBhcmUgYWN0dWFsbHkgYmVpbmcgcmVjbGFpbWVkLgoKUmlnaHQsIHNvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgYm90aCBgc3RhdGljIGlubGluZWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbi4gTm93LCBiZWNhdXNlIHRoZXkmIzM5O3JlIGlubGluZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSAqbm9uLXN0YXRpYyogYW5kICpub24taW5saW5lKiBmdW5jdGlvbnMgd2l0aGluIGBtbS92bXNjYW4uY2AgdGhhdCB1c2UgdGhlbSDigJMgdGhvc2UgYXJlIHRoZSBhY3R1YWwgd29ya2hvcnNlcy4KCkxldCBtZSBsaXN0IG91dCB0aGUgY2FsbGVycyBvZiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2A6IEkgc2VlIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCAodGhhdCYjMzk7cyBpbXBvcnRhbnQpLCBgZ2V0X3NjYW5fY291bnRgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgZ2V0X25yX3RvX3NjYW5gLCBhbmQgYHNob3VsZF9jb250aW51ZV9yZWNsYWltYC4gSG1tLCBhIG1peCBvZiBzdGF0aWMgYW5kIGlubGluZSBmdW5jdGlvbnMuIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciByZWNsYWltaW5nLCBidXQgdGhlIG90aGVycyBhcmUgbGlrZWx5IGtleSBpbiB0aGUgc2NhbiBhbmQgc2hyaW5raW5nIHByb2Nlc3MuCgpOb3csIHdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgKmFjdHVhbGx5KiBkb2luZyB0aGUgaGVhdnkgbGlmdGluZz8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBjb2RlLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBjb3JlIHJlY2xhaW0gbG9naWMgaXMgZ29pbmcgdG8gYmUgd2l0aGluIGEgc3BlY2lmaWMgc2VjdGlvbiwgcGVyaGFwcyBhcm91bmQgdGhlIDI2MDAtMjgwMCBhbmQgNDIwMC00NDAwIGxpbmUgcmFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIFRpbWUgdG8gZ2V0IHRoZSBnb2dnbGVzIG9uIGFuZCBleGFtaW5lIHRob3NlIGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjI1Olx0ICogbnJbMl0gPSBmaWxlIGluYWN0aXZlIGZvbGlvcyB0byBzY2FuOyBuclszXSA9IGZpbGUgYWN0aXZlIGZvbGlvcyB0byBzY2FuXG4yNjI2Olx0ICovXG4yNjI3Olx0c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjI2Mjg6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpucilcbjI2Mjk6XHR7XG4yNjMwOlx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4yNjMxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbjI2MzI6XHRcdGludCBzd2FwcGluZXNzID0gc2Nfc3dhcHBpbmVzcyhzYywgbWVtY2cpO1xuMjYzMzpcdFx0dTY0IGZyYWN0aW9uW0FOT05fQU5EX0ZJTEVdO1xuMjYzNDpcdFx0dTY0IGRlbm9taW5hdG9yID0gMDtcdC8qIGdjYyAqL1xuMjYzNTpcdFx0ZW51bSBzY2FuX2JhbGFuY2Ugc2Nhbl9iYWxhbmNlO1xuMjYzNjpcdFx0ZW51bSBscnVfbGlzdCBscnU7XG4yNjM3Olx0XG4yNjM4Olx0XHQvKlxuMjYzOTpcdFx0ICogUHJvYWN0aXZlIHJlY2xhaW0gaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBmb3IgYW5vbnltb3VzIG1lbW9yeSBvbmx5LlxuMjY0MDpcdFx0ICogU1dBUFBJTkVTU19BTk9OX09OTFkgaXMgc2V0IG9ubHkgb24gdGhlIHByb2FjdGl2ZSByZWNsYWltIHBhdGgsIHNvXG4yNjQxOlx0XHQgKiB3YXJuIGlmIGl0IHNob3dzIHVwIGVsc2V3aGVyZS4gV2hlbiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgKGUuZy5cbjI2NDI6XHRcdCAqIG5vIHN3YXApLCBiYWlsIG91dCBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBldmljdGluZyBmaWxlIHBhZ2VzLFxuMjY0MzpcdFx0ICogd2hpY2ggd291bGQgdmlvbGF0ZSB0aGUgYW5vbi1vbmx5IHNlbWFudGljcy5cbjI2NDQ6XHRcdCAqL1xuMjY0NTpcdFx0aWYgKHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFkpIHtcbjI2NDY6XHRcdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xuMjY0NzpcdFx0XHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuMjY0ODpcdFx0XHRcdG1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpO1xuMjY0OTpcdFx0XHRcdHJldHVybjtcbjI2NTA6XHRcdFx0fVxuMjY1MTpcdFx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XG4yNjUyOlx0XHRcdGdvdG8gb3V0O1xuMjY1MzpcdFx0fVxuMjY1NDpcdFxuMjY1NTpcdFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xuMjY1NjpcdFx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4yNjU3Olx0XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcbjI2NTg6XHRcdFx0Z290byBvdXQ7XG4yNjU5Olx0XHR9XG4yNjYwOlx0XG4yNjYxOlx0XHQvKlxuMjY2MjpcdFx0ICogR2xvYmFsIHJlY2xhaW0gd2lsbCBzd2FwIHRvIHByZXZlbnQgT09NIGV2ZW4gd2l0aCBub1xuMjY2MzpcdFx0ICogc3dhcHBpbmVzcywgYnV0IG1lbWNnIHVzZXJzIHdhbnQgdG8gdXNlIHRoaXMga25vYiB0b1xuMjY2NDpcdFx0ICogZGlzYWJsZSBzd2FwcGluZyBmb3IgaW5kaXZpZHVhbCBncm91cHMgY29tcGxldGVseSB3aGVuXG4yNjY1Olx0XHQgKiB1c2luZyB0aGUgbWVtb3J5IGNvbnRyb2xsZXImIzM5O3Mgc3dhcCBsaW1pdCBmZWF0dXJlIHdvdWxkIGJlXG4yNjY2Olx0XHQgKiB0b28gZXhwZW5zaXZlLlxuMjY2NzpcdFx0ICovXG4yNjY4Olx0XHRpZiAoY2dyb3VwX3JlY2xhaW0oc2MpIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzcykge1xuMjY2OTpcdFx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG4yNjcwOlx0XHRcdGdvdG8gb3V0O1xuMjY3MTpcdFx0fVxuMjY3MjpcdFxuMjY3MzpcdFx0LypcbjI2NzQ6XHRcdCAqIERvIG5vdCBhcHBseSBhbnkgcHJlc3N1cmUgYmFsYW5jaW5nIGNsZXZlcm5lc3Mgd2hlbiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBnZXRfc2Nhbl9jb3VudGAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBvZiBgZ2V0X3NjYW5fY291bnRgLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2FnZSBnaXZlcyBtZSBpbnNpZ2h0cyBpbnRvIGl0cyBwdXJwb3NlLCB0aGUgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24sIGFuZCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUgcGF0aHMgdGhhdCAqcmVseSogb24gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBmb3VuZGF0aW9uYWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciB1bmRlcnN0YW5kaW5nIGhvdyBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkmIzM5O20gZXNzZW50aWFsbHkgcGVyZm9ybWluZyBhIHF1aWNrIHN0YXRpYyBhbmFseXNpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBpbmZsdWVuY2UsIGxvb2tpbmcgZm9yIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhbmQgYW55IGFyZ3VtZW50cyBiZWluZyBwYXNzZWQuIFRpbWUgdG8gaHVudCBkb3duIHRob3NlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9zY2FuX2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjU1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtMjYyNi0gKi9cbm1tL3Ztc2Nhbi5jOjI2Mjc6c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbm1tL3Ztc2Nhbi5jLTI2MjgtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXG4tLVxubW0vdm1zY2FuLmM9NjEyMD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjEzOC1cbm1tL3Ztc2Nhbi5jOjYxMzk6XHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XG5tbS92bXNjYW4uYy02MTQwLVxuLS1cbm1tL3Ztc2Nhbi5jLTYxODEtXHRcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxubW0vdm1zY2FuLmM6NjE4MjpcdFx0ICogcHJvcG9ydGlvbmFsbHkgd2hhdCB3YXMgcmVxdWVzdGVkIGJ5IGdldF9zY2FuX2NvdW50KCkuIFdlXG5tbS92bXNjYW4uYy02MTgzLVx0XHQgKiBzdG9wIHJlY2xhaW1pbmcgb25lIExSVSBhbmQgcmVkdWNlIHRoZSBhbW91bnQgc2Nhbm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgUmVsZXZhbnQgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhZ2UgcmVjbGFpbSBhbmQgbWVtb3J5IGNncm91cHMuIFRoZSBpbml0aWFsIHRob3VnaHQgdHJhaW4gc3RhcnRlZCB3aXRoIGZvbGxvd2luZyB0aGUgY2FsbCBjaGFpbjogYHNocmlua19scnV2ZWNgIC0mZ3Q7IGBzaHJpbmtfbm9kZV9tZW1jZ3NgIC0mZ3Q7IGBzaHJpbmtfbm9kZWAgLSZndDsgYHNocmlua196b25lc2AgLSZndDsgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCAvIGBrc3dhcGRfc2hyaW5rX25vZGVgLiBJIGFsc28ga25vdyBgem9uZV9yZWNsYWltYWJsZV9wYWdlc2AgaXMgcmVsZXZhbnQuIFNvIEkgaGFkIGEgcXVpY2sgbWVudGFsIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNoZWNrOiBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbm9kZWAsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBga3N3YXBkX3Nocmlua19ub2RlYCwgYW5kIGBzaHJpbmtfcGFnZV9saXN0YC4KCkJ1dCwgd2FpdC4uLiB0aGVyZSYjMzk7cyB0aGF0IGNydWNpYWwgZ3VpZGVsaW5lIGZvciB0aGUgZnV6emluZyBhbmFseXNpcyBJIG5lZWQgdG8gcmVtZW1iZXIhICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLiYjMzQ7IFJpZ2h0LCBubyBnZW5lcmljIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gTGlzdGluZyB0aGVtIGp1c3QgY3JlYXRlcyBub2lzZS4gSSBuZWVkIHRvIGZvY3VzIG9uICpzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljKiBhbmQgZW50cnlwb2ludHMuIElmIHRoZXkgYXJlIGlubGluZWQsIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGNhbGxlcnMuCgpTbywgdGhlIHBsYW4gc2hpZnRzLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBjb21tb24gbG93IGxldmVsIG1ldGhvZHMgYW5kIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGlubGluZWQgYW5kIHdoYXQgaXNuJiMzOTt0LCBhbmQgYWxzbyBjaGVjayBvdGhlciBub24taW5saW5lIGZ1bmN0aW9ucyBpbiB0aGVyZS4gSSYjMzk7bGwgZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2hyaW5rX2xydXZlY2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfbnJfdG9fc2NhbmAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgbm90IGlubGluZWQgb3Igc3RhdGljLgoKRmlyc3QsIEkgY2hlY2tlZCBgZ2V0X3NjYW5fY291bnRgLiBJdCYjMzk7cyBzdGF0aWMgaW4gYG1tL3Ztc2Nhbi5jYCwgc28gSSYjMzk7bGwgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzLiBUaGVuIEkgY2hlY2tlZCBpZiBgc2hyaW5rX2xydXZlY2AgaXMgc3RhdGljLiBZZXMgaXQgaXMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHRvIHZlcmlmeSBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBnbG9iYWwuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBwaWVjZXMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9yZWNsYWltYWJsZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9MjQ3OT1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1MDItXHRcdCAqL1xubW0vY29tcGFjdGlvbi5jOjI1MDM6XHRcdGF2YWlsYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgLyBvcmRlcjtcbm1tL2NvbXBhY3Rpb24uYy0yNTA0LVx0XHRhdmFpbGFibGUgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTU5PXZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5tbS9pbnRlcm5hbC5oLTYxLS8qIG1tL3Ztc2Nhbi5jICovXG5tbS9pbnRlcm5hbC5oOjYyOnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG5tbS9pbnRlcm5hbC5oLTYzLXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NjIyPXNob3VsZF9yZWNsYWltX3JldHJ5KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDY2MS1cbm1tL3BhZ2VfYWxsb2MuYzo0NjYyOlx0XHRhdmFpbGFibGUgPSByZWNsYWltYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7XG5tbS9wYWdlX2FsbG9jLmMtNDY2My1cdFx0YXZhaWxhYmxlICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4tLVxubW0vdm1zY2FuLmM9NDExPXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00NDYtICovXG5tbS92bXNjYW4uYzo0NDc6dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxubW0vdm1zY2FuLmMtNDQ4LXtcbi0tXG5tbS92bXNjYW4uYz01NTU9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNTcyLVx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG5tbS92bXNjYW4uYzo1NzM6XHRcdHJlY2xhaW1hYmxlICYjNDM7PSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpO1xubW0vdm1zY2FuLmMtNTc0LVx0XHR3cml0ZV9wZW5kaW5nICYjNDM7PSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcbi0tXG5tbS92bXNjYW4uYz02Nzc1PXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjc4Ni1cdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgWk9ORV9OT1JNQUwpIHtcbm1tL3Ztc2Nhbi5jOjY3ODc6XHRcdGlmICghem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSBcdTAwMjZcdTAwMjYgem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpKVxubW0vdm1zY2FuLmMtNjc4OC1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgbW0vdm1zY2FuLmNgIGZvciBBbm9ueW1vdXMgUGFnZSBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBhbm9ueW1vdXMgcGFnZSByZWNsYW1hdGlvbiBidXNpbmVzcy4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBpcyB1c2VkLCBvciB3aGVyZSByZWxhdGVkIGZ1bmN0aW9ucyBjb21lIGludG8gcGxheSB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gSSYjMzk7bSB0aGlua2luZywgaW5zdGVhZCBvZiBqdXN0IHRoZSBpbW1lZGlhdGUgY29udGV4dCwgbGV0JiMzOTtzIHRyYWNlIG91dCB0aGUgbG9naWNhbCBjYWxscyBhbmQgdGhlIHBvdGVudGlhbCBmbG93LgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHN3ZWVwLiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgYmxvY2tzIG9mIGNvZGUsIHRoZXNlIHNlY3Rpb25zIHNob3VsZCBwcm92aWRlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBsaW5lcyA0MjYwLTQzMDAsIHRoZW4gbGluZXMgNTEyMC01MTUwLCBhbmQgZmluYWxseSwgbGluZXMgNjI1MC02MzE1LiBUaG9zZSBzaG91bGQgYmUgdGhlIGhvdHNwb3RzIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyNTU6XHR9XG40MjU2Olx0XG40MjU3Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNDI1ODpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIHNldCBwcm90ZWN0aW9uXG40MjU5Olx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjQyNjA6XHRcbjQyNjE6XHRzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQyNjI6XHR7XG40MjYzOlx0XHRpbnQgcHJpb3JpdHk7XG40MjY0Olx0XHR1bnNpZ25lZCBsb25nIHJlY2xhaW1hYmxlO1xuNDI2NTpcdFxuNDI2NjpcdFx0aWYgKHNjLVx1MDAzZXByaW9yaXR5ICE9IERFRl9QUklPUklUWSB8fCBzYy1cdTAwM2Vucl90b19yZWNsYWltIFx1MDAzYyBNSU5fTFJVX0JBVENIKVxuNDI2NzpcdFx0XHRyZXR1cm47XG40MjY4Olx0XHQvKlxuNDI2OTpcdFx0ICogRGV0ZXJtaW5lIHRoZSBpbml0aWFsIHByaW9yaXR5IGJhc2VkIG9uXG40MjcwOlx0XHQgKiAodG90YWwgXHUwMDNlXHUwMDNlIHByaW9yaXR5KSAqIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gbnJfdG9fcmVjbGFpbSxcbjQyNzE6XHRcdCAqIHdoZXJlIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gaW5hY3RpdmUgLyB0b3RhbC5cbjQyNzI6XHRcdCAqL1xuNDI3MzpcdFx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xuNDI3NDpcdFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxuNDI3NTpcdFx0XHRyZWNsYWltYWJsZSAmIzQzOz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcbjQyNzY6XHRcbjQyNzc6XHRcdC8qIHJvdW5kIGRvd24gcmVjbGFpbWFibGUgYW5kIHJvdW5kIHVwIHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0gKi9cbjQyNzg6XHRcdHByaW9yaXR5ID0gZmxzX2xvbmcocmVjbGFpbWFibGUpIC0gMSAtIGZsc19sb25nKHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0gLSAxKTtcbjQyNzk6XHRcbjQyODA6XHRcdC8qXG40MjgxOlx0XHQgKiBUaGUgZXN0aW1hdGlvbiBpcyBiYXNlZCBvbiBMUlUgcGFnZXMgb25seSwgc28gY2FwIGl0IHRvIHByZXZlbnRcbjQyODI6XHRcdCAqIG92ZXJzaG9vdHMgb2Ygc2hyaW5rZXIgb2JqZWN0cyBieSBsYXJnZSBtYXJnaW5zLlxuNDI4MzpcdFx0ICovXG40Mjg0Olx0XHRzYy1cdTAwM2Vwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpO1xuNDI4NTpcdH1cbjQyODY6XHRcbjQyODc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbjQyODg6XHR7XG40Mjg5Olx0XHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgYSBjb2RpbmcgcHJvYmxlbToKCioqRXhhbWluaW5nIGBnZXRfbnJfdG9fc2NhbmAgYXQgNTEyMCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgZ2V0X25yX3RvX3NjYW5gLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBhcmVhIG9mIDUxMjAuIEkmIzM5O3ZlIGdvdCB0aGlzIG5pZ2dsaW5nIHN1c3BpY2lvbiB0aGVyZSYjMzk7cyBzb21ldGhpbmcgZ29pbmcgb24gd2l0aCB0aGF0IHBhcnRpY3VsYXIgdGhyZXNob2xkLCBvciBtYXliZSB0aGUgbG9naWMgc3Vycm91bmRpbmcgaXQuIEl0IGNvdWxkIGJlIGFuIGVkZ2UgY2FzZSBJIG1pc3NlZCwgYSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciwgb3IgZXZlbiBhbiBpbnRlcmFjdGlvbiB3aXRoIHNvbWUgb3RoZXIgY29tcG9uZW50IHRoYXQmIzM5O3MgY2F1c2luZyBwcm9ibGVtcy4gR3JhYmJpbmcgdGhlIGNvbnRleHQgYXJvdW5kIDUxMjAgZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGxlZCBpbiB0aGF0IHZpY2luaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTIwOlx0XHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcTtcbjUxMjE6XHR9XG41MTIyOlx0XG41MTIzOlx0c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjUxMjQ6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBzd2FwcGluZXNzKVxuNTEyNTpcdHtcbjUxMjY6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwgZXZpY3RhYmxlO1xuNTEyNzpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuNTEyODpcdFxuNTEyOTpcdFx0LypcbjUxMzA6XHRcdCAqIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seS5cbjUxMzE6XHRcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xuNTEzMjpcdFx0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXG41MTMzOlx0XHQgKiBubyBzd2FwKSwgcmV0dXJuIDAgdG8gc2tpcCB0aGUgc2NhbiBlbnRpcmVseSwgYXZvaWRpbmcgdXNlbGVzcyBzY2FuXG41MTM0Olx0XHQgKiB3b3JrIHdoZW4gdGhlcmUgaXMgbm90aGluZyBlbGlnaWJsZSB0byByZWNsYWltLlxuNTEzNTpcdFx0ICovXG41MTM2Olx0XHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xuNTEzNzpcdFx0XHRXQVJOX09OX09OQ0UoIXNjLVx1MDAzZXByb2FjdGl2ZSk7XG41MTM4Olx0XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxuNTEzOTpcdFx0XHRcdHJldHVybiAwO1xuNTE0MDpcdFx0fVxuNTE0MTpcdFxuNTE0MjpcdFx0ZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7XG41MTQzOlx0XG41MTQ0Olx0XHQvKiB0cnkgdG8gc2NyYXBlIGFsbCBpdHMgbWVtb3J5IGlmIHRoaXMgbWVtY2cgd2FzIGRlbGV0ZWQgKi9cbjUxNDU6XHRcdGlmICghbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKVxuNTE0NjpcdFx0XHRyZXR1cm4gZXZpY3RhYmxlO1xuNTE0NzpcdFxuNTE0ODpcdFx0bnJfdG9fc2NhbiA9IGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKG1lbWNnLCBzYywgZXZpY3RhYmxlKTtcbjUxNDk6XHRcdG5yX3RvX3NjYW4gXHUwMDNlXHUwMDNlPSBzYy1cdTAwM2Vwcmlvcml0eTtcbjUxNTA6XHRcbjUxNTE6XHRcdHJldHVybiBucl90b19zY2FuO1xuNTE1MjpcdH1cbjUxNTM6XHRcbjUxNTQ6XHRzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBSZWNsYW1hdGlvbiBMb29wKioKCk9rYXksIHNvIEkmIzM5O20gaG9taW5nIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoZSBjb2RlIGFyb3VuZCBsaW5lIDYyNjAgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJiMzOTttIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIGEgc2NlbmFyaW8gd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyByZXR1cm5pbmcgYW4gdW5leHBlY3RlZCB2YWx1ZSwgcGVyaGFwcyBsZWFkaW5nIHRvIGFuIGluZmluaXRlIGxvb3Agb3Igc29tZSBvdGhlciByZWNsYW1hdGlvbi1yZWxhdGVkIHByb2JsZW0uIEkgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgbG9naWMgd2l0aGluIGFuZCBhcm91bmQgdGhhdCBzcGVjaWZpYyBsaW5lLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGF0IHRoYXQgcG9pbnQgYW5kIG1lbnRhbGx5IHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB3aGF0IGNvbmRpdGlvbnMgY291bGQgY2F1c2UgYHNob3VsZF9jb250aW51ZV9yZWNsYWltYCB0byBiZWhhdmUgaW4gYW4gdW5leHBlY3RlZCBtYW5uZXIgaXMga2V5LiBHb3R0YSBmaWd1cmUgb3V0IHdoYXQgY291bGQgYmUgdHJpZ2dlcmluZyB0aGlzIGxvb3AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyNjA6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsXG42MjYxOlx0XHRcdFx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjI2MjpcdHtcbjYyNjM6XHRcdHVuc2lnbmVkIGxvbmcgcGFnZXNfZm9yX2NvbXBhY3Rpb247XG42MjY0Olx0XHR1bnNpZ25lZCBsb25nIGluYWN0aXZlX2xydV9wYWdlcztcbjYyNjU6XHRcdGludCB6O1xuNjI2NjpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG42MjY3Olx0XG42MjY4Olx0XHQvKiBJZiBub3QgaW4gcmVjbGFpbS9jb21wYWN0aW9uIG1vZGUsIHN0b3AgKi9cbjYyNjk6XHRcdGlmICghaW5fcmVjbGFpbV9jb21wYWN0aW9uKHNjKSlcbjYyNzA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuNjI3MTpcdFxuNjI3MjpcdFx0LypcbjYyNzM6XHRcdCAqIFN0b3AgaWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55IHBhZ2VzIGZyb20gdGhlIGxhc3QgU1dBUF9DTFVTVEVSX01BWFxuNjI3NDpcdFx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLiBUaGlzIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXJcbjYyNzU6XHRcdCAqIHdpdGggdGhlIHJpc2sgcmVjbGFpbS9jb21wYWN0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGFsbG9jYXRpb24gYXR0ZW1wdFxuNjI3NjpcdFx0ICogZmFpbHMuIEluIHRoZSBwYXN0IHdlIGhhdmUgdHJpZWQgaGFyZGVyIGZvciBfX0dGUF9SRVRSWV9NQVlGQUlMXG42Mjc3Olx0XHQgKiBhbGxvY2F0aW9ucyB0aHJvdWdoIHJlcXVpcmluZyB0aGF0IHRoZSBmdWxsIExSVSBsaXN0IGhhcyBiZWVuIHNjYW5uZWRcbjYyNzg6XHRcdCAqIGZpcnN0LCBieSBhc3N1bWluZyB0aGF0IHplcm8gZGVsdGEgb2Ygc2MtXHUwMDNlbnJfc2Nhbm5lZCBtZWFucyBmdWxsIExSVVxuNjI3OTpcdFx0ICogc2NhbiwgYnV0IHRoYXQgYXBwcm94aW1hdGlvbiB3YXMgd3JvbmcsIGFuZCB0aGVyZSB3ZXJlIGNvcm5lciBjYXNlc1xuNjI4MDpcdFx0ICogd2hlcmUgYWx3YXlzIGEgbm9uLXplcm8gYW1vdW50IG9mIHBhZ2VzIHdlcmUgc2Nhbm5lZC5cbjYyODE6XHRcdCAqL1xuNjI4MjpcdFx0aWYgKCFucl9yZWNsYWltZWQpXG42MjgzOlx0XHRcdHJldHVybiBmYWxzZTtcbjYyODQ6XHRcbjYyODU6XHRcdC8qIElmIGNvbXBhY3Rpb24gd291bGQgZ28gYWhlYWQgb3IgdGhlIGFsbG9jYXRpb24gd291bGQgc3VjY2VlZCwgc3RvcCAqL1xuNjI4NjpcdFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCB6LCBzYy1cdTAwM2VyZWNsYWltX2lkeCkge1xuNjI4NzpcdFx0XHR1bnNpZ25lZCBsb25nIHdhdGVybWFyayA9IG1pbl93bWFya19wYWdlcyh6b25lKTtcbjYyODg6XHRcbjYyODk6XHRcdFx0LyogQWxsb2NhdGlvbiBjYW4gYWxyZWFkeSBzdWNjZWVkLCBub3RoaW5nIHRvIGRvICovXG42MjkwOlx0XHRcdGlmICh6b25lX3dhdGVybWFya19vayh6b25lLCBzYy1cdTAwM2VvcmRlciwgd2F0ZXJtYXJrLFxuNjI5MTpcdFx0XHRcdFx0ICAgICAgc2MtXHUwMDNlcmVjbGFpbV9pZHgsIDApKVxuNjI5MjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjYyOTM6XHRcbjYyOTQ6XHRcdFx0aWYgKGNvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgc2MtXHUwMDNlb3JkZXIsIHdhdGVybWFyayxcbjYyOTU6XHRcdFx0XHRcdFx0c2MtXHUwMDNlcmVjbGFpbV9pZHgpKVxuNjI5NjpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjYyOTc6XHRcdH1cbjYyOTg6XHRcbjYyOTk6XHRcdC8qXG42MzAwOlx0XHQgKiBJZiB3ZSBoYXZlIG5vdCByZWNsYWltZWQgZW5vdWdoIHBhZ2VzIGZvciBjb21wYWN0aW9uIGFuZCB0aGVcbjYzMDE6XHRcdCAqIGluYWN0aXZlIGxpc3RzIGFyZSBsYXJnZSBlbm91Z2gsIGNvbnRpbnVlIHJlY2xhaW1pbmdcbjYzMDI6XHRcdCAqL1xuNjMwMzpcdFx0cGFnZXNfZm9yX2NvbXBhY3Rpb24gPSBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcik7XG42MzA0Olx0XHRpbmFjdGl2ZV9scnVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xuNjMwNTpcdFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxuNjMwNjpcdFx0XHRpbmFjdGl2ZV9scnVfcGFnZXMgJiM0Mzs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XG42MzA3Olx0XG42MzA4Olx0XHRyZXR1cm4gaW5hY3RpdmVfbHJ1X3BhZ2VzIFx1MDAzZSBwYWdlc19mb3JfY29tcGFjdGlvbjtcbjYzMDk6XHR9XG42MzEwOlx0XG42MzExOlx0c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjMxMjpcdHtcbjYzMTM6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cgPSBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cDtcbjYzMTQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODIzCgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDEwNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBmb3IgVGFyZ2V0ZWQgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoaXMgbWVtb3J5IHJlY2xhbWF0aW9uIHBhdGNoLiBGaXJzdCwgSSBzZWUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGFuZCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIOKAkyB0aGV5JiMzOTtyZSB0aGUgZGlyZWN0IGZvY3VzLCBiZWluZyBpbmxpbmUgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AuIFNpbmNlIHRoZXkmIzM5O3JlIGlubGluZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZWlyIGNhbGxlcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGluIGBGb2N1c1N5bWJvbHNgLgoKVGhlIGNhbGxlcnMgb2YgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGFyZSBgZ2V0X3NjYW5fY291bnRgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgLCBgZ2V0X25yX3RvX3NjYW5gLCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLCBhbmQgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLiBGcm9tIHRoZXJlLCBgZ2V0X3NjYW5fY291bnRgIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2AsIHdoaWNoIGlzIGFsc28gY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAgdmlhIGBzaHJpbmtfbm9kZV9tZW1jZ3NgLCBhbmQgYHNldF9pbml0aWFsX3ByaW9yaXR5YCBpcyBjYWxsZWQgYnkgYHNocmlua19ub2RlYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgKmFjdHVhbGx5KiByZWxldmFudCBiYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLgoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgdG8gbGlzdCB0aGUgZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgbG9naWMsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMuIFRoZSBrZXkgaXMgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zLiBTbywgSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGluY2x1ZGUgZ2VuZXJpYyBhbGxvY2F0b3JzL2RlYWxsb2NhdG9ycy4KCmBzaHJpbmtfbHJ1dmVjYCBhbmQgYGdldF9zY2FuX2NvdW50YCBhcmUgb25seSBhY3RpdmUgZHVyaW5nIHBhZ2UgcmVjbGFtYXRpb24sIGFuZCB0aHVzIGFyZSBub3QgdWJpcXVpdG91cy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIGFsc28gcnVucyBkdXJpbmcgem9uZSBjaGVja3MsIGNvbXBhY3Rpb24sIGFuZCByZWNsYWltIHJldHJpZXMuIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgdGhlIGV4YWN0IGZ1bmN0aW9ucyBtb2RpZmllZCwgc28gdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgaW5jbHVkZWQuIFRoZXJlZm9yZSwgdGhlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGJlOiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBhbmQgYHNldF9pbml0aWFsX3ByaW9yaXR5YC4KCk5leHQsIHRoZSBjb25maWd1cmF0aW9ucy4gYENPTkZJR19TV0FQYCBpcyBleHBsaWNpdGx5IGluIGAjaWZkZWYgQ09ORklHX1NXQVBgLiBgQ09ORklHX01FTUNHYCBpcyBhbHNvIHVzZWQsIGFsdGhvdWdoIGl0IGNvbXBpbGVzIHdpdGhvdXQgaXQgZHVlIHRvIHN0dWJzLiBIb3dldmVyLCBlbmFibGluZyBib3RoIGFsbG93cyBmb3IgdGVzdGluZyBhbGwgY29kZSBicmFuY2hlcyBvZiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGlmIGBTV0FQYCBuZWVkcyBhbnl0aGluZyBlbHNlIOKAkyBpdCBkZXBlbmRzIG9uIGAhQVJDSF9OT19TV0FQYCBpbiBgbW0vS2NvbmZpZ2AsIHNvIHRob3NlIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlncy4KClRvIHN1bW1hcml6ZSwgbXkgcmF0aW9uYWxlOiBUaGlzIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYW1hdGlvbiBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGFkZGluZyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIExSVSBsaXN0cyB1bmRlciBgR0ZQX05PSU9gIHdoZW4gdGhlIG51bWJlciBvZiBzd2FwY2FjaGVkIHBhZ2VzIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbnltb3VzIExSVSBzaXplLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgcGFnZSByZWNsYW1hdGlvbiBkZWNpc2lvbnMgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzIGFuZCBnbG9iYWwgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoZXJlZm9yZToKCi0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZQotICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFtYXRpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgYWRkaW5nIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCB0byBhdm9pZCBzY2FubmluZyBhbm9ueW1vdXMgTFJVIGxpc3RzIHVuZGVyIGBHRlBfTk9JT2Agd2hlbiB0aGUgbnVtYmVyIG9mIHN3YXBjYWNoZWQgcGFnZXMgaXMgbG93IHJlbGF0aXZlIHRvIHRoZSBhbm9ueW1vdXMgTFJVIHNpemUuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIHJlY2xhbWF0aW9uIGRlY2lzaW9ucyBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYW5kIGdsb2JhbCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWVtb3J5IHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS4KLSAgIGBGb2N1c1N5bWJvbHNgOiBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgLCBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgCi0gICBgRW5hYmxlQ29uZmlnc2A6IGBTV0FQYCwgYE1FTUNHYAoKTm93IEkmIzM5O20gcmVhZHkgdG8gcmV2aWV3IHRoZSByZXN1bHRzIGluIHRoZSByZXF1aXJlZCBmb3JtYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVjbGFpbWFibGVfYW5vbl9pc19sb3cmIzM0OywKICAgICYjMzQ7Y2FuX3JlY2xhaW1fYW5vbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtnZXRfc2Nhbl9jb3VudCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3pvbmVfcmVjbGFpbWFibGVfcGFnZXMmIzM0OywKICAgICYjMzQ7c2V0X2luaXRpYWxfcHJpb3JpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlY2xhaW1hYmxlX2Fub25faXNfbG93JiMzNDssCiAgICAmIzM0O2Nhbl9yZWNsYWltX2Fub25fcGFnZXMmIzM0OywKICAgICYjMzQ7Z2V0X3NjYW5fY291bnQmIzM0OywKICAgICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7LAogICAgJiMzNDt6b25lX3JlY2xhaW1hYmxlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3NldF9pbml0aWFsX3ByaW9yaXR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgYWRkaW5nIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KCkgdG8gc2tpcCBzY2FubmluZyBhbm9ueW1vdXMgcGFnZXMgdW5kZXIgR0ZQX05PSU8gcmVjbGFpbSB3aGVuIHRoZSBzd2FwY2FjaGUgaXMgbG93IHJlbGF0aXZlIHRvIHRoZSBhbm9uIExSVS4gVGhpcyBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgYWNyb3NzIGdsb2JhbCBhbmQgbWVtY2cgcGFnZSByZWNsYWltIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgYWxsb2NhdGlvbiBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgaGV1cmlzdGljIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpbiBgbW0vdm1zY2FuLmNgIHRvIGF2b2lkIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyBkdXJpbmcgYEdGUF9OT0lPYCByZWNsYWltIHdoZW4gc3dhcGNhY2hlIHBhZ2VzIGFyZSBsb3cgcmVsYXRpdmUgdG8gdG90YWwgYW5vbnltb3VzIHBhZ2VzLiBcblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgaW50ZXJuYWwgbWVtb3J5IHJlY2xhaW0gY29udHJvbCBmbG93IGJhc2VkIG9uIG5vZGUvbHJ1dmVjIHBhZ2Ugc3RhdGUgc3RhdGlzdGljcyAoYE5SX0lOQUNUSVZFX0FOT05gLCBgTlJfQUNUSVZFX0FOT05gLCBgTlJfU1dBUENBQ0hFYCkgYW5kIHRoZSBmbGFncyBpbiBgc3RydWN0IHNjYW5fY29udHJvbGAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrcyBvciBwYWRkaW5nIGlzc3VlcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ODQ1NTNmYmQyMzQ2MjgwMjc1MDkwYWNmNzMyNzBhM2ExYjdlMjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjI1OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAyNDVmNjhjNzViMjg5Li4yMjZjYmQ5ZTQ4MzYyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMzYyLDIwICYjNDM7MzYyLDcyIEBAIHN0YXRpYyBib29sIGNhbl9kZW1vdGUoaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJcmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19TV0FQCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCWludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQSBHRlBfTk9JTyByZWNsYWltZXIgY2FuIG9ubHkgcmVjbGFpbSBhbm9uIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUKJiM0MzsJICogc3dhcGNhY2hlIChhZGRpbmcgYW5vbiB0byB0aGUgc3dhcGNhY2hlIG5lZWRzIElPKS4gV2hlbiBzd2FwY2FjaGUgaXMKJiM0MzsJICogZmFyIGJlbG93IHRoZSBhbm9uIExSVSwgc2Nhbm5pbmcgYW5vbiByZWNsYWltcyBub3RoaW5nIGFuZCBvbmx5IGJ1cm5zCiYjNDM7CSAqIENQVS4gVGhlIDEvNjQgdGhyZXNob2xkIGtlZXBzIHRoaXMgdG8gdGhlIGNhc2Ugd2hlcmUgYW5vbiBpcwomIzQzOwkgKiBlZmZlY3RpdmVseSB1bnJlY2xhaW1hYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzYyB8fCAoc2MtJmd0O2dmcF9tYXNrICZhbXA7IF9fR0ZQX0lPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRklYTUU6IE1HTFJVIGRvZXNuJiMzOTt0IGZ1bGx5IHJlc3BlY3QgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGZvciB0aGUKJiM0MzsJICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfZ2VuX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnKSB7CiYjNDM7CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwomIzQzOwomIzQzOwkJYW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCQkgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pOwomIzQzOwkJc3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYW5vbl9wYWdlcyA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCQkgICAgIG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0FOT04pOwomIzQzOwkJc3dhcGNhY2hlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TV0FQQ0FDSEUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzd2FwY2FjaGUgJmx0OyAoYW5vbl9wYWdlcyAmZ3Q7Jmd0OyA2KTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJaW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19TV0FQICovCiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlpZiAobWVtY2cgPT0gTlVMTCkgewogCQkvKgotCQkgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlCi0JCSAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT8KJiM0MzsJCSAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUgc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlPwomIzQzOwkJICogQW5kIHVuZGVyIEdGUF9OT0lPLCBpcyB0aGVyZSBlbm91Z2ggc3dhcGNhY2hlZCBhbm9uIHRvIG1ha2UKJiM0MzsJCSAqIHNjYW5uaW5nIGFub24gd29ydGh3aGlsZT8KIAkJICovCi0JCWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZndDsgMCkKJiM0MzsJCWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZndDsgMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSkKIAkJCXJldHVybiB0cnVlOwogCX0gZWxzZSB7Ci0JCS8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi8KLQkJaWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpICZndDsgMCkKJiM0MzsJCS8qCiYjNDM7CQkgKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQsIGFuZCB1bmRlciBHRlBfTk9JTyBkb2VzCiYjNDM7CQkgKiBpdCBoYXZlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZSBzY2FubmluZyB3b3J0aHdoaWxlPwomIzQzOwkJICovCiYjNDM7CQlpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIGZvciBLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGVjaWRlIGlmIHRoaXMga2VybmVsIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgdGhpcyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uLiBVbmRlciBgQ09ORklHX1NXQVBgIGl0IGxvb2tzIGxpa2UgYSBuZXcgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHNjYW5uaW5nIGFub24gcGFnZXMgZHVyaW5nIHJlY2xhaW0sIHNwZWNpZmljYWxseSB3aGVuIHN3YXBjYWNoZSBpcyBsb3cgYW5kIHdlJiMzOTtyZSAqbm90KiBhbGxvd2VkIEkvTywgb3IgaWYgTFJVIGdlbiBpcyBlbmFibGVkLiBJdCYjMzk7cyBncmFiYmluZyBwYWdlIHN0YXRzIOKAkyBgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGFuZCBgTlJfU1dBUENBQ0hFYCDigJMgZnJvbSBgbHJ1dmVjX3BhZ2Vfc3RhdGVgIGFuZCBgbm9kZV9wYWdlX3N0YXRlYCwgdGhlbiBjb21wYXJpbmcgYHN3YXBjYWNoZWAgdG8gYSBmcmFjdGlvbiBvZiBgYW5vbl9wYWdlc2AuIEl0JiMzOTtzIHVzZWQgaW5zaWRlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYC4KCkFscmlnaHQsIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyAqdW5saWtlbHkqIHRvIGJlIGEgS01TQU4gY2FuZGlkYXRlLiBMZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOiBEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55IGRhdGEgdGhhdCBlbmRzIHVwIGluIHVzZXIgc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBJdCYjMzk7cyBhbGwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWxzLiBJcyBpdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vcGUuIEl0ICpkb2VzKiB1c2Ugc29tZSB2YXJpYWJsZXMgKGBzY2AsIGBtZW1jZ2AsIGBuaWRgLCBgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgKSwgYnV0IHRoZSBhcmd1bWVudHMgYHNjYCwgYG1lbWNnYCwgYG5pZGAgYXJlIHN0YW5kYXJkIHBhcmFtZXRlcnMsIHdlbGwtZGVmaW5lZCB3aXRoaW4gdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLiBBbmQgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYCBhcmUgbG9hZGVkIGZyb20gZXhpc3RpbmcgcGFnZSBzdGF0ZSBzdHJ1Y3R1cmVzLiBObyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBEb2VzIGl0IHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hpbmc/IE5vLiBJdCBkb2VzbiYjMzk7dCBhbGxvY2F0ZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcy4gSXQmIzM5O3MgcHVyZSByZWNsYWltIGxvZ2ljLCBhIGhldXJpc3RpYyBmb3Igb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBub3QgYWx0ZXJpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucywgZWl0aGVyLgoKVGhpcyBpcyBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gYmUgcmVsYXRlZCB0byByZWNsYWltIGxvZ2ljIGVycm9ycywgd2hpY2ggbWlnaHQgY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgcG90ZW50aWFsIE5VTEwgZGVyZWYgLyBsb2NrIGlzc3VlcywgYnV0IHRoZXNlIGFyZSBzdGFuZGFyZCBidWdzLCBub3QgcmVhbGx5IHRoZSBraW5kIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFdlIHdhbnQgdG8gYmUgc3VyZSB0aG91Z2gsIGxldCYjMzk7cyB2ZXJpZnkgd2hlcmUgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgIGlzIGNhbGxlZCwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyB3ZWlyZCBoYXBwZW5pbmcgb3V0c2lkZSBvdXIgcHVydmlldy4gSXQmIzM5O3MgYWxyZWFkeSB1c2VkIGludGVybmFsbHksIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBpdCBpc24mIzM5O3QgYmVpbmcgdXNlZCBpbiBzb21lIHN0cmFuZ2Ugd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MzY2PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtMzgyLVx0Lypcbm1tL3Ztc2Nhbi5jOjM4MzpcdCAqIEZJWE1FOiBNR0xSVSBkb2VzbiYjMzk7dCBmdWxseSByZXNwZWN0IGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBmb3IgdGhlXG5tbS92bXNjYW4uYy0zODQtXHQgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93LlxuLS1cbm1tL3Ztc2Nhbi5jPTQwND1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQxMC1cbm1tL3Ztc2Nhbi5jOjQxMTpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy00MTItXHRcdFx0XHRcdCAgaW50IG5pZCxcbi0tXG5tbS92bXNjYW4uYz00NDc9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1Mi1cdFx0em9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NDUzOlx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgem9uZV90b19uaWQoem9uZSksIE5VTEwpKVxubW0vdm1zY2FuLmMtNDU0LVx0XHRuciAmIzQzOz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfSU5BQ1RJVkVfQU5PTikgJiM0Mztcbi0tXG5tbS92bXNjYW4uYz0yNjI3PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMjY0Ni1cdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmM6MjY0NzpcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbm1tL3Ztc2Nhbi5jLTI2NDgtXHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4tLVxubW0vdm1zY2FuLmMtMjY1NS1cdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cbm1tL3Ztc2Nhbi5jOjI2NTY6XHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbm1tL3Ztc2Nhbi5jLTI2NTctXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcbi0tXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNzMtXHRyZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XG5tbS92bXNjYW4uYzo0Mjc0Olx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxubW0vdm1zY2FuLmMtNDI3NS1cdFx0cmVjbGFpbWFibGUgJiM0Mzs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XG4tLVxubW0vdm1zY2FuLmM9NTEyMz1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUxMzctXHRcdFdBUk5fT05fT05DRSghc2MtXHUwMDNlcHJvYWN0aXZlKTtcbm1tL3Ztc2Nhbi5jOjUxMzg6XHRcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKVxubW0vdm1zY2FuLmMtNTEzOS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5tbS92bXNjYW4uYz02MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYzMDQtXHRpbmFjdGl2ZV9scnVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xubW0vdm1zY2FuLmM6NjMwNTpcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTYzMDYtXHRcdGluYWN0aXZlX2xydV9wYWdlcyAmIzQzOz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNAoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IFVubmVjZXNzYXJ5IEhlcmUqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoLCBhbmQgaG9uZXN0bHksIGl0JiMzOTtzIHByZXR0eSBjbGVhbi4gVGhlIGNoYW5nZXMgYXJlIGFsbCBmb2N1c2VkIG9uIG9wdGltaXppbmcgcGFnZSByZWNsYWltIGhldXJpc3RpY3MsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgcGFnZXMgYW5kIGxvdyBzd2FwY2FjaGUgc2NlbmFyaW9zIHVuZGVyIGBHRlBfTk9JT2AuIE5vIG1ham9yIHJlZCBmbGFncyBhcmUganVtcGluZyBvdXQgYXQgbWUuCgpJJiMzOTttIHNlZWluZyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMsIHdoaWNoIGlzIGEgaHVnZSByZWxpZWYgZnJvbSBhIGNvbXBsZXhpdHkgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBmYW50YXN0aWMg4oCTIG5vIHJpc2sgb2YgYGNvcHlfdG9fdXNlcmAgaXNzdWVzLCBpbmZvIGxlYWtzLCBvciBhbnkgcG90ZW50aWFsIHBhZGRpbmctcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMuIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIG9yIHByb3BhZ2F0aW9uIGlzc3Vlcy4gRXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGJhc2VkIG9uIGNhbGN1bGF0aW9ucyB1c2luZyBleGlzdGluZyBub2RlIGFuZCBscnV2ZWMgc3RhdGlzdGljcywgYW5kIHRoZSBgc2Nhbl9jb250cm9sYCBwb2ludGVycyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgdGhlIGxhY2sgb2YgYW55IG9idmlvdXMgZGF0YS1yZWxhdGVkIGdvdGNoYXMsIEtNU0FOIHNlZW1zIGVudGlyZWx5IHVubmVjZXNzYXJ5IGhlcmUuIEkmIzM5O2QgZXhwZWN0IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyB0byBiZSBzdWZmaWNpZW50LiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LgoKQWxyaWdodCwgbGV0JiMzOTtzIGdvIGFoZWFkIGFuZCB0cmlnZ2VyIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBUaGlzIHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgaGV1cmlzdGljIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpbiBgbW0vdm1zY2FuLmNgIHRvIGF2b2lkIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyBkdXJpbmcgYEdGUF9OT0lPYCByZWNsYWltIHdoZW4gc3dhcGNhY2hlIHBhZ2VzIGFyZSBsb3cgcmVsYXRpdmUgdG8gdG90YWwgYW5vbnltb3VzIHBhZ2VzLiBcblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgaW50ZXJuYWwgbWVtb3J5IHJlY2xhaW0gY29udHJvbCBmbG93IGJhc2VkIG9uIG5vZGUvbHJ1dmVjIHBhZ2Ugc3RhdGUgc3RhdGlzdGljcyAoYE5SX0lOQUNUSVZFX0FOT05gLCBgTlJfQUNUSVZFX0FOT05gLCBgTlJfU1dBUENBQ0hFYCkgYW5kIHRoZSBmbGFncyBpbiBgc3RydWN0IHNjYW5fY29udHJvbGAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5IGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrcyBvciBwYWRkaW5nIGlzc3VlcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBpbnRlcm5hbCBtZW1vcnkgcmVjbGFpbSBjb250cm9sIGZsb3cgYmFzZWQgb24gbm9kZS9scnV2ZWMgcGFnZSBzdGF0ZSBzdGF0aXN0aWNzIChgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGBOUl9TV0FQQ0FDSEVgKSBhbmQgdGhlIGZsYWdzIGluIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWtzIG9yIHBhZGRpbmcgaXNzdWVzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNToyNS40OTMyODIyMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc3MjAwNTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2V0X2luaXRpYWxfcHJpb3JpdHlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIGludGVybmFsIG1lbW9yeSByZWNsYWltIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBub2RlL2xydXZlYyBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgKGBOUl9JTkFDVElWRV9BTk9OYCwgYE5SX0FDVElWRV9BTk9OYCwgYE5SX1NXQVBDQUNIRWApIGFuZCB0aGUgZmxhZ3MgaW4gYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVha3Mgb3IgcGFkZGluZyBpc3N1ZXMpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MjUuNDkzMjg2Mzk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczNTQyMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjI1OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yMjZjYmQ5ZTQ4MzYyIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMzYyLDIwICszNjIsNzIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4gXFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX1NXQVBcXG4rc3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0aW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuK3tcXG4rXFx0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xcbitcXHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgR0ZQX05PSU8gcmVjbGFpbWVyIGNhbiBvbmx5IHJlY2xhaW0gYW5vbiB0aGF0IGlzIGFscmVhZHkgaW4gdGhlXFxuK1xcdCAqIHN3YXBjYWNoZSAoYWRkaW5nIGFub24gdG8gdGhlIHN3YXBjYWNoZSBuZWVkcyBJTykuIFdoZW4gc3dhcGNhY2hlIGlzXFxuK1xcdCAqIGZhciBiZWxvdyB0aGUgYW5vbiBMUlUsIHNjYW5uaW5nIGFub24gcmVjbGFpbXMgbm90aGluZyBhbmQgb25seSBidXJuc1xcbitcXHQgKiBDUFUuIFRoZSAxLzY0IHRocmVzaG9sZCBrZWVwcyB0aGlzIHRvIHRoZSBjYXNlIHdoZXJlIGFub24gaXNcXG4rXFx0ICogZWZmZWN0aXZlbHkgdW5yZWNsYWltYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghc2MgfHwgKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRklYTUU6IE1HTFJVIGRvZXNuJ3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxcbitcXHQgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAobWVtY2cpIHtcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4rXFxuK1xcdFxcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4rXFx0XFx0XFx0ICAgICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKTtcXG4rXFx0XFx0c3dhcGNhY2hlID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9TV0FQQ0FDSEUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSArXFxuK1xcdFxcdFxcdCAgICAgbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfQU5PTik7XFxuK1xcdFxcdHN3YXBjYWNoZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfU1dBUENBQ0hFKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHN3YXBjYWNoZSBcXHUwMDNjIChhbm9uX3BhZ2VzIFxcdTAwM2VcXHUwMDNlIDYpO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK1xcdFxcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuKyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xcbitcXG4gc3RhdGljIGlubGluZSBib29sIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0aWYgKG1lbWNnID09IE5VTEwpIHtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZVxcbi1cXHRcXHQgKiBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XFxuK1xcdFxcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmUgc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xcbitcXHRcXHQgKiBBbmQgdW5kZXIgR0ZQX05PSU8sIGlzIHRoZXJlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZVxcbitcXHRcXHQgKiBzY2FubmluZyBhbm9uIHdvcnRod2hpbGU/XFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcXHUwMDNlIDApXFxuK1xcdFxcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cXG4tXFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMClcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0LCBhbmQgdW5kZXIgR0ZQX05PSU8gZG9lc1xcbitcXHRcXHQgKiBpdCBoYXZlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZSBzY2FubmluZyB3b3J0aHdoaWxlP1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjI2Ljg2NzQ4NDY0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTIyOTQ5NjAwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWNsYWltYWJsZV9hbm9uX2lzX2xvd1wiLFxuICAgIFwiY2FuX3JlY2xhaW1fYW5vbl9wYWdlc1wiLFxuICAgIFwiZ2V0X3NjYW5fY291bnRcIixcbiAgICBcInNocmlua19scnV2ZWNcIixcbiAgICBcInpvbmVfcmVjbGFpbWFibGVfcGFnZXNcIixcbiAgICBcInNldF9pbml0aWFsX3ByaW9yaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiOTg0NTUzZmJkMjM0NjI4MDI3NTA5MGFjZjczMjcwYTNhMWI3ZTI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzoyNToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLjIyNmNiZDllNDgzNjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0zNjIsMjAgKzM2Miw3MiBAQCBzdGF0aWMgYm9vbCBjYW5fZGVtb3RlKGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0cmV0dXJuICFub2Rlc19lbXB0eShhbGxvd2VkX21hc2spO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX1NXQVBcbitzdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XG4rXHR1bnNpZ25lZCBsb25nIGFub25fcGFnZXMsIHN3YXBjYWNoZTtcbitcbitcdC8qXG4rXHQgKiBBIEdGUF9OT0lPIHJlY2xhaW1lciBjYW4gb25seSByZWNsYWltIGFub24gdGhhdCBpcyBhbHJlYWR5IGluIHRoZVxuK1x0ICogc3dhcGNhY2hlIChhZGRpbmcgYW5vbiB0byB0aGUgc3dhcGNhY2hlIG5lZWRzIElPKS4gV2hlbiBzd2FwY2FjaGUgaXNcbitcdCAqIGZhciBiZWxvdyB0aGUgYW5vbiBMUlUsIHNjYW5uaW5nIGFub24gcmVjbGFpbXMgbm90aGluZyBhbmQgb25seSBidXJuc1xuK1x0ICogQ1BVLiBUaGUgMS82NCB0aHJlc2hvbGQga2VlcHMgdGhpcyB0byB0aGUgY2FzZSB3aGVyZSBhbm9uIGlzXG4rXHQgKiBlZmZlY3RpdmVseSB1bnJlY2xhaW1hYmxlLlxuK1x0ICovXG4rXHRpZiAoIXNjIHx8IChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogRklYTUU6IE1HTFJVIGRvZXNuJ3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxuK1x0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cbitcdCAqL1xuK1x0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAobWVtY2cpIHtcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbitcbitcdFx0YW5vbl9wYWdlcyA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgK1xuK1x0XHRcdCAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTik7XG4rXHRcdHN3YXBjYWNoZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfU1dBUENBQ0hFKTtcbitcdH0gZWxzZSB7XG4rXHRcdGFub25fcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pICtcbitcdFx0XHQgICAgIG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0FOT04pO1xuK1x0XHRzd2FwY2FjaGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX1NXQVBDQUNIRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc3dhcGNhY2hlIFx1MDAzYyAoYW5vbl9wYWdlcyBcdTAwM2VcdTAwM2UgNik7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0aW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdGlmIChtZW1jZyA9PSBOVUxMKSB7XG4gXHRcdC8qXG4tXHRcdCAqIEZvciBub24tbWVtY2cgcmVjbGFpbSwgaXMgdGhlcmVcbi1cdFx0ICogc3BhY2UgaW4gYW55IHN3YXAgZGV2aWNlP1xuK1x0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbitcdFx0ICogQW5kIHVuZGVyIEdGUF9OT0lPLCBpcyB0aGVyZSBlbm91Z2ggc3dhcGNhY2hlZCBhbm9uIHRvIG1ha2VcbitcdFx0ICogc2Nhbm5pbmcgYW5vbiB3b3J0aHdoaWxlP1xuIFx0XHQgKi9cbi1cdFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXHUwMDNlIDApXG4rXHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4tXHRcdC8qIElzIHRoZSBtZW1jZyBiZWxvdyBpdHMgc3dhcCBsaW1pdD8gKi9cbi1cdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwKVxuK1x0XHQvKlxuK1x0XHQgKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQsIGFuZCB1bmRlciBHRlBfTk9JTyBkb2VzXG4rXHRcdCAqIGl0IGhhdmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlIHNjYW5uaW5nIHdvcnRod2hpbGU/XG4rXHRcdCAqL1xuK1x0XHRpZiAobWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhcmVjbGFpbWFibGVfYW5vbl9pc19sb3cobWVtY2csIG5pZCwgc2MpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MjYuODY3NDg2MjU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwNjgwMjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWTXNjYW4gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQSBwYXRjaCB0YXJnZXRpbmcgYG1tL3Ztc2Nhbi5jYCDigJMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSBpdCdzIGFkZGluZyBzb21lIG5ldyBsb2dpYyBhcm91bmQgYW5vbnltb3VzIHBhZ2UgcmVjbGFpbS4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uLCBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvciBvZiB0aGUgZGlyZWN0aW9uIHRoaXMgcGF0Y2ggaXMgdGFraW5nLiBJdCBzZWVtcyB0byBiZSBpbnRlZ3JhdGVkIHdpdGggYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAsIHdoaWNoIGlzIHRoZSBnYXRla2VlcGVyIGZvciBhbm9ueW1vdXMgcGFnZSByZWNsYWltIGRlY2lzaW9ucy4gVGhlIGxvZ2ljIHVwZGF0ZSBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgbm93IGNoZWNraW5nIHRoZSBuZWdhdGlvbiBvZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBuZXcgZnVuY3Rpb24sIGVzc2VudGlhbGx5IHNheWluZyBcImlmIGFub255bW91cyByZWNsYWltIGlzbid0IGNvbnNpZGVyZWQgJ2xvdycgYWNjb3JkaW5nIHRvIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCwgdGhlbiB3ZSAqY2FuKiByZWNsYWltLlwiIE1ha2VzIHNlbnNlLiBUaGUgYCNpZmRlZiBDT05GSUdfU1dBUGAgZ3VhcmQgaXMgY3J1Y2lhbDsgaXQncyBjb25maXJtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBzd2FwcGluZyBhbmQgdGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbSwgc28gYW5vbnltb3VzIHBhZ2VzIGFyZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3Igc3dhcHBpbmcuIEkgd2FudCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IHdpdGhpbiBgbW0vdm1zY2FuLmNgIG5lYXIgYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWA7IHRoaXMgZ2l2ZXMgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBjaGFuZ2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgcmVjbGFpbSBzdHJhdGVneS4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MzEuNDc0MjkyMTIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjE5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhbl9yZWNsYWltX2Fub25fcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MzY2PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy0zODItXFx0LypcXG5tbS92bXNjYW4uYzozODM6XFx0ICogRklYTUU6IE1HTFJVIGRvZXNuJ3QgZnVsbHkgcmVzcGVjdCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKCkgZm9yIHRoZVxcbm1tL3Ztc2Nhbi5jLTM4NC1cXHQgKiBzY2FubmluZyB0eXBlLCBzbyBvbmx5IGFwcGx5IHRoaXMgdG8gdGhlIHRyYWRpdGlvbmFsIExSVSBmb3Igbm93Llxcbi0tXFxubW0vdm1zY2FuLmM9NDA0PXN0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00MTAtXFxubW0vdm1zY2FuLmM6NDExOnN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy00MTItXFx0XFx0XFx0XFx0XFx0ICBpbnQgbmlkLFxcbi0tXFxubW0vdm1zY2FuLmM9NDQ3PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1Mi1cXHRcXHR6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfWk9ORV9BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NDUzOlxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHpvbmVfdG9fbmlkKHpvbmUpLCBOVUxMKSlcXG5tbS92bXNjYW4uYy00NTQtXFx0XFx0bnIgKz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfSU5BQ1RJVkVfQU5PTikgK1xcbi0tXFxubW0vdm1zY2FuLmM9MjYyNz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjY0Ni1cXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jOjI2NDc6XFx0XFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxubW0vdm1zY2FuLmMtMjY0OC1cXHRcXHRcXHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2NTUtXFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xcbm1tL3Ztc2Nhbi5jOjI2NTY6XFx0aWYgKCFzYy1cXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG5tbS92bXNjYW4uYy0yNjU3LVxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyNjE9c3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjczLVxcdHJlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcXG5tbS92bXNjYW4uYzo0Mjc0OlxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpXFxubW0vdm1zY2FuLmMtNDI3NS1cXHRcXHRyZWNsYWltYWJsZSArPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xcbi0tXFxubW0vdm1zY2FuLmM9NTEyMz1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNTEzNy1cXHRcXHRXQVJOX09OX09OQ0UoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpO1xcbm1tL3Ztc2Nhbi5jOjUxMzg6XFx0XFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUxMzktXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS92bXNjYW4uYz02MjU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjMwNC1cXHRpbmFjdGl2ZV9scnVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jOjYzMDU6XFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MzA2LVxcdFxcdGluYWN0aXZlX2xydV9wYWdlcyArPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0FOT04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTozMS41MTg5MTQxNzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDA1MDk0ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBDb25maXJtYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFnZSByZWNsYWltIGxvZ2ljLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBBcHBseWluZyBteSBtZW50YWwgY2hlY2tsaXN0IGJhc2VkIG9uIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIHRoZSBcIkNvcmUgU3Vic3lzdGVtc1wiIGNyaXRlcmlhIGRlZmluaXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4gQW55IG1vZGlmaWNhdGlvbiB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGlzLCBieSBkZWZpbml0aW9uLCBzaWduaWZpY2FudC4gSSdtIGFscmVhZHkgaW5jbGluZWQgdG8gZ2l2ZSB0aGlzIGEgcG9zaXRpdmUgc2NvcmUgZm9yIFdvcnRoRnV6emluZy4gVGhlIFwiUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzXCIgY3JpdGVyaWEgaXMgYWxzbyBjbGVhcmx5IG1ldC5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBJIHNlZSBgQ09ORklHX1NXQVBgIGJlaW5nIGAjaWZkZWZgJ2QuIFN3YXAgaW50ZXJhY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBzY3J1dGluaXplLiBBbmQgdGhpcyBtZW50aW9ucyBgbWVtY2dgISBJIHNlZSB0aGUgYG1lbWNnYCB2YXJpYWJsZSBwYXNzZWQgYW5kIGBtZW1fY2dyb3VwX2xydXZlY2AsIGBscnV2ZWNfcGFnZV9zdGF0ZWAsIGFuZCBgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlc2AgY2FsbGVkLiBUaGlzIGlzIHZlcnkgZ29vZCwgaW5kaWNhdGluZyBsaWtlbHkgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1DR19TV0FQYCBkZXBlbmRlbmNpZXMsIGFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb2ludHMgb2YgcG90ZW50aWFsIGludGVyZXN0IGFuZCBpbnRlcmFjdGlvbi4gSSBzaG91bGQgY2hlY2sgaG93IHRoZXNlIG1lbWNnIGFuZCBzd2FwIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCBpbnRlZ3JhdGVkIGJlY2F1c2UgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjM1LjkyNDAxMTE2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5NTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6MzUuOTgwNzEyNDg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg0Mzk0MTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIGZpbGU6IGBpbml0L0tjb25maWdgLiBJdCdzIHRoZSBzdGFuZGFyZCBlbnRyeSBwb2ludCBmb3IgbXVjaCBvZiB0aGUgZ2VuZXJhbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSWYgaXQncyBub3QgdGhlcmUsIG9yIGlmIHRoZSBkZWZpbml0aW9uIGlzIG1vcmUgc3BlY2lmaWMgdGhhbiBhIHRvcCBsZXZlbCBjb25maWcsIHRoZW4gSSdsbCBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1tL0tjb25maWdgLiBHaXZlbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgKm1lbW9yeSogY29udHJvbCBncm91cHMsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0ncyBLY29uZmlnIGZpbGUgc2VlbXMgbGlrZSB0aGUgbmV4dCBtb3N0IGxpa2VseSBzcG90LiBJdCdzIHJlYWxseSBhYm91dCBxdWlja2x5IG5hcnJvd2luZyBkb3duIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIHRvIGZpbmQgdGhlIGNvcnJlY3QgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczMiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjM3LjgyNDY1NjIxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE5MDI3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTozOS40NDM2ODk2MTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTgyMzQyODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBbm9ueW1vdXMgUGFnZSBSZWNsYWltIExvZ2ljKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcmVjbGFpbSBsb2dpYy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIGFuZCBzeW1ib2xzIGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBhbm9ueW1vdXMgcGFnZXMgYXJlIGFjdHVhbGx5IGJlaW5nIHJlY2xhaW1lZC5cblxuUmlnaHQsIHNvIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgYm90aCBgc3RhdGljIGlubGluZWAuIFRoYXQncyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uLiBOb3csIGJlY2F1c2UgdGhleSdyZSBpbmxpbmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgKm5vbi1zdGF0aWMqIGFuZCAqbm9uLWlubGluZSogZnVuY3Rpb25zIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRoYXQgdXNlIHRoZW0g4oCTIHRob3NlIGFyZSB0aGUgYWN0dWFsIHdvcmtob3JzZXMuXG5cbkxldCBtZSBsaXN0IG91dCB0aGUgY2FsbGVycyBvZiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2A6IEkgc2VlIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCAodGhhdCdzIGltcG9ydGFudCksIGBnZXRfc2Nhbl9jb3VudGAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAsIGBnZXRfbnJfdG9fc2NhbmAsIGFuZCBgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW1gLiBIbW0sIGEgbWl4IG9mIHN0YXRpYyBhbmQgaW5saW5lIGZ1bmN0aW9ucy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHJlY2xhaW1pbmcsIGJ1dCB0aGUgb3RoZXJzIGFyZSBsaWtlbHkga2V5IGluIHRoZSBzY2FuIGFuZCBzaHJpbmtpbmcgcHJvY2Vzcy5cblxuTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zICphY3R1YWxseSogZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmc/IEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBjb2RlLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBjb3JlIHJlY2xhaW0gbG9naWMgaXMgZ29pbmcgdG8gYmUgd2l0aGluIGEgc3BlY2lmaWMgc2VjdGlvbiwgcGVyaGFwcyBhcm91bmQgdGhlIDI2MDAtMjgwMCBhbmQgNDIwMC00NDAwIGxpbmUgcmFuZ2VzIGluIGBtbS92bXNjYW4uY2AuIFRpbWUgdG8gZ2V0IHRoZSBnb2dnbGVzIG9uIGFuZCBleGFtaW5lIHRob3NlIGFyZWFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjQ0LjYyNjAzNTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2MjU6XFx0ICogbnJbMl0gPSBmaWxlIGluYWN0aXZlIGZvbGlvcyB0byBzY2FuOyBuclszXSA9IGZpbGUgYWN0aXZlIGZvbGlvcyB0byBzY2FuXFxuMjYyNjpcXHQgKi9cXG4yNjI3OlxcdHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuMjYyODpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpucilcXG4yNjI5OlxcdHtcXG4yNjMwOlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4yNjMxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbjI2MzI6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSBzY19zd2FwcGluZXNzKHNjLCBtZW1jZyk7XFxuMjYzMzpcXHRcXHR1NjQgZnJhY3Rpb25bQU5PTl9BTkRfRklMRV07XFxuMjYzNDpcXHRcXHR1NjQgZGVub21pbmF0b3IgPSAwO1xcdC8qIGdjYyAqL1xcbjI2MzU6XFx0XFx0ZW51bSBzY2FuX2JhbGFuY2Ugc2Nhbl9iYWxhbmNlO1xcbjI2MzY6XFx0XFx0ZW51bSBscnVfbGlzdCBscnU7XFxuMjYzNzpcXHRcXG4yNjM4OlxcdFxcdC8qXFxuMjYzOTpcXHRcXHQgKiBQcm9hY3RpdmUgcmVjbGFpbSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlIGZvciBhbm9ueW1vdXMgbWVtb3J5IG9ubHkuXFxuMjY0MDpcXHRcXHQgKiBTV0FQUElORVNTX0FOT05fT05MWSBpcyBzZXQgb25seSBvbiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aCwgc29cXG4yNjQxOlxcdFxcdCAqIHdhcm4gaWYgaXQgc2hvd3MgdXAgZWxzZXdoZXJlLiBXaGVuIGFub24gY2Fubm90IGJlIHJlY2xhaW1lZCAoZS5nLlxcbjI2NDI6XFx0XFx0ICogbm8gc3dhcCksIGJhaWwgb3V0IGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGV2aWN0aW5nIGZpbGUgcGFnZXMsXFxuMjY0MzpcXHRcXHQgKiB3aGljaCB3b3VsZCB2aW9sYXRlIHRoZSBhbm9uLW9ubHkgc2VtYW50aWNzLlxcbjI2NDQ6XFx0XFx0ICovXFxuMjY0NTpcXHRcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbjI2NDY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG4yNjQ3OlxcdFxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSkge1xcbjI2NDg6XFx0XFx0XFx0XFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XFxuMjY0OTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjY1MDpcXHRcXHRcXHR9XFxuMjY1MTpcXHRcXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XFxuMjY1MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjUzOlxcdFxcdH1cXG4yNjU0OlxcdFxcbjI2NTU6XFx0XFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xcbjI2NTY6XFx0XFx0aWYgKCFzYy1cXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG4yNjU3OlxcdFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG4yNjU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NTk6XFx0XFx0fVxcbjI2NjA6XFx0XFxuMjY2MTpcXHRcXHQvKlxcbjI2NjI6XFx0XFx0ICogR2xvYmFsIHJlY2xhaW0gd2lsbCBzd2FwIHRvIHByZXZlbnQgT09NIGV2ZW4gd2l0aCBub1xcbjI2NjM6XFx0XFx0ICogc3dhcHBpbmVzcywgYnV0IG1lbWNnIHVzZXJzIHdhbnQgdG8gdXNlIHRoaXMga25vYiB0b1xcbjI2NjQ6XFx0XFx0ICogZGlzYWJsZSBzd2FwcGluZyBmb3IgaW5kaXZpZHVhbCBncm91cHMgY29tcGxldGVseSB3aGVuXFxuMjY2NTpcXHRcXHQgKiB1c2luZyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIncyBzd2FwIGxpbWl0IGZlYXR1cmUgd291bGQgYmVcXG4yNjY2OlxcdFxcdCAqIHRvbyBleHBlbnNpdmUuXFxuMjY2NzpcXHRcXHQgKi9cXG4yNjY4OlxcdFxcdGlmIChjZ3JvdXBfcmVjbGFpbShzYykgXFx1MDAyNlxcdTAwMjYgIXN3YXBwaW5lc3MpIHtcXG4yNjY5OlxcdFxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcXG4yNjcwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NzE6XFx0XFx0fVxcbjI2NzI6XFx0XFxuMjY3MzpcXHRcXHQvKlxcbjI2NzQ6XFx0XFx0ICogRG8gbm90IGFwcGx5IGFueSBwcmVzc3VyZSBiYWxhbmNpbmcgY2xldmVybmVzcyB3aGVuIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo0NC42MjYzMjI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk5MjA3MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZ2V0X3NjYW5fY291bnRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIGBnZXRfc2Nhbl9jb3VudGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGdpdmVzIG1lIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0J3Mgb3BlcmF0aW5nIG9uLCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb2RlIHBhdGhzIHRoYXQgKnJlbHkqIG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgZm91bmRhdGlvbmFsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgb3IgdW5kZXJzdGFuZGluZyBob3cgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbiB3b3VsZCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLiBJJ20gZXNzZW50aWFsbHkgcGVyZm9ybWluZyBhIHF1aWNrIHN0YXRpYyBhbmFseXNpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbidzIGluZmx1ZW5jZSwgbG9va2luZyBmb3IgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFuZCBhbnkgYXJndW1lbnRzIGJlaW5nIHBhc3NlZC4gVGltZSB0byBodW50IGRvd24gdGhvc2UgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6NDYuNzI1NTMyMjgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY4MzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc2Nhbl9jb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjYtICovXFxubW0vdm1zY2FuLmM6MjYyNzpzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbm1tL3Ztc2Nhbi5jLTI2MjgtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbnIpXFxuLS1cXG5tbS92bXNjYW4uYz02MTIwPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMzgtXFxubW0vdm1zY2FuLmM6NjEzOTpcXHRnZXRfc2Nhbl9jb3VudChscnV2ZWMsIHNjLCBucik7XFxubW0vdm1zY2FuLmMtNjE0MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxODEtXFx0XFx0ICogcmVxdWVzdGVkLiBFbnN1cmUgdGhhdCB0aGUgYW5vbiBhbmQgZmlsZSBMUlVzIGFyZSBzY2FubmVkXFxubW0vdm1zY2FuLmM6NjE4MjpcXHRcXHQgKiBwcm9wb3J0aW9uYWxseSB3aGF0IHdhcyByZXF1ZXN0ZWQgYnkgZ2V0X3NjYW5fY291bnQoKS4gV2VcXG5tbS92bXNjYW4uYy02MTgzLVxcdFxcdCAqIHN0b3AgcmVjbGFpbWluZyBvbmUgTFJVIGFuZCByZWR1Y2UgdGhlIGFtb3VudCBzY2FubmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo0Ni43NzQyMTk0NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU4NzkzMjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgUmVsZXZhbnQgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBhZ2UgcmVjbGFpbSBhbmQgbWVtb3J5IGNncm91cHMuIFRoZSBpbml0aWFsIHRob3VnaHQgdHJhaW4gc3RhcnRlZCB3aXRoIGZvbGxvd2luZyB0aGUgY2FsbCBjaGFpbjogYHNocmlua19scnV2ZWNgIC1cdTAwM2UgYHNocmlua19ub2RlX21lbWNnc2AgLVx1MDAzZSBgc2hyaW5rX25vZGVgIC1cdTAwM2UgYHNocmlua196b25lc2AgLVx1MDAzZSBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIC8gYGtzd2FwZF9zaHJpbmtfbm9kZWAuIEkgYWxzbyBrbm93IGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCBpcyByZWxldmFudC4gU28gSSBoYWQgYSBxdWljayBtZW50YWwgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2hlY2s6IGBzaHJpbmtfbHJ1dmVjYCwgYHNocmlua19ub2RlYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBrc3dhcGRfc2hyaW5rX25vZGVgLCBhbmQgYHNocmlua19wYWdlX2xpc3RgLlxuXG5CdXQsIHdhaXQuLi4gdGhlcmUncyB0aGF0IGNydWNpYWwgZ3VpZGVsaW5lIGZvciB0aGUgZnV6emluZyBhbmFseXNpcyBJIG5lZWQgdG8gcmVtZW1iZXIhIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLlwiIFJpZ2h0LCBubyBnZW5lcmljIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gTGlzdGluZyB0aGVtIGp1c3QgY3JlYXRlcyBub2lzZS4gSSBuZWVkIHRvIGZvY3VzIG9uICpzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljKiBhbmQgZW50cnlwb2ludHMuIElmIHRoZXkgYXJlIGlubGluZWQsIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGNhbGxlcnMuXG5cblNvLCB0aGUgcGxhbiBzaGlmdHMuIEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGNvbW1vbiBsb3cgbGV2ZWwgbWV0aG9kcyBhbmQgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgYWN0dWFsIGxvZ2ljIEknbSBpbnRlcmVzdGVkIGluLiBMZXQncyBkaWcgZGVlcGVyIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgZmlndXJlIG91dCB3aGF0J3MgaW5saW5lZCBhbmQgd2hhdCBpc24ndCwgYW5kIGFsc28gY2hlY2sgb3RoZXIgbm9uLWlubGluZSBmdW5jdGlvbnMgaW4gdGhlcmUuIEknbGwgZm9jdXMgb24gZnVuY3Rpb25zIGxpa2UgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBgc2hyaW5rX2xydXZlY2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBnZXRfbnJfdG9fc2NhbmAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgbm90IGlubGluZWQgb3Igc3RhdGljLlxuXG5GaXJzdCwgSSBjaGVja2VkIGBnZXRfc2Nhbl9jb3VudGAuIEl0J3Mgc3RhdGljIGluIGBtbS92bXNjYW4uY2AsIHNvIEknbGwgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzLiBUaGVuIEkgY2hlY2tlZCBpZiBgc2hyaW5rX2xydXZlY2AgaXMgc3RhdGljLiBZZXMgaXQgaXMsIHNvIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gVGhlbiBJJ2xsIGNoZWNrIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCB0byB2ZXJpZnkgaWYgaXQncyBleHBvcnRlZCBvciBnbG9iYWwuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBwaWVjZXMgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo1Mi4zNjIxNTQxMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODkzODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfcmVjbGFpbWFibGVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0yNDc5PWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNTAyLVxcdFxcdCAqL1xcbm1tL2NvbXBhY3Rpb24uYzoyNTAzOlxcdFxcdGF2YWlsYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgLyBvcmRlcjtcXG5tbS9jb21wYWN0aW9uLmMtMjUwNC1cXHRcXHRhdmFpbGFibGUgKz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD01OT12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTYxLS8qIG1tL3Ztc2Nhbi5jICovXFxubW0vaW50ZXJuYWwuaDo2Mjp1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbm1tL2ludGVybmFsLmgtNjMtdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDYyMj1zaG91bGRfcmVjbGFpbV9yZXRyeShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDY2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NDY2MjpcXHRcXHRhdmFpbGFibGUgPSByZWNsYWltYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7XFxubW0vcGFnZV9hbGxvYy5jLTQ2NjMtXFx0XFx0YXZhaWxhYmxlICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxMT1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy00NDYtICovXFxubW0vdm1zY2FuLmM6NDQ3OnVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5tbS92bXNjYW4uYy00NDgte1xcbi0tXFxubW0vdm1zY2FuLmM9NTU1PXN0YXRpYyBib29sIHNraXBfdGhyb3R0bGVfbm9wcm9ncmVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNTcyLVxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgTUFYX05SX1pPTkVTIC0gMSkge1xcbm1tL3Ztc2Nhbi5jOjU3MzpcXHRcXHRyZWNsYWltYWJsZSArPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpO1xcbm1tL3Ztc2Nhbi5jLTU3NC1cXHRcXHR3cml0ZV9wZW5kaW5nICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxcbi0tXFxubW0vdm1zY2FuLmM9Njc3NT1zdGF0aWMgYm9vbCBhbGxvd19kaXJlY3RfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjc4Ni1cXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIFpPTkVfTk9STUFMKSB7XFxubW0vdm1zY2FuLmM6Njc4NzpcXHRcXHRpZiAoIXpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgXFx1MDAyNlxcdTAwMjYgem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpKVxcbm1tL3Ztc2Nhbi5jLTY3ODgtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI1OjUyLjQxMDA1MDc5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk3ODQ1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgbW0vdm1zY2FuLmNgIGZvciBBbm9ueW1vdXMgUGFnZSBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgYW5vbnltb3VzIHBhZ2UgcmVjbGFtYXRpb24gYnVzaW5lc3MuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgaXMgdXNlZCwgb3Igd2hlcmUgcmVsYXRlZCBmdW5jdGlvbnMgY29tZSBpbnRvIHBsYXkgd2l0aGluIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUuIEknbSB0aGlua2luZywgaW5zdGVhZCBvZiBqdXN0IHRoZSBpbW1lZGlhdGUgY29udGV4dCwgbGV0J3MgdHJhY2Ugb3V0IHRoZSBsb2dpY2FsIGNhbGxzIGFuZCB0aGUgcG90ZW50aWFsIGZsb3cuXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHN3ZWVwLiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBibG9ja3Mgb2YgY29kZSwgdGhlc2Ugc2VjdGlvbnMgc2hvdWxkIHByb3ZpZGUgZ29vZCBzdGFydGluZyBwb2ludHMuIEknbGwgdGFrZSBhIGxvb2sgYXQgbGluZXMgNDI2MC00MzAwLCB0aGVuIGxpbmVzIDUxMjAtNTE1MCwgYW5kIGZpbmFsbHksIGxpbmVzIDYyNTAtNjMxNS4gVGhvc2Ugc2hvdWxkIGJlIHRoZSBob3RzcG90cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6NTQuODA3ODk4NTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjU1OlxcdH1cXG40MjU2OlxcdFxcbjQyNTc6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbjQyNTg6XFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgc2V0IHByb3RlY3Rpb25cXG40MjU5OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuNDI2MDpcXHRcXG40MjYxOlxcdHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjQyNjI6XFx0e1xcbjQyNjM6XFx0XFx0aW50IHByaW9yaXR5O1xcbjQyNjQ6XFx0XFx0dW5zaWduZWQgbG9uZyByZWNsYWltYWJsZTtcXG40MjY1OlxcdFxcbjQyNjY6XFx0XFx0aWYgKHNjLVxcdTAwM2Vwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkgfHwgc2MtXFx1MDAzZW5yX3RvX3JlY2xhaW0gXFx1MDAzYyBNSU5fTFJVX0JBVENIKVxcbjQyNjc6XFx0XFx0XFx0cmV0dXJuO1xcbjQyNjg6XFx0XFx0LypcXG40MjY5OlxcdFxcdCAqIERldGVybWluZSB0aGUgaW5pdGlhbCBwcmlvcml0eSBiYXNlZCBvblxcbjQyNzA6XFx0XFx0ICogKHRvdGFsIFxcdTAwM2VcXHUwMDNlIHByaW9yaXR5KSAqIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gbnJfdG9fcmVjbGFpbSxcXG40MjcxOlxcdFxcdCAqIHdoZXJlIHJlY2xhaW1lZF90b19zY2FubmVkX3JhdGlvID0gaW5hY3RpdmUgLyB0b3RhbC5cXG40MjcyOlxcdFxcdCAqL1xcbjQyNzM6XFx0XFx0cmVjbGFpbWFibGUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpO1xcbjQyNzQ6XFx0XFx0aWYgKGNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG40Mjc1OlxcdFxcdFxcdHJlY2xhaW1hYmxlICs9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfQU5PTik7XFxuNDI3NjpcXHRcXG40Mjc3OlxcdFxcdC8qIHJvdW5kIGRvd24gcmVjbGFpbWFibGUgYW5kIHJvdW5kIHVwIHNjLVxcdTAwM2Vucl90b19yZWNsYWltICovXFxuNDI3ODpcXHRcXHRwcmlvcml0eSA9IGZsc19sb25nKHJlY2xhaW1hYmxlKSAtIDEgLSBmbHNfbG9uZyhzYy1cXHUwMDNlbnJfdG9fcmVjbGFpbSAtIDEpO1xcbjQyNzk6XFx0XFxuNDI4MDpcXHRcXHQvKlxcbjQyODE6XFx0XFx0ICogVGhlIGVzdGltYXRpb24gaXMgYmFzZWQgb24gTFJVIHBhZ2VzIG9ubHksIHNvIGNhcCBpdCB0byBwcmV2ZW50XFxuNDI4MjpcXHRcXHQgKiBvdmVyc2hvb3RzIG9mIHNocmlua2VyIG9iamVjdHMgYnkgbGFyZ2UgbWFyZ2lucy5cXG40MjgzOlxcdFxcdCAqL1xcbjQyODQ6XFx0XFx0c2MtXFx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XFxuNDI4NTpcXHR9XFxuNDI4NjpcXHRcXG40Mjg3OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbjQyODg6XFx0e1xcbjQyODk6XFx0XFx0aW50IGdlbiwgdHlwZSwgem9uZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjU6NTQuODA4MzIzNTg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTY4MzA4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgYSBjb2RpbmcgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgYGdldF9ucl90b19zY2FuYCBhdCA1MTIwKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6b29tIGluIG9uIGBnZXRfbnJfdG9fc2NhbmAsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGFyZWEgb2YgNTEyMC4gSSd2ZSBnb3QgdGhpcyBuaWdnbGluZyBzdXNwaWNpb24gdGhlcmUncyBzb21ldGhpbmcgZ29pbmcgb24gd2l0aCB0aGF0IHBhcnRpY3VsYXIgdGhyZXNob2xkLCBvciBtYXliZSB0aGUgbG9naWMgc3Vycm91bmRpbmcgaXQuIEl0IGNvdWxkIGJlIGFuIGVkZ2UgY2FzZSBJIG1pc3NlZCwgYSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciwgb3IgZXZlbiBhbiBpbnRlcmFjdGlvbiB3aXRoIHNvbWUgb3RoZXIgY29tcG9uZW50IHRoYXQncyBjYXVzaW5nIHByb2JsZW1zLiBHcmFiYmluZyB0aGUgY29udGV4dCBhcm91bmQgNTEyMCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gdGhlIGZ1bmN0aW9uJ3MgY2FsbGVkIGluIHRoYXQgdmljaW5pdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo1Ny42MDUxNTc5MjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMjA6XFx0XFx0cmV0dXJuIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcTtcXG41MTIxOlxcdH1cXG41MTIyOlxcdFxcbjUxMjM6XFx0c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG41MTI0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHN3YXBwaW5lc3MpXFxuNTEyNTpcXHR7XFxuNTEyNjpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcXG41MTI3OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG41MTI4OlxcdFxcbjUxMjk6XFx0XFx0LypcXG41MTMwOlxcdFxcdCAqIFByb2FjdGl2ZSByZWNsYWltIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgZm9yIGFub255bW91cyBtZW1vcnkgb25seS5cXG41MTMxOlxcdFxcdCAqIFNXQVBQSU5FU1NfQU5PTl9PTkxZIGlzIHNldCBvbmx5IG9uIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLCBzb1xcbjUxMzI6XFx0XFx0ICogd2FybiBpZiBpdCBzaG93cyB1cCBlbHNld2hlcmUuIFdoZW4gYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIChlLmcuXFxuNTEzMzpcXHRcXHQgKiBubyBzd2FwKSwgcmV0dXJuIDAgdG8gc2tpcCB0aGUgc2NhbiBlbnRpcmVseSwgYXZvaWRpbmcgdXNlbGVzcyBzY2FuXFxuNTEzNDpcXHRcXHQgKiB3b3JrIHdoZW4gdGhlcmUgaXMgbm90aGluZyBlbGlnaWJsZSB0byByZWNsYWltLlxcbjUxMzU6XFx0XFx0ICovXFxuNTEzNjpcXHRcXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbjUxMzc6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG41MTM4OlxcdFxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG41MTM5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjUxNDA6XFx0XFx0fVxcbjUxNDE6XFx0XFxuNTE0MjpcXHRcXHRldmljdGFibGUgPSBscnV2ZWNfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG41MTQzOlxcdFxcbjUxNDQ6XFx0XFx0LyogdHJ5IHRvIHNjcmFwZSBhbGwgaXRzIG1lbW9yeSBpZiB0aGlzIG1lbWNnIHdhcyBkZWxldGVkICovXFxuNTE0NTpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSlcXG41MTQ2OlxcdFxcdFxcdHJldHVybiBldmljdGFibGU7XFxuNTE0NzpcXHRcXG41MTQ4OlxcdFxcdG5yX3RvX3NjYW4gPSBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihtZW1jZywgc2MsIGV2aWN0YWJsZSk7XFxuNTE0OTpcXHRcXHRucl90b19zY2FuIFxcdTAwM2VcXHUwMDNlPSBzYy1cXHUwMDNlcHJpb3JpdHk7XFxuNTE1MDpcXHRcXG41MTUxOlxcdFxcdHJldHVybiBucl90b19zY2FuO1xcbjUxNTI6XFx0fVxcbjUxNTM6XFx0XFxuNTE1NDpcXHRzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNTo1Ny42MDU0MjMyMzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU1Mjg1NDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlY2xhbWF0aW9uIExvb3AqKlxuXG5Pa2F5LCBzbyBJJ20gaG9taW5nIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdGhlIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoZSBjb2RlIGFyb3VuZCBsaW5lIDYyNjAgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJ20gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHJldHVybmluZyBhbiB1bmV4cGVjdGVkIHZhbHVlLCBwZXJoYXBzIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBzb21lIG90aGVyIHJlY2xhbWF0aW9uLXJlbGF0ZWQgcHJvYmxlbS4gSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBsb2dpYyB3aXRoaW4gYW5kIGFyb3VuZCB0aGF0IHNwZWNpZmljIGxpbmUuIEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgaW5wdXQgcGFyYW1ldGVycyBhdCB0aGF0IHBvaW50IGFuZCBtZW50YWxseSB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFVuZGVyc3RhbmRpbmcgd2hhdCBjb25kaXRpb25zIGNvdWxkIGNhdXNlIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAgdG8gYmVoYXZlIGluIGFuIHVuZXhwZWN0ZWQgbWFubmVyIGlzIGtleS4gR290dGEgZmlndXJlIG91dCB3aGF0IGNvdWxkIGJlIHRyaWdnZXJpbmcgdGhpcyBsb29wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MDIuMTU4MjgwOTE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjYwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MjYwOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLFxcbjYyNjE6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjI2MjpcXHR7XFxuNjI2MzpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VzX2Zvcl9jb21wYWN0aW9uO1xcbjYyNjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9scnVfcGFnZXM7XFxuNjI2NTpcXHRcXHRpbnQgejtcXG42MjY2OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjYyNjc6XFx0XFxuNjI2ODpcXHRcXHQvKiBJZiBub3QgaW4gcmVjbGFpbS9jb21wYWN0aW9uIG1vZGUsIHN0b3AgKi9cXG42MjY5OlxcdFxcdGlmICghaW5fcmVjbGFpbV9jb21wYWN0aW9uKHNjKSlcXG42MjcwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG42MjcxOlxcdFxcbjYyNzI6XFx0XFx0LypcXG42MjczOlxcdFxcdCAqIFN0b3AgaWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55IHBhZ2VzIGZyb20gdGhlIGxhc3QgU1dBUF9DTFVTVEVSX01BWFxcbjYyNzQ6XFx0XFx0ICogbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLiBUaGlzIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXJcXG42Mjc1OlxcdFxcdCAqIHdpdGggdGhlIHJpc2sgcmVjbGFpbS9jb21wYWN0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGFsbG9jYXRpb24gYXR0ZW1wdFxcbjYyNzY6XFx0XFx0ICogZmFpbHMuIEluIHRoZSBwYXN0IHdlIGhhdmUgdHJpZWQgaGFyZGVyIGZvciBfX0dGUF9SRVRSWV9NQVlGQUlMXFxuNjI3NzpcXHRcXHQgKiBhbGxvY2F0aW9ucyB0aHJvdWdoIHJlcXVpcmluZyB0aGF0IHRoZSBmdWxsIExSVSBsaXN0IGhhcyBiZWVuIHNjYW5uZWRcXG42Mjc4OlxcdFxcdCAqIGZpcnN0LCBieSBhc3N1bWluZyB0aGF0IHplcm8gZGVsdGEgb2Ygc2MtXFx1MDAzZW5yX3NjYW5uZWQgbWVhbnMgZnVsbCBMUlVcXG42Mjc5OlxcdFxcdCAqIHNjYW4sIGJ1dCB0aGF0IGFwcHJveGltYXRpb24gd2FzIHdyb25nLCBhbmQgdGhlcmUgd2VyZSBjb3JuZXIgY2FzZXNcXG42MjgwOlxcdFxcdCAqIHdoZXJlIGFsd2F5cyBhIG5vbi16ZXJvIGFtb3VudCBvZiBwYWdlcyB3ZXJlIHNjYW5uZWQuXFxuNjI4MTpcXHRcXHQgKi9cXG42MjgyOlxcdFxcdGlmICghbnJfcmVjbGFpbWVkKVxcbjYyODM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjYyODQ6XFx0XFxuNjI4NTpcXHRcXHQvKiBJZiBjb21wYWN0aW9uIHdvdWxkIGdvIGFoZWFkIG9yIHRoZSBhbGxvY2F0aW9uIHdvdWxkIHN1Y2NlZWQsIHN0b3AgKi9cXG42Mjg2OlxcdFxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgeiwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KSB7XFxuNjI4NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyayA9IG1pbl93bWFya19wYWdlcyh6b25lKTtcXG42Mjg4OlxcdFxcbjYyODk6XFx0XFx0XFx0LyogQWxsb2NhdGlvbiBjYW4gYWxyZWFkeSBzdWNjZWVkLCBub3RoaW5nIHRvIGRvICovXFxuNjI5MDpcXHRcXHRcXHRpZiAoem9uZV93YXRlcm1hcmtfb2soem9uZSwgc2MtXFx1MDAzZW9yZGVyLCB3YXRlcm1hcmssXFxuNjI5MTpcXHRcXHRcXHRcXHRcXHQgICAgICBzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIDApKVxcbjYyOTI6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjYyOTM6XFx0XFxuNjI5NDpcXHRcXHRcXHRpZiAoY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBzYy1cXHUwMDNlb3JkZXIsIHdhdGVybWFyayxcXG42Mjk1OlxcdFxcdFxcdFxcdFxcdFxcdHNjLVxcdTAwM2VyZWNsYWltX2lkeCkpXFxuNjI5NjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjI5NzpcXHRcXHR9XFxuNjI5ODpcXHRcXG42Mjk5OlxcdFxcdC8qXFxuNjMwMDpcXHRcXHQgKiBJZiB3ZSBoYXZlIG5vdCByZWNsYWltZWQgZW5vdWdoIHBhZ2VzIGZvciBjb21wYWN0aW9uIGFuZCB0aGVcXG42MzAxOlxcdFxcdCAqIGluYWN0aXZlIGxpc3RzIGFyZSBsYXJnZSBlbm91Z2gsIGNvbnRpbnVlIHJlY2xhaW1pbmdcXG42MzAyOlxcdFxcdCAqL1xcbjYzMDM6XFx0XFx0cGFnZXNfZm9yX2NvbXBhY3Rpb24gPSBjb21wYWN0X2dhcChzYy1cXHUwMDNlb3JkZXIpO1xcbjYzMDQ6XFx0XFx0aW5hY3RpdmVfbHJ1X3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcXG42MzA1OlxcdFxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpXFxuNjMwNjpcXHRcXHRcXHRpbmFjdGl2ZV9scnVfcGFnZXMgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG42MzA3OlxcdFxcbjYzMDg6XFx0XFx0cmV0dXJuIGluYWN0aXZlX2xydV9wYWdlcyBcXHUwMDNlIHBhZ2VzX2Zvcl9jb21wYWN0aW9uO1xcbjYzMDk6XFx0fVxcbjYzMTA6XFx0XFxuNjMxMTpcXHRzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjMxMjpcXHR7XFxuNjMxMzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnID0gc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwO1xcbjYzMTQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUgcmVjbGFpbSA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MDIuMTU4NTQ2Nzc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTIyNzU5MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgZm9yIFRhcmdldGVkIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gdGhpcyBtZW1vcnkgcmVjbGFtYXRpb24gcGF0Y2guIEZpcnN0LCBJIHNlZSBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgYW5kIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2Ag4oCTIHRoZXkncmUgdGhlIGRpcmVjdCBmb2N1cywgYmVpbmcgaW5saW5lIGZ1bmN0aW9ucyBpbiBgbW0vdm1zY2FuLmNgLiBTaW5jZSB0aGV5J3JlIGlubGluZSwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZWlyIGNhbGxlcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5UaGUgY2FsbGVycyBvZiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AgYXJlIGBnZXRfc2Nhbl9jb3VudGAsIGBzZXRfaW5pdGlhbF9wcmlvcml0eWAsIGBnZXRfbnJfdG9fc2NhbmAsIGBzaG91bGRfY29udGludWVfcmVjbGFpbWAsIGFuZCBgem9uZV9yZWNsYWltYWJsZV9wYWdlc2AuIEZyb20gdGhlcmUsIGBnZXRfc2Nhbl9jb3VudGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCwgd2hpY2ggaXMgYWxzbyBjYWxsZWQgYnkgYHNocmlua19ub2RlYCB2aWEgYHNocmlua19ub2RlX21lbWNnc2AsIGFuZCBgc2V0X2luaXRpYWxfcHJpb3JpdHlgIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGFyZSAqYWN0dWFsbHkqIHJlbGV2YW50IGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHRvIGxpc3QgdGhlIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIGxvZ2ljLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBUaGUga2V5IGlzIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyIGZ1bmN0aW9ucy4gU28sIEkgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBpbmNsdWRlIGdlbmVyaWMgYWxsb2NhdG9ycy9kZWFsbG9jYXRvcnMuXG5cbmBzaHJpbmtfbHJ1dmVjYCBhbmQgYGdldF9zY2FuX2NvdW50YCBhcmUgb25seSBhY3RpdmUgZHVyaW5nIHBhZ2UgcmVjbGFtYXRpb24sIGFuZCB0aHVzIGFyZSBub3QgdWJpcXVpdG91cy4gYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgIGFsc28gcnVucyBkdXJpbmcgem9uZSBjaGVja3MsIGNvbXBhY3Rpb24sIGFuZCByZWNsYWltIHJldHJpZXMuIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBhbmQgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCBhcmUgdGhlIGV4YWN0IGZ1bmN0aW9ucyBtb2RpZmllZCwgc28gdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgaW5jbHVkZWQuIFRoZXJlZm9yZSwgdGhlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgIGlzIGdvaW5nIHRvIGJlOiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlc2AsIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AsIGBnZXRfc2Nhbl9jb3VudGAsIGBzaHJpbmtfbHJ1dmVjYCwgYHpvbmVfcmVjbGFpbWFibGVfcGFnZXNgLCBhbmQgYHNldF9pbml0aWFsX3ByaW9yaXR5YC5cblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1NXQVBgIGlzIGV4cGxpY2l0bHkgaW4gYCNpZmRlZiBDT05GSUdfU1dBUGAuIGBDT05GSUdfTUVNQ0dgIGlzIGFsc28gdXNlZCwgYWx0aG91Z2ggaXQgY29tcGlsZXMgd2l0aG91dCBpdCBkdWUgdG8gc3R1YnMuIEhvd2V2ZXIsIGVuYWJsaW5nIGJvdGggYWxsb3dzIGZvciB0ZXN0aW5nIGFsbCBjb2RlIGJyYW5jaGVzIG9mIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvd2AuIEknbSBnb2luZyB0byBjaGVjayBpZiBgU1dBUGAgbmVlZHMgYW55dGhpbmcgZWxzZSDigJMgaXQgZGVwZW5kcyBvbiBgIUFSQ0hfTk9fU1dBUGAgaW4gYG1tL0tjb25maWdgLCBzbyB0aG9zZSBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3MuXG5cblRvIHN1bW1hcml6ZSwgbXkgcmF0aW9uYWxlOiBUaGlzIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYW1hdGlvbiBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGFkZGluZyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKWAgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIExSVSBsaXN0cyB1bmRlciBgR0ZQX05PSU9gIHdoZW4gdGhlIG51bWJlciBvZiBzd2FwY2FjaGVkIHBhZ2VzIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbnltb3VzIExSVSBzaXplLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgcGFnZSByZWNsYW1hdGlvbiBkZWNpc2lvbnMgaW4gYGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKWAgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzIGFuZCBnbG9iYWwgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoZXJlZm9yZTpcblxuLSAgIGBXb3J0aEZ1enppbmdgOiBUcnVlXG4tICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFtYXRpb24gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgYWRkaW5nIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCB0byBhdm9pZCBzY2FubmluZyBhbm9ueW1vdXMgTFJVIGxpc3RzIHVuZGVyIGBHRlBfTk9JT2Agd2hlbiB0aGUgbnVtYmVyIG9mIHN3YXBjYWNoZWQgcGFnZXMgaXMgbG93IHJlbGF0aXZlIHRvIHRoZSBhbm9ueW1vdXMgTFJVIHNpemUuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIHJlY2xhbWF0aW9uIGRlY2lzaW9ucyBpbiBgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpYCBhY3Jvc3MgbWVtb3J5IGNncm91cHMgYW5kIGdsb2JhbCBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgbWVtb3J5IHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cbi0gICBgRm9jdXNTeW1ib2xzYDogYHJlY2xhaW1hYmxlX2Fub25faXNfbG93YCwgYGNhbl9yZWNsYWltX2Fub25fcGFnZXNgLCBgZ2V0X3NjYW5fY291bnRgLCBgc2hyaW5rX2xydXZlY2AsIGB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzYCwgYHNldF9pbml0aWFsX3ByaW9yaXR5YFxuLSAgIGBFbmFibGVDb25maWdzYDogYFNXQVBgLCBgTUVNQ0dgXG5cbk5vdyBJJ20gcmVhZHkgdG8gcmV2aWV3IHRoZSByZXN1bHRzIGluIHRoZSByZXF1aXJlZCBmb3JtYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODIzLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNjoxOS4wODEzMjIzMDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTExNTQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWNsYWltYWJsZV9hbm9uX2lzX2xvd1wiLFxuICAgIFwiY2FuX3JlY2xhaW1fYW5vbl9wYWdlc1wiLFxuICAgIFwiZ2V0X3NjYW5fY291bnRcIixcbiAgICBcInNocmlua19scnV2ZWNcIixcbiAgICBcInpvbmVfcmVjbGFpbWFibGVfcGFnZXNcIixcbiAgICBcInNldF9pbml0aWFsX3ByaW9yaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSBhZGRpbmcgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coKSB0byBza2lwIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyB1bmRlciBHRlBfTk9JTyByZWNsYWltIHdoZW4gdGhlIHN3YXBjYWNoZSBpcyBsb3cgcmVsYXRpdmUgdG8gdGhlIGFub24gTFJVLiBUaGlzIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGNhbl9yZWNsYWltX2Fub25fcGFnZXMoKSBhY3Jvc3MgZ2xvYmFsIGFuZCBtZW1jZyBwYWdlIHJlY2xhaW0gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByZXNzdXJlIGFuZCBkaXJlY3QgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlY2xhaW1hYmxlX2Fub25faXNfbG93XCIsXG4gICAgXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gICAgXCJnZXRfc2Nhbl9jb3VudFwiLFxuICAgIFwic2hyaW5rX2xydXZlY1wiLFxuICAgIFwiem9uZV9yZWNsYWltYWJsZV9wYWdlc1wiLFxuICAgIFwic2V0X2luaXRpYWxfcHJpb3JpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IGFkZGluZyByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpIHRvIHNraXAgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIHVuZGVyIEdGUF9OT0lPIHJlY2xhaW0gd2hlbiB0aGUgc3dhcGNhY2hlIGlzIGxvdyByZWxhdGl2ZSB0byB0aGUgYW5vbiBMUlUuIFRoaXMgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGFjcm9zcyBnbG9iYWwgYW5kIG1lbWNnIHBhZ2UgcmVjbGFpbSBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzoyNjoxOS4xNjI0NDkxNzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAyODI5NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MTkuMTYyOTA2NTAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYxMDIzNjgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIGludGVybmFsIG1lbW9yeSByZWNsYWltIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBub2RlL2xydXZlYyBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgKGBOUl9JTkFDVElWRV9BTk9OYCwgYE5SX0FDVElWRV9BTk9OYCwgYE5SX1NXQVBDQUNIRWApIGFuZCB0aGUgZmxhZ3MgaW4gYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVha3Mgb3IgcGFkZGluZyBpc3N1ZXMpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjk4NDU1M2ZiZDIzNDYyODAyNzUwOTBhY2Y3MzI3MGEzYTFiN2UyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MjU6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yMjZjYmQ5ZTQ4MzYyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzYyLDIwICszNjIsNzIgQEAgc3RhdGljIGJvb2wgY2FuX2RlbW90ZShpbnQgbmlkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdHJldHVybiAhbm9kZXNfZW1wdHkoYWxsb3dlZF9tYXNrKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19TV0FQXG4rc3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0aW50IG5pZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4re1xuK1x0cGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpO1xuK1x0dW5zaWduZWQgbG9uZyBhbm9uX3BhZ2VzLCBzd2FwY2FjaGU7XG4rXG4rXHQvKlxuK1x0ICogQSBHRlBfTk9JTyByZWNsYWltZXIgY2FuIG9ubHkgcmVjbGFpbSBhbm9uIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGVcbitcdCAqIHN3YXBjYWNoZSAoYWRkaW5nIGFub24gdG8gdGhlIHN3YXBjYWNoZSBuZWVkcyBJTykuIFdoZW4gc3dhcGNhY2hlIGlzXG4rXHQgKiBmYXIgYmVsb3cgdGhlIGFub24gTFJVLCBzY2FubmluZyBhbm9uIHJlY2xhaW1zIG5vdGhpbmcgYW5kIG9ubHkgYnVybnNcbitcdCAqIENQVS4gVGhlIDEvNjQgdGhyZXNob2xkIGtlZXBzIHRoaXMgdG8gdGhlIGNhc2Ugd2hlcmUgYW5vbiBpc1xuK1x0ICogZWZmZWN0aXZlbHkgdW5yZWNsYWltYWJsZS5cbitcdCAqL1xuK1x0aWYgKCFzYyB8fCAoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIEZJWE1FOiBNR0xSVSBkb2Vzbid0IGZ1bGx5IHJlc3BlY3QgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGZvciB0aGVcbitcdCAqIHNjYW5uaW5nIHR5cGUsIHNvIG9ubHkgYXBwbHkgdGhpcyB0byB0aGUgdHJhZGl0aW9uYWwgTFJVIGZvciBub3cuXG4rXHQgKi9cbitcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKG1lbWNnKSB7XG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4rXG4rXHRcdGFub25fcGFnZXMgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcbitcdFx0XHQgICAgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pO1xuK1x0XHRzd2FwY2FjaGUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX1NXQVBDQUNIRSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRhbm9uX3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKSArXG4rXHRcdFx0ICAgICBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0FDVElWRV9BTk9OKTtcbitcdFx0c3dhcGNhY2hlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9TV0FQQ0FDSEUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHN3YXBjYWNoZSBcdTAwM2MgKGFub25fcGFnZXMgXHUwMDNlXHUwMDNlIDYpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCByZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdGludCBuaWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbisjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRpZiAobWVtY2cgPT0gTlVMTCkge1xuIFx0XHQvKlxuLVx0XHQgKiBGb3Igbm9uLW1lbWNnIHJlY2xhaW0sIGlzIHRoZXJlXG4tXHRcdCAqIHNwYWNlIGluIGFueSBzd2FwIGRldmljZT9cbitcdFx0ICogRm9yIG5vbi1tZW1jZyByZWNsYWltLCBpcyB0aGVyZSBzcGFjZSBpbiBhbnkgc3dhcCBkZXZpY2U/XG4rXHRcdCAqIEFuZCB1bmRlciBHRlBfTk9JTywgaXMgdGhlcmUgZW5vdWdoIHN3YXBjYWNoZWQgYW5vbiB0byBtYWtlXG4rXHRcdCAqIHNjYW5uaW5nIGFub24gd29ydGh3aGlsZT9cbiBcdFx0ICovXG4tXHRcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzZSAwKVxuK1x0XHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFyZWNsYWltYWJsZV9hbm9uX2lzX2xvdyhtZW1jZywgbmlkLCBzYykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9IGVsc2Uge1xuLVx0XHQvKiBJcyB0aGUgbWVtY2cgYmVsb3cgaXRzIHN3YXAgbGltaXQ/ICovXG4tXHRcdGlmIChtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSBcdTAwM2UgMClcbitcdFx0LypcbitcdFx0ICogSXMgdGhlIG1lbWNnIGJlbG93IGl0cyBzd2FwIGxpbWl0LCBhbmQgdW5kZXIgR0ZQX05PSU8gZG9lc1xuK1x0XHQgKiBpdCBoYXZlIGVub3VnaCBzd2FwY2FjaGVkIGFub24gdG8gbWFrZSBzY2FubmluZyB3b3J0aHdoaWxlP1xuK1x0XHQgKi9cbitcdFx0aWYgKG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMobWVtY2cpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXJlY2xhaW1hYmxlX2Fub25faXNfbG93KG1lbWNnLCBuaWQsIHNjKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjI2OjE5LjE2MjkwNzQ0M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDQwNTg4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIGZvciBLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBrZXJuZWwgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBkaWcgaW4uIEl0J3MgbW9kaWZ5aW5nIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgdGhpcyBgcmVjbGFpbWFibGVfYW5vbl9pc19sb3dgIGZ1bmN0aW9uLiBVbmRlciBgQ09ORklHX1NXQVBgIGl0IGxvb2tzIGxpa2UgYSBuZXcgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHNjYW5uaW5nIGFub24gcGFnZXMgZHVyaW5nIHJlY2xhaW0sIHNwZWNpZmljYWxseSB3aGVuIHN3YXBjYWNoZSBpcyBsb3cgYW5kIHdlJ3JlICpub3QqIGFsbG93ZWQgSS9PLCBvciBpZiBMUlUgZ2VuIGlzIGVuYWJsZWQuIEl0J3MgZ3JhYmJpbmcgcGFnZSBzdGF0cyDigJMgYE5SX0lOQUNUSVZFX0FOT05gLCBgTlJfQUNUSVZFX0FOT05gLCBhbmQgYE5SX1NXQVBDQUNIRWAg4oCTIGZyb20gYGxydXZlY19wYWdlX3N0YXRlYCBhbmQgYG5vZGVfcGFnZV9zdGF0ZWAsIHRoZW4gY29tcGFyaW5nIGBzd2FwY2FjaGVgIHRvIGEgZnJhY3Rpb24gb2YgYGFub25fcGFnZXNgLiBJdCdzIHVzZWQgaW5zaWRlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYC5cblxuQWxyaWdodCwgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGlzIGlzICp1bmxpa2VseSogdG8gYmUgYSBLTVNBTiBjYW5kaWRhdGUuIExldCdzIHJ1biB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0czogRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGFueSBkYXRhIHRoYXQgZW5kcyB1cCBpbiB1c2VyIHNwYWNlPyBObywgbm90IGF0IGFsbC4gSXQncyBhbGwgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWxzLiBJcyBpdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vcGUuIEl0ICpkb2VzKiB1c2Ugc29tZSB2YXJpYWJsZXMgKGBzY2AsIGBtZW1jZ2AsIGBuaWRgLCBgYW5vbl9wYWdlc2AsIGBzd2FwY2FjaGVgKSwgYnV0IHRoZSBhcmd1bWVudHMgYHNjYCwgYG1lbWNnYCwgYG5pZGAgYXJlIHN0YW5kYXJkIHBhcmFtZXRlcnMsIHdlbGwtZGVmaW5lZCB3aXRoaW4gdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLiBBbmQgYGFub25fcGFnZXNgIGFuZCBgc3dhcGNhY2hlYCBhcmUgbG9hZGVkIGZyb20gZXhpc3RpbmcgcGFnZSBzdGF0ZSBzdHJ1Y3R1cmVzLiBObyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBEb2VzIGl0IHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBicmFuY2hpbmc/IE5vLiBJdCBkb2Vzbid0IGFsbG9jYXRlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBJdCdzIHB1cmUgcmVjbGFpbSBsb2dpYywgYSBoZXVyaXN0aWMgZm9yIG9wdGltaXphdGlvbi4gSXQncyBub3QgYWx0ZXJpbmcgYW55IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucywgZWl0aGVyLlxuXG5UaGlzIGlzIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIHJlY2xhaW0gbG9naWMgZXJyb3JzLCB3aGljaCBtaWdodCBjYXVzZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgTlVMTCBkZXJlZiAvIGxvY2sgaXNzdWVzLCBidXQgdGhlc2UgYXJlIHN0YW5kYXJkIGJ1Z3MsIG5vdCByZWFsbHkgdGhlIGtpbmQgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gV2Ugd2FudCB0byBiZSBzdXJlIHRob3VnaCwgbGV0J3MgdmVyaWZ5IHdoZXJlIGBjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzYCBpcyBjYWxsZWQsIGp1c3QgaW4gY2FzZSB0aGVyZSdzIHNvbWV0aGluZyB3ZWlyZCBoYXBwZW5pbmcgb3V0c2lkZSBvdXIgcHVydmlldy4gSXQncyBhbHJlYWR5IHVzZWQgaW50ZXJuYWxseSwgbGV0J3MganVzdCBtYWtlIHN1cmUgaXQgaXNuJ3QgYmVpbmcgdXNlZCBpbiBzb21lIHN0cmFuZ2Ugd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MjYuMjAzNDk4NTM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE0MjQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTM2Nj1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtMzgyLVxcdC8qXFxubW0vdm1zY2FuLmM6MzgzOlxcdCAqIEZJWE1FOiBNR0xSVSBkb2Vzbid0IGZ1bGx5IHJlc3BlY3QgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcygpIGZvciB0aGVcXG5tbS92bXNjYW4uYy0zODQtXFx0ICogc2Nhbm5pbmcgdHlwZSwgc28gb25seSBhcHBseSB0aGlzIHRvIHRoZSB0cmFkaXRpb25hbCBMUlUgZm9yIG5vdy5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwND1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNDEwLVxcbm1tL3Ztc2Nhbi5jOjQxMTpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNDEyLVxcdFxcdFxcdFxcdFxcdCAgaW50IG5pZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0Nz11bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS92bXNjYW4uYy00NTItXFx0XFx0em9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX1pPTkVfQUNUSVZFX0ZJTEUpO1xcbm1tL3Ztc2Nhbi5jOjQ1MzpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCB6b25lX3RvX25pZCh6b25lKSwgTlVMTCkpXFxubW0vdm1zY2FuLmMtNDU0LVxcdFxcdG5yICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9aT05FX0lOQUNUSVZFX0FOT04pICtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2Mjc9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2NDYtXFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYzoyNjQ3OlxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTI2NDgtXFx0XFx0XFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yNjU1LVxcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cXG5tbS92bXNjYW4uYzoyNjU2OlxcdGlmICghc2MtXFx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKSB7XFxubW0vdm1zY2FuLmMtMjY1Ny1cXHRcXHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYz00MjYxPXN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI3My1cXHRyZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSk7XFxubW0vdm1zY2FuLmM6NDI3NDpcXHRpZiAoY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQyNzUtXFx0XFx0cmVjbGFpbWFibGUgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMjM9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzctXFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYzo1MTM4OlxcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSlcXG5tbS92bXNjYW4uYy01MTM5LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NjI1OT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMDQtXFx0aW5hY3RpdmVfbHJ1X3BhZ2VzID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9GSUxFKTtcXG5tbS92bXNjYW4uYzo2MzA1OlxcdGlmIChjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpXFxubW0vdm1zY2FuLmMtNjMwNi1cXHRcXHRpbmFjdGl2ZV9scnVfcGFnZXMgKz0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JTkFDVElWRV9BTk9OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MjYuMjQ5NjQ1Mzg5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMTU2MTEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IFVubmVjZXNzYXJ5IEhlcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGhvbmVzdGx5LCBpdCdzIHByZXR0eSBjbGVhbi4gVGhlIGNoYW5nZXMgYXJlIGFsbCBmb2N1c2VkIG9uIG9wdGltaXppbmcgcGFnZSByZWNsYWltIGhldXJpc3RpY3MsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgcGFnZXMgYW5kIGxvdyBzd2FwY2FjaGUgc2NlbmFyaW9zIHVuZGVyIGBHRlBfTk9JT2AuIE5vIG1ham9yIHJlZCBmbGFncyBhcmUganVtcGluZyBvdXQgYXQgbWUuXG5cbkknbSBzZWVpbmcgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBidWZmZXJzLCB3aGljaCBpcyBhIGh1Z2UgcmVsaWVmIGZyb20gYSBjb21wbGV4aXR5IHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBmYW50YXN0aWMg4oCTIG5vIHJpc2sgb2YgYGNvcHlfdG9fdXNlcmAgaXNzdWVzLCBpbmZvIGxlYWtzLCBvciBhbnkgcG90ZW50aWFsIHBhZGRpbmctcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMuIEZ1cnRoZXJtb3JlLCB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMgb3IgcHJvcGFnYXRpb24gaXNzdWVzLiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgYmFzZWQgb24gY2FsY3VsYXRpb25zIHVzaW5nIGV4aXN0aW5nIG5vZGUgYW5kIGxydXZlYyBzdGF0aXN0aWNzLCBhbmQgdGhlIGBzY2FuX2NvbnRyb2xgIHBvaW50ZXJzIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMgYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIGRhdGEtcmVsYXRlZCBnb3RjaGFzLCBLTVNBTiBzZWVtcyBlbnRpcmVseSB1bm5lY2Vzc2FyeSBoZXJlLiBJJ2QgZXhwZWN0IEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyB0byBiZSBzdWZmaWNpZW50LiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LlxuXG5BbHJpZ2h0LCBsZXQncyBnbyBhaGVhZCBhbmQgdHJpZ2dlciB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4gVGhpcyBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgcGFzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyNCwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MjY6MzUuMjY1MjU5MzgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgaGV1cmlzdGljIGByZWNsYWltYWJsZV9hbm9uX2lzX2xvdygpYCBpbiBgbW0vdm1zY2FuLmNgIHRvIGF2b2lkIHNjYW5uaW5nIGFub255bW91cyBwYWdlcyBkdXJpbmcgYEdGUF9OT0lPYCByZWNsYWltIHdoZW4gc3dhcGNhY2hlIHBhZ2VzIGFyZSBsb3cgcmVsYXRpdmUgdG8gdG90YWwgYW5vbnltb3VzIHBhZ2VzLiBcXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBpbnRlcm5hbCBtZW1vcnkgcmVjbGFpbSBjb250cm9sIGZsb3cgYmFzZWQgb24gbm9kZS9scnV2ZWMgcGFnZSBzdGF0ZSBzdGF0aXN0aWNzIChgTlJfSU5BQ1RJVkVfQU5PTmAsIGBOUl9BQ1RJVkVfQU5PTmAsIGBOUl9TV0FQQ0FDSEVgKSBhbmQgdGhlIGZsYWdzIGluIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWtzIG9yIHBhZGRpbmcgaXNzdWVzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBoZXVyaXN0aWMgYHJlY2xhaW1hYmxlX2Fub25faXNfbG93KClgIGluIGBtbS92bXNjYW4uY2AgdG8gYXZvaWQgc2Nhbm5pbmcgYW5vbnltb3VzIHBhZ2VzIGR1cmluZyBgR0ZQX05PSU9gIHJlY2xhaW0gd2hlbiBzd2FwY2FjaGUgcGFnZXMgYXJlIGxvdyByZWxhdGl2ZSB0byB0b3RhbCBhbm9ueW1vdXMgcGFnZXMuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIGludGVybmFsIG1lbW9yeSByZWNsYWltIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBub2RlL2xydXZlYyBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgKGBOUl9JTkFDVElWRV9BTk9OYCwgYE5SX0FDVElWRV9BTk9OYCwgYE5SX1NXQVBDQUNIRWApIGFuZCB0aGUgZmxhZ3MgaW4gYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVha3Mgb3IgcGFkZGluZyBpc3N1ZXMpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowqtm8g[1] Phase: Succeeded StartedAt: 2026-09-08 07:26:47 +0000 UTC FinishedAt: 2026-09-08 07:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 07:26:47 +0000 UTC FinishedAt: 2026-09-08 07:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2] Phase: Succeeded StartedAt: 2026-09-08 07:26:47 +0000 UTC FinishedAt: 2026-09-08 11:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 07:26:47 +0000 UTC FinishedAt: 2026-09-08 11:07:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","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-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 07:26:47 +0000 UTC FinishedAt: 2026-09-08 07:26:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 07:26:47 +0000 UTC FinishedAt: 2026-09-08 07:26:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqtm8g/series-workflowqtm8g-convert-artifact-1470646071/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 07:26:57 +0000 UTC FinishedAt: 2026-09-08 07:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 07:26:57 +0000 UTC FinishedAt: 2026-09-08 07:42:55 +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:*acd234b0-1b0b-4ed9-8e53-baacffb27acf,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-workflowqtm8g/series-workflowqtm8g-convert-artifact-1470646071/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": "49428756-2fb3-4c60-b7f5-81bde5cb39dc", "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-workflowqtm8g/series-workflowqtm8g-build-action-2160961165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 07:26:57 +0000 UTC FinishedAt: 2026-09-08 07:42:45 +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:*acd234b0-1b0b-4ed9-8e53-baacffb27acf,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-workflowqtm8g/series-workflowqtm8g-convert-artifact-1470646071/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": "49428756-2fb3-4c60-b7f5-81bde5cb39dc", "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-workflowqtm8g/series-workflowqtm8g-build-action-2160961165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 07:42:55 +0000 UTC FinishedAt: 2026-09-08 07:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 07:42:55 +0000 UTC FinishedAt: 2026-09-08 07:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 07:42:55 +0000 UTC FinishedAt: 2026-09-08 07:43:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 07:42:55 +0000 UTC FinishedAt: 2026-09-08 07:43:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","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-workflowqtm8g/series-workflowqtm8g-convert-artifact-1797759846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 07:43:05 +0000 UTC FinishedAt: 2026-09-08 07:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 07:43:05 +0000 UTC FinishedAt: 2026-09-08 07:44:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49428756-2fb3-4c60-b7f5-81bde5cb39dc,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-workflowqtm8g/series-workflowqtm8g-build-action-2160961165/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-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 07:44:43 +0000 UTC FinishedAt: 2026-09-08 07:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 07:44:43 +0000 UTC FinishedAt: 2026-09-08 07:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 07:44:43 +0000 UTC FinishedAt: 2026-09-08 08:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 07:44:43 +0000 UTC FinishedAt: 2026-09-08 08:00:58 +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:*acd234b0-1b0b-4ed9-8e53-baacffb27acf,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-workflowqtm8g/series-workflowqtm8g-convert-artifact-1797759846/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": "442af9d1-d1b2-4d4c-819b-f0c967eb4db6", "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-workflowqtm8g/series-workflowqtm8g-build-action-1543526698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 07:44:43 +0000 UTC FinishedAt: 2026-09-08 08:00:48 +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:*acd234b0-1b0b-4ed9-8e53-baacffb27acf,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-workflowqtm8g/series-workflowqtm8g-convert-artifact-1797759846/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": "442af9d1-d1b2-4d4c-819b-f0c967eb4db6", "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-workflowqtm8g/series-workflowqtm8g-build-action-1543526698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 08:00:58 +0000 UTC FinishedAt: 2026-09-08 08:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 08:00:58 +0000 UTC FinishedAt: 2026-09-08 08:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 08:00:58 +0000 UTC FinishedAt: 2026-09-08 08:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 08:00:58 +0000 UTC FinishedAt: 2026-09-08 08:02:48 +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:*442af9d1-d1b2-4d4c-819b-f0c967eb4db6,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-workflowqtm8g/series-workflowqtm8g-build-action-1543526698/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-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 11:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 11:07:54 +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":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"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:*49428756-2fb3-4c60-b7f5-81bde5cb39dc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*442af9d1-d1b2-4d4c-819b-f0c967eb4db6,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-workflowqtm8g/series-workflowqtm8g-build-action-2160961165/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-workflowqtm8g/series-workflowqtm8g-build-action-1543526698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 08:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 08:03:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"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-workflowqtm8g/series-workflowqtm8g-convert-artifact-3761954731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 08:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 08:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 08:02:58 +0000 UTC FinishedAt: 2026-09-08 08:02:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 08:03:08 +0000 UTC FinishedAt: 2026-09-08 11:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtm8g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reclaimable_anon_is_low","can_reclaim_anon_pages","get_scan_count","shrink_lruvec","zone_reclaimable_pages","set_initial_priority"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"180e97bd5d6329b8bf8878da3cf73e887368fc67","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"c7cbbd20-9603-41e3-a97f-48a844c65892","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 08:03:08 +0000 UTC FinishedAt: 2026-09-08 11:07:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49428756-2fb3-4c60-b7f5-81bde5cb39dc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*442af9d1-d1b2-4d4c-819b-f0c967eb4db6,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-workflowqtm8g/series-workflowqtm8g-build-action-2160961165/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-workflowqtm8g/series-workflowqtm8g-build-action-1543526698/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-workflowqtm8g/series-workflowqtm8g-convert-artifact-3761954731/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,}