Name: series-workflowx2bv8 Phase: Succeeded StartedAt: 2026-08-31 10:26:29 +0000 UTC FinishedAt: 2026-08-31 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[0] Phase: Succeeded StartedAt: 2026-08-31 10:26:29 +0000 UTC FinishedAt: 2026-08-31 10:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 10:26:29 +0000 UTC FinishedAt: 2026-08-31 10:49:49 +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": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "MEMCG_V1" ], "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": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "MEMCG_V1" ], "series_id": "2cc2c44c-8b55-4a5a-9989-442ced716ecc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "count_shadow_nodes", "mod_memcg_state", "mod_lruvec_state", "reparent_memcg_state_local" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAgICYjMzQ7bW9kX21lbWNnX3N0YXRlJiMzNDssCiAgICAmIzM0O21vZF9scnV2ZWNfc3RhdGUmIzM0OywKICAgICYjMzQ7cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzUzOGIwMDJiOTk5Y2QxZTNmZWYxMTdmZjZjNjM2ZDY5ODkyYTk0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjQyOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggODMxOWFkOGM1YzIzYS4uZjQ1NGQwMjc0NmU5ZiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtODA1LDE2ICYjNDM7ODA1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4mIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4mIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxuJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG4ge1xuLVx0LyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqL1xuLVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbiYjNDM7XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuJiM0MztcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4mIzQzO1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTgzNSwxNyAmIzQzOzg0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi44NWE0ZTE0ZTk1ZDUxIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02OTMsMTAgJiM0Mzs2OTMsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcbiBcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gXHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4tXG4gXHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XG4tXG4mIzQzO1x0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfc3RhdGUmIzM0OywKICAgICYjMzQ7bW9kX2xydXZlY19zdGF0ZSYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIHN0YXRzIGhhbmRsaW5nIGFuZCByZWRpcmVjdGlvbiBmb3IgZHlpbmcvb2ZmbGluaW5nIG1lbWNncyBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyAocmVtb3ZpbmcgdGhlIHYxLW9ubHkgcmVzdHJpY3Rpb24pLCBhcyB3ZWxsIGFzIHNoYWRvdyBub2RlIGNvdW50aW5nIGNhbGN1bGF0aW9uIGluIHRoZSB3b3JraW5nc2V0IHNocmlua2VyLiBUaGlzIGlzIGNvcmUgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1MzhiMDAyYjk5OWNkMWUzZmVmMTE3ZmY2YzYzNmQ2OTg5MmE5NDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDo0MjowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA4MzE5YWQ4YzVjMjNhLi5mNDU0ZDAyNzQ2ZTlmIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC04MDUsMTYgJiM0Mzs4MDUsMjEgQEAgc3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKQogCXJldHVybiB2YWwgJmx0OyAwID8gLXJlcyA6IHJlczsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogLyoKLSAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlIHdpdGgKLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLgomIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlCiYjNDM7ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhCiYjNDM7ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKQogewotCS8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi8KLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkgewomIzQzOwkvKgomIzQzOwkgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nCiYjNDM7CSAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrCiYjNDM7CSAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoCiYjNDM7CSAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHsKIAkJKnJjdV9sb2NrZWQgPSBmYWxzZTsKIAkJcmV0dXJuIG1lbWNnOwogCX0KQEAgLTgzNSwxNyAmIzQzOzg0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQotewotCXJldHVybiBtZW1jZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKLXsKLX0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKQpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWMuLjg1YTRlMTRlOTVkNTEgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTY5MywxMCAmIzQzOzY5Myw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCiAJCW1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtJmd0O21lbWNnKTsKIAkJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtJmd0O21lbWNnLCBOT0RFX0RBVEEoc2MtJmd0O25pZCkpOwotCiAJCWZvciAocGFnZXMgPSAwLCBpID0gMDsgaSAmbHQ7IE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspCi0JCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7Ci0KJiM0MzsJCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLAomIzQzOwkJCQkJCQkgTlJfTFJVX0JBU0UgJiM0MzsgaSk7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKIAkJCWxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEZyb20gd2hhdCBJIHNlZSwgd2UgaGF2ZSBjaGFuZ2VzIGluIHR3byBrZXkgZmlsZXM6IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgdGhlIG1vcmUgc2lnbmlmaWNhbnQgb25lcy4gUmVtb3ZpbmcgdGhhdCBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAgYmxvY2sgYXJvdW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoKWAgaXMgbm90ZXdvcnRoeS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGNvbnNvbGlkYXRlcyBzb21lIG1lbWNnIChtZW1vcnkgY2dyb3VwKSBiZWhhdmlvciBhY3Jvc3MgdjEgYW5kIHYyLiBTcGVjaWZpY2FsbHksIHRoZSBvbGQgYGNncm91cF9zdWJzeXNfb25fZGZsKClgIGNoZWNrIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYCFtZW1jZ19pc19keWluZyhtZW1jZylgLiBTbywgaW5zdGVhZCBvZiBiZWluZyB2ZXJzaW9uLWRlcGVuZGVudCwgdGhlIG5ldyBsb2dpYyBub3cgY2hlY2tzIGlmIGEgbWVtY2cgaXMgJiMzNDtkeWluZyYjMzQ7IHRvIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZS4gVGhpcyBhZmZlY3RzIGhvdyBtZW1jZyBzdGF0ZSBpcyB0cmFja2VkIGFuZCBob3cgc3RhdGlzdGljcyBhcmUgcmVwYXJlbnRlZC4gVGhpcyBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGVzZSBzdGF0ZXMgYWNyb3NzIGFsbCBjZ3JvdXAgdmVyc2lvbnMuIFRoaXMgcG90ZW50aWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuCgpNb3Zpbmcgb24gdG8gYG1tL3dvcmtpbmdzZXQuY2AsIHRoZSBjaGFuZ2UgaW4gYGNvdW50X3NoYWRvd19ub2RlcygpYCBhcHBlYXJzIGxlc3MgZHJhbWF0aWMgYXQgZmlyc3QgZ2xhbmNlLiBJdCBsb29rcyBsaWtlIGBscnV2ZWNfbHJ1X3NpemUoKWAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAuIFRoaXMgaXMgcHJvYmFibHkgYW4gb3B0aW1pemF0aW9uLCBvciBtYXliZSBhIGNoYW5nZSBpbiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIExSVS4gSSBrbm93IHRoZSBpbnRlcm5hbHMgb2YgdGhlIExSVSBhcmUgY29tcGxleCwgc28gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoYXQgYE5SX0xSVV9CQVNFICYjNDM7IGlgIGNvcnJlc3BvbmRzIHRvLCBhcyBJIGtub3cgdGhhdCBgaWAgcmFuZ2VzIGZyb20gMCB0byBNQVhfTlJfWk9ORVMgLSAxLiBCdXQgSSBzdXNwZWN0IHRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgJiMzNDt3b3JraW5nIHNldCYjMzQ7IGlzIGNhbGN1bGF0ZWQsIHBvdGVudGlhbGx5IGFmZmVjdGluZyB0aGUgYWNjdXJhY3kgb2YgdGhlIGFsZ29yaXRobS4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIGZpbGVzIG5vdyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgbWVtY2dfaXNfZHlpbmcoKWAgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQsIGFuZCBhbHNvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgcmVwbGFjaW5nIGBscnV2ZWNfbHJ1X3NpemUoKWAuIEkgZXhwZWN0IHRvIHNlZSBzb21lIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgc2ltcGxpZmljYXRpb24gaW4gYm90aCBjYXNlcywgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdC8qIEdldCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgKHZhbCAqIHVuaXQgLyBQQUdFX1NJWkUpLiAqL1xuIDgwMTpcdFx0cmVzID0gbXVsdF9mcmFjKGFicyh2YWwpLCB1bml0LCBQQUdFX1NJWkUpO1xuIDgwMjpcdFx0LyogUm91bmQgdXAgemVybyB2YWx1ZXMuICovXG4gODAzOlx0XHRyZXMgPSByZXMgPyA6IDE7XG4gODA0Olx0XG4gODA1Olx0XHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiA4MDY6XHR9XG4gODA3Olx0XG4gODA4Olx0LypcbiA4MDk6XHQgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxuIDgxMDpcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxuIDgxMTpcdCAqIG1lbWNnIGlzIHJhcmUsIHNvIGRvIHRoZSByZWRpcmVjdGlvbiBmb3IgYWxsIGNncm91cCBoaWVyYXJjaGllcy5cbiA4MTI6XHQgKi9cbiA4MTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbiA4MTQ6XHRnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcbiA4MTU6XHR7XG4gODE2Olx0XHQvKlxuIDgxNzpcdFx0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuIDgxODpcdFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbiA4MTk6XHRcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4gODIwOlx0XHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbiA4MjE6XHRcdCAqL1xuIDgyMjpcdFx0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiA4MjM6XHRcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiA4MjQ6XHRcdFx0cmV0dXJuIG1lbWNnO1xuIDgyNTpcdFx0fVxuIDgyNjpcdFxuIDgyNzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDgyODpcdFx0KnJjdV9sb2NrZWQgPSB0cnVlO1xuIDgyOTpcdFxuIDgzMDpcdFx0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbiA4MzE6XHRcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gODMyOlx0XG4gODMzOlx0XHRyZXR1cm4gbWVtY2c7XG4gODM0Olx0fVxuIDgzNTpcdFxuIDgzNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gODM3Olx0e1xuIDgzODpcdFx0aWYgKCFyY3VfbG9ja2VkKVxuIDgzOTpcdFx0XHRyZXR1cm47XG4gODQwOlx0XG4gODQxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4NDI6XHR9XG4gODQzOlx0XG4gODQ0Olx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDg0NTpcdFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG4gODQ2Olx0e1xuIDg0NzpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuIDg0ODpcdFx0aW50IGNwdTtcbiA4NDk6XHRcbiA4NTA6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDg1MTpcdFx0XHRyZXR1cm47XG4gODUyOlx0XG4gODUzOlx0XHRjcHUgPSBnZXRfY3B1KCk7XG4gODU0Olx0XG4gODU1Olx0XHR0aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUtXHUwMDNlc3RhdGVbaV0sIHZhbCk7XG4gODU2Olx0XHR2YWwgPSBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaWR4LCB2YWwpO1xuIDg1NzpcdFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgdmFsLCBjcHUpO1xuIDg1ODpcdFxuIDg1OTpcdFx0dHJhY2VfbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG4gODYwOlx0XG4gODYxOlx0XHRwdXRfY3B1KCk7XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdC8qKlxuIDg2NTpcdCAqIG1vZF9tZW1jZ19zdGF0ZSAtIHVwZGF0ZSBjZ3JvdXAgbWVtb3J5IHN0YXRpc3RpY3NcbiA4NjY6XHQgKiBAbWVtY2c6IHRoZSBtZW1vcnkgY2dyb3VwXG4gODY3Olx0ICogQGlkeDogdGhlIHN0YXQgaXRlbSAtIGNhbiBiZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBlbnVtIG5vZGVfc3RhdF9pdGVtXG4gODY4Olx0ICogQHZhbDogZGVsdGEgdG8gYWRkIHRvIHRoZSBjb3VudGVyLCBjYW4gYmUgbmVnYXRpdmVcbiA4Njk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzk1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBtZW1jZyBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgaGVhZHMgdG8gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBtZW1jZyBsb2dpYy4gTGV0JiMzOTtzIHNlZSBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhhdCBmaWxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIOKAkyB1bmRlcnN0YW5kaW5nICp3aGVyZSogaXQmIzM5O3MgY2FsbGVkIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyBpdCYjMzk7cyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5yYXZlbGluZyBpdHMgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY29udHJvbCBncm91cHMuIEkgd2FudCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCB0byBnaXZlIG1lIGFuIGlkZWEgd2hhdCBwcm9ibGVtIGlzIGJlaW5nIHNvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbm9uX2R5aW5nX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04MTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODE0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTgxNS17XG4tLVxubW0vbWVtY29udHJvbC5jLTgzNS1cbm1tL21lbWNvbnRyb2wuYzo4MzY6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbm1tL21lbWNvbnRyb2wuYy04Mzcte1xuLS1cbm1tL21lbWNvbnRyb2wuYz04NzA9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTg3Ny1cbm1tL21lbWNvbnRyb2wuYzo4Nzg6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTg3OS1cdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmM6ODgwOlx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtODgxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9OTM2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05NDUtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjk0NjpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTQ3LVx0cG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbi0tXG5tbS9tZW1jb250cm9sLmMtOTUwLVxubW0vbWVtY29udHJvbC5jOjk1MTpcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTk1Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL3dvcmtpbmdzZXQuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgd29ya2luZ3NldCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgYWN0aXZlIG1lbW9yeSByZWdpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgdHJhY2tzIHBhZ2UgYWNjZXNzLCB0aGUgY3JpdGVyaWEgZm9yIG1vdmluZyBwYWdlcyBiZXR3ZWVuIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIGxpc3RzLCBhbmQgaG93IHRoZSBhbGdvcml0aG0gcmVhY3RzIHRvIG1lbW9yeSBwcmVzc3VyZS4gSSBhbnRpY2lwYXRlIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgdGhlIGBwZ2RhdF90YCBhbmQgYHpvbmVfdGAgc3RydWN0dXJlcywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHdvcmtpbmdzZXQgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGluZyBwZXJmb3JtYW5jZSBvciBzdGFiaWxpdHkuIEkgaG9wZSBJIGRvbiYjMzk7dCBydW4gaW50byBhIHNwYWdoZXR0aSBtZXNzIGluIHRoZXJlISBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBJIGtub3cgdGhhdCB0aGUgd29ya2luZ3NldCBjb2RlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXG4gNjgxOlx0XHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cbiA2ODI6XHRcdCAqXG4gNjgzOlx0XHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xuIDY4NDpcdFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcbiA2ODU6XHRcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XG4gNjg2Olx0XHQgKlxuIDY4NzpcdFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXG4gNjg4Olx0XHQgKi9cbiA2ODk6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjkwOlx0XHRpZiAoc2MtXHUwMDNlbWVtY2cpIHtcbiA2OTE6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIDY5MjpcdFx0XHRpbnQgaTtcbiA2OTM6XHRcbiA2OTQ6XHRcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gNjk1Olx0XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4gNjk2Olx0XHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbiA2OTc6XHRcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxuIDY5ODpcdFx0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIDY5OTpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNzAwOlx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDcwMTpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNzAyOlx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzAzOlx0XHR9IGVsc2VcbiA3MDQ6XHQjZW5kaWZcbiA3MDU6XHRcdFx0cGFnZXMgPSBub2RlX3ByZXNlbnRfcGFnZXMoc2MtXHUwMDNlbmlkKTtcbiA3MDY6XHRcbiA3MDc6XHRcdG1heF9ub2RlcyA9IHBhZ2VzIFx1MDAzZVx1MDAzZSAoWEFfQ0hVTktfU0hJRlQgLSAzKTtcbiA3MDg6XHRcbiA3MDk6XHRcdGlmIChub2RlcyBcdTAwM2M9IG1heF9ub2RlcylcbiA3MTA6XHRcdFx0cmV0dXJuIDA7XG4gNzExOlx0XHRyZXR1cm4gbm9kZXMgLSBtYXhfbm9kZXM7XG4gNzEyOlx0fVxuIDcxMzpcdFxuIDcxNDpcdHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hhZG93X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gNzE1Olx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuIDcxNjpcdFx0XHRcdFx0XHQgIHZvaWQgKmFyZykgX19tdXN0X2hvbGQobHJ1LVx1MDAzZWxvY2spXG4gNzE3Olx0e1xuIDcxODpcdFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHhhX25vZGUsIHByaXZhdGVfbGlzdCk7XG4gNzE5Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIG1lbW9yeSBjZ3JvdXAgc3RhdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gYSBtZW1jZyBpcyBvZmZsaW5pbmcsIGFuZCBhbHNvIHRvdWNoaW5nIHRoZSB3b3JraW5nc2V0IGNvZGUuIEhtbSwgbG9va3MgbGlrZSBpdCYjMzk7cyBtZXJnaW5nIHRoZSB2MSBhbmQgdjIgYmVoYXZpb3IsIHdoaWNoIGlzIHVzdWFsbHkgaW50ZXJlc3RpbmcuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYG1vZF9tZW1jZ19zdGF0ZWAgLyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgaG90IHBhdGggY29uY2VybiwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaXJjbGUgYmFjayB0byB0aGF0LgoKVGhlIGluc3RydWN0aW9ucyBzYXkgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgYXJlIHByZXR0eSBjbGVhcjogaXQmIzM5O3MgKm5vdCogd29ydGggZnV6emluZyBpZiBpdCYjMzk7cyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGlvbiwgdW5yZWFjaGFibGUgY29kZSwgb3IgdmVyeSBzcGVjaWZpYyBkcml2ZXJzLiBIb3dldmVyLCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdGhlbiBpdCYjMzk7cyBhIGdvLgoKVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQ6IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIGl0JiMzOTtzIGFsdGVyaW5nIGhvdyBzdGF0cyBhcmUgaGFuZGxlZCB3aGVuIGEgbWVtY2cgaXMgZHlpbmcsIGluY2x1ZGluZyByZW1vdmluZyBhbiBgI2lmZGVmYCBmb3IgdjEuIFRoaXMgbWVhbnMgaXQgaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBjcml0aWNhbCBwYXRoIG9mIG1lbWNnIGFuZCBwYWdlIGNhY2hlIGhhbmRsaW5nLiBUaGVuLCBpbiBgbW0vd29ya2luZ3NldC5jYCwgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGNhbGN1bGF0aW9uIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIGdldCB0byBpdC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGNvdW50X3NoYWRvd19ub2Rlc2AuIE9rYXksIGl0JiMzOTtzIGBzdGF0aWNgLiBEYW1uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMsIGFzIGBzdGF0aWNgIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgdGhlc2UgYXJlIGxpa2VseSBpbmxpbmVkLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyB0aGF0IGNhbGwgdGhpcywgc28gbGV0JiMzOTtzIHN0YXJ0IHNlYXJjaGluZyBpbiBgbW0vd29ya2luZ3NldC5jYCBhbmQgc2VlIHdoZXJlIHRoaXMgaXMgcmVnaXN0ZXJlZCBvciB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTYyOT12b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTY1NS1cbm1tL3dvcmtpbmdzZXQuYzo2NTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5tbS93b3JraW5nc2V0LmMtNjU3LVx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTc9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgzMy1cbm1tL3dvcmtpbmdzZXQuYzo4MzQ6XHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xubW0vd29ya2luZ3NldC5jLTgzNS1cdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBNZWNoYW5pc21zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNpcmNsaW5nIGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLCBnaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lczogYHNjYW5fc2hhZG93X25vZGVzYCwgYHdvcmtpbmdzZXRfdXBkYXRlX25vZGVgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfYWN0aXZhdGlvbmAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB3b3JraW5nc2V0cywgcGVyaGFwcyBzaGFkb3cgbm9kZXMsIGFuZCBsaWtlbHkgc29tZSBmb3JtIG9mIHBhZ2UgZmF1bHQgb3IgbWVtb3J5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uLgoKTm93LCB3aGVyZSBhcmUgdGhlc2UgbWVjaGFuaWNzIGltcGxlbWVudGVkPyBNeSBpbnN0aW5jdCBpbW1lZGlhdGVseSBkaXJlY3RzIG1lIHRvd2FyZHMgYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmluKiBgbW0vbWVtY29udHJvbC5jYC4KCkkgbmVlZCB0byBmb2N1cyBvbiByZWxldmFudCBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBtb2RfbWVtY2dfc3RhdGVgLCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAsIGFuZCBgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBhbmQgd2hhdCBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIGFzIHRoZXkgYXBwZWFyIHRvIGJlIGNlbnRyYWwgdG8gbW9kaWZ5aW5nIG1lbW9yeSBjb250cm9sIGdyb3VwIHN0YXRlIG9yIExSVSB2ZWN0b3Igc3RhdGVzLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMuIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlaXIgcGFyYW1ldGVycywgd2hhdCB0aGVpciBzY29wZSBvZiBmdW5jdGlvbiBpcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIEkgc2hvdWxkIGNoZWNrIHRvIGdhaW4gdGhlIGVudGlyZXR5IG9mIHRoZWlyIGNvbnRleHQ/IExldCYjMzk7cyBjaGVjayB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBib3RoIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kX21lbWNnXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkyMz12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI1LS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI2OnZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkyNy1cdFx0ICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI5OnN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzMC1cdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzOS1cdGlmIChtZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk0MDpcdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTM2NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNjU6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzY2LVx0XHRcdFx0ICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNzAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMzcxOnN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNzItXHRcdFx0XHRcdGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZywgZnJvbSBhIHRlY2huaWNhbCBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYG1tL21lbWNvbnRyb2wuY2AgZm9yIE1lbWNnIExpZmVjeWNsZSBhbmQgU3RhdHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBsaWZlY3ljbGUgYW5kIHN0YXRpc3RpY2FsIGFzcGVjdHMgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIChtZW1jZ3MpLiBJJiMzOTttIGRlbGliZXJhdGVseSAqbm90KiBsb29raW5nIGF0IHRoZSBvYnZpb3VzLCB3ZWxsLXRyb2RkZW4gcGF0aHMgbGlrZSB0aGUgJiMzNDtob3QmIzM0OyBleGVjdXRpb24gcGF0aHMgb3Igc3RhdGljYWxseSBkZWZpbmVkIHN5bWJvbHMgcmlnaHQgYXdheS4gTXkgZ29hbCBpcyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGFueSBvdGhlciBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgb3Igc3ltYm9scyBpbiB0aGlzIGZpbGUgdGhhdCBtaWdodCByZWxhdGUgdG8gaG93IG1lbWNncyBhcmUgY3JlYXRlZCwgZGVzdHJveWVkLCBvciBob3cgdGhlaXIgbWVtb3J5IHVzYWdlIGlzIHRyYWNrZWQgKmJlc2lkZXMqIHRoZSBtb3N0IG9idmlvdXMgb25lcy4gSSB3YW50IHRvIGJ1aWxkIGEgbW9yZSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLgoKSSBmaWd1cmUgcmVhZGluZyBhcm91bmQgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRob3NlIGxvb2sgbGlrZSBrZXkgZnVuY3Rpb25zL3N0cnVjdHVyZXMgZm9yIG1vZGlmeWluZyBvciB1cGRhdGluZyB0aGUgc3RhdGUgb2YgYSBtZW1jZywgZXNwZWNpYWxseSByZWdhcmRpbmcgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBkYXRhLiBJJiMzOTttIGJldHRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzdGF0ZXMgYXJlIG1vZGlmaWVkIHdpbGwgaWxsdW1pbmF0ZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgd2lsbCBsaWtlbHkgcmV2ZWFsIGhvdyB0aGUgbWVtb3J5IGFjY291bnRpbmcgYW5kIG90aGVyIHN0YXRzIGFyZSB1cGRhdGVkIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHR2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbiA4NzE6XHRcdFx0ICAgICAgIGludCB2YWwpXG4gODcyOlx0e1xuIDg3MzpcdFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XG4gODc0Olx0XG4gODc1Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDg3NjpcdFx0XHRyZXR1cm47XG4gODc3Olx0XG4gODc4Olx0XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xuIDg3OTpcdFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiA4ODA6XHRcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xuIDg4MTpcdH1cbiA4ODI6XHRcbiA4ODM6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gODg0Olx0LyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xuIDg4NTpcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4gODg2Olx0e1xuIDg4NzpcdFx0bG9uZyB4O1xuIDg4ODpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuIDg4OTpcdFxuIDg5MDpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gODkxOlx0XHRcdHJldHVybiAwO1xuIDg5MjpcdFxuIDg5MzpcdFx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbiA4OTQ6XHQjaWZkZWYgQ09ORklHX1NNUFxuIDg5NTpcdFx0aWYgKHggXHUwMDNjIDApXG4gODk2Olx0XHRcdHggPSAwO1xuIDg5NzpcdCNlbmRpZlxuIDg5ODpcdFx0cmV0dXJuIHg7XG4gODk5Olx0fVxuIDkwMDpcdFxuIDkwMTpcdHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDkwMjpcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcbiA5MDM6XHR7XG4gOTA0Olx0XHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcbiA5MDU6XHRcbiA5MDY6XHRcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIC12YWx1ZSk7XG4gOTA3Olx0XHRfX21vZF9tZW1jZ19zdGF0ZShwYXJlbnQsIGlkeCwgdmFsdWUpO1xuIDkwODpcdH1cbiA5MDk6XHQjZW5kaWZcbiA5MTA6XHRcbiA5MTE6XHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuIDkxMjpcdFx0XHRcdFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG4gOTEzOlx0e1xuIDkxNDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcG4tXHUwMDNlbWVtY2c7XG4gOTE1Olx0XHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XG4gOTE2Olx0XHRpbnQgY3B1O1xuIDkxNzpcdFxuIDkxODpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gOTE5Olx0XHRcdHJldHVybjtcbiA5MjA6XHRcbiA5MjE6XHRcdGNwdSA9IGdldF9jcHUoKTtcbiA5MjI6XHRcbiA5MjM6XHRcdC8qIFVwZGF0ZSBtZW1jZyAqL1xuIDkyNDpcdFx0dGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xuIDkyNTpcdFxuIDkyNjpcdFx0LyogVXBkYXRlIGxydXZlYyAqL1xuIDkyNzpcdFx0dGhpc19jcHVfYWRkKHBuLVx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUtXHUwMDNlc3RhdGVbaV0sIHZhbCk7XG4gOTI4Olx0XG4gOTI5Olx0XHR2YWwgPSBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaWR4LCB2YWwpO1xuIDkzMDpcdFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgdmFsLCBjcHUpO1xuIDkzMTpcdFx0dHJhY2VfbW9kX21lbWNnX2xydXZlY19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xuIDkzMjpcdFxuIDkzMzpcdFx0cHV0X2NwdSgpO1xuIDkzNDpcdH1cbiA5MzU6XHRcbiA5MzY6XHRzdGF0aWMgdm9pZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiA5Mzc6XHRcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXG4gOTM4Olx0XHRcdFx0XHQgICAgIGludCB2YWwpXG4gOTM5Olx0e1xuIDk0MDpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuIDk0MTpcdFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuIDk0MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDk0MzpcdFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XG4gOTQ0Olx0XG4gOTQ1Olx0XHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuIDk0NjpcdFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVx1MDAzZW1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbiA5NDc6XHRcdHBuID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gOTQ4Olx0XG4gOTQ5Olx0XHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocG4sIGlkeCwgdmFsKTtcbiA5NTA6XHRcbiA5NTE6XHRcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xuIDk1MjpcdH1cbiA5NTM6XHRcbiA5NTQ6XHQvKipcbiA5NTU6XHQgKiBtb2RfbHJ1dmVjX3N0YXRlIC0gdXBkYXRlIGxydXZlYyBtZW1vcnkgc3RhdGlzdGljc1xuIDk1NjpcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcbiA5NTc6XHQgKiBAaWR4OiB0aGUgc3RhdCBpdGVtXG4gOTU4Olx0ICogQHZhbDogZGVsdGEgdG8gYWRkIHRvIHRoZSBjb3VudGVyLCBjYW4gYmUgbmVnYXRpdmVcbiA5NTk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuCgoqKkludmVzdGlnYXRpbmcgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBzb21lb25lJiMzOTtzIGFza2VkIG1lIHRvIGxvb2sgaW50byBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbWNnIChtZW1vcnkgY29udHJvbCBncm91cCkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gKnVzZWQqPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSB3aGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgc3RhdGUgb2YgYSBtZW1jZy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gTFJVIG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBmdW5jdGlvbnMgZm9yIHVwZGF0aW5nLCBxdWVyeWluZywgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGluZyB0aGUgTFJVIHN0YXRlPyBLbm93aW5nIHRoZSBsYW5kc2NhcGUgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB2aWV3LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBtYWtpbmcgc3VyZSB0byB0cmFjayB0aGUgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGFuZCByZWxhdGVkIGZlYXR1cmVzLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgTFJVIHN0YXRlIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIG1lbWNnIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk1NTpcdCAqIG1vZF9scnV2ZWNfc3RhdGUgLSB1cGRhdGUgbHJ1dmVjIG1lbW9yeSBzdGF0aXN0aWNzXG4gOTU2Olx0ICogQGxydXZlYzogdGhlIGxydXZlY1xuIDk1NzpcdCAqIEBpZHg6IHRoZSBzdGF0IGl0ZW1cbiA5NTg6XHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxuIDk1OTpcdCAqXG4gOTYwOlx0ICogVGhlIGxydXZlYyBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBOVU1BIG5vZGUgYW5kIGEgY2dyb3VwLiBUaGlzXG4gOTYxOlx0ICogZnVuY3Rpb24gdXBkYXRlcyB0aGUgYWxsIHRocmVlIGNvdW50ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGFcbiA5NjI6XHQgKiBjaGFuZ2Ugb2Ygc3RhdGUgYXQgdGhpcyBsZXZlbDogcGVyLW5vZGUsIHBlci1jZ3JvdXAsIHBlci1scnV2ZWMuXG4gOTYzOlx0ICovXG4gOTY0Olx0dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXG4gOTY1Olx0XHRcdFx0aW50IHZhbClcbiA5NjY6XHR7XG4gOTY3Olx0XHQvKiBVcGRhdGUgbm9kZSAqL1xuIDk2ODpcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4LCB2YWwpO1xuIDk2OTpcdFxuIDk3MDpcdFx0LyogVXBkYXRlIG1lbWNnIGFuZCBscnV2ZWMgKi9cbiA5NzE6XHRcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDk3MjpcdFx0XHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCB2YWwpO1xuIDk3MzpcdH1cbiA5NzQ6XHRcbiA5NzU6XHR2b2lkIGxydXZlY19zdGF0X21vZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcbiA5NzY6XHRcdFx0XHQgICAgIGludCB2YWwpXG4gOTc3Olx0e1xuIDk3ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDk3OTpcdFx0cGdfZGF0YV90ICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiA5ODA6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiA5ODE6XHRcbiA5ODI6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA5ODM6XHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIDk4NDpcdFx0LyogVW50cmFja2VkIHBhZ2VzIGhhdmUgbm8gbWVtY2csIG5vIGxydXZlYy4gVXBkYXRlIG9ubHkgdGhlIG5vZGUgKi9cbiA5ODU6XHRcdGlmICghbWVtY2cpIHtcbiA5ODY6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gOTg3Olx0XHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIGlkeCwgdmFsKTtcbiA5ODg6XHRcdFx0cmV0dXJuO1xuIDk4OTpcdFx0fVxuIDk5MDpcdFxuIDk5MTpcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiA5OTI6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIHZhbCk7XG4gOTkzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA5OTQ6XHR9XG4gOTk1Olx0RVhQT1JUX1NZTUJPTChscnV2ZWNfc3RhdF9tb2RfZm9saW8pO1xuIDk5NjpcdFxuIDk5NzpcdHZvaWQgbW9kX2xydXZlY19rbWVtX3N0YXRlKHZvaWQgKnAsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIDk5ODpcdHtcbiA5OTk6XHRcdHBnX2RhdGFfdCAqcGdkYXQgPSBwYWdlX3BnZGF0KHZpcnRfdG9fcGFnZShwKSk7XG4xMDAwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4xMDAxOlx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4xMDAyOlx0XG4xMDAzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMDA0Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV92aXJ0KHApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBtZW1jZyBvZmZsaW5pbmcvZHlpbmcgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIG1lbWNnIE9mZmxpbmluZyBUcmlnZ2VycyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVjaXNlbHkgY2F1c2VzIGEgbWVtb3J5IGNncm91cCAobWVtY2cpIHRvIG9mZmxpbmUgb3IgZGllLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBtZW1vcnkgY29udHJvbCBncm91cHMuIEkga25vdyB0aGUgbGlrZWx5IHN1c3BlY3RzIGFyZSB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuCgpNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZXNlIHN0YXRlcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYXMgYSBwcmltYXJ5IHRyaWdnZXIsIGFuZCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWRgIGFuZCBgbWVtX2Nncm91cF9jc3NfZnJlZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMuCgpNeSBuZXh0IHN0ZXAgaXMgYSBjb2RlIHNlYXJjaC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHNlYXJjaCBmb3IgdGhlIHN0cmluZyAmIzM0O2Nzc19vZmZsaW5lJiMzNDsuIFRoaXMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIGFsbCB0aGUgY2FsbCBzaXRlcyBhbmQgcmVsYXRlZCBsb2dpYyBzdXJyb3VuZGluZyB0aGUgb2ZmbGluZSBwcm9jZXNzLCBhbGxvd2luZyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBtZW1jZyBkZWFjdGl2YXRpb24uIEkgZXhwZWN0IHRoaXMgYXBwcm9hY2ggd2lsbCBxdWlja2x5IHVuY292ZXIgdGhlIGNydWNpYWwgbWVjaGFuaXNtcyBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjc3Nfb2ZmbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDIwNT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjgxLVxubW0vbWVtY29udHJvbC5jOjQyODI6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxubW0vbWVtY29udHJvbC5jLTQyODMte1xuLS1cbm1tL21lbWNvbnRyb2wuYy00Mjg1LVxubW0vbWVtY29udHJvbC5jOjQyODY6XHRtZW1jZzFfY3NzX29mZmxpbmUobWVtY2cpO1xubW0vbWVtY29udHJvbC5jLTQyODctXG4tLVxubW0vbWVtY29udHJvbC5jPTUwODg9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDkwLVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5tbS9tZW1jb250cm9sLmM6NTA5MTpcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXG5tbS9tZW1jb250cm9sLmMtNTA5Mi1cdC5jc3NfcmVsZWFzZWQgPSBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgZm9yIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQsIHRoYXQgbWVhbnMgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlaXIgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2UgZmlsZXMgYXJlIGNvbXBpbGVkLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBpbml0L0tjb25maWdgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTttIGFzc3VtaW5nIGBDT05GSUdfTUVNQ0dgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gdGhpcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIG9wdGlvbiBpbmZsdWVuY2VzIHRoZSBjb21waWxhdGlvbiBvZiB0aG9zZSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gbWFrZSB0aG9zZSBtb2R1bGVzIHdvcmsgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDcyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIHNldCB1cCwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBvcHRpb24uIEkga25vdyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgbWFuYWdpbmcgcmVzb3VyY2VzIGluIHRoZSBrZXJuZWwsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmVkIGluIGBpbml0L0tjb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbSwgaXRzIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3ludGF4LCBkZXBlbmRlbmNpZXMsIGFuZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRoYXQgSSBjYW4gcXVpY2tseSBzY2FuIGZvciBhIHF1aWNrIG92ZXJ2aWV3LiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgd2hlcmUgdG8gZ28gbmV4dCBiYXNlZCBvbiB3aGF0IEkgdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc0PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDgzLVxuaW5pdC9LY29uZmlnOjEwODQ6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4NS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5Mi1cbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OS1cbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDEtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDYtXG5pbml0L0tjb25maWc6MTEwNzpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA4LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9ucyBhcm91bmQgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IENvbnRyb2wgR3JvdXBzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgaGFzIHRvIHNheSBhYm91dCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29uZGl0aW9uYWwgbG9naWMuIFdoZXJlIGRvZXMgYENPTkZJR19NRU1DR2AgZml0IHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBvciBkZXByZWNhdGlvbnMgcmVsYXRlZCB0byB0aGUgZGlmZmVyZW50IG1lbW9yeSBjZ3JvdXAgdmVyc2lvbnMsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgYENPTkZJR19NRU1DR19WMWAgaXMgaGFuZGxlZCByZWxhdGl2ZSB0byB0aGUgbmV3ZXIgY2FwYWJpbGl0aWVzIG9yIGRlZmF1bHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBtb25vbGl0aGljIG9wdGlvbiBvciBpZiB0aGVyZSBhcmUgZmluZXItZ3JhaW5lZCBjaG9pY2VzIHRoYXQgYmVjb21lIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIEZvciBpbnN0YW5jZSwgYXJlIHRoZXJlIHN1Yi1vcHRpb25zIHRoYXQgY29udHJvbCBzcGVjaWZpYyBtZW1vcnkgYWNjb3VudGluZyBvciB0aHJvdHRsaW5nIGZlYXR1cmVzPyBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzIHNwZWNpZmllZD8gQW5kIGhvdyBkb2VzIHRoZSBmaWxlIGhhbmRsZSB0aGUgdXNlciYjMzk7cyBkZWZhdWx0IGNob2ljZT8gV2hhdCBraW5kIG9mIGhlbHAgdGV4dCBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIHdoYXQsIGFuZCB3aWxsIGl0IGJlIGNsZWFyIGFuZCBjb25jaXNlPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGxlZ2FjeSBzdXBwb3J0IGFuZCBhIHBvdGVudGlhbCB0cmFuc2l0aW9uIHBhdGgsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdhaW4gYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXNpZ24gc3BhY2UgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHdoZW4gd29ya2luZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MTpcdFxuMTA4MjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDgzOlx0XG4xMDg0Olx0Y29uZmlnIE1FTUNHXG4xMDg1Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg2Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg3Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4ODpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4OTpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkwOlx0XHRoZWxwXG4xMDkxOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTI6XHRcbjEwOTM6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NDpcdFx0Ym9vbFxuMTA5NTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NjpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5NzpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTg6XHRcdGRlZmF1bHQgeVxuMTA5OTpcdFxuMTEwMDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMTpcdFx0Ym9vbFxuMTEwMjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwMzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNDpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNTpcdFx0ZGVmYXVsdCB5XG4xMTA2Olx0XG4xMTA3Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA4Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMDk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTA6XHRcdGRlZmF1bHQgblxuMTExMTpcdFx0aGVscFxuMTExMjpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTM6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMTQ6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTE1Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExNjpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTc6XHRcbjExMTg6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTExOTpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNRU1DRyBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBNRU1DR2AuIEkga25vdyB0aGF0IEkgbmVlZCB0aGUgYE1FTUNHYCBjb25maWcgb3B0aW9uIGVuYWJsZWQgZm9yIGJvdGggdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYW5kIHRoYXQgY29uZGl0aW9uYWwgYGlmZGVmYCBpbiBgbW0vd29ya2luZ3NldC5jYC4gQnV0IGEgcXVpY2sgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IGlzIGBNRU1DR2AgYWN0dWFsbHkgY29udGluZ2VudCBvbiBgQ0dST1VQU2AgYmVpbmcgZW5hYmxlZD8gVGhpcyBmZWVscyBsaWtlIGEgcXVlc3Rpb24gSSBzaG91bGQgYWJzb2x1dGVseSBrbm93IHRoZSBhbnN3ZXIgdG8sIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQsIHNvIEkgY2FuIGNvbmZpcm0gd2hldGhlciBgTUVNQ0dgIGlzIGRpcmVjdGx5IHRpZWQgdG8gYW4gYGlmIENHUk9VUFNgIGJsb2NrIG9yIGlmIGl0IGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQU3xpZiBDR1JPVVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDUyPWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA1NC1cbmluaXQvS2NvbmZpZzoxMDU1Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTYtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDY4LVxuaW5pdC9LY29uZmlnOjEwNjk6aWYgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODk0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtb3J5IENHcm91cHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYE1FTUNHYCwgd2hpY2ggSSBrbm93IGxpdmVzIHVuZGVyIHRoZSBgQ0dST1VQU2AgdW1icmVsbGEuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gR290dGEgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHlvdSBrbm93PwoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgaW4gdGVybXMgb2Ygd2hhdCYjMzk7cyByZWxldmFudCB0byB0aGlzIGFyZWE/IEhlcmUgYXJlIGEgZmV3IHRob3VnaHRzOgoKKiAgIGBtb2RfbWVtY2dfc3RhdGVgOiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgY29yZSBzdGF0ZSB2YXJpYWJsZSwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCiogICBgbW9kX2xydXZlY19zdGF0ZWA6IExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBMUlUgdmVjdG9yIHdpdGhpbiB0aGUgY2dyb3VwLiBEZWZpbml0ZWx5IHJlbGV2YW50LgoqICAgYGxydXZlY19zdGF0X21vZF9mb2xpb2A6IFRoaXMgaXMgdmVyeSBzcGVjaWZpYyBidXQgbG9va3MgbGlrZSBpdCBoYW5kbGVzIHVwZGF0aW5nIGZvbGlvIHN0YXRzIHdpdGhpbiB0aGUgTFJVLCBhbHNvIGltcG9ydGFudC4KKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgIChvciBwZXJoYXBzIGB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlYCBvciBgd29ya2luZ3NldF9yZWZhdWx0YCk6IFNoYWRvdyBub2RlcyBhcmUgaW50ZXJlc3RpbmcsIHNvIHRoaXMgY291bnQgc2VlbXMgaW1wb3J0YW50LiBJJiMzOTttIGFsc28gdGhpbmtpbmcgdXBkYXRlcyBhbmQgcmVmYXVsdHMgaW4gdGhlIHdvcmtpbmcgc2V0IGFyZSByZWxldmFudCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZXNlIGFzIHdlbGwuCiogICBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWA6IFRoaXMgaXMgcHJvYmFibHkgdGhlIGNncm91cCBzdWJzeXN0ZW0gc3RhdGUgb2ZmbGluZS4KCklmIGBNRU1DR19WMWAgaXMgZW5hYmxlZCBJIG5lZWQgdG8gY2hlY2sgYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTIyMDk9dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZzFfc3RhdHMpOyBpJiM0MzsmIzQzOylcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjE0Olx0XHRyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBtZW1jZzFfc3RhdHNbaV0pO1xubW0vbWVtY29udHJvbC12MS5jLTIyMTUtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD03MT12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaC03Mi1cbm1tL21lbWNvbnRyb2wtdjEuaDo3Mzp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC03NC1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04ODU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtOTAwLVxubW0vbWVtY29udHJvbC5jOjkwMTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05MDItXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgxNQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFJlZmluZW1lbnQgZm9yIE1lbWNnIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHJlZmluaW5nIG91ciBmb2N1cyBzeW1ib2xzIGZvciBtZW1jZyBmdXp6aW5nLiBUaGUgZ3VpZGFuY2UgaXMgY2xlYXI6IHdlIG5lZWQgdG8gaXNvbGF0ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGZ1enouIFdlIHdhbnQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBiYWxhbmNlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gV2UmIzM5O3JlIGFpbWluZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBmdW5jdGlvbnMgdGhhdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG5vdCBidXJpZWQgaW5saW5lZCBoZWxwZXJzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjYW5kaWRhdGUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQ6IGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBgbW9kX21lbWNnX3N0YXRlYCwgYG1vZF9scnV2ZWNfc3RhdGVgLCBgbW9kX2xydXZlY19rbWVtX3N0YXRlYCwgYW5kIGBjb3VudF9zaGFkb3dfbm9kZXNgLgoKSSBuZWVkIHRvIGFuYWx5emUgaWYgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbHJ1dmVjX3N0YXRlYCBxdWFsaWZ5IGFzIGhvdC1wYXRoIGNhbmRpZGF0ZXMuIFdoaWxlIHRoZXkgZ2V0IHNvbWUgYWN0aW9uIGR1cmluZyBhbGxvY2F0aW9ucyBhbmQgZnJlZWluZywgdGhvc2UgYXJlIG5vdCB0aGUgbWFpbiBhcmVhcyB3ZSB3YW50IHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIG1lbWNnIHJlcGFyZW50aW5nLCBjZ3JvdXAgdGVhcmRvd24sIGFuZCBzaGFkb3cgc2hyaW5rZXIgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCBpcyB0aGUgY3J1Y2lhbCBvbmUgZm9yIHYxIG9mZmxpbmluZy4gRm9yIHYyLCBvciBnZW5lcmFsIGNncm91cCBvZmZsaW5pbmcsIHRoZSBrZXkgZnVuY3Rpb25zIGFyZSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYW5kIGBtZW1jZzFfY3NzX29mZmxpbmVgLiBBbmQgZmluYWxseSwgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgc29tZXRoaW5nIHdlIG1pZ2h0IGNvbnNpZGVyLCBsb2NhdGVkIGluIGBtbS93b3JraW5nc2V0LmNgLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBgRW5hYmxlQ29uZmlnc2AgYXJlIG9uIHBvaW50OiBgQ0dST1VQU2AsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLgoKQ3J1Y2lhbGx5LCBzaG91bGQgd2UgZW5hYmxlIGBNRU1DR19WMWAgdG8gaGl0IGJvdGggdjEgYW5kIHYyIHBhdGhzPyBZZXMsIGFic29sdXRlbHkuIGBNRU1DR19WMWAgZW5hYmxlcyB0ZXN0aW5nIGByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbGAsIHdoaWNoIGNhbGxzIGBfX21vZF9tZW1jZ19zdGF0ZWAsIHdoaWxlIHYyIGFsc28gYnJpbmdzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBpbnRvIHRoZSBwaWN0dXJlLgoKT2theSwgbGV0JiMzOTtzIHRha2Ugb25lIGxhc3QgcGFzcyB0byBjb25maXJtIGFsbCBvZiB0aGlzIGFuZCBmb3JtYXQgdGhlIHJlc3VsdHMgbmVhdGx5IHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgbWVtb3J5IGNncm91cCBzdGF0IGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmc6XG4xLiBJbiBgbW0vbWVtY29udHJvbC5jYCwgaXQgc2ltcGxpZmllcyBhbmQgZXh0ZW5kcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBhbmQgYWRqdXN0cyBSQ1UgbG9ja2luZyBsb2dpYyB3aGVuIG9mZmxpbmluZy9yZXBhcmVudGluZyBtZW1jZ3MuIFRoZSBvdXQtcGFyYW1ldGVyIGByY3VfbG9ja2VkYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgb24gYWxsIGV4ZWN1dGlvbiBwYXRocyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYC5cbjIuIEluIGBtbS93b3JraW5nc2V0LmNgLCBpdCB1cGRhdGVzIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBpbnN0ZWFkIG9mIGBscnV2ZWNfbHJ1X3NpemUoKWAuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIHJlYWQsIG5vIHN0cnVjdHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGV4cG9zdXJlcyBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIChzdWNoIGFzIFJDVSBsaWZldGltZSBpc3N1ZXMsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTM4YjAwMmI5OTljZDFlM2ZlZjExN2ZmNmM2MzZkNjk4OTJhOTQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTA6NDI6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggODMxOWFkOGM1YzIzYS4uZjQ1NGQwMjc0NmU5ZiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtODA1LDE2ICYjNDM7ODA1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbCkKIAlyZXR1cm4gdmFsICZsdDsgMCA/IC1yZXMgOiByZXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKIC8qCi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoCi0gKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4KJiM0MzsgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZQomIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYQomIzQzOyAqIG1lbWNnIGlzIHJhcmUsIHNvIGRvIHRoZSByZWRpcmVjdGlvbiBmb3IgYWxsIGNncm91cCBoaWVyYXJjaGllcy4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICoKJiM0MztnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZCkKIHsKLQkvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovCi0JaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHsKJiM0MzsJLyoKJiM0MzsJICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZwomIzQzOwkgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9jawomIzQzOwkgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaAomIzQzOwkgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC4KJiM0MzsJICovCiYjNDM7CWlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7CiAJCSpyY3VfbG9ja2VkID0gZmFsc2U7CiAJCXJldHVybiBtZW1jZzsKIAl9CkBAIC04MzUsMTcgJiM0Mzs4NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKLXsKLQlyZXR1cm4gbWVtY2c7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCkKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjLi44NWE0ZTE0ZTk1ZDUxIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC02OTMsMTAgJiM0Mzs2OTMsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAogCQltZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLSZndDttZW1jZyk7CiAJCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLSZndDttZW1jZywgTk9ERV9EQVRBKHNjLSZndDtuaWQpKTsKLQogCQlmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQotCQkJcGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpOwotCiYjNDM7CQkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywKJiM0MzsJCQkJCQkJIE5SX0xSVV9CQVNFICYjNDM7IGkpOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCiAJCQlscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiB0ZXN0aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFuZCB3b3JraW5nc2V0IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBhcmVhcyB3aGVyZSBzdWJ0bGUgYnVncyBjYW4gaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgZWFjaCBtb2RpZmljYXRpb24uCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AuIFRoZSByZW1vdmFsIG9mIHRoZSBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAgY29uZGl0aW9uYWwgYXJvdW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgZGlyZWN0IGNoZWNrIGZvciBgIW1lbWNnX2lzX2R5aW5nKG1lbWNnKWAgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cylgIGNvbmRpdGlvbmFsIGluZGljYXRlcyBhIHNoaWZ0IGluIGhvdyBtZW1jZyBkZWF0aCBpcyBoYW5kbGVkIG9yIGRldGVjdGVkLiBUaGlzIGNoYW5nZSBpbiBjb250cm9sIGZsb3cgaXMgYSBjbGFzc2ljIGFyZWEgdG8gdHJpZ2dlciBwcm9ibGVtcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHJhY2UgY29uZGl0aW9ucywgYW5kIGlmIHRoZSBtZW1vcnkgYmFja2luZyB0aGUgY2dyb3VwIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIHdoZW4gdGhlIG5ldyBjb2RlIGV4ZWN1dGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcmVtb3ZhbCBvZiB0aGUgY29uZGl0aW9uYWwgYWx0ZXJzIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBndWFyYW50ZWVzIG9yIGFzc3VtcHRpb25zLiBUaGUgbW9kaWZpY2F0aW9uIG9mIFJDVSBsb2NraW5nIGxvZ2ljIGZvciBtZW1jZyBhbmNlc3RvciB3YWxrIGR1cmluZyBvZmZsaW5pbmcvZHlpbmcgaXMgYWxzbyBjb25jZXJuaW5nLCBwYXJ0aWN1bGFybHkgaW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBsb2dpYywgdGhlIGxvY2tpbmcgc3RyYXRlZ3ksIGFuZCBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuCgpTZWNvbmQsIHRoZSBjaGFuZ2UgaW4gYG1tL3dvcmtpbmdzZXQuY2AgaW4gYGNvdW50X3NoYWRvd19ub2RlcygpYCBhcHBlYXJzIHRvIGJlIGEgbW9kaWZpY2F0aW9uIG9mIGhvdyBscnV2ZWMgc2l6ZSBpcyBjYWxjdWxhdGVkLiBSZXBsYWNpbmcgYGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpYCB3aXRoIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsIE5SX0xSVV9CQVNFICYjNDM7IGkpYCBpcyBwb3RlbnRpYWxseSBzdWJ0bGUuIEkmIzM5O2xsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24gb3IgdXNhZ2Ugb2YgbWVtb3J5LCBvciBpZiBpdCBjYW4gbGVhZCB0byB1bmRlci1jb3VudGluZyBvZiBhbGxvY2F0ZWQgcGFnZXMuIEFyZSB3ZSBpbmFkdmVydGVudGx5IHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/CgpHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbWVtb3J5LXJlbGF0ZWQgYnVncyBpbiBib3RoIGZpbGVzLCBJIHdpbGwgbmVlZCB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQuIEkmIzM5O2xsIGxpa2VseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIGVuc3VyaW5nIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciB3cml0dGVuLiBBbnkgZGl2ZXJnZW5jZSBpbiBleGVjdXRpb24gcGF0aHMgYmFzZWQgb24gdGhlIGRlYXRoIG9mIGEgbWVtY2cgbmVlZHMgdG8gYmUgdmVyaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTgxMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbm1tL21lbWNvbnRyb2wuYzo4MTQ6Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG5tbS9tZW1jb250cm9sLmMtODE1LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9ODcwPXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzctXG5tbS9tZW1jb250cm9sLmM6ODc4Olx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy04NzktXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MzY9c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTk0NS1cdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG5tbS9tZW1jb250cm9sLmM6OTQ2Olx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVx1MDAzZW1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy05NDctXHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sIGluIG1tL21lbWNvbnRyb2wuYyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIG1lbW9yeSBjb250cm9sIGZ1bmN0aW9ucywgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYCwgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYSwgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgb24gYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBJJiMzOTtsbCBqdW1wIHRvIHRoZSByZWxldmFudCBzZWN0aW9uIGFyb3VuZCBsaW5lcyA4MDAgdG8gODYwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgdGhleSBoYW5kbGUgZHlpbmcgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZWlyIHJvbGUgaW4gd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXG4gODAxOlx0XHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XG4gODAyOlx0XHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cbiA4MDM6XHRcdHJlcyA9IHJlcyA/IDogMTtcbiA4MDQ6XHRcbiA4MDU6XHRcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIDgwNjpcdH1cbiA4MDc6XHRcbiA4MDg6XHQvKlxuIDgwOTpcdCAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4gODEwOlx0ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4gODExOlx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuIDgxMjpcdCAqL1xuIDgxMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuIDgxNDpcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIDgxNTpcdHtcbiA4MTY6XHRcdC8qXG4gODE3Olx0XHQgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nXG4gODE4Olx0XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuIDgxOTpcdFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcbiA4MjA6XHRcdCAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLlxuIDgyMTpcdFx0ICovXG4gODIyOlx0XHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xuIDgyMzpcdFx0XHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDgyNDpcdFx0XHRyZXR1cm4gbWVtY2c7XG4gODI1Olx0XHR9XG4gODI2Olx0XG4gODI3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODI4Olx0XHQqcmN1X2xvY2tlZCA9IHRydWU7XG4gODI5Olx0XG4gODMwOlx0XHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuIDgzMTpcdFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiA4MzI6XHRcbiA4MzM6XHRcdHJldHVybiBtZW1jZztcbiA4MzQ6XHR9XG4gODM1Olx0XG4gODM2Olx0c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiA4Mzc6XHR7XG4gODM4Olx0XHRpZiAoIXJjdV9sb2NrZWQpXG4gODM5Olx0XHRcdHJldHVybjtcbiA4NDA6XHRcbiA4NDE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gODQ1Olx0XHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbiA4NDY6XHR7XG4gODQ3Olx0XHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XG4gODQ4Olx0XHRpbnQgY3B1O1xuIDg0OTpcdFxuIDg1MDpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gODUxOlx0XHRcdHJldHVybjtcbiA4NTI6XHRcbiA4NTM6XHRcdGNwdSA9IGdldF9jcHUoKTtcbiA4NTQ6XHRcbiA4NTU6XHRcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VzdGF0ZVtpXSwgdmFsKTtcbiA4NTY6XHRcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XG4gODU3Olx0XHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XG4gODU4Olx0XG4gODU5Olx0XHR0cmFjZV9tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHRzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXImIzM5O3MgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTnVhbmNlcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiBkZWVwIGluIHRoZSB3ZWVkcyBvbiB0aGlzLCBhbmQgSSYjMzk7bSBpdGNoaW5nIHRvIHNlZSBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzICpyZWFsbHkqIHdvcmtpbmcgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1tL3dvcmtpbmdzZXQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgd29ya2luZyBzZXQgbW9kZWwgaXMgaW1wbGVtZW50ZWQgaGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBsaWtlIHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXMsIGFuZCBob3cgdGhlIHZhcmlvdXMgcGFyYW1ldGVycyBhcmUgdHVuZWQuIEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgbWFraW5nIHNtYXJ0IGNob2ljZXMgYWJvdXQgcmVzaWRlbnQgc2V0IHNpemUgbGltaXRzLCBvciBpZiB0aGV5IGFyZSBqdXN0IGRvaW5nIHRoZSBiYXJlIG1pbmltdW0uIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gdHJhY2sgdGhlIHdvcmtpbmcgc2V0PyBBcmUgdGhleSBlZmZpY2llbnQ/IERvIHRoZXkgc2NhbGUgd2VsbD8gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSB0cmFkZW9mZnMgdGhleSYjMzk7dmUgbWFkZSwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGFyZWFzIHdoZXJlIHRoZXkmIzM5O3ZlIGdvbmUgZG93biBhbiB1bnByb2R1Y3RpdmUgcGF0aC4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBjb250ZW50aW9uIG1pZ2h0IGFyaXNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVsZWdhbmNlIChvciBsYWNrIHRoZXJlb2YpIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4NTpcdFx0ICogfjEuOCUgb2YgYXZhaWxhYmxlIG1lbW9yeTpcbiA2ODY6XHRcdCAqXG4gNjg3Olx0XHQgKiBQQUdFX1NJWkUgLyB4YV9ub2RlcyAvIG5vZGVfZW50cmllcyAqIDggLyBQQUdFX1NJWkVcbiA2ODg6XHRcdCAqL1xuIDY4OTpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbiA2OTA6XHRcdGlmIChzYy1cdTAwM2VtZW1jZykge1xuIDY5MTpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gNjkyOlx0XHRcdGludCBpO1xuIDY5MzpcdFxuIDY5NDpcdFx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZW1lbWNnKTtcbiA2OTU6XHRcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cdTAwM2VuaWQpKTtcbiA2OTY6XHRcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxuIDY5NzpcdFx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4gNjk4Olx0XHRcdFx0XHRcdFx0XHQgTlJfTFJVX0JBU0UgJiM0MzsgaSk7XG4gNjk5Olx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiA3MDA6XHRcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzAxOlx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiA3MDI6XHRcdFx0XHRscnV2ZWMsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA3MDM6XHRcdH0gZWxzZVxuIDcwNDpcdCNlbmRpZlxuIDcwNTpcdFx0XHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cdTAwM2VuaWQpO1xuIDcwNjpcdFxuIDcwNzpcdFx0bWF4X25vZGVzID0gcGFnZXMgXHUwMDNlXHUwMDNlIChYQV9DSFVOS19TSElGVCAtIDMpO1xuIDcwODpcdFxuIDcwOTpcdFx0aWYgKG5vZGVzIFx1MDAzYz0gbWF4X25vZGVzKVxuIDcxMDpcdFx0XHRyZXR1cm4gMDtcbiA3MTE6XHRcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcbiA3MTI6XHR9XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiA3MTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXG4gNzE2Olx0XHRcdFx0XHRcdCAgdm9pZCAqYXJnKSBfX211c3RfaG9sZChscnUtXHUwMDNlbG9jaylcbiA3MTc6XHR7XG4gNzE4Olx0XHRzdHJ1Y3QgeGFfbm9kZSAqbm9kZSA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgeGFfbm9kZSwgcHJpdmF0ZV9saXN0KTtcbiA3MTk6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIDcyMDpcdFx0aW50IHJldDtcbiA3MjE6XHRcbiA3MjI6XHRcdC8qXG4gNzIzOlx0XHQgKiBQYWdlIGNhY2hlIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucyBzeW5jaHJvbm91c2x5IG1haW50YWluXG4gNzI0Olx0XHQgKiB0aGUgc2hhZG93IG5vZGUgTFJVIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2sgYW5kIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDI1MgoJCQkJCQkJdGhvdWdodHM6IDUzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGV5IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEga2V5IGNvbmNlcm4gd2hlbiBhc3Nlc3NpbmcgdGhlIG5lZWQgZm9yIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFzc2luZyBpdCB0byB1c2VyLXNwYWNlLCBvciBhbnkgb3RoZXIgS01TQU4tcmVsZXZhbnQgaXNzdWVzLgoKRmlyc3QsIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4YW1pbmluZyB0aGUgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgcmN1X2xvY2tlZGAuIEZyb20gd2hhdCBJIHNlZSwgYCpyY3VfbG9ja2VkYCBpcyBhbHdheXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgcmVnYXJkbGVzcyBvZiB0aGUgY29udHJvbCBmbG93LiBUaGUgY29kZSBwYXRocyBlbnN1cmUgYHJjdV9sb2NrZWRgIGdldHMgYSBkZWZpbml0ZSBib29sZWFuIHZhbHVlIGJlZm9yZSBpdCYjMzk7cyB1c2VkIGVsc2V3aGVyZSwgc3BlY2lmaWNhbGx5IGluIGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAuIFNvLCBubyB1bmluaXRpYWxpemVkIHJlYWRzIHRoZXJlLiBUaGUgY2hhbmdlcyBhcHBlYXIgdG8gb3B0aW1pemUgdGhlIGhhbmRsaW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGUgbG9jYWxzIGR1cmluZyBtZW1jZyBkZWF0aCwgYnV0IHRoaXMgc2VlbXMgcmVsYXRlZCB0byBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBjb25jZXJucywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhpcyBpbnZvbHZlcyBsb2NraW5nIGFuZCBSQ1UgcG9pbnRlciB0cmF2ZXJzYWwsIG5vdCBLTVNBTi1yZWxldmFudCBkYXRhIGlzc3Vlcy4KCk1vdmluZyBvbiB0byBgbW0vd29ya2luZ3NldC5jYCwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgYGxydXZlY19scnVfc2l6ZWAgd2l0aCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBUaGlzIGZ1bmN0aW9uIHJlYWRzIG1lbWNnIHZtc3RhdHMgcGVyLWNwdSBjb3VudGVycy4gVGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLCBjb3B5aW5nIHRvIHVzZXItc3BhY2UsIHBhZGRpbmcsIG9yIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBJdCYjMzk7cyBqdXN0IHJlYWRpbmcgZXhpc3RpbmcgY291bnRlciBkYXRhLgoKU28sIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZXJl4oCZcyBteSBhc3Nlc3NtZW50OgoKKiAgIEFyZSB0aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBiZWluZyBwYXNzZWQgb3IgcmVhZD8gTm8sIGByY3VfbG9ja2VkYCBpcyBmdWxseSBpbml0aWFsaXplZCBpbiBhbGwgcmV0dXJuIHBhdGhzLgoqICAgQXJlIGFueSBzdHJ1Y3RzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLgoqICAgRG9lcyBpdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KKiAgIERvZXMgaXQgY2hhbmdlIGJ1ZmZlciBib3VuZHMgb3IgcGFyc2luZyBsZW5ndGhzPyBObywgdGhpcyBhcHBlYXJzIHVucmVsYXRlZC4KCkFueSBwb3RlbnRpYWwgYnVncyB0aGF0ICpkbyogZXhpc3QgYXJlIGxpa2VseSB0byBiZSByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgcHJvYmxlbXMgd2l0aCBSQ1UgbGlmZXRpbWVzLCBvciBpbmNvcnJlY3QgY291bnRlciB2YWx1ZXMuIEFsbCBvZiB0aGVzZSBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIGNvbmN1cnJlbmN5IGlzc3VlcywgbG9naWMgZXJyb3JzLCBvciBtaWdodCBiZSBkZXRlY3RlZCBieSBvdGhlciB0b29scyBsaWtlIEtBU0FOIG9yIExPQ0tERVAsIGJ1dCBub3QgS01TQU4uCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgY29uY2x1ZGluZyB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIGBOZWVkc0tNU0FOYCBzaG91bGQgaW5kZWVkIGJlIGBmYWxzZWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBvZiBjb3Vyc2UsIGFuZCBkb2N1bWVudCB0aGUgY2xlYXIgcmVhc29uaW5nIGZvciBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQyOjA5LjIwMDIyMTk0OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODc4MjI1NjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX2xydXZlY19zdGF0ZVwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIG1lbW9yeSBjZ3JvdXAgc3RhdCBhY2NvdW50aW5nIGFuZCB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nOlxcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxcbjIuIEluIGBtbS93b3JraW5nc2V0LmNgLCBpdCB1cGRhdGVzIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBpbnN0ZWFkIG9mIGBscnV2ZWNfbHJ1X3NpemUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0cyBoYW5kbGluZyBhbmQgcmVkaXJlY3Rpb24gZm9yIGR5aW5nL29mZmxpbmluZyBtZW1jZ3MgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgKHJlbW92aW5nIHRoZSB2MS1vbmx5IHJlc3RyaWN0aW9uKSwgYXMgd2VsbCBhcyBzaGFkb3cgbm9kZSBjb3VudGluZyBjYWxjdWxhdGlvbiBpbiB0aGUgd29ya2luZ3NldCBzaHJpbmtlci4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQyOjA5LjIwMDIyNzQyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2MjM1MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUzOGIwMDJiOTk5Y2QxZTNmZWYxMTdmZjZjNjM2ZDY5ODkyYTk0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDo0MjowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5mNDU0ZDAyNzQ2ZTlmIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC04MDUsMTYgKzgwNSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAzYyAwID8gLXJlcyA6IHJlcztcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiAvKlxcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxcbisgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG4ge1xcbi1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4rXFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4rXFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcXG4rXFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xcbiBcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiBcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIFxcdH1cXG5AQCAtODM1LDE3ICs4NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuLXtcXG4tXFx0cmV0dXJuIG1lbWNnO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IGYzNTE3OThlNzIzYWMuLjg1YTRlMTRlOTVkNTEgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTY5MywxMCArNjkzLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuIFxcbiBcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4tXFxuIFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbi1cXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcXG4tXFxuK1xcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiBcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQyOjA5LjYwNzE1MzgzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA0NDk0MDAxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICAgIFwibW9kX21lbWNnX3N0YXRlXCIsXG4gICAgXCJtb2RfbHJ1dmVjX3N0YXRlXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTM4YjAwMmI5OTljZDFlM2ZlZjExN2ZmNmM2MzZkNjk4OTJhOTQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6NDI6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmY0NTRkMDI3NDZlOWYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTgwNSwxNiArODA1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTgzNSwxNyArODQwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWMuLjg1YTRlMTRlOTVkNTEgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY5MywxMCArNjkzLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDI6MDkuNjA3MTU1NDg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQzNTYyMjY5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBGcm9tIHdoYXQgSSBzZWUsIHdlIGhhdmUgY2hhbmdlcyBpbiB0d28ga2V5IGZpbGVzOiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGluIGBtbS9tZW1jb250cm9sLmNgIGFyZSB0aGUgbW9yZSBzaWduaWZpY2FudCBvbmVzLiBSZW1vdmluZyB0aGF0IGAjaWZkZWYgQ09ORklHX01FTUNHX1YxYCBibG9jayBhcm91bmQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYCBpcyBub3Rld29ydGh5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgY29uc29saWRhdGVzIHNvbWUgbWVtY2cgKG1lbW9yeSBjZ3JvdXApIGJlaGF2aW9yIGFjcm9zcyB2MSBhbmQgdjIuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBgY2dyb3VwX3N1YnN5c19vbl9kZmwoKWAgY2hlY2sgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgIW1lbWNnX2lzX2R5aW5nKG1lbWNnKWAuIFNvLCBpbnN0ZWFkIG9mIGJlaW5nIHZlcnNpb24tZGVwZW5kZW50LCB0aGUgbmV3IGxvZ2ljIG5vdyBjaGVja3MgaWYgYSBtZW1jZyBpcyBcImR5aW5nXCIgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlLiBUaGlzIGFmZmVjdHMgaG93IG1lbWNnIHN0YXRlIGlzIHRyYWNrZWQgYW5kIGhvdyBzdGF0aXN0aWNzIGFyZSByZXBhcmVudGVkLiBUaGlzIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZXNlIHN0YXRlcyBhY3Jvc3MgYWxsIGNncm91cCB2ZXJzaW9ucy4gVGhpcyBwb3RlbnRpYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYmVoYXZpb3IgaXMgY29uc2lzdGVudC5cblxuTW92aW5nIG9uIHRvIGBtbS93b3JraW5nc2V0LmNgLCB0aGUgY2hhbmdlIGluIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgYXBwZWFycyBsZXNzIGRyYW1hdGljIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBgbHJ1dmVjX2xydV9zaXplKClgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgLiBUaGlzIGlzIHByb2JhYmx5IGFuIG9wdGltaXphdGlvbiwgb3IgbWF5YmUgYSBjaGFuZ2UgaW4gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMUlUuIEkga25vdyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBMUlUgYXJlIGNvbXBsZXgsIHNvIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgYE5SX0xSVV9CQVNFICsgaWAgY29ycmVzcG9uZHMgdG8sIGFzIEkga25vdyB0aGF0IGBpYCByYW5nZXMgZnJvbSAwIHRvIE1BWF9OUl9aT05FUyAtIDEuIEJ1dCBJIHN1c3BlY3QgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBcIndvcmtpbmcgc2V0XCIgaXMgY2FsY3VsYXRlZCwgcG90ZW50aWFsbHkgYWZmZWN0aW5nIHRoZSBhY2N1cmFjeSBvZiB0aGUgYWxnb3JpdGhtLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCBmaWxlcyBub3cgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBgbWVtY2dfaXNfZHlpbmcoKWAgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQsIGFuZCBhbHNvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgcmVwbGFjaW5nIGBscnV2ZWNfbHJ1X3NpemUoKWAuIEkgZXhwZWN0IHRvIHNlZSBzb21lIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgc2ltcGxpZmljYXRpb24gaW4gYm90aCBjYXNlcywgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDM6MzMuOTYzMzg2NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXFxuIDgwMTpcXHRcXHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XFxuIDgwMjpcXHRcXHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cXG4gODAzOlxcdFxcdHJlcyA9IHJlcyA/IDogMTtcXG4gODA0OlxcdFxcbiA4MDU6XFx0XFx0cmV0dXJuIHZhbCBcXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xcbiA4MDY6XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHQvKlxcbiA4MDk6XFx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG4gODEwOlxcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbiA4MTE6XFx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiA4MTI6XFx0ICovXFxuIDgxMzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gODE0OlxcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbiA4MTU6XFx0e1xcbiA4MTY6XFx0XFx0LypcXG4gODE3OlxcdFxcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4gODE4OlxcdFxcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXFxuIDgxOTpcXHRcXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxcbiA4MjA6XFx0XFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuIDgyMTpcXHRcXHQgKi9cXG4gODIyOlxcdFxcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XFxuIDgyMzpcXHRcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA4MjQ6XFx0XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4MjU6XFx0XFx0fVxcbiA4MjY6XFx0XFxuIDgyNzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDgyODpcXHRcXHQqcmN1X2xvY2tlZCA9IHRydWU7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuIDgzMTpcXHRcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4MzQ6XFx0fVxcbiA4MzU6XFx0XFxuIDgzNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiA4Mzc6XFx0e1xcbiA4Mzg6XFx0XFx0aWYgKCFyY3VfbG9ja2VkKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NDA6XFx0XFxuIDg0MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODQyOlxcdH1cXG4gODQzOlxcdFxcbiA4NDQ6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA4NDU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gODQ2OlxcdHtcXG4gODQ3OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gODQ4OlxcdFxcdGludCBjcHU7XFxuIDg0OTpcXHRcXG4gODUwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gODUxOlxcdFxcdFxcdHJldHVybjtcXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA4NTQ6XFx0XFxuIDg1NTpcXHRcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG4gODU2OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDg1NzpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDg1ODpcXHRcXG4gODU5OlxcdFxcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRwdXRfY3B1KCk7XFxuIDg2MjpcXHR9XFxuIDg2MzpcXHRcXG4gODY0OlxcdC8qKlxcbiA4NjU6XFx0ICogbW9kX21lbWNnX3N0YXRlIC0gdXBkYXRlIGNncm91cCBtZW1vcnkgc3RhdGlzdGljc1xcbiA4NjY6XFx0ICogQG1lbWNnOiB0aGUgbWVtb3J5IGNncm91cFxcbiA4Njc6XFx0ICogQGlkeDogdGhlIHN0YXQgaXRlbSAtIGNhbiBiZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBlbnVtIG5vZGVfc3RhdF9pdGVtXFxuIDg2ODpcXHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxcbiA4Njk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQzOjMzLjk2Mzk0OTgwOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDAzMTA0NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIG1lbWNnIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGhlYWRzIHRvIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBtZW1jZyBsb2dpYy4gTGV0J3Mgc2VlIGhvdyBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGZpbGUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbCBzaXRlcyDigJMgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGl0J3MgY2FsbGVkIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyBpdCdzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bnJhdmVsaW5nIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb250cm9sIGdyb3Vwcy4gSSB3YW50IHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIHRvIGdpdmUgbWUgYW4gaWRlYSB3aGF0IHByb2JsZW0gaXMgYmVpbmcgc29sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NDoyMy4zNjcwNTg1NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjIxMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz04MTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXFxubW0vbWVtY29udHJvbC5jOjgxNDpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG5tbS9tZW1jb250cm9sLmMtODE1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04MzUtXFxubW0vbWVtY29udHJvbC5jOjgzNjpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04Mzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTg3MD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzctXFxubW0vbWVtY29udHJvbC5jOjg3ODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtODc5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxubW0vbWVtY29udHJvbC5jOjg4MDpcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtODgxLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05MzY9c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTQ1LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjk0NjpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXFx1MDAzZW1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk0Ny1cXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTUwLVxcbm1tL21lbWNvbnRyb2wuYzo5NTE6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ0OjIzLjgyODY4ODY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxMTIyNzAxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1tL3dvcmtpbmdzZXQuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSB3b3JraW5nc2V0IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBhY3RpdmUgbWVtb3J5IHJlZ2lvbnMuIExldCdzIHNlZS4uLiBJJ20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgdHJhY2tzIHBhZ2UgYWNjZXNzLCB0aGUgY3JpdGVyaWEgZm9yIG1vdmluZyBwYWdlcyBiZXR3ZWVuIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIGxpc3RzLCBhbmQgaG93IHRoZSBhbGdvcml0aG0gcmVhY3RzIHRvIG1lbW9yeSBwcmVzc3VyZS4gSSBhbnRpY2lwYXRlIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgYHBnZGF0X3RgIGFuZCBgem9uZV90YCBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgd29ya2luZ3NldCBjb2RlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgZm9jdXNlZCBvbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgdGhhdCBtaWdodCBiZSBhZmZlY3RpbmcgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5LiBJIGhvcGUgSSBkb24ndCBydW4gaW50byBhIHNwYWdoZXR0aSBtZXNzIGluIHRoZXJlISBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBJIGtub3cgdGhhdCB0aGUgd29ya2luZ3NldCBjb2RlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSSdtIGhvcGluZyBpdCdzIHdlbGwtY29tbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDQ6NDAuOTQwOTYxNTU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXFxuIDY4MTpcXHRcXHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cXG4gNjgyOlxcdFxcdCAqXFxuIDY4MzpcXHRcXHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xcbiA2ODQ6XFx0XFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcXG4gNjg1OlxcdFxcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XFxuIDY4NjpcXHRcXHQgKlxcbiA2ODc6XFx0XFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXFxuIDY4ODpcXHRcXHQgKi9cXG4gNjg5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjkwOlxcdFxcdGlmIChzYy1cXHUwMDNlbWVtY2cpIHtcXG4gNjkxOlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gNjkyOlxcdFxcdFxcdGludCBpO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIDY5NTpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cXHUwMDNlbmlkKSk7XFxuIDY5NjpcXHRcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gNjk3OlxcdFxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBOUl9MUlVfQkFTRSArIGkpO1xcbiA2OTk6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDcwMDpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAxOlxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiA3MDI6XFx0XFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAzOlxcdFxcdH0gZWxzZVxcbiA3MDQ6XFx0I2VuZGlmXFxuIDcwNTpcXHRcXHRcXHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cXHUwMDNlbmlkKTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bWF4X25vZGVzID0gcGFnZXMgXFx1MDAzZVxcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdGlmIChub2RlcyBcXHUwMDNjPSBtYXhfbm9kZXMpXFxuIDcxMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzExOlxcdFxcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdFxcbiA3MTQ6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbiA3MTY6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cXHUwMDNlbG9jaylcXG4gNzE3OlxcdHtcXG4gNzE4OlxcdFxcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xcbiA3MTk6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ0OjQwLjk0MTA4Nzg0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzM2MDIzMTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIG1lbW9yeSBjZ3JvdXAgc3RhdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gYSBtZW1jZyBpcyBvZmZsaW5pbmcsIGFuZCBhbHNvIHRvdWNoaW5nIHRoZSB3b3JraW5nc2V0IGNvZGUuIEhtbSwgbG9va3MgbGlrZSBpdCdzIG1lcmdpbmcgdGhlIHYxIGFuZCB2MiBiZWhhdmlvciwgd2hpY2ggaXMgdXN1YWxseSBpbnRlcmVzdGluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBgbW9kX21lbWNnX3N0YXRlYCAvIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBob3QgcGF0aCBjb25jZXJuLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2lyY2xlIGJhY2sgdG8gdGhhdC5cblxuVGhlIGluc3RydWN0aW9ucyBzYXkgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgYXJlIHByZXR0eSBjbGVhcjogaXQncyAqbm90KiB3b3J0aCBmdXp6aW5nIGlmIGl0J3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpb24sIHVucmVhY2hhYmxlIGNvZGUsIG9yIHZlcnkgc3BlY2lmaWMgZHJpdmVycy4gSG93ZXZlciwgaWYgaXQgdG91Y2hlcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHRoZW4gaXQncyBhIGdvLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudDogYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBJbiBgbW0vbWVtY29udHJvbC5jYCwgaXQncyBhbHRlcmluZyBob3cgc3RhdHMgYXJlIGhhbmRsZWQgd2hlbiBhIG1lbWNnIGlzIGR5aW5nLCBpbmNsdWRpbmcgcmVtb3ZpbmcgYW4gYCNpZmRlZmAgZm9yIHYxLiBUaGlzIG1lYW5zIGl0IGlzIGRpcmVjdGx5IG1vZGlmeWluZyB0aGUgY3JpdGljYWwgcGF0aCBvZiBtZW1jZyBhbmQgcGFnZSBjYWNoZSBoYW5kbGluZy4gVGhlbiwgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0J3MgY2hhbmdpbmcgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGNhbGN1bGF0aW9uIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBHaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IGluIHNheWluZyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIExldCdzIGdldCB0byBpdC4gTGV0J3Mgc3RhcnQgd2l0aCBgY291bnRfc2hhZG93X25vZGVzYC4gT2theSwgaXQncyBgc3RhdGljYC4gRGFtbi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzLCBhcyBgc3RhdGljYCBmdW5jdGlvbnMgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZXNlIGFyZSBsaWtlbHkgaW5saW5lZC4gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgdGhhdCBjYWxsIHRoaXMsIHNvIGxldCdzIHN0YXJ0IHNlYXJjaGluZyBpbiBgbW0vd29ya2luZ3NldC5jYCBhbmQgc2VlIHdoZXJlIHRoaXMgaXMgcmVnaXN0ZXJlZCBvciB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDY6MzguMzAxMzIyODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg5ODk3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY291bnRfc2hhZG93X25vZGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS93b3JraW5nc2V0LmM9NjI5PXZvaWQgd29ya2luZ3NldF91cGRhdGVfbm9kZShzdHJ1Y3QgeGFfbm9kZSAqbm9kZSlcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02NTUtXFxubW0vd29ya2luZ3NldC5jOjY1NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS93b3JraW5nc2V0LmMtNjU3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9Nzk3PXN0YXRpYyBpbnQgX19pbml0IHdvcmtpbmdzZXRfaW5pdCh2b2lkKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTgzMy1cXG5tbS93b3JraW5nc2V0LmM6ODM0OlxcdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xcbm1tL3dvcmtpbmdzZXQuYy04MzUtXFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NjozOC44MDAzMTgxMjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3MTY2NDEzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNpcmNsaW5nIGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLCBnaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lczogYHNjYW5fc2hhZG93X25vZGVzYCwgYHdvcmtpbmdzZXRfdXBkYXRlX25vZGVgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfYWN0aXZhdGlvbmAuIFRoYXQgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHdvcmtpbmdzZXRzLCBwZXJoYXBzIHNoYWRvdyBub2RlcywgYW5kIGxpa2VseSBzb21lIGZvcm0gb2YgcGFnZSBmYXVsdCBvciBtZW1vcnkgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24uXG5cbk5vdywgd2hlcmUgYXJlIHRoZXNlIG1lY2hhbmljcyBpbXBsZW1lbnRlZD8gTXkgaW5zdGluY3QgaW1tZWRpYXRlbHkgZGlyZWN0cyBtZSB0b3dhcmRzIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoYXQncyBhY3R1YWxseSAqaW4qIGBtbS9tZW1jb250cm9sLmNgLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBtb2RfbWVtY2dfc3RhdGVgLCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAsIGFuZCBgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBhbmQgd2hhdCBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIGFzIHRoZXkgYXBwZWFyIHRvIGJlIGNlbnRyYWwgdG8gbW9kaWZ5aW5nIG1lbW9yeSBjb250cm9sIGdyb3VwIHN0YXRlIG9yIExSVSB2ZWN0b3Igc3RhdGVzLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMuIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlaXIgcGFyYW1ldGVycywgd2hhdCB0aGVpciBzY29wZSBvZiBmdW5jdGlvbiBpcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIEkgc2hvdWxkIGNoZWNrIHRvIGdhaW4gdGhlIGVudGlyZXR5IG9mIHRoZWlyIGNvbnRleHQ/IExldCdzIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIGJvdGggZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDY6NTIuNTE2OTYxODU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODk4MTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RfbWVtY2dfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkyMz12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjUtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI2OnZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjctXFx0XFx0ICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5Mjk6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzMC1cXHRcXHRcXHRcXHRcXHRlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MzktXFx0aWYgKG1lbWNnKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk0MDpcXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzY0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNjU6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTM2Ni1cXHRcXHRcXHRcXHQgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzcwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNzE6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNzItXFx0XFx0XFx0XFx0XFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0Njo1Mi42MTU5NDc3ODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQzNDQ5MDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIHRoaW5raW5nLCBmcm9tIGEgdGVjaG5pY2FsIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL21lbWNvbnRyb2wuY2AgZm9yIE1lbWNnIExpZmVjeWNsZSBhbmQgU3RhdHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIGFuZCBzdGF0aXN0aWNhbCBhc3BlY3RzIG9mIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKS4gSSdtIGRlbGliZXJhdGVseSAqbm90KiBsb29raW5nIGF0IHRoZSBvYnZpb3VzLCB3ZWxsLXRyb2RkZW4gcGF0aHMgbGlrZSB0aGUgXCJob3RcIiBleGVjdXRpb24gcGF0aHMgb3Igc3RhdGljYWxseSBkZWZpbmVkIHN5bWJvbHMgcmlnaHQgYXdheS4gTXkgZ29hbCBpcyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEknbSB0cnlpbmcgdG8gaWRlbnRpZnkgYW55IG90aGVyIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cyBvciBzeW1ib2xzIGluIHRoaXMgZmlsZSB0aGF0IG1pZ2h0IHJlbGF0ZSB0byBob3cgbWVtY2dzIGFyZSBjcmVhdGVkLCBkZXN0cm95ZWQsIG9yIGhvdyB0aGVpciBtZW1vcnkgdXNhZ2UgaXMgdHJhY2tlZCAqYmVzaWRlcyogdGhlIG1vc3Qgb2J2aW91cyBvbmVzLiBJIHdhbnQgdG8gYnVpbGQgYSBtb3JlIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuXG5cbkkgZmlndXJlIHJlYWRpbmcgYXJvdW5kIGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaG9zZSBsb29rIGxpa2Uga2V5IGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzIGZvciBtb2RpZnlpbmcgb3IgdXBkYXRpbmcgdGhlIHN0YXRlIG9mIGEgbWVtY2csIGVzcGVjaWFsbHkgcmVnYXJkaW5nIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgZGF0YS4gSSdtIGJldHRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzdGF0ZXMgYXJlIG1vZGlmaWVkIHdpbGwgaWxsdW1pbmF0ZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGxpa2VseSByZXZlYWwgaG93IHRoZSBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3RoZXIgc3RhdHMgYXJlIHVwZGF0ZWQgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ2OjU5LjA1MDQ0MjQwOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHR2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4gODcxOlxcdFxcdFxcdCAgICAgICBpbnQgdmFsKVxcbiA4NzI6XFx0e1xcbiA4NzM6XFx0XFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XFxuIDg3NDpcXHRcXG4gODc1OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDg3NjpcXHRcXHRcXHRyZXR1cm47XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbiA4Nzk6XFx0XFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcXG4gODgwOlxcdFxcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xcbiA4ODE6XFx0fVxcbiA4ODI6XFx0XFxuIDg4MzpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuIDg4NDpcXHQvKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuIDg4NTpcXHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbiA4ODY6XFx0e1xcbiA4ODc6XFx0XFx0bG9uZyB4O1xcbiA4ODg6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXFxcIiVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGlkeCkpXFxuIDg5MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbiA4OTQ6XFx0I2lmZGVmIENPTkZJR19TTVBcXG4gODk1OlxcdFxcdGlmICh4IFxcdTAwM2MgMClcXG4gODk2OlxcdFxcdFxcdHggPSAwO1xcbiA4OTc6XFx0I2VuZGlmXFxuIDg5ODpcXHRcXHRyZXR1cm4geDtcXG4gODk5OlxcdH1cXG4gOTAwOlxcdFxcbiA5MDE6XFx0dm9pZCByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDkwMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxcbiA5MDM6XFx0e1xcbiA5MDQ6XFx0XFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XFxuIDkwNTpcXHRcXG4gOTA2OlxcdFxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIC12YWx1ZSk7XFxuIDkwNzpcXHRcXHRfX21vZF9tZW1jZ19zdGF0ZShwYXJlbnQsIGlkeCwgdmFsdWUpO1xcbiA5MDg6XFx0fVxcbiA5MDk6XFx0I2VuZGlmXFxuIDkxMDpcXHRcXG4gOTExOlxcdHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuIDkxMjpcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gOTEzOlxcdHtcXG4gOTE0OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBuLVxcdTAwM2VtZW1jZztcXG4gOTE1OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gOTE2OlxcdFxcdGludCBjcHU7XFxuIDkxNzpcXHRcXG4gOTE4OlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gOTE5OlxcdFxcdFxcdHJldHVybjtcXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHQvKiBVcGRhdGUgbWVtY2cgKi9cXG4gOTI0OlxcdFxcdHRoaXNfY3B1X2FkZChtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUtXFx1MDAzZXN0YXRlW2ldLCB2YWwpO1xcbiA5MjU6XFx0XFxuIDkyNjpcXHRcXHQvKiBVcGRhdGUgbHJ1dmVjICovXFxuIDkyNzpcXHRcXHR0aGlzX2NwdV9hZGQocG4tXFx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUtXFx1MDAzZXN0YXRlW2ldLCB2YWwpO1xcbiA5Mjg6XFx0XFxuIDkyOTpcXHRcXHR2YWwgPSBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaWR4LCB2YWwpO1xcbiA5MzA6XFx0XFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgdmFsLCBjcHUpO1xcbiA5MzE6XFx0XFx0dHJhY2VfbW9kX21lbWNnX2xydXZlY19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5MzI6XFx0XFxuIDkzMzpcXHRcXHRwdXRfY3B1KCk7XFxuIDkzNDpcXHR9XFxuIDkzNTpcXHRcXG4gOTM2OlxcdHN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiA5Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcXG4gOTM4OlxcdFxcdFxcdFxcdFxcdCAgICAgaW50IHZhbClcXG4gOTM5OlxcdHtcXG4gOTQwOlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4gOTQxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG4gOTQyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gOTQzOlxcdFxcdGJvb2wgcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbiA5NDY6XFx0XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVxcdTAwM2VtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbiA5NDc6XFx0XFx0cG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocG4sIGlkeCwgdmFsKTtcXG4gOTUwOlxcdFxcbiA5NTE6XFx0XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxuIDk1MjpcXHR9XFxuIDk1MzpcXHRcXG4gOTU0OlxcdC8qKlxcbiA5NTU6XFx0ICogbW9kX2xydXZlY19zdGF0ZSAtIHVwZGF0ZSBscnV2ZWMgbWVtb3J5IHN0YXRpc3RpY3NcXG4gOTU2OlxcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcXG4gOTU3OlxcdCAqIEBpZHg6IHRoZSBzdGF0IGl0ZW1cXG4gOTU4OlxcdCAqIEB2YWw6IGRlbHRhIHRvIGFkZCB0byB0aGUgY291bnRlciwgY2FuIGJlIG5lZ2F0aXZlXFxuIDk1OTpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0Njo1OS4wNTA3Nzk4MzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2Mzk0NDY3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuXG5cbioqSW52ZXN0aWdhdGluZyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gc29tZW9uZSdzIGFza2VkIG1lIHRvIGxvb2sgaW50byBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbWNnIChtZW1vcnkgY29udHJvbCBncm91cCkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gKnVzZWQqPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSB3aGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgc3RhdGUgb2YgYSBtZW1jZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYW5kIGhvdyB0aGV5IG1pZ2h0IHJlbGF0ZSB0byBMUlUgbWFuYWdlbWVudC4gQXJlIHRoZXJlIGZ1bmN0aW9ucyBmb3IgdXBkYXRpbmcsIHF1ZXJ5aW5nLCBvciBvdGhlcndpc2UgbWFuaXB1bGF0aW5nIHRoZSBMUlUgc3RhdGU/IEtub3dpbmcgdGhlIGxhbmRzY2FwZSBvZiBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIG1ha2luZyBzdXJlIHRvIHRyYWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIE15IGdvYWwgaXMgdG8gcGFpbnQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBMUlUgc3RhdGUgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgbWVtY2cgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDc6MTMuNjkwMjI5MjM5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTU1OlxcdCAqIG1vZF9scnV2ZWNfc3RhdGUgLSB1cGRhdGUgbHJ1dmVjIG1lbW9yeSBzdGF0aXN0aWNzXFxuIDk1NjpcXHQgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjXFxuIDk1NzpcXHQgKiBAaWR4OiB0aGUgc3RhdCBpdGVtXFxuIDk1ODpcXHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxcbiA5NTk6XFx0ICpcXG4gOTYwOlxcdCAqIFRoZSBscnV2ZWMgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgTlVNQSBub2RlIGFuZCBhIGNncm91cC4gVGhpc1xcbiA5NjE6XFx0ICogZnVuY3Rpb24gdXBkYXRlcyB0aGUgYWxsIHRocmVlIGNvdW50ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGFcXG4gOTYyOlxcdCAqIGNoYW5nZSBvZiBzdGF0ZSBhdCB0aGlzIGxldmVsOiBwZXItbm9kZSwgcGVyLWNncm91cCwgcGVyLWxydXZlYy5cXG4gOTYzOlxcdCAqL1xcbiA5NjQ6XFx0dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuIDk2NTpcXHRcXHRcXHRcXHRpbnQgdmFsKVxcbiA5NjY6XFx0e1xcbiA5Njc6XFx0XFx0LyogVXBkYXRlIG5vZGUgKi9cXG4gOTY4OlxcdFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCwgdmFsKTtcXG4gOTY5OlxcdFxcbiA5NzA6XFx0XFx0LyogVXBkYXRlIG1lbWNnIGFuZCBscnV2ZWMgKi9cXG4gOTcxOlxcdFxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiA5NzI6XFx0XFx0XFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgdmFsKTtcXG4gOTczOlxcdH1cXG4gOTc0OlxcdFxcbiA5NzU6XFx0dm9pZCBscnV2ZWNfc3RhdF9tb2RfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuIDk3NjpcXHRcXHRcXHRcXHQgICAgIGludCB2YWwpXFxuIDk3NzpcXHR7XFxuIDk3ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIDk3OTpcXHRcXHRwZ19kYXRhX3QgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xcbiA5ODA6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiA5ODE6XFx0XFxuIDk4MjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDk4MzpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4gOTg0OlxcdFxcdC8qIFVudHJhY2tlZCBwYWdlcyBoYXZlIG5vIG1lbWNnLCBubyBscnV2ZWMuIFVwZGF0ZSBvbmx5IHRoZSBub2RlICovXFxuIDk4NTpcXHRcXHRpZiAoIW1lbWNnKSB7XFxuIDk4NjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTg3OlxcdFxcdFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIGlkeCwgdmFsKTtcXG4gOTg4OlxcdFxcdFxcdHJldHVybjtcXG4gOTg5OlxcdFxcdH1cXG4gOTkwOlxcdFxcbiA5OTE6XFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4gOTkyOlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIHZhbCk7XFxuIDk5MzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTk0OlxcdH1cXG4gOTk1OlxcdEVYUE9SVF9TWU1CT0wobHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKTtcXG4gOTk2OlxcdFxcbiA5OTc6XFx0dm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXFxuIDk5ODpcXHR7XFxuIDk5OTpcXHRcXHRwZ19kYXRhX3QgKnBnZGF0ID0gcGFnZV9wZ2RhdCh2aXJ0X3RvX3BhZ2UocCkpO1xcbjEwMDA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjEwMDE6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTAwNDpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV92aXJ0KHApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NzoxMy42OTA2NDI3MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEyOTcwMjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgbWVtY2cgb2ZmbGluaW5nL2R5aW5nIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIG1lbWNnIE9mZmxpbmluZyBUcmlnZ2VycyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZWNpc2VseSBjYXVzZXMgYSBtZW1vcnkgY2dyb3VwIChtZW1jZykgdG8gb2ZmbGluZSBvciBkaWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBrbm93IHRoZSBsaWtlbHkgc3VzcGVjdHMgYXJlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC5cblxuTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGVzZSBzdGF0ZXMuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYXMgYSBwcmltYXJ5IHRyaWdnZXIsIGFuZCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWRgIGFuZCBgbWVtX2Nncm91cF9jc3NfZnJlZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMuXG5cbk15IG5leHQgc3RlcCBpcyBhIGNvZGUgc2VhcmNoLiBJJ20gZ29pbmcgdG8ganVtcCByaWdodCBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgXCJjc3Nfb2ZmbGluZVwiLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBhbGwgdGhlIGNhbGwgc2l0ZXMgYW5kIHJlbGF0ZWQgbG9naWMgc3Vycm91bmRpbmcgdGhlIG9mZmxpbmUgcHJvY2VzcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gbWVtY2cgZGVhY3RpdmF0aW9uLiBJIGV4cGVjdCB0aGlzIGFwcHJvYWNoIHdpbGwgcXVpY2tseSB1bmNvdmVyIHRoZSBjcnVjaWFsIG1lY2hhbmlzbXMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ3OjIxLjgyMDM0ODA4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxNjc0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3NzX29mZmxpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00MjA1PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI4MS1cXG5tbS9tZW1jb250cm9sLmM6NDI4MjpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxubW0vbWVtY29udHJvbC5jLTQyODMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyODUtXFxubW0vbWVtY29udHJvbC5jOjQyODY6XFx0bWVtY2cxX2Nzc19vZmZsaW5lKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDI4Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDkwLVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcbm1tL21lbWNvbnRyb2wuYzo1MDkxOlxcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXFxubW0vbWVtY29udHJvbC5jLTUwOTItXFx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NzoyMS45MTM1MjI4MzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcyNjM1MDczMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29udHJvbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgZm9yIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQsIHRoYXQgbWVhbnMgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VlIHdoYXQncyBjb250cm9sbGluZyB0aGVpciBpbmNsdXNpb24uIExldCdzIHN0YXJ0IHdpdGggYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGNoZWNrIGBpbml0L0tjb25maWdgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEknbSBhc3N1bWluZyBgQ09ORklHX01FTUNHYCBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIHRoaXMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBvcHRpb24gaW5mbHVlbmNlcyB0aGUgY29tcGlsYXRpb24gb2YgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIG1ha2UgdGhvc2UgbW9kdWxlcyB3b3JrIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0Nzo1OS4xNzcwMzM1MjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjIzNTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDc6NTkuNzEzMjc1NjM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzY0OTA3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgc2V0IHVwLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBvcHRpb24uIEkga25vdyBpdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtYW5hZ2luZyByZXNvdXJjZXMgaW4gdGhlIGtlcm5lbCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgcG90ZW50aWFsbHkgY29uZmlndXJlZCBpbiBgaW5pdC9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGluIHBsYWNlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3ludGF4LCBkZXBlbmRlbmNpZXMsIGFuZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRoYXQgSSBjYW4gcXVpY2tseSBzY2FuIGZvciBhIHF1aWNrIG92ZXJ2aWV3LiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgd2hlcmUgdG8gZ28gbmV4dCBiYXNlZCBvbiB3aGF0IEkgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0ODowNS4yNDk3Njg5ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTU3NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4My1cXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4NS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDYtXFxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDgtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6MDUuMzE1NzMyMTEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4Mzk1NTczMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb25zIGFyb3VuZCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBDb250cm9sIEdyb3VwcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5IGFib3V0IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gV2hlcmUgZG9lcyBgQ09ORklHX01FTUNHYCBmaXQgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbT8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIG9yIGRlcHJlY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgbWVtb3J5IGNncm91cCB2ZXJzaW9ucywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGhvdyBgQ09ORklHX01FTUNHX1YxYCBpcyBoYW5kbGVkIHJlbGF0aXZlIHRvIHRoZSBuZXdlciBjYXBhYmlsaXRpZXMgb3IgZGVmYXVsdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIG1vbm9saXRoaWMgb3B0aW9uIG9yIGlmIHRoZXJlIGFyZSBmaW5lci1ncmFpbmVkIGNob2ljZXMgdGhhdCBiZWNvbWUgYXZhaWxhYmxlIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gRm9yIGluc3RhbmNlLCBhcmUgdGhlcmUgc3ViLW9wdGlvbnMgdGhhdCBjb250cm9sIHNwZWNpZmljIG1lbW9yeSBhY2NvdW50aW5nIG9yIHRocm90dGxpbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkPyBBbmQgaG93IGRvZXMgdGhlIGZpbGUgaGFuZGxlIHRoZSB1c2VyJ3MgZGVmYXVsdCBjaG9pY2U/IFdoYXQga2luZCBvZiBoZWxwIHRleHQgcHJvdmlkZXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIHdoYXQsIGFuZCB3aWxsIGl0IGJlIGNsZWFyIGFuZCBjb25jaXNlPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgbGVnYWN5IHN1cHBvcnQgYW5kIGEgcG90ZW50aWFsIHRyYW5zaXRpb24gcGF0aCwgc28gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdhaW4gYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXNpZ24gc3BhY2UgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHdoZW4gd29ya2luZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjEzLjE1NTI5MjgyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwODE6XFx0XFxuMTA4MjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDgzOlxcdFxcbjEwODQ6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg2OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg3OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4ODpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4OTpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkwOlxcdFxcdGhlbHBcXG4xMDkxOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTI6XFx0XFxuMTA5MzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTQ6XFx0XFx0Ym9vbFxcbjEwOTU6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTg6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5OTpcXHRcXG4xMTAwOlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjExMDE6XFx0XFx0Ym9vbFxcbjExMDI6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjExMDQ6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTEwNTpcXHRcXHRkZWZhdWx0IHlcXG4xMTA2OlxcdFxcbjExMDc6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwODpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMTA6XFx0XFx0ZGVmYXVsdCBuXFxuMTExMTpcXHRcXHRoZWxwXFxuMTExMjpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjExMTM6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjExMTQ6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjExMTU6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMTE2OlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTk6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjEzLjE1NTQ4MzYwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzg1ODYzNzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1FTUNHIGFuZCBpdHMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBNRU1DR2AuIEkga25vdyB0aGF0IEkgbmVlZCB0aGUgYE1FTUNHYCBjb25maWcgb3B0aW9uIGVuYWJsZWQgZm9yIGJvdGggdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYW5kIHRoYXQgY29uZGl0aW9uYWwgYGlmZGVmYCBpbiBgbW0vd29ya2luZ3NldC5jYC4gQnV0IGEgcXVpY2sgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IGlzIGBNRU1DR2AgYWN0dWFsbHkgY29udGluZ2VudCBvbiBgQ0dST1VQU2AgYmVpbmcgZW5hYmxlZD8gVGhpcyBmZWVscyBsaWtlIGEgcXVlc3Rpb24gSSBzaG91bGQgYWJzb2x1dGVseSBrbm93IHRoZSBhbnN3ZXIgdG8sIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dCwgc28gSSBjYW4gY29uZmlybSB3aGV0aGVyIGBNRU1DR2AgaXMgZGlyZWN0bHkgdGllZCB0byBhbiBgaWYgQ0dST1VQU2AgYmxvY2sgb3IgaWYgaXQgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjMxLjAxNDEyMzUzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxNTM3OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDR1JPVVBTfGlmIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDUyPWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDU0LVxcbmluaXQvS2NvbmZpZzoxMDU1Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDU2LVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDY4LVxcbmluaXQvS2NvbmZpZzoxMDY5OmlmIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA3MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6MzEuMTA3MjgyODM0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODA0ODExNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBNRU1DR2AsIHdoaWNoIEkga25vdyBsaXZlcyB1bmRlciB0aGUgYENHUk9VUFNgIHVtYnJlbGxhLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gR290dGEgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHlvdSBrbm93P1xuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXaGF0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIGluIHRlcm1zIG9mIHdoYXQncyByZWxldmFudCB0byB0aGlzIGFyZWE/IEhlcmUgYXJlIGEgZmV3IHRob3VnaHRzOlxuXG4qICAgYG1vZF9tZW1jZ19zdGF0ZWA6IFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBjb3JlIHN0YXRlIHZhcmlhYmxlLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBsb29raW5nLlxuKiAgIGBtb2RfbHJ1dmVjX3N0YXRlYDogTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBpcyBjcnVjaWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhpcyBsaWtlbHkgcmVsYXRlcyB0byB0aGUgc3RhdGUgb2YgdGhlIExSVSB2ZWN0b3Igd2l0aGluIHRoZSBjZ3JvdXAuIERlZmluaXRlbHkgcmVsZXZhbnQuXG4qICAgYGxydXZlY19zdGF0X21vZF9mb2xpb2A6IFRoaXMgaXMgdmVyeSBzcGVjaWZpYyBidXQgbG9va3MgbGlrZSBpdCBoYW5kbGVzIHVwZGF0aW5nIGZvbGlvIHN0YXRzIHdpdGhpbiB0aGUgTFJVLCBhbHNvIGltcG9ydGFudC5cbiogICBgY291bnRfc2hhZG93X25vZGVzYCAob3IgcGVyaGFwcyBgd29ya2luZ3NldF91cGRhdGVfbm9kZWAgb3IgYHdvcmtpbmdzZXRfcmVmYXVsdGApOiBTaGFkb3cgbm9kZXMgYXJlIGludGVyZXN0aW5nLCBzbyB0aGlzIGNvdW50IHNlZW1zIGltcG9ydGFudC4gSSdtIGFsc28gdGhpbmtpbmcgdXBkYXRlcyBhbmQgcmVmYXVsdHMgaW4gdGhlIHdvcmtpbmcgc2V0IGFyZSByZWxldmFudCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZXNlIGFzIHdlbGwuXG4qICAgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgOiBUaGlzIGlzIHByb2JhYmx5IHRoZSBjZ3JvdXAgc3Vic3lzdGVtIHN0YXRlIG9mZmxpbmUuXG5cbklmIGBNRU1DR19WMWAgaXMgZW5hYmxlZCBJIG5lZWQgdG8gY2hlY2sgYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6NDEuOTEyMDk2OTUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczNjQ4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0yMjA5PXZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnMV9zdGF0cyk7IGkrKylcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIxNDpcXHRcXHRyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBtZW1jZzFfc3RhdHNbaV0pO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjE1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD03MT12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLXYxLmgtNzItXFxubW0vbWVtY29udHJvbC12MS5oOjczOnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wtdjEuaC03NC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04ODU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MDAtXFxubW0vbWVtY29udHJvbC5jOjkwMTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtOTAyLVxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjQyLjAxOTQ2NjU1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTkzNjE5Njk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgUmVmaW5lbWVudCBmb3IgTWVtY2cgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHJlZmluaW5nIG91ciBmb2N1cyBzeW1ib2xzIGZvciBtZW1jZyBmdXp6aW5nLiBUaGUgZ3VpZGFuY2UgaXMgY2xlYXI6IHdlIG5lZWQgdG8gaXNvbGF0ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGZ1enouIFdlIHdhbnQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBiYWxhbmNlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gV2UncmUgYWltaW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIGZ1bmN0aW9ucyB0aGF0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgbm90IGJ1cmllZCBpbmxpbmVkIGhlbHBlcnMuXG5cbkFscmlnaHQsIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBjYW5kaWRhdGUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQ6IGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBgbW9kX21lbWNnX3N0YXRlYCwgYG1vZF9scnV2ZWNfc3RhdGVgLCBgbW9kX2xydXZlY19rbWVtX3N0YXRlYCwgYW5kIGBjb3VudF9zaGFkb3dfbm9kZXNgLlxuXG5JIG5lZWQgdG8gYW5hbHl6ZSBpZiBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9scnV2ZWNfc3RhdGVgIHF1YWxpZnkgYXMgaG90LXBhdGggY2FuZGlkYXRlcy4gV2hpbGUgdGhleSBnZXQgc29tZSBhY3Rpb24gZHVyaW5nIGFsbG9jYXRpb25zIGFuZCBmcmVlaW5nLCB0aG9zZSBhcmUgbm90IHRoZSBtYWluIGFyZWFzIHdlIHdhbnQgdG8gZm9jdXMgb24uIFNwZWNpZmljYWxseSwgbWVtY2cgcmVwYXJlbnRpbmcsIGNncm91cCB0ZWFyZG93biwgYW5kIHNoYWRvdyBzaHJpbmtlciBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgIGlzIHRoZSBjcnVjaWFsIG9uZSBmb3IgdjEgb2ZmbGluaW5nLiBGb3IgdjIsIG9yIGdlbmVyYWwgY2dyb3VwIG9mZmxpbmluZywgdGhlIGtleSBmdW5jdGlvbnMgYXJlIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBhbmQgYG1lbWNnMV9jc3Nfb2ZmbGluZWAuIEFuZCBmaW5hbGx5LCBgY291bnRfc2hhZG93X25vZGVzYCBpcyBzb21ldGhpbmcgd2UgbWlnaHQgY29uc2lkZXIsIGxvY2F0ZWQgaW4gYG1tL3dvcmtpbmdzZXQuY2AuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIG91ciBgRW5hYmxlQ29uZmlnc2AgYXJlIG9uIHBvaW50OiBgQ0dST1VQU2AsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLlxuXG5DcnVjaWFsbHksIHNob3VsZCB3ZSBlbmFibGUgYE1FTUNHX1YxYCB0byBoaXQgYm90aCB2MSBhbmQgdjIgcGF0aHM/IFllcywgYWJzb2x1dGVseS4gYE1FTUNHX1YxYCBlbmFibGVzIHRlc3RpbmcgYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgd2hpY2ggY2FsbHMgYF9fbW9kX21lbWNnX3N0YXRlYCwgd2hpbGUgdjIgYWxzbyBicmluZ3MgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGludG8gdGhlIHBpY3R1cmUuXG5cbk9rYXksIGxldCdzIHRha2Ugb25lIGxhc3QgcGFzcyB0byBjb25maXJtIGFsbCBvZiB0aGlzIGFuZCBmb3JtYXQgdGhlIHJlc3VsdHMgbmVhdGx5IHVzaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE1LCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0ODo1My45NTU2NjYyODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU0ODU4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICAgIFwibW9kX21lbWNnX3N0YXRlXCIsXG4gICAgXCJtb2RfbHJ1dmVjX3N0YXRlXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICAgIFwibW9kX21lbWNnX3N0YXRlXCIsXG4gICAgXCJtb2RfbHJ1dmVjX3N0YXRlXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0ODo1NC4xMDExNTk5OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODgxMzAyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6NTQuMTAxNjc1OTk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDM4ODA3Nzk5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIG1lbW9yeSBjZ3JvdXAgc3RhdCBhY2NvdW50aW5nIGFuZCB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nOlxcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxcbjIuIEluIGBtbS93b3JraW5nc2V0LmNgLCBpdCB1cGRhdGVzIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBpbnN0ZWFkIG9mIGBscnV2ZWNfbHJ1X3NpemUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUzOGIwMDJiOTk5Y2QxZTNmZWYxMTdmZjZjNjM2ZDY5ODkyYTk0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjQyOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5mNDU0ZDAyNzQ2ZTlmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC04MDUsMTYgKzgwNSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4gXHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIC8qXG4tICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxuKyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4rICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcbiB7XG4tXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuK1x0LypcbitcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbitcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXG4rXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuK1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4rXHQgKi9cbitcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gXHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gXHRcdHJldHVybiBtZW1jZztcbiBcdH1cbkBAIC04MzUsMTcgKzg0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi44NWE0ZTE0ZTk1ZDUxIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02OTMsMTAgKzY5Myw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuIFxuIFx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZW1lbWNnKTtcbiBcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cdTAwM2VuaWQpKTtcbi1cbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcbi1cdFx0XHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbi1cbitcdFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4rXHRcdFx0XHRcdFx0XHQgTlJfTFJVX0JBU0UgKyBpKTtcbiBcdFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjU0LjEwMTY3Nzc0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgyMzczNjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gdGVzdGluZy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgd29ya2luZ3NldCBtYW5hZ2VtZW50LCB3aGljaCBhcmUgYXJlYXMgd2hlcmUgc3VidGxlIGJ1Z3MgY2FuIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgZWFjaCBtb2RpZmljYXRpb24uXG5cbkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYC4gVGhlIHJlbW92YWwgb2YgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHX1YxYCBjb25kaXRpb25hbCBhcm91bmQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBkaXJlY3QgY2hlY2sgZm9yIGAhbWVtY2dfaXNfZHlpbmcobWVtY2cpYCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBgY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKWAgY29uZGl0aW9uYWwgaW5kaWNhdGVzIGEgc2hpZnQgaW4gaG93IG1lbWNnIGRlYXRoIGlzIGhhbmRsZWQgb3IgZGV0ZWN0ZWQuIFRoaXMgY2hhbmdlIGluIGNvbnRyb2wgZmxvdyBpcyBhIGNsYXNzaWMgYXJlYSB0byB0cmlnZ2VyIHByb2JsZW1zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyByYWNlIGNvbmRpdGlvbnMsIGFuZCBpZiB0aGUgbWVtb3J5IGJhY2tpbmcgdGhlIGNncm91cCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCB3aGVuIHRoZSBuZXcgY29kZSBleGVjdXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHJlbW92YWwgb2YgdGhlIGNvbmRpdGlvbmFsIGFsdGVycyBhbnkgbWVtb3J5IGFsbG9jYXRpb24gZ3VhcmFudGVlcyBvciBhc3N1bXB0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbiBvZiBSQ1UgbG9ja2luZyBsb2dpYyBmb3IgbWVtY2cgYW5jZXN0b3Igd2FsayBkdXJpbmcgb2ZmbGluaW5nL2R5aW5nIGlzIGFsc28gY29uY2VybmluZywgcGFydGljdWxhcmx5IGluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBsb2dpYywgdGhlIGxvY2tpbmcgc3RyYXRlZ3ksIGFuZCBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuXG5cblNlY29uZCwgdGhlIGNoYW5nZSBpbiBgbW0vd29ya2luZ3NldC5jYCBpbiBgY291bnRfc2hhZG93X25vZGVzKClgIGFwcGVhcnMgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YgaG93IGxydXZlYyBzaXplIGlzIGNhbGN1bGF0ZWQuIFJlcGxhY2luZyBgbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSlgIHdpdGggYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgKyBpKWAgaXMgcG90ZW50aWFsbHkgc3VidGxlLiBJJ2xsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24gb3IgdXNhZ2Ugb2YgbWVtb3J5LCBvciBpZiBpdCBjYW4gbGVhZCB0byB1bmRlci1jb3VudGluZyBvZiBhbGxvY2F0ZWQgcGFnZXMuIEFyZSB3ZSBpbmFkdmVydGVudGx5IHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/XG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnktcmVsYXRlZCBidWdzIGluIGJvdGggZmlsZXMsIEkgd2lsbCBuZWVkIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSdsbCBsaWtlbHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBlbnN1cmluZyB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3Igd3JpdHRlbi4gQW55IGRpdmVyZ2VuY2UgaW4gZXhlY3V0aW9uIHBhdGhzIGJhc2VkIG9uIHRoZSBkZWF0aCBvZiBhIG1lbWNnIG5lZWRzIHRvIGJlIHZlcmlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDk6MTIuOTI1NDE2Nzc2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU3MTEyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTgxMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9tZW1jb250cm9sLmM6ODE0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04MTUte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTg3MD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzctXFxubW0vbWVtY29udHJvbC5jOjg3ODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtODc5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTM2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk0NS1cXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbm1tL21lbWNvbnRyb2wuYzo5NDY6XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVxcdTAwM2VtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wuYy05NDctXFx0cG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0OToxMy40MjExMzQzOTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMwMDU4NjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sIGluIG1tL21lbWNvbnRyb2wuYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgbWVtb3J5IGNvbnRyb2wgZnVuY3Rpb25zLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLCBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmVhLCB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmb2N1cyBvbiBgbW0vbWVtY29udHJvbC5jYCwgYW5kIEknbGwganVtcCB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhcm91bmQgbGluZXMgODAwIHRvIDg2MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gaG93IHRoZXkgaGFuZGxlIGR5aW5nIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGVpciByb2xlIGluIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ5OjE2LjcyMTcyMzE1OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXHQvKiBHZXQgdGhlIGFic29sdXRlIHZhbHVlIG9mICh2YWwgKiB1bml0IC8gUEFHRV9TSVpFKS4gKi9cXG4gODAxOlxcdFxcdHJlcyA9IG11bHRfZnJhYyhhYnModmFsKSwgdW5pdCwgUEFHRV9TSVpFKTtcXG4gODAyOlxcdFxcdC8qIFJvdW5kIHVwIHplcm8gdmFsdWVzLiAqL1xcbiA4MDM6XFx0XFx0cmVzID0gcmVzID8gOiAxO1xcbiA4MDQ6XFx0XFxuIDgwNTpcXHRcXHRyZXR1cm4gdmFsIFxcdTAwM2MgMCA/IC1yZXMgOiByZXM7XFxuIDgwNjpcXHR9XFxuIDgwNzpcXHRcXG4gODA4OlxcdC8qXFxuIDgwOTpcXHQgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbiA4MTA6XFx0ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXFxuIDgxMTpcXHQgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXFxuIDgxMjpcXHQgKi9cXG4gODEzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbiA4MTQ6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXFxuIDgxNTpcXHR7XFxuIDgxNjpcXHRcXHQvKlxcbiA4MTc6XFx0XFx0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xcbiA4MTg6XFx0XFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4gODE5OlxcdFxcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXFxuIDgyMDpcXHRcXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cXG4gODIxOlxcdFxcdCAqL1xcbiA4MjI6XFx0XFx0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcXG4gODIzOlxcdFxcdFxcdCpyY3VfbG9ja2VkID0gZmFsc2U7XFxuIDgyNDpcXHRcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIDgyNTpcXHRcXHR9XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gODI4OlxcdFxcdCpyY3VfbG9ja2VkID0gdHJ1ZTtcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4gODMxOlxcdFxcdFxcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXFxuIDgzNzpcXHR7XFxuIDgzODpcXHRcXHRpZiAoIXJjdV9sb2NrZWQpXFxuIDgzOTpcXHRcXHRcXHRyZXR1cm47XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4NDI6XFx0fVxcbiA4NDM6XFx0XFxuIDg0NDpcXHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDg0NTpcXHRcXHRcXHRcXHQgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxcbiA4NDY6XFx0e1xcbiA4NDc6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbiA4NDg6XFx0XFx0aW50IGNwdTtcXG4gODQ5OlxcdFxcbiA4NTA6XFx0XFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFxcXCIlczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpZHgpKVxcbiA4NTE6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRjcHUgPSBnZXRfY3B1KCk7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdHRoaXNfY3B1X2FkZChtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUtXFx1MDAzZXN0YXRlW2ldLCB2YWwpO1xcbiA4NTY6XFx0XFx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcXG4gODU3OlxcdFxcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0dHJhY2VfbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ5OjE2LjcyMTk0MTcwOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDMwMTQxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodHMsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlcidzIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTnVhbmNlcyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gZGVlcCBpbiB0aGUgd2VlZHMgb24gdGhpcywgYW5kIEknbSBpdGNoaW5nIHRvIHNlZSBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzICpyZWFsbHkqIHdvcmtpbmcgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbW0vd29ya2luZ3NldC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3b3JraW5nIHNldCBtb2RlbCBpcyBpbXBsZW1lbnRlZCBoZXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgbGlrZSB0aGUgcGFnZSByZXBsYWNlbWVudCBhbGdvcml0aG1zLCBhbmQgaG93IHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgYXJlIHR1bmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgbWFraW5nIHNtYXJ0IGNob2ljZXMgYWJvdXQgcmVzaWRlbnQgc2V0IHNpemUgbGltaXRzLCBvciBpZiB0aGV5IGFyZSBqdXN0IGRvaW5nIHRoZSBiYXJlIG1pbmltdW0uIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gdHJhY2sgdGhlIHdvcmtpbmcgc2V0PyBBcmUgdGhleSBlZmZpY2llbnQ/IERvIHRoZXkgc2NhbGUgd2VsbD8gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHRyYWRlb2ZmcyB0aGV5J3ZlIG1hZGUsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhcmVhcyB3aGVyZSB0aGV5J3ZlIGdvbmUgZG93biBhbiB1bnByb2R1Y3RpdmUgcGF0aC4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGNvbnRlbnRpb24gbWlnaHQgYXJpc2UsIGVzcGVjaWFsbHkgdW5kZXIgaGVhdnkgbG9hZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlbGVnYW5jZSAob3IgbGFjayB0aGVyZW9mKSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDk6MjUuMTUyMDg1OTc4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS93b3JraW5nc2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjg1OlxcdFxcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XFxuIDY4NjpcXHRcXHQgKlxcbiA2ODc6XFx0XFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXFxuIDY4ODpcXHRcXHQgKi9cXG4gNjg5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjkwOlxcdFxcdGlmIChzYy1cXHUwMDNlbWVtY2cpIHtcXG4gNjkxOlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gNjkyOlxcdFxcdFxcdGludCBpO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIDY5NTpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cXHUwMDNlbmlkKSk7XFxuIDY5NjpcXHRcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gNjk3OlxcdFxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBOUl9MUlVfQkFTRSArIGkpO1xcbiA2OTk6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDcwMDpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAxOlxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiA3MDI6XFx0XFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAzOlxcdFxcdH0gZWxzZVxcbiA3MDQ6XFx0I2VuZGlmXFxuIDcwNTpcXHRcXHRcXHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cXHUwMDNlbmlkKTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bWF4X25vZGVzID0gcGFnZXMgXFx1MDAzZVxcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdGlmIChub2RlcyBcXHUwMDNjPSBtYXhfbm9kZXMpXFxuIDcxMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzExOlxcdFxcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdFxcbiA3MTQ6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbiA3MTY6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cXHUwMDNlbG9jaylcXG4gNzE3OlxcdHtcXG4gNzE4OlxcdFxcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xcbiA3MTk6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIDcyMDpcXHRcXHRpbnQgcmV0O1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHQvKlxcbiA3MjM6XFx0XFx0ICogUGFnZSBjYWNoZSBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMgc3luY2hyb25vdXNseSBtYWludGFpblxcbiA3MjQ6XFx0XFx0ICogdGhlIHNoYWRvdyBub2RlIExSVSB1bmRlciB0aGUgaV9wYWdlcyBsb2NrIGFuZCB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDk6MjUuMTUyMjUwNDc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyODMwMTcyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBLTVNBTiBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGV5IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEga2V5IGNvbmNlcm4gd2hlbiBhc3Nlc3NpbmcgdGhlIG5lZWQgZm9yIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYXNzaW5nIGl0IHRvIHVzZXItc3BhY2UsIG9yIGFueSBvdGhlciBLTVNBTi1yZWxldmFudCBpc3N1ZXMuXG5cbkZpcnN0LCBJJ20gbG9va2luZyBhdCBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhhbWluaW5nIHRoZSBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGByY3VfbG9ja2VkYC4gRnJvbSB3aGF0IEkgc2VlLCBgKnJjdV9sb2NrZWRgIGlzIGFsd2F5cyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCByZWdhcmRsZXNzIG9mIHRoZSBjb250cm9sIGZsb3cuIFRoZSBjb2RlIHBhdGhzIGVuc3VyZSBgcmN1X2xvY2tlZGAgZ2V0cyBhIGRlZmluaXRlIGJvb2xlYW4gdmFsdWUgYmVmb3JlIGl0J3MgdXNlZCBlbHNld2hlcmUsIHNwZWNpZmljYWxseSBpbiBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgLiBTbywgbm8gdW5pbml0aWFsaXplZCByZWFkcyB0aGVyZS4gVGhlIGNoYW5nZXMgYXBwZWFyIHRvIG9wdGltaXplIHRoZSBoYW5kbGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlIGxvY2FscyBkdXJpbmcgbWVtY2cgZGVhdGgsIGJ1dCB0aGlzIHNlZW1zIHJlbGF0ZWQgdG8gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgY29uY2VybnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpdHNlbGYuIFRoaXMgaW52b2x2ZXMgbG9ja2luZyBhbmQgUkNVIHBvaW50ZXIgdHJhdmVyc2FsLCBub3QgS01TQU4tcmVsZXZhbnQgZGF0YSBpc3N1ZXMuXG5cbk1vdmluZyBvbiB0byBgbW0vd29ya2luZ3NldC5jYCwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgYGxydXZlY19scnVfc2l6ZWAgd2l0aCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBUaGlzIGZ1bmN0aW9uIHJlYWRzIG1lbWNnIHZtc3RhdHMgcGVyLWNwdSBjb3VudGVycy4gVGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBsb29rcyBsaWtlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIGNvcHlpbmcgdG8gdXNlci1zcGFjZSwgcGFkZGluZywgb3IgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMuIEl0J3MganVzdCByZWFkaW5nIGV4aXN0aW5nIGNvdW50ZXIgZGF0YS5cblxuU28sIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZXJl4oCZcyBteSBhc3Nlc3NtZW50OlxuXG4qICAgQXJlIHRoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIGJlaW5nIHBhc3NlZCBvciByZWFkPyBObywgYHJjdV9sb2NrZWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGluIGFsbCByZXR1cm4gcGF0aHMuXG4qICAgQXJlIGFueSBzdHJ1Y3RzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLlxuKiAgIERvZXMgaXQgYWxsb2NhdGUgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uXG4qICAgRG9lcyBpdCBjaGFuZ2UgYnVmZmVyIGJvdW5kcyBvciBwYXJzaW5nIGxlbmd0aHM/IE5vLCB0aGlzIGFwcGVhcnMgdW5yZWxhdGVkLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgdGhhdCAqZG8qIGV4aXN0IGFyZSBsaWtlbHkgdG8gYmUgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHByb2JsZW1zIHdpdGggUkNVIGxpZmV0aW1lcywgb3IgaW5jb3JyZWN0IGNvdW50ZXIgdmFsdWVzLiBBbGwgb2YgdGhlc2UgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiBjb25jdXJyZW5jeSBpc3N1ZXMsIGxvZ2ljIGVycm9ycywgb3IgbWlnaHQgYmUgZGV0ZWN0ZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBvciBMT0NLREVQLCBidXQgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIEknbSBjb21mb3J0YWJsZSBjb25jbHVkaW5nIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgTmVlZHNLTVNBTmAgc2hvdWxkIGluZGVlZCBiZSBgZmFsc2VgLiBJJ2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBvZiBjb3Vyc2UsIGFuZCBkb2N1bWVudCB0aGUgY2xlYXIgcmVhc29uaW5nIGZvciBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk4LCJPdXRwdXRUb2tlbnMiOjI1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ5OjM3Ljk4MjQyNjEwNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgbWVtb3J5IGNncm91cCBzdGF0IGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmc6XFxuMS4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIGl0IHNpbXBsaWZpZXMgYW5kIGV4dGVuZHMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgYW5kIGFkanVzdHMgUkNVIGxvY2tpbmcgbG9naWMgd2hlbiBvZmZsaW5pbmcvcmVwYXJlbnRpbmcgbWVtY2dzLiBUaGUgb3V0LXBhcmFtZXRlciBgcmN1X2xvY2tlZGAgaXMgdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVkIG9uIGFsbCBleGVjdXRpb24gcGF0aHMgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoKWAuXFxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSByZWFkLCBubyBzdHJ1Y3RzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBleHBvc3VyZXMgYXJlIGludHJvZHVjZWQuIFBvdGVudGlhbCByaXNrcyAoc3VjaCBhcyBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBjb25jdXJyZW5jeSByYWNlcywgb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcXG4xLiBJbiBgbW0vbWVtY29udHJvbC5jYCwgaXQgc2ltcGxpZmllcyBhbmQgZXh0ZW5kcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBhbmQgYWRqdXN0cyBSQ1UgbG9ja2luZyBsb2dpYyB3aGVuIG9mZmxpbmluZy9yZXBhcmVudGluZyBtZW1jZ3MuIFRoZSBvdXQtcGFyYW1ldGVyIGByY3VfbG9ja2VkYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgb24gYWxsIGV4ZWN1dGlvbiBwYXRocyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYC5cXG4yLiBJbiBgbW0vd29ya2luZ3NldC5jYCwgaXQgdXBkYXRlcyBgY291bnRfc2hhZG93X25vZGVzKClgIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgaW5zdGVhZCBvZiBgbHJ1dmVjX2xydV9zaXplKClgLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIHJlYWQsIG5vIHN0cnVjdHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGV4cG9zdXJlcyBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIChzdWNoIGFzIFJDVSBsaWZldGltZSBpc3N1ZXMsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 10:26:29 +0000 UTC FinishedAt: 2026-08-31 10:49:39 +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": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "MEMCG_V1" ], "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": "08745c62350126bc31b09548137be87e2866f628", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "MEMCG_V1" ], "series_id": "2cc2c44c-8b55-4a5a-9989-442ced716ecc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "count_shadow_nodes", "mod_memcg_state", "mod_lruvec_state", "reparent_memcg_state_local" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAgICYjMzQ7bW9kX21lbWNnX3N0YXRlJiMzNDssCiAgICAmIzM0O21vZF9scnV2ZWNfc3RhdGUmIzM0OywKICAgICYjMzQ7cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzUzOGIwMDJiOTk5Y2QxZTNmZWYxMTdmZjZjNjM2ZDY5ODkyYTk0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjQyOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggODMxOWFkOGM1YzIzYS4uZjQ1NGQwMjc0NmU5ZiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtODA1LDE2ICYjNDM7ODA1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4mIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4mIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxuJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG4ge1xuLVx0LyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqL1xuLVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbiYjNDM7XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuJiM0MztcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4mIzQzO1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTgzNSwxNyAmIzQzOzg0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi44NWE0ZTE0ZTk1ZDUxIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02OTMsMTAgJiM0Mzs2OTMsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcbiBcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gXHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4tXG4gXHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XG4tXG4mIzQzO1x0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfc3RhdGUmIzM0OywKICAgICYjMzQ7bW9kX2xydXZlY19zdGF0ZSYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIHN0YXRzIGhhbmRsaW5nIGFuZCByZWRpcmVjdGlvbiBmb3IgZHlpbmcvb2ZmbGluaW5nIG1lbWNncyBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyAocmVtb3ZpbmcgdGhlIHYxLW9ubHkgcmVzdHJpY3Rpb24pLCBhcyB3ZWxsIGFzIHNoYWRvdyBub2RlIGNvdW50aW5nIGNhbGN1bGF0aW9uIGluIHRoZSB3b3JraW5nc2V0IHNocmlua2VyLiBUaGlzIGlzIGNvcmUgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1MzhiMDAyYjk5OWNkMWUzZmVmMTE3ZmY2YzYzNmQ2OTg5MmE5NDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDo0MjowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA4MzE5YWQ4YzVjMjNhLi5mNDU0ZDAyNzQ2ZTlmIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC04MDUsMTYgJiM0Mzs4MDUsMjEgQEAgc3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKQogCXJldHVybiB2YWwgJmx0OyAwID8gLXJlcyA6IHJlczsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogLyoKLSAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlIHdpdGgKLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLgomIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlCiYjNDM7ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhCiYjNDM7ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKQogewotCS8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi8KLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkgewomIzQzOwkvKgomIzQzOwkgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nCiYjNDM7CSAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrCiYjNDM7CSAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoCiYjNDM7CSAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHsKIAkJKnJjdV9sb2NrZWQgPSBmYWxzZTsKIAkJcmV0dXJuIG1lbWNnOwogCX0KQEAgLTgzNSwxNyAmIzQzOzg0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQotewotCXJldHVybiBtZW1jZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKLXsKLX0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKQpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWMuLjg1YTRlMTRlOTVkNTEgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTY5MywxMCAmIzQzOzY5Myw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCiAJCW1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtJmd0O21lbWNnKTsKIAkJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtJmd0O21lbWNnLCBOT0RFX0RBVEEoc2MtJmd0O25pZCkpOwotCiAJCWZvciAocGFnZXMgPSAwLCBpID0gMDsgaSAmbHQ7IE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspCi0JCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7Ci0KJiM0MzsJCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLAomIzQzOwkJCQkJCQkgTlJfTFJVX0JBU0UgJiM0MzsgaSk7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKIAkJCWxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEZyb20gd2hhdCBJIHNlZSwgd2UgaGF2ZSBjaGFuZ2VzIGluIHR3byBrZXkgZmlsZXM6IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgdGhlIG1vcmUgc2lnbmlmaWNhbnQgb25lcy4gUmVtb3ZpbmcgdGhhdCBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAgYmxvY2sgYXJvdW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoKWAgaXMgbm90ZXdvcnRoeS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGNvbnNvbGlkYXRlcyBzb21lIG1lbWNnIChtZW1vcnkgY2dyb3VwKSBiZWhhdmlvciBhY3Jvc3MgdjEgYW5kIHYyLiBTcGVjaWZpY2FsbHksIHRoZSBvbGQgYGNncm91cF9zdWJzeXNfb25fZGZsKClgIGNoZWNrIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYCFtZW1jZ19pc19keWluZyhtZW1jZylgLiBTbywgaW5zdGVhZCBvZiBiZWluZyB2ZXJzaW9uLWRlcGVuZGVudCwgdGhlIG5ldyBsb2dpYyBub3cgY2hlY2tzIGlmIGEgbWVtY2cgaXMgJiMzNDtkeWluZyYjMzQ7IHRvIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZS4gVGhpcyBhZmZlY3RzIGhvdyBtZW1jZyBzdGF0ZSBpcyB0cmFja2VkIGFuZCBob3cgc3RhdGlzdGljcyBhcmUgcmVwYXJlbnRlZC4gVGhpcyBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGVzZSBzdGF0ZXMgYWNyb3NzIGFsbCBjZ3JvdXAgdmVyc2lvbnMuIFRoaXMgcG90ZW50aWFsbHkgc2ltcGxpZmllcyB0aGUgY29kZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuCgpNb3Zpbmcgb24gdG8gYG1tL3dvcmtpbmdzZXQuY2AsIHRoZSBjaGFuZ2UgaW4gYGNvdW50X3NoYWRvd19ub2RlcygpYCBhcHBlYXJzIGxlc3MgZHJhbWF0aWMgYXQgZmlyc3QgZ2xhbmNlLiBJdCBsb29rcyBsaWtlIGBscnV2ZWNfbHJ1X3NpemUoKWAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAuIFRoaXMgaXMgcHJvYmFibHkgYW4gb3B0aW1pemF0aW9uLCBvciBtYXliZSBhIGNoYW5nZSBpbiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIExSVS4gSSBrbm93IHRoZSBpbnRlcm5hbHMgb2YgdGhlIExSVSBhcmUgY29tcGxleCwgc28gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoYXQgYE5SX0xSVV9CQVNFICYjNDM7IGlgIGNvcnJlc3BvbmRzIHRvLCBhcyBJIGtub3cgdGhhdCBgaWAgcmFuZ2VzIGZyb20gMCB0byBNQVhfTlJfWk9ORVMgLSAxLiBCdXQgSSBzdXNwZWN0IHRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgJiMzNDt3b3JraW5nIHNldCYjMzQ7IGlzIGNhbGN1bGF0ZWQsIHBvdGVudGlhbGx5IGFmZmVjdGluZyB0aGUgYWNjdXJhY3kgb2YgdGhlIGFsZ29yaXRobS4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIGZpbGVzIG5vdyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgbWVtY2dfaXNfZHlpbmcoKWAgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQsIGFuZCBhbHNvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgcmVwbGFjaW5nIGBscnV2ZWNfbHJ1X3NpemUoKWAuIEkgZXhwZWN0IHRvIHNlZSBzb21lIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgc2ltcGxpZmljYXRpb24gaW4gYm90aCBjYXNlcywgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdC8qIEdldCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgKHZhbCAqIHVuaXQgLyBQQUdFX1NJWkUpLiAqL1xuIDgwMTpcdFx0cmVzID0gbXVsdF9mcmFjKGFicyh2YWwpLCB1bml0LCBQQUdFX1NJWkUpO1xuIDgwMjpcdFx0LyogUm91bmQgdXAgemVybyB2YWx1ZXMuICovXG4gODAzOlx0XHRyZXMgPSByZXMgPyA6IDE7XG4gODA0Olx0XG4gODA1Olx0XHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiA4MDY6XHR9XG4gODA3Olx0XG4gODA4Olx0LypcbiA4MDk6XHQgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxuIDgxMDpcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxuIDgxMTpcdCAqIG1lbWNnIGlzIHJhcmUsIHNvIGRvIHRoZSByZWRpcmVjdGlvbiBmb3IgYWxsIGNncm91cCBoaWVyYXJjaGllcy5cbiA4MTI6XHQgKi9cbiA4MTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbiA4MTQ6XHRnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcbiA4MTU6XHR7XG4gODE2Olx0XHQvKlxuIDgxNzpcdFx0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuIDgxODpcdFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbiA4MTk6XHRcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4gODIwOlx0XHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbiA4MjE6XHRcdCAqL1xuIDgyMjpcdFx0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiA4MjM6XHRcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiA4MjQ6XHRcdFx0cmV0dXJuIG1lbWNnO1xuIDgyNTpcdFx0fVxuIDgyNjpcdFxuIDgyNzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDgyODpcdFx0KnJjdV9sb2NrZWQgPSB0cnVlO1xuIDgyOTpcdFxuIDgzMDpcdFx0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbiA4MzE6XHRcdFx0bWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gODMyOlx0XG4gODMzOlx0XHRyZXR1cm4gbWVtY2c7XG4gODM0Olx0fVxuIDgzNTpcdFxuIDgzNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gODM3Olx0e1xuIDgzODpcdFx0aWYgKCFyY3VfbG9ja2VkKVxuIDgzOTpcdFx0XHRyZXR1cm47XG4gODQwOlx0XG4gODQxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4NDI6XHR9XG4gODQzOlx0XG4gODQ0Olx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDg0NTpcdFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG4gODQ2Olx0e1xuIDg0NzpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuIDg0ODpcdFx0aW50IGNwdTtcbiA4NDk6XHRcbiA4NTA6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDg1MTpcdFx0XHRyZXR1cm47XG4gODUyOlx0XG4gODUzOlx0XHRjcHUgPSBnZXRfY3B1KCk7XG4gODU0Olx0XG4gODU1Olx0XHR0aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUtXHUwMDNlc3RhdGVbaV0sIHZhbCk7XG4gODU2Olx0XHR2YWwgPSBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaWR4LCB2YWwpO1xuIDg1NzpcdFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgdmFsLCBjcHUpO1xuIDg1ODpcdFxuIDg1OTpcdFx0dHJhY2VfbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG4gODYwOlx0XG4gODYxOlx0XHRwdXRfY3B1KCk7XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdC8qKlxuIDg2NTpcdCAqIG1vZF9tZW1jZ19zdGF0ZSAtIHVwZGF0ZSBjZ3JvdXAgbWVtb3J5IHN0YXRpc3RpY3NcbiA4NjY6XHQgKiBAbWVtY2c6IHRoZSBtZW1vcnkgY2dyb3VwXG4gODY3Olx0ICogQGlkeDogdGhlIHN0YXQgaXRlbSAtIGNhbiBiZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBlbnVtIG5vZGVfc3RhdF9pdGVtXG4gODY4Olx0ICogQHZhbDogZGVsdGEgdG8gYWRkIHRvIHRoZSBjb3VudGVyLCBjYW4gYmUgbmVnYXRpdmVcbiA4Njk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzk1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBtZW1jZyBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgaGVhZHMgdG8gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBtZW1jZyBsb2dpYy4gTGV0JiMzOTtzIHNlZSBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhhdCBmaWxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIOKAkyB1bmRlcnN0YW5kaW5nICp3aGVyZSogaXQmIzM5O3MgY2FsbGVkIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyBpdCYjMzk7cyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5yYXZlbGluZyBpdHMgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY29udHJvbCBncm91cHMuIEkgd2FudCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCB0byBnaXZlIG1lIGFuIGlkZWEgd2hhdCBwcm9ibGVtIGlzIGJlaW5nIHNvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbm9uX2R5aW5nX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04MTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODE0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTgxNS17XG4tLVxubW0vbWVtY29udHJvbC5jLTgzNS1cbm1tL21lbWNvbnRyb2wuYzo4MzY6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbm1tL21lbWNvbnRyb2wuYy04Mzcte1xuLS1cbm1tL21lbWNvbnRyb2wuYz04NzA9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTg3Ny1cbm1tL21lbWNvbnRyb2wuYzo4Nzg6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTg3OS1cdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmM6ODgwOlx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtODgxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9OTM2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05NDUtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjk0NjpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTQ3LVx0cG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbi0tXG5tbS9tZW1jb250cm9sLmMtOTUwLVxubW0vbWVtY29udHJvbC5jOjk1MTpcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTk1Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL3dvcmtpbmdzZXQuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgd29ya2luZ3NldCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgYWN0aXZlIG1lbW9yeSByZWdpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgdHJhY2tzIHBhZ2UgYWNjZXNzLCB0aGUgY3JpdGVyaWEgZm9yIG1vdmluZyBwYWdlcyBiZXR3ZWVuIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIGxpc3RzLCBhbmQgaG93IHRoZSBhbGdvcml0aG0gcmVhY3RzIHRvIG1lbW9yeSBwcmVzc3VyZS4gSSBhbnRpY2lwYXRlIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgdGhlIGBwZ2RhdF90YCBhbmQgYHpvbmVfdGAgc3RydWN0dXJlcywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHdvcmtpbmdzZXQgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGluZyBwZXJmb3JtYW5jZSBvciBzdGFiaWxpdHkuIEkgaG9wZSBJIGRvbiYjMzk7dCBydW4gaW50byBhIHNwYWdoZXR0aSBtZXNzIGluIHRoZXJlISBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBJIGtub3cgdGhhdCB0aGUgd29ya2luZ3NldCBjb2RlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXG4gNjgxOlx0XHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cbiA2ODI6XHRcdCAqXG4gNjgzOlx0XHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xuIDY4NDpcdFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcbiA2ODU6XHRcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XG4gNjg2Olx0XHQgKlxuIDY4NzpcdFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXG4gNjg4Olx0XHQgKi9cbiA2ODk6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjkwOlx0XHRpZiAoc2MtXHUwMDNlbWVtY2cpIHtcbiA2OTE6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIDY5MjpcdFx0XHRpbnQgaTtcbiA2OTM6XHRcbiA2OTQ6XHRcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gNjk1Olx0XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4gNjk2Olx0XHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbiA2OTc6XHRcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxuIDY5ODpcdFx0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIDY5OTpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNzAwOlx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDcwMTpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNzAyOlx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzAzOlx0XHR9IGVsc2VcbiA3MDQ6XHQjZW5kaWZcbiA3MDU6XHRcdFx0cGFnZXMgPSBub2RlX3ByZXNlbnRfcGFnZXMoc2MtXHUwMDNlbmlkKTtcbiA3MDY6XHRcbiA3MDc6XHRcdG1heF9ub2RlcyA9IHBhZ2VzIFx1MDAzZVx1MDAzZSAoWEFfQ0hVTktfU0hJRlQgLSAzKTtcbiA3MDg6XHRcbiA3MDk6XHRcdGlmIChub2RlcyBcdTAwM2M9IG1heF9ub2RlcylcbiA3MTA6XHRcdFx0cmV0dXJuIDA7XG4gNzExOlx0XHRyZXR1cm4gbm9kZXMgLSBtYXhfbm9kZXM7XG4gNzEyOlx0fVxuIDcxMzpcdFxuIDcxNDpcdHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hhZG93X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gNzE1Olx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuIDcxNjpcdFx0XHRcdFx0XHQgIHZvaWQgKmFyZykgX19tdXN0X2hvbGQobHJ1LVx1MDAzZWxvY2spXG4gNzE3Olx0e1xuIDcxODpcdFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHhhX25vZGUsIHByaXZhdGVfbGlzdCk7XG4gNzE5Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIG1lbW9yeSBjZ3JvdXAgc3RhdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gYSBtZW1jZyBpcyBvZmZsaW5pbmcsIGFuZCBhbHNvIHRvdWNoaW5nIHRoZSB3b3JraW5nc2V0IGNvZGUuIEhtbSwgbG9va3MgbGlrZSBpdCYjMzk7cyBtZXJnaW5nIHRoZSB2MSBhbmQgdjIgYmVoYXZpb3IsIHdoaWNoIGlzIHVzdWFsbHkgaW50ZXJlc3RpbmcuIFRoZSBrZXkgaGVyZSBpcyB0aGUgYG1vZF9tZW1jZ19zdGF0ZWAgLyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgaG90IHBhdGggY29uY2VybiwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaXJjbGUgYmFjayB0byB0aGF0LgoKVGhlIGluc3RydWN0aW9ucyBzYXkgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgYXJlIHByZXR0eSBjbGVhcjogaXQmIzM5O3MgKm5vdCogd29ydGggZnV6emluZyBpZiBpdCYjMzk7cyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGlvbiwgdW5yZWFjaGFibGUgY29kZSwgb3IgdmVyeSBzcGVjaWZpYyBkcml2ZXJzLiBIb3dldmVyLCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdGhlbiBpdCYjMzk7cyBhIGdvLgoKVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQ6IGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIGl0JiMzOTtzIGFsdGVyaW5nIGhvdyBzdGF0cyBhcmUgaGFuZGxlZCB3aGVuIGEgbWVtY2cgaXMgZHlpbmcsIGluY2x1ZGluZyByZW1vdmluZyBhbiBgI2lmZGVmYCBmb3IgdjEuIFRoaXMgbWVhbnMgaXQgaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBjcml0aWNhbCBwYXRoIG9mIG1lbWNnIGFuZCBwYWdlIGNhY2hlIGhhbmRsaW5nLiBUaGVuLCBpbiBgbW0vd29ya2luZ3NldC5jYCwgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGNhbGN1bGF0aW9uIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTGV0JiMzOTtzIGdldCB0byBpdC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGNvdW50X3NoYWRvd19ub2Rlc2AuIE9rYXksIGl0JiMzOTtzIGBzdGF0aWNgLiBEYW1uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMsIGFzIGBzdGF0aWNgIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgdGhlc2UgYXJlIGxpa2VseSBpbmxpbmVkLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyB0aGF0IGNhbGwgdGhpcywgc28gbGV0JiMzOTtzIHN0YXJ0IHNlYXJjaGluZyBpbiBgbW0vd29ya2luZ3NldC5jYCBhbmQgc2VlIHdoZXJlIHRoaXMgaXMgcmVnaXN0ZXJlZCBvciB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTYyOT12b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTY1NS1cbm1tL3dvcmtpbmdzZXQuYzo2NTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5tbS93b3JraW5nc2V0LmMtNjU3LVx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTc9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgzMy1cbm1tL3dvcmtpbmdzZXQuYzo4MzQ6XHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xubW0vd29ya2luZ3NldC5jLTgzNS1cdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBNZWNoYW5pc21zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNpcmNsaW5nIGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLCBnaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lczogYHNjYW5fc2hhZG93X25vZGVzYCwgYHdvcmtpbmdzZXRfdXBkYXRlX25vZGVgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfYWN0aXZhdGlvbmAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB3b3JraW5nc2V0cywgcGVyaGFwcyBzaGFkb3cgbm9kZXMsIGFuZCBsaWtlbHkgc29tZSBmb3JtIG9mIHBhZ2UgZmF1bHQgb3IgbWVtb3J5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uLgoKTm93LCB3aGVyZSBhcmUgdGhlc2UgbWVjaGFuaWNzIGltcGxlbWVudGVkPyBNeSBpbnN0aW5jdCBpbW1lZGlhdGVseSBkaXJlY3RzIG1lIHRvd2FyZHMgYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmluKiBgbW0vbWVtY29udHJvbC5jYC4KCkkgbmVlZCB0byBmb2N1cyBvbiByZWxldmFudCBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBtb2RfbWVtY2dfc3RhdGVgLCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAsIGFuZCBgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBhbmQgd2hhdCBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIGFzIHRoZXkgYXBwZWFyIHRvIGJlIGNlbnRyYWwgdG8gbW9kaWZ5aW5nIG1lbW9yeSBjb250cm9sIGdyb3VwIHN0YXRlIG9yIExSVSB2ZWN0b3Igc3RhdGVzLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMuIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlaXIgcGFyYW1ldGVycywgd2hhdCB0aGVpciBzY29wZSBvZiBmdW5jdGlvbiBpcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIEkgc2hvdWxkIGNoZWNrIHRvIGdhaW4gdGhlIGVudGlyZXR5IG9mIHRoZWlyIGNvbnRleHQ/IExldCYjMzk7cyBjaGVjayB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBib3RoIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kX21lbWNnXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkyMz12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI1LS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI2OnZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkyNy1cdFx0ICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTI4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI5OnN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzMC1cdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzOS1cdGlmIChtZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk0MDpcdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTM2NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNjU6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzY2LVx0XHRcdFx0ICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNzAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMzcxOnN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNzItXHRcdFx0XHRcdGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZywgZnJvbSBhIHRlY2huaWNhbCBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYG1tL21lbWNvbnRyb2wuY2AgZm9yIE1lbWNnIExpZmVjeWNsZSBhbmQgU3RhdHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBsaWZlY3ljbGUgYW5kIHN0YXRpc3RpY2FsIGFzcGVjdHMgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIChtZW1jZ3MpLiBJJiMzOTttIGRlbGliZXJhdGVseSAqbm90KiBsb29raW5nIGF0IHRoZSBvYnZpb3VzLCB3ZWxsLXRyb2RkZW4gcGF0aHMgbGlrZSB0aGUgJiMzNDtob3QmIzM0OyBleGVjdXRpb24gcGF0aHMgb3Igc3RhdGljYWxseSBkZWZpbmVkIHN5bWJvbHMgcmlnaHQgYXdheS4gTXkgZ29hbCBpcyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGFueSBvdGhlciBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgb3Igc3ltYm9scyBpbiB0aGlzIGZpbGUgdGhhdCBtaWdodCByZWxhdGUgdG8gaG93IG1lbWNncyBhcmUgY3JlYXRlZCwgZGVzdHJveWVkLCBvciBob3cgdGhlaXIgbWVtb3J5IHVzYWdlIGlzIHRyYWNrZWQgKmJlc2lkZXMqIHRoZSBtb3N0IG9idmlvdXMgb25lcy4gSSB3YW50IHRvIGJ1aWxkIGEgbW9yZSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLgoKSSBmaWd1cmUgcmVhZGluZyBhcm91bmQgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRob3NlIGxvb2sgbGlrZSBrZXkgZnVuY3Rpb25zL3N0cnVjdHVyZXMgZm9yIG1vZGlmeWluZyBvciB1cGRhdGluZyB0aGUgc3RhdGUgb2YgYSBtZW1jZywgZXNwZWNpYWxseSByZWdhcmRpbmcgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBkYXRhLiBJJiMzOTttIGJldHRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzdGF0ZXMgYXJlIG1vZGlmaWVkIHdpbGwgaWxsdW1pbmF0ZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgd2lsbCBsaWtlbHkgcmV2ZWFsIGhvdyB0aGUgbWVtb3J5IGFjY291bnRpbmcgYW5kIG90aGVyIHN0YXRzIGFyZSB1cGRhdGVkIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHR2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbiA4NzE6XHRcdFx0ICAgICAgIGludCB2YWwpXG4gODcyOlx0e1xuIDg3MzpcdFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XG4gODc0Olx0XG4gODc1Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDg3NjpcdFx0XHRyZXR1cm47XG4gODc3Olx0XG4gODc4Olx0XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xuIDg3OTpcdFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiA4ODA6XHRcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xuIDg4MTpcdH1cbiA4ODI6XHRcbiA4ODM6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gODg0Olx0LyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xuIDg4NTpcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4gODg2Olx0e1xuIDg4NzpcdFx0bG9uZyB4O1xuIDg4ODpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuIDg4OTpcdFxuIDg5MDpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gODkxOlx0XHRcdHJldHVybiAwO1xuIDg5MjpcdFxuIDg5MzpcdFx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbiA4OTQ6XHQjaWZkZWYgQ09ORklHX1NNUFxuIDg5NTpcdFx0aWYgKHggXHUwMDNjIDApXG4gODk2Olx0XHRcdHggPSAwO1xuIDg5NzpcdCNlbmRpZlxuIDg5ODpcdFx0cmV0dXJuIHg7XG4gODk5Olx0fVxuIDkwMDpcdFxuIDkwMTpcdHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIDkwMjpcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcbiA5MDM6XHR7XG4gOTA0Olx0XHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcbiA5MDU6XHRcbiA5MDY6XHRcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIC12YWx1ZSk7XG4gOTA3Olx0XHRfX21vZF9tZW1jZ19zdGF0ZShwYXJlbnQsIGlkeCwgdmFsdWUpO1xuIDkwODpcdH1cbiA5MDk6XHQjZW5kaWZcbiA5MTA6XHRcbiA5MTE6XHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuIDkxMjpcdFx0XHRcdFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG4gOTEzOlx0e1xuIDkxNDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcG4tXHUwMDNlbWVtY2c7XG4gOTE1Olx0XHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XG4gOTE2Olx0XHRpbnQgY3B1O1xuIDkxNzpcdFxuIDkxODpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gOTE5Olx0XHRcdHJldHVybjtcbiA5MjA6XHRcbiA5MjE6XHRcdGNwdSA9IGdldF9jcHUoKTtcbiA5MjI6XHRcbiA5MjM6XHRcdC8qIFVwZGF0ZSBtZW1jZyAqL1xuIDkyNDpcdFx0dGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xuIDkyNTpcdFxuIDkyNjpcdFx0LyogVXBkYXRlIGxydXZlYyAqL1xuIDkyNzpcdFx0dGhpc19jcHVfYWRkKHBuLVx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUtXHUwMDNlc3RhdGVbaV0sIHZhbCk7XG4gOTI4Olx0XG4gOTI5Olx0XHR2YWwgPSBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaWR4LCB2YWwpO1xuIDkzMDpcdFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgdmFsLCBjcHUpO1xuIDkzMTpcdFx0dHJhY2VfbW9kX21lbWNnX2xydXZlY19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xuIDkzMjpcdFxuIDkzMzpcdFx0cHV0X2NwdSgpO1xuIDkzNDpcdH1cbiA5MzU6XHRcbiA5MzY6XHRzdGF0aWMgdm9pZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiA5Mzc6XHRcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXG4gOTM4Olx0XHRcdFx0XHQgICAgIGludCB2YWwpXG4gOTM5Olx0e1xuIDk0MDpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuIDk0MTpcdFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuIDk0MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDk0MzpcdFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XG4gOTQ0Olx0XG4gOTQ1Olx0XHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuIDk0NjpcdFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVx1MDAzZW1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbiA5NDc6XHRcdHBuID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gOTQ4Olx0XG4gOTQ5Olx0XHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocG4sIGlkeCwgdmFsKTtcbiA5NTA6XHRcbiA5NTE6XHRcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xuIDk1MjpcdH1cbiA5NTM6XHRcbiA5NTQ6XHQvKipcbiA5NTU6XHQgKiBtb2RfbHJ1dmVjX3N0YXRlIC0gdXBkYXRlIGxydXZlYyBtZW1vcnkgc3RhdGlzdGljc1xuIDk1NjpcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcbiA5NTc6XHQgKiBAaWR4OiB0aGUgc3RhdCBpdGVtXG4gOTU4Olx0ICogQHZhbDogZGVsdGEgdG8gYWRkIHRvIHRoZSBjb3VudGVyLCBjYW4gYmUgbmVnYXRpdmVcbiA5NTk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuCgoqKkludmVzdGlnYXRpbmcgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBzb21lb25lJiMzOTtzIGFza2VkIG1lIHRvIGxvb2sgaW50byBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbWNnIChtZW1vcnkgY29udHJvbCBncm91cCkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gKnVzZWQqPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSB3aGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgc3RhdGUgb2YgYSBtZW1jZy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gTFJVIG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBmdW5jdGlvbnMgZm9yIHVwZGF0aW5nLCBxdWVyeWluZywgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGluZyB0aGUgTFJVIHN0YXRlPyBLbm93aW5nIHRoZSBsYW5kc2NhcGUgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB2aWV3LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBtYWtpbmcgc3VyZSB0byB0cmFjayB0aGUgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGFuZCByZWxhdGVkIGZlYXR1cmVzLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgTFJVIHN0YXRlIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIG1lbWNnIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk1NTpcdCAqIG1vZF9scnV2ZWNfc3RhdGUgLSB1cGRhdGUgbHJ1dmVjIG1lbW9yeSBzdGF0aXN0aWNzXG4gOTU2Olx0ICogQGxydXZlYzogdGhlIGxydXZlY1xuIDk1NzpcdCAqIEBpZHg6IHRoZSBzdGF0IGl0ZW1cbiA5NTg6XHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxuIDk1OTpcdCAqXG4gOTYwOlx0ICogVGhlIGxydXZlYyBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBOVU1BIG5vZGUgYW5kIGEgY2dyb3VwLiBUaGlzXG4gOTYxOlx0ICogZnVuY3Rpb24gdXBkYXRlcyB0aGUgYWxsIHRocmVlIGNvdW50ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGFcbiA5NjI6XHQgKiBjaGFuZ2Ugb2Ygc3RhdGUgYXQgdGhpcyBsZXZlbDogcGVyLW5vZGUsIHBlci1jZ3JvdXAsIHBlci1scnV2ZWMuXG4gOTYzOlx0ICovXG4gOTY0Olx0dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXG4gOTY1Olx0XHRcdFx0aW50IHZhbClcbiA5NjY6XHR7XG4gOTY3Olx0XHQvKiBVcGRhdGUgbm9kZSAqL1xuIDk2ODpcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4LCB2YWwpO1xuIDk2OTpcdFxuIDk3MDpcdFx0LyogVXBkYXRlIG1lbWNnIGFuZCBscnV2ZWMgKi9cbiA5NzE6XHRcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDk3MjpcdFx0XHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCB2YWwpO1xuIDk3MzpcdH1cbiA5NzQ6XHRcbiA5NzU6XHR2b2lkIGxydXZlY19zdGF0X21vZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcbiA5NzY6XHRcdFx0XHQgICAgIGludCB2YWwpXG4gOTc3Olx0e1xuIDk3ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIDk3OTpcdFx0cGdfZGF0YV90ICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiA5ODA6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiA5ODE6XHRcbiA5ODI6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA5ODM6XHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIDk4NDpcdFx0LyogVW50cmFja2VkIHBhZ2VzIGhhdmUgbm8gbWVtY2csIG5vIGxydXZlYy4gVXBkYXRlIG9ubHkgdGhlIG5vZGUgKi9cbiA5ODU6XHRcdGlmICghbWVtY2cpIHtcbiA5ODY6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gOTg3Olx0XHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIGlkeCwgdmFsKTtcbiA5ODg6XHRcdFx0cmV0dXJuO1xuIDk4OTpcdFx0fVxuIDk5MDpcdFxuIDk5MTpcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiA5OTI6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIHZhbCk7XG4gOTkzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA5OTQ6XHR9XG4gOTk1Olx0RVhQT1JUX1NZTUJPTChscnV2ZWNfc3RhdF9tb2RfZm9saW8pO1xuIDk5NjpcdFxuIDk5NzpcdHZvaWQgbW9kX2xydXZlY19rbWVtX3N0YXRlKHZvaWQgKnAsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIDk5ODpcdHtcbiA5OTk6XHRcdHBnX2RhdGFfdCAqcGdkYXQgPSBwYWdlX3BnZGF0KHZpcnRfdG9fcGFnZShwKSk7XG4xMDAwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4xMDAxOlx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4xMDAyOlx0XG4xMDAzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xMDA0Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV92aXJ0KHApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBtZW1jZyBvZmZsaW5pbmcvZHlpbmcgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIG1lbWNnIE9mZmxpbmluZyBUcmlnZ2VycyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVjaXNlbHkgY2F1c2VzIGEgbWVtb3J5IGNncm91cCAobWVtY2cpIHRvIG9mZmxpbmUgb3IgZGllLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBtZW1vcnkgY29udHJvbCBncm91cHMuIEkga25vdyB0aGUgbGlrZWx5IHN1c3BlY3RzIGFyZSB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuCgpNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZXNlIHN0YXRlcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYXMgYSBwcmltYXJ5IHRyaWdnZXIsIGFuZCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWRgIGFuZCBgbWVtX2Nncm91cF9jc3NfZnJlZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMuCgpNeSBuZXh0IHN0ZXAgaXMgYSBjb2RlIHNlYXJjaC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHNlYXJjaCBmb3IgdGhlIHN0cmluZyAmIzM0O2Nzc19vZmZsaW5lJiMzNDsuIFRoaXMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIGFsbCB0aGUgY2FsbCBzaXRlcyBhbmQgcmVsYXRlZCBsb2dpYyBzdXJyb3VuZGluZyB0aGUgb2ZmbGluZSBwcm9jZXNzLCBhbGxvd2luZyBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBtZW1jZyBkZWFjdGl2YXRpb24uIEkgZXhwZWN0IHRoaXMgYXBwcm9hY2ggd2lsbCBxdWlja2x5IHVuY292ZXIgdGhlIGNydWNpYWwgbWVjaGFuaXNtcyBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjc3Nfb2ZmbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDIwNT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjgxLVxubW0vbWVtY29udHJvbC5jOjQyODI6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxubW0vbWVtY29udHJvbC5jLTQyODMte1xuLS1cbm1tL21lbWNvbnRyb2wuYy00Mjg1LVxubW0vbWVtY29udHJvbC5jOjQyODY6XHRtZW1jZzFfY3NzX29mZmxpbmUobWVtY2cpO1xubW0vbWVtY29udHJvbC5jLTQyODctXG4tLVxubW0vbWVtY29udHJvbC5jPTUwODg9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDkwLVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5tbS9tZW1jb250cm9sLmM6NTA5MTpcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXG5tbS9tZW1jb250cm9sLmMtNTA5Mi1cdC5jc3NfcmVsZWFzZWQgPSBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgZm9yIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQsIHRoYXQgbWVhbnMgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlaXIgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2UgZmlsZXMgYXJlIGNvbXBpbGVkLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBpbml0L0tjb25maWdgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTttIGFzc3VtaW5nIGBDT05GSUdfTUVNQ0dgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gdGhpcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIG9wdGlvbiBpbmZsdWVuY2VzIHRoZSBjb21waWxhdGlvbiBvZiB0aG9zZSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gbWFrZSB0aG9zZSBtb2R1bGVzIHdvcmsgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDcyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIHNldCB1cCwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBvcHRpb24uIEkga25vdyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgbWFuYWdpbmcgcmVzb3VyY2VzIGluIHRoZSBrZXJuZWwsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBwb3RlbnRpYWxseSBjb25maWd1cmVkIGluIGBpbml0L0tjb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbSwgaXRzIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3ludGF4LCBkZXBlbmRlbmNpZXMsIGFuZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRoYXQgSSBjYW4gcXVpY2tseSBzY2FuIGZvciBhIHF1aWNrIG92ZXJ2aWV3LiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgd2hlcmUgdG8gZ28gbmV4dCBiYXNlZCBvbiB3aGF0IEkgdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc0PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDgzLVxuaW5pdC9LY29uZmlnOjEwODQ6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4NS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5Mi1cbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OS1cbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDEtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDYtXG5pbml0L0tjb25maWc6MTEwNzpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA4LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9ucyBhcm91bmQgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IENvbnRyb2wgR3JvdXBzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgaGFzIHRvIHNheSBhYm91dCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29uZGl0aW9uYWwgbG9naWMuIFdoZXJlIGRvZXMgYENPTkZJR19NRU1DR2AgZml0IHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBvciBkZXByZWNhdGlvbnMgcmVsYXRlZCB0byB0aGUgZGlmZmVyZW50IG1lbW9yeSBjZ3JvdXAgdmVyc2lvbnMsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgYENPTkZJR19NRU1DR19WMWAgaXMgaGFuZGxlZCByZWxhdGl2ZSB0byB0aGUgbmV3ZXIgY2FwYWJpbGl0aWVzIG9yIGRlZmF1bHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBtb25vbGl0aGljIG9wdGlvbiBvciBpZiB0aGVyZSBhcmUgZmluZXItZ3JhaW5lZCBjaG9pY2VzIHRoYXQgYmVjb21lIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIEZvciBpbnN0YW5jZSwgYXJlIHRoZXJlIHN1Yi1vcHRpb25zIHRoYXQgY29udHJvbCBzcGVjaWZpYyBtZW1vcnkgYWNjb3VudGluZyBvciB0aHJvdHRsaW5nIGZlYXR1cmVzPyBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzIHNwZWNpZmllZD8gQW5kIGhvdyBkb2VzIHRoZSBmaWxlIGhhbmRsZSB0aGUgdXNlciYjMzk7cyBkZWZhdWx0IGNob2ljZT8gV2hhdCBraW5kIG9mIGhlbHAgdGV4dCBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIHdoYXQsIGFuZCB3aWxsIGl0IGJlIGNsZWFyIGFuZCBjb25jaXNlPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGxlZ2FjeSBzdXBwb3J0IGFuZCBhIHBvdGVudGlhbCB0cmFuc2l0aW9uIHBhdGgsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdhaW4gYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXNpZ24gc3BhY2UgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHdoZW4gd29ya2luZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MTpcdFxuMTA4MjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDgzOlx0XG4xMDg0Olx0Y29uZmlnIE1FTUNHXG4xMDg1Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg2Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg3Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4ODpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4OTpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkwOlx0XHRoZWxwXG4xMDkxOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTI6XHRcbjEwOTM6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NDpcdFx0Ym9vbFxuMTA5NTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NjpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5NzpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTg6XHRcdGRlZmF1bHQgeVxuMTA5OTpcdFxuMTEwMDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMTpcdFx0Ym9vbFxuMTEwMjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwMzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNDpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNTpcdFx0ZGVmYXVsdCB5XG4xMTA2Olx0XG4xMTA3Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA4Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMDk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTA6XHRcdGRlZmF1bHQgblxuMTExMTpcdFx0aGVscFxuMTExMjpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTM6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMTQ6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTE1Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExNjpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTc6XHRcbjExMTg6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTExOTpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNRU1DRyBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBNRU1DR2AuIEkga25vdyB0aGF0IEkgbmVlZCB0aGUgYE1FTUNHYCBjb25maWcgb3B0aW9uIGVuYWJsZWQgZm9yIGJvdGggdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYW5kIHRoYXQgY29uZGl0aW9uYWwgYGlmZGVmYCBpbiBgbW0vd29ya2luZ3NldC5jYC4gQnV0IGEgcXVpY2sgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IGlzIGBNRU1DR2AgYWN0dWFsbHkgY29udGluZ2VudCBvbiBgQ0dST1VQU2AgYmVpbmcgZW5hYmxlZD8gVGhpcyBmZWVscyBsaWtlIGEgcXVlc3Rpb24gSSBzaG91bGQgYWJzb2x1dGVseSBrbm93IHRoZSBhbnN3ZXIgdG8sIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQsIHNvIEkgY2FuIGNvbmZpcm0gd2hldGhlciBgTUVNQ0dgIGlzIGRpcmVjdGx5IHRpZWQgdG8gYW4gYGlmIENHUk9VUFNgIGJsb2NrIG9yIGlmIGl0IGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQU3xpZiBDR1JPVVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDUyPWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA1NC1cbmluaXQvS2NvbmZpZzoxMDU1Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTYtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDY4LVxuaW5pdC9LY29uZmlnOjEwNjk6aWYgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODk0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtb3J5IENHcm91cHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYE1FTUNHYCwgd2hpY2ggSSBrbm93IGxpdmVzIHVuZGVyIHRoZSBgQ0dST1VQU2AgdW1icmVsbGEuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gR290dGEgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHlvdSBrbm93PwoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgaW4gdGVybXMgb2Ygd2hhdCYjMzk7cyByZWxldmFudCB0byB0aGlzIGFyZWE/IEhlcmUgYXJlIGEgZmV3IHRob3VnaHRzOgoKKiAgIGBtb2RfbWVtY2dfc3RhdGVgOiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgY29yZSBzdGF0ZSB2YXJpYWJsZSwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuCiogICBgbW9kX2xydXZlY19zdGF0ZWA6IExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBMUlUgdmVjdG9yIHdpdGhpbiB0aGUgY2dyb3VwLiBEZWZpbml0ZWx5IHJlbGV2YW50LgoqICAgYGxydXZlY19zdGF0X21vZF9mb2xpb2A6IFRoaXMgaXMgdmVyeSBzcGVjaWZpYyBidXQgbG9va3MgbGlrZSBpdCBoYW5kbGVzIHVwZGF0aW5nIGZvbGlvIHN0YXRzIHdpdGhpbiB0aGUgTFJVLCBhbHNvIGltcG9ydGFudC4KKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgIChvciBwZXJoYXBzIGB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlYCBvciBgd29ya2luZ3NldF9yZWZhdWx0YCk6IFNoYWRvdyBub2RlcyBhcmUgaW50ZXJlc3RpbmcsIHNvIHRoaXMgY291bnQgc2VlbXMgaW1wb3J0YW50LiBJJiMzOTttIGFsc28gdGhpbmtpbmcgdXBkYXRlcyBhbmQgcmVmYXVsdHMgaW4gdGhlIHdvcmtpbmcgc2V0IGFyZSByZWxldmFudCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZXNlIGFzIHdlbGwuCiogICBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWA6IFRoaXMgaXMgcHJvYmFibHkgdGhlIGNncm91cCBzdWJzeXN0ZW0gc3RhdGUgb2ZmbGluZS4KCklmIGBNRU1DR19WMWAgaXMgZW5hYmxlZCBJIG5lZWQgdG8gY2hlY2sgYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTIyMDk9dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZzFfc3RhdHMpOyBpJiM0MzsmIzQzOylcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjE0Olx0XHRyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBtZW1jZzFfc3RhdHNbaV0pO1xubW0vbWVtY29udHJvbC12MS5jLTIyMTUtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD03MT12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaC03Mi1cbm1tL21lbWNvbnRyb2wtdjEuaDo3Mzp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC03NC1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz04ODU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtOTAwLVxubW0vbWVtY29udHJvbC5jOjkwMTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05MDItXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgxNQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFJlZmluZW1lbnQgZm9yIE1lbWNnIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHJlZmluaW5nIG91ciBmb2N1cyBzeW1ib2xzIGZvciBtZW1jZyBmdXp6aW5nLiBUaGUgZ3VpZGFuY2UgaXMgY2xlYXI6IHdlIG5lZWQgdG8gaXNvbGF0ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGZ1enouIFdlIHdhbnQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBiYWxhbmNlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gV2UmIzM5O3JlIGFpbWluZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBmdW5jdGlvbnMgdGhhdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG5vdCBidXJpZWQgaW5saW5lZCBoZWxwZXJzLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjYW5kaWRhdGUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQ6IGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBgbW9kX21lbWNnX3N0YXRlYCwgYG1vZF9scnV2ZWNfc3RhdGVgLCBgbW9kX2xydXZlY19rbWVtX3N0YXRlYCwgYW5kIGBjb3VudF9zaGFkb3dfbm9kZXNgLgoKSSBuZWVkIHRvIGFuYWx5emUgaWYgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbHJ1dmVjX3N0YXRlYCBxdWFsaWZ5IGFzIGhvdC1wYXRoIGNhbmRpZGF0ZXMuIFdoaWxlIHRoZXkgZ2V0IHNvbWUgYWN0aW9uIGR1cmluZyBhbGxvY2F0aW9ucyBhbmQgZnJlZWluZywgdGhvc2UgYXJlIG5vdCB0aGUgbWFpbiBhcmVhcyB3ZSB3YW50IHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIG1lbWNnIHJlcGFyZW50aW5nLCBjZ3JvdXAgdGVhcmRvd24sIGFuZCBzaGFkb3cgc2hyaW5rZXIgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCBpcyB0aGUgY3J1Y2lhbCBvbmUgZm9yIHYxIG9mZmxpbmluZy4gRm9yIHYyLCBvciBnZW5lcmFsIGNncm91cCBvZmZsaW5pbmcsIHRoZSBrZXkgZnVuY3Rpb25zIGFyZSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYW5kIGBtZW1jZzFfY3NzX29mZmxpbmVgLiBBbmQgZmluYWxseSwgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgc29tZXRoaW5nIHdlIG1pZ2h0IGNvbnNpZGVyLCBsb2NhdGVkIGluIGBtbS93b3JraW5nc2V0LmNgLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBgRW5hYmxlQ29uZmlnc2AgYXJlIG9uIHBvaW50OiBgQ0dST1VQU2AsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLgoKQ3J1Y2lhbGx5LCBzaG91bGQgd2UgZW5hYmxlIGBNRU1DR19WMWAgdG8gaGl0IGJvdGggdjEgYW5kIHYyIHBhdGhzPyBZZXMsIGFic29sdXRlbHkuIGBNRU1DR19WMWAgZW5hYmxlcyB0ZXN0aW5nIGByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbGAsIHdoaWNoIGNhbGxzIGBfX21vZF9tZW1jZ19zdGF0ZWAsIHdoaWxlIHYyIGFsc28gYnJpbmdzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBpbnRvIHRoZSBwaWN0dXJlLgoKT2theSwgbGV0JiMzOTtzIHRha2Ugb25lIGxhc3QgcGFzcyB0byBjb25maXJtIGFsbCBvZiB0aGlzIGFuZCBmb3JtYXQgdGhlIHJlc3VsdHMgbmVhdGx5IHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgbWVtb3J5IGNncm91cCBzdGF0IGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmc6XG4xLiBJbiBgbW0vbWVtY29udHJvbC5jYCwgaXQgc2ltcGxpZmllcyBhbmQgZXh0ZW5kcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBhbmQgYWRqdXN0cyBSQ1UgbG9ja2luZyBsb2dpYyB3aGVuIG9mZmxpbmluZy9yZXBhcmVudGluZyBtZW1jZ3MuIFRoZSBvdXQtcGFyYW1ldGVyIGByY3VfbG9ja2VkYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgb24gYWxsIGV4ZWN1dGlvbiBwYXRocyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYC5cbjIuIEluIGBtbS93b3JraW5nc2V0LmNgLCBpdCB1cGRhdGVzIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBpbnN0ZWFkIG9mIGBscnV2ZWNfbHJ1X3NpemUoKWAuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIHJlYWQsIG5vIHN0cnVjdHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGV4cG9zdXJlcyBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIChzdWNoIGFzIFJDVSBsaWZldGltZSBpc3N1ZXMsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTM4YjAwMmI5OTljZDFlM2ZlZjExN2ZmNmM2MzZkNjk4OTJhOTQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTA6NDI6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggODMxOWFkOGM1YzIzYS4uZjQ1NGQwMjc0NmU5ZiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtODA1LDE2ICYjNDM7ODA1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbCkKIAlyZXR1cm4gdmFsICZsdDsgMCA/IC1yZXMgOiByZXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKIC8qCi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoCi0gKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4KJiM0MzsgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZQomIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYQomIzQzOyAqIG1lbWNnIGlzIHJhcmUsIHNvIGRvIHRoZSByZWRpcmVjdGlvbiBmb3IgYWxsIGNncm91cCBoaWVyYXJjaGllcy4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICoKJiM0MztnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZCkKIHsKLQkvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovCi0JaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHsKJiM0MzsJLyoKJiM0MzsJICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZwomIzQzOwkgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9jawomIzQzOwkgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaAomIzQzOwkgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC4KJiM0MzsJICovCiYjNDM7CWlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7CiAJCSpyY3VfbG9ja2VkID0gZmFsc2U7CiAJCXJldHVybiBtZW1jZzsKIAl9CkBAIC04MzUsMTcgJiM0Mzs4NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKLXsKLQlyZXR1cm4gbWVtY2c7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCkKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjLi44NWE0ZTE0ZTk1ZDUxIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC02OTMsMTAgJiM0Mzs2OTMsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAogCQltZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLSZndDttZW1jZyk7CiAJCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLSZndDttZW1jZywgTk9ERV9EQVRBKHNjLSZndDtuaWQpKTsKLQogCQlmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQotCQkJcGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpOwotCiYjNDM7CQkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywKJiM0MzsJCQkJCQkJIE5SX0xSVV9CQVNFICYjNDM7IGkpOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCiAJCQlscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiB0ZXN0aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFuZCB3b3JraW5nc2V0IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBhcmVhcyB3aGVyZSBzdWJ0bGUgYnVncyBjYW4gaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgZWFjaCBtb2RpZmljYXRpb24uCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AuIFRoZSByZW1vdmFsIG9mIHRoZSBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAgY29uZGl0aW9uYWwgYXJvdW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgZGlyZWN0IGNoZWNrIGZvciBgIW1lbWNnX2lzX2R5aW5nKG1lbWNnKWAgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cylgIGNvbmRpdGlvbmFsIGluZGljYXRlcyBhIHNoaWZ0IGluIGhvdyBtZW1jZyBkZWF0aCBpcyBoYW5kbGVkIG9yIGRldGVjdGVkLiBUaGlzIGNoYW5nZSBpbiBjb250cm9sIGZsb3cgaXMgYSBjbGFzc2ljIGFyZWEgdG8gdHJpZ2dlciBwcm9ibGVtcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHJhY2UgY29uZGl0aW9ucywgYW5kIGlmIHRoZSBtZW1vcnkgYmFja2luZyB0aGUgY2dyb3VwIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIHdoZW4gdGhlIG5ldyBjb2RlIGV4ZWN1dGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcmVtb3ZhbCBvZiB0aGUgY29uZGl0aW9uYWwgYWx0ZXJzIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBndWFyYW50ZWVzIG9yIGFzc3VtcHRpb25zLiBUaGUgbW9kaWZpY2F0aW9uIG9mIFJDVSBsb2NraW5nIGxvZ2ljIGZvciBtZW1jZyBhbmNlc3RvciB3YWxrIGR1cmluZyBvZmZsaW5pbmcvZHlpbmcgaXMgYWxzbyBjb25jZXJuaW5nLCBwYXJ0aWN1bGFybHkgaW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBsb2dpYywgdGhlIGxvY2tpbmcgc3RyYXRlZ3ksIGFuZCBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuCgpTZWNvbmQsIHRoZSBjaGFuZ2UgaW4gYG1tL3dvcmtpbmdzZXQuY2AgaW4gYGNvdW50X3NoYWRvd19ub2RlcygpYCBhcHBlYXJzIHRvIGJlIGEgbW9kaWZpY2F0aW9uIG9mIGhvdyBscnV2ZWMgc2l6ZSBpcyBjYWxjdWxhdGVkLiBSZXBsYWNpbmcgYGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpYCB3aXRoIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsIE5SX0xSVV9CQVNFICYjNDM7IGkpYCBpcyBwb3RlbnRpYWxseSBzdWJ0bGUuIEkmIzM5O2xsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24gb3IgdXNhZ2Ugb2YgbWVtb3J5LCBvciBpZiBpdCBjYW4gbGVhZCB0byB1bmRlci1jb3VudGluZyBvZiBhbGxvY2F0ZWQgcGFnZXMuIEFyZSB3ZSBpbmFkdmVydGVudGx5IHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/CgpHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbWVtb3J5LXJlbGF0ZWQgYnVncyBpbiBib3RoIGZpbGVzLCBJIHdpbGwgbmVlZCB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQuIEkmIzM5O2xsIGxpa2VseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIGVuc3VyaW5nIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciB3cml0dGVuLiBBbnkgZGl2ZXJnZW5jZSBpbiBleGVjdXRpb24gcGF0aHMgYmFzZWQgb24gdGhlIGRlYXRoIG9mIGEgbWVtY2cgbmVlZHMgdG8gYmUgdmVyaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTgxMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbm1tL21lbWNvbnRyb2wuYzo4MTQ6Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG5tbS9tZW1jb250cm9sLmMtODE1LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9ODcwPXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzctXG5tbS9tZW1jb250cm9sLmM6ODc4Olx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy04NzktXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MzY9c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTk0NS1cdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG5tbS9tZW1jb250cm9sLmM6OTQ2Olx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVx1MDAzZW1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy05NDctXHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sIGluIG1tL21lbWNvbnRyb2wuYyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIG1lbW9yeSBjb250cm9sIGZ1bmN0aW9ucywgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYCwgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYSwgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgb24gYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBJJiMzOTtsbCBqdW1wIHRvIHRoZSByZWxldmFudCBzZWN0aW9uIGFyb3VuZCBsaW5lcyA4MDAgdG8gODYwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgdGhleSBoYW5kbGUgZHlpbmcgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZWlyIHJvbGUgaW4gd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXG4gODAxOlx0XHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XG4gODAyOlx0XHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cbiA4MDM6XHRcdHJlcyA9IHJlcyA/IDogMTtcbiA4MDQ6XHRcbiA4MDU6XHRcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIDgwNjpcdH1cbiA4MDc6XHRcbiA4MDg6XHQvKlxuIDgwOTpcdCAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4gODEwOlx0ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4gODExOlx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuIDgxMjpcdCAqL1xuIDgxMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuIDgxNDpcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIDgxNTpcdHtcbiA4MTY6XHRcdC8qXG4gODE3Olx0XHQgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nXG4gODE4Olx0XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuIDgxOTpcdFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcbiA4MjA6XHRcdCAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLlxuIDgyMTpcdFx0ICovXG4gODIyOlx0XHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xuIDgyMzpcdFx0XHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDgyNDpcdFx0XHRyZXR1cm4gbWVtY2c7XG4gODI1Olx0XHR9XG4gODI2Olx0XG4gODI3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODI4Olx0XHQqcmN1X2xvY2tlZCA9IHRydWU7XG4gODI5Olx0XG4gODMwOlx0XHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuIDgzMTpcdFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiA4MzI6XHRcbiA4MzM6XHRcdHJldHVybiBtZW1jZztcbiA4MzQ6XHR9XG4gODM1Olx0XG4gODM2Olx0c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiA4Mzc6XHR7XG4gODM4Olx0XHRpZiAoIXJjdV9sb2NrZWQpXG4gODM5Olx0XHRcdHJldHVybjtcbiA4NDA6XHRcbiA4NDE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gODQ1Olx0XHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbiA4NDY6XHR7XG4gODQ3Olx0XHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XG4gODQ4Olx0XHRpbnQgY3B1O1xuIDg0OTpcdFxuIDg1MDpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gODUxOlx0XHRcdHJldHVybjtcbiA4NTI6XHRcbiA4NTM6XHRcdGNwdSA9IGdldF9jcHUoKTtcbiA4NTQ6XHRcbiA4NTU6XHRcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VzdGF0ZVtpXSwgdmFsKTtcbiA4NTY6XHRcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XG4gODU3Olx0XHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XG4gODU4Olx0XG4gODU5Olx0XHR0cmFjZV9tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHRzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXImIzM5O3MgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTnVhbmNlcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiBkZWVwIGluIHRoZSB3ZWVkcyBvbiB0aGlzLCBhbmQgSSYjMzk7bSBpdGNoaW5nIHRvIHNlZSBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzICpyZWFsbHkqIHdvcmtpbmcgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1tL3dvcmtpbmdzZXQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgd29ya2luZyBzZXQgbW9kZWwgaXMgaW1wbGVtZW50ZWQgaGVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBsaWtlIHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXMsIGFuZCBob3cgdGhlIHZhcmlvdXMgcGFyYW1ldGVycyBhcmUgdHVuZWQuIEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgbWFraW5nIHNtYXJ0IGNob2ljZXMgYWJvdXQgcmVzaWRlbnQgc2V0IHNpemUgbGltaXRzLCBvciBpZiB0aGV5IGFyZSBqdXN0IGRvaW5nIHRoZSBiYXJlIG1pbmltdW0uIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gdHJhY2sgdGhlIHdvcmtpbmcgc2V0PyBBcmUgdGhleSBlZmZpY2llbnQ/IERvIHRoZXkgc2NhbGUgd2VsbD8gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSB0cmFkZW9mZnMgdGhleSYjMzk7dmUgbWFkZSwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGFyZWFzIHdoZXJlIHRoZXkmIzM5O3ZlIGdvbmUgZG93biBhbiB1bnByb2R1Y3RpdmUgcGF0aC4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBjb250ZW50aW9uIG1pZ2h0IGFyaXNlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVsZWdhbmNlIChvciBsYWNrIHRoZXJlb2YpIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4NTpcdFx0ICogfjEuOCUgb2YgYXZhaWxhYmxlIG1lbW9yeTpcbiA2ODY6XHRcdCAqXG4gNjg3Olx0XHQgKiBQQUdFX1NJWkUgLyB4YV9ub2RlcyAvIG5vZGVfZW50cmllcyAqIDggLyBQQUdFX1NJWkVcbiA2ODg6XHRcdCAqL1xuIDY4OTpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbiA2OTA6XHRcdGlmIChzYy1cdTAwM2VtZW1jZykge1xuIDY5MTpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gNjkyOlx0XHRcdGludCBpO1xuIDY5MzpcdFxuIDY5NDpcdFx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZW1lbWNnKTtcbiA2OTU6XHRcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cdTAwM2VuaWQpKTtcbiA2OTY6XHRcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxuIDY5NzpcdFx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4gNjk4Olx0XHRcdFx0XHRcdFx0XHQgTlJfTFJVX0JBU0UgJiM0MzsgaSk7XG4gNjk5Olx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiA3MDA6XHRcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzAxOlx0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiA3MDI6XHRcdFx0XHRscnV2ZWMsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA3MDM6XHRcdH0gZWxzZVxuIDcwNDpcdCNlbmRpZlxuIDcwNTpcdFx0XHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cdTAwM2VuaWQpO1xuIDcwNjpcdFxuIDcwNzpcdFx0bWF4X25vZGVzID0gcGFnZXMgXHUwMDNlXHUwMDNlIChYQV9DSFVOS19TSElGVCAtIDMpO1xuIDcwODpcdFxuIDcwOTpcdFx0aWYgKG5vZGVzIFx1MDAzYz0gbWF4X25vZGVzKVxuIDcxMDpcdFx0XHRyZXR1cm4gMDtcbiA3MTE6XHRcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcbiA3MTI6XHR9XG4gNzEzOlx0XG4gNzE0Olx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiA3MTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXG4gNzE2Olx0XHRcdFx0XHRcdCAgdm9pZCAqYXJnKSBfX211c3RfaG9sZChscnUtXHUwMDNlbG9jaylcbiA3MTc6XHR7XG4gNzE4Olx0XHRzdHJ1Y3QgeGFfbm9kZSAqbm9kZSA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgeGFfbm9kZSwgcHJpdmF0ZV9saXN0KTtcbiA3MTk6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuIDcyMDpcdFx0aW50IHJldDtcbiA3MjE6XHRcbiA3MjI6XHRcdC8qXG4gNzIzOlx0XHQgKiBQYWdlIGNhY2hlIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucyBzeW5jaHJvbm91c2x5IG1haW50YWluXG4gNzI0Olx0XHQgKiB0aGUgc2hhZG93IG5vZGUgTFJVIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2sgYW5kIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDI1MgoJCQkJCQkJdGhvdWdodHM6IDUzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgS01TQU4gSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGV5IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEga2V5IGNvbmNlcm4gd2hlbiBhc3Nlc3NpbmcgdGhlIG5lZWQgZm9yIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFzc2luZyBpdCB0byB1c2VyLXNwYWNlLCBvciBhbnkgb3RoZXIgS01TQU4tcmVsZXZhbnQgaXNzdWVzLgoKRmlyc3QsIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4YW1pbmluZyB0aGUgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgcmN1X2xvY2tlZGAuIEZyb20gd2hhdCBJIHNlZSwgYCpyY3VfbG9ja2VkYCBpcyBhbHdheXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgcmVnYXJkbGVzcyBvZiB0aGUgY29udHJvbCBmbG93LiBUaGUgY29kZSBwYXRocyBlbnN1cmUgYHJjdV9sb2NrZWRgIGdldHMgYSBkZWZpbml0ZSBib29sZWFuIHZhbHVlIGJlZm9yZSBpdCYjMzk7cyB1c2VkIGVsc2V3aGVyZSwgc3BlY2lmaWNhbGx5IGluIGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAuIFNvLCBubyB1bmluaXRpYWxpemVkIHJlYWRzIHRoZXJlLiBUaGUgY2hhbmdlcyBhcHBlYXIgdG8gb3B0aW1pemUgdGhlIGhhbmRsaW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGUgbG9jYWxzIGR1cmluZyBtZW1jZyBkZWF0aCwgYnV0IHRoaXMgc2VlbXMgcmVsYXRlZCB0byBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSBjb25jZXJucywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhpcyBpbnZvbHZlcyBsb2NraW5nIGFuZCBSQ1UgcG9pbnRlciB0cmF2ZXJzYWwsIG5vdCBLTVNBTi1yZWxldmFudCBkYXRhIGlzc3Vlcy4KCk1vdmluZyBvbiB0byBgbW0vd29ya2luZ3NldC5jYCwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgYGxydXZlY19scnVfc2l6ZWAgd2l0aCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBUaGlzIGZ1bmN0aW9uIHJlYWRzIG1lbWNnIHZtc3RhdHMgcGVyLWNwdSBjb3VudGVycy4gVGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLCBjb3B5aW5nIHRvIHVzZXItc3BhY2UsIHBhZGRpbmcsIG9yIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBJdCYjMzk7cyBqdXN0IHJlYWRpbmcgZXhpc3RpbmcgY291bnRlciBkYXRhLgoKU28sIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZXJl4oCZcyBteSBhc3Nlc3NtZW50OgoKKiAgIEFyZSB0aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBiZWluZyBwYXNzZWQgb3IgcmVhZD8gTm8sIGByY3VfbG9ja2VkYCBpcyBmdWxseSBpbml0aWFsaXplZCBpbiBhbGwgcmV0dXJuIHBhdGhzLgoqICAgQXJlIGFueSBzdHJ1Y3RzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLgoqICAgRG9lcyBpdCBhbGxvY2F0ZSBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KKiAgIERvZXMgaXQgY2hhbmdlIGJ1ZmZlciBib3VuZHMgb3IgcGFyc2luZyBsZW5ndGhzPyBObywgdGhpcyBhcHBlYXJzIHVucmVsYXRlZC4KCkFueSBwb3RlbnRpYWwgYnVncyB0aGF0ICpkbyogZXhpc3QgYXJlIGxpa2VseSB0byBiZSByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgcHJvYmxlbXMgd2l0aCBSQ1UgbGlmZXRpbWVzLCBvciBpbmNvcnJlY3QgY291bnRlciB2YWx1ZXMuIEFsbCBvZiB0aGVzZSBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIGNvbmN1cnJlbmN5IGlzc3VlcywgbG9naWMgZXJyb3JzLCBvciBtaWdodCBiZSBkZXRlY3RlZCBieSBvdGhlciB0b29scyBsaWtlIEtBU0FOIG9yIExPQ0tERVAsIGJ1dCBub3QgS01TQU4uCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgY29uY2x1ZGluZyB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIGBOZWVkc0tNU0FOYCBzaG91bGQgaW5kZWVkIGJlIGBmYWxzZWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBvZiBjb3Vyc2UsIGFuZCBkb2N1bWVudCB0aGUgY2xlYXIgcmVhc29uaW5nIGZvciBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cblxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQyOjA5LjIwMDIyMTk0OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODc4MjI1NjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX2xydXZlY19zdGF0ZVwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIG1lbW9yeSBjZ3JvdXAgc3RhdCBhY2NvdW50aW5nIGFuZCB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nOlxcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxcbjIuIEluIGBtbS93b3JraW5nc2V0LmNgLCBpdCB1cGRhdGVzIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBpbnN0ZWFkIG9mIGBscnV2ZWNfbHJ1X3NpemUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0cyBoYW5kbGluZyBhbmQgcmVkaXJlY3Rpb24gZm9yIGR5aW5nL29mZmxpbmluZyBtZW1jZ3MgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgKHJlbW92aW5nIHRoZSB2MS1vbmx5IHJlc3RyaWN0aW9uKSwgYXMgd2VsbCBhcyBzaGFkb3cgbm9kZSBjb3VudGluZyBjYWxjdWxhdGlvbiBpbiB0aGUgd29ya2luZ3NldCBzaHJpbmtlci4gVGhpcyBpcyBjb3JlIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQyOjA5LjIwMDIyNzQyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2MjM1MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUzOGIwMDJiOTk5Y2QxZTNmZWYxMTdmZjZjNjM2ZDY5ODkyYTk0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDo0MjowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5mNDU0ZDAyNzQ2ZTlmIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC04MDUsMTYgKzgwNSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAzYyAwID8gLXJlcyA6IHJlcztcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiAvKlxcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxcbisgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG4ge1xcbi1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4rXFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4rXFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcXG4rXFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xcbiBcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiBcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIFxcdH1cXG5AQCAtODM1LDE3ICs4NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuLXtcXG4tXFx0cmV0dXJuIG1lbWNnO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IGYzNTE3OThlNzIzYWMuLjg1YTRlMTRlOTVkNTEgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTY5MywxMCArNjkzLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuIFxcbiBcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4tXFxuIFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbi1cXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcXG4tXFxuK1xcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiBcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQyOjA5LjYwNzE1MzgzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA0NDk0MDAxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICAgIFwibW9kX21lbWNnX3N0YXRlXCIsXG4gICAgXCJtb2RfbHJ1dmVjX3N0YXRlXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTM4YjAwMmI5OTljZDFlM2ZlZjExN2ZmNmM2MzZkNjk4OTJhOTQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6NDI6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDgzMTlhZDhjNWMyM2EuLmY0NTRkMDI3NDZlOWYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTgwNSwxNiArODA1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTgzNSwxNyArODQwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IGYzNTE3OThlNzIzYWMuLjg1YTRlMTRlOTVkNTEgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY5MywxMCArNjkzLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDI6MDkuNjA3MTU1NDg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQzNTYyMjY5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBGcm9tIHdoYXQgSSBzZWUsIHdlIGhhdmUgY2hhbmdlcyBpbiB0d28ga2V5IGZpbGVzOiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGluIGBtbS9tZW1jb250cm9sLmNgIGFyZSB0aGUgbW9yZSBzaWduaWZpY2FudCBvbmVzLiBSZW1vdmluZyB0aGF0IGAjaWZkZWYgQ09ORklHX01FTUNHX1YxYCBibG9jayBhcm91bmQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYCBpcyBub3Rld29ydGh5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgY29uc29saWRhdGVzIHNvbWUgbWVtY2cgKG1lbW9yeSBjZ3JvdXApIGJlaGF2aW9yIGFjcm9zcyB2MSBhbmQgdjIuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBgY2dyb3VwX3N1YnN5c19vbl9kZmwoKWAgY2hlY2sgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgIW1lbWNnX2lzX2R5aW5nKG1lbWNnKWAuIFNvLCBpbnN0ZWFkIG9mIGJlaW5nIHZlcnNpb24tZGVwZW5kZW50LCB0aGUgbmV3IGxvZ2ljIG5vdyBjaGVja3MgaWYgYSBtZW1jZyBpcyBcImR5aW5nXCIgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlLiBUaGlzIGFmZmVjdHMgaG93IG1lbWNnIHN0YXRlIGlzIHRyYWNrZWQgYW5kIGhvdyBzdGF0aXN0aWNzIGFyZSByZXBhcmVudGVkLiBUaGlzIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZXNlIHN0YXRlcyBhY3Jvc3MgYWxsIGNncm91cCB2ZXJzaW9ucy4gVGhpcyBwb3RlbnRpYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYmVoYXZpb3IgaXMgY29uc2lzdGVudC5cblxuTW92aW5nIG9uIHRvIGBtbS93b3JraW5nc2V0LmNgLCB0aGUgY2hhbmdlIGluIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgYXBwZWFycyBsZXNzIGRyYW1hdGljIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBgbHJ1dmVjX2xydV9zaXplKClgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgLiBUaGlzIGlzIHByb2JhYmx5IGFuIG9wdGltaXphdGlvbiwgb3IgbWF5YmUgYSBjaGFuZ2UgaW4gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMUlUuIEkga25vdyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBMUlUgYXJlIGNvbXBsZXgsIHNvIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgYE5SX0xSVV9CQVNFICsgaWAgY29ycmVzcG9uZHMgdG8sIGFzIEkga25vdyB0aGF0IGBpYCByYW5nZXMgZnJvbSAwIHRvIE1BWF9OUl9aT05FUyAtIDEuIEJ1dCBJIHN1c3BlY3QgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBcIndvcmtpbmcgc2V0XCIgaXMgY2FsY3VsYXRlZCwgcG90ZW50aWFsbHkgYWZmZWN0aW5nIHRoZSBhY2N1cmFjeSBvZiB0aGUgYWxnb3JpdGhtLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCBmaWxlcyBub3cgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBgbWVtY2dfaXNfZHlpbmcoKWAgaXMgaW1wbGVtZW50ZWQgYW5kIHVzZWQsIGFuZCBhbHNvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgcmVwbGFjaW5nIGBscnV2ZWNfbHJ1X3NpemUoKWAuIEkgZXhwZWN0IHRvIHNlZSBzb21lIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgc2ltcGxpZmljYXRpb24gaW4gYm90aCBjYXNlcywgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDM6MzMuOTYzMzg2NTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXFxuIDgwMTpcXHRcXHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XFxuIDgwMjpcXHRcXHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cXG4gODAzOlxcdFxcdHJlcyA9IHJlcyA/IDogMTtcXG4gODA0OlxcdFxcbiA4MDU6XFx0XFx0cmV0dXJuIHZhbCBcXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xcbiA4MDY6XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHQvKlxcbiA4MDk6XFx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG4gODEwOlxcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbiA4MTE6XFx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiA4MTI6XFx0ICovXFxuIDgxMzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gODE0OlxcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbiA4MTU6XFx0e1xcbiA4MTY6XFx0XFx0LypcXG4gODE3OlxcdFxcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4gODE4OlxcdFxcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXFxuIDgxOTpcXHRcXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxcbiA4MjA6XFx0XFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuIDgyMTpcXHRcXHQgKi9cXG4gODIyOlxcdFxcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XFxuIDgyMzpcXHRcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA4MjQ6XFx0XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4MjU6XFx0XFx0fVxcbiA4MjY6XFx0XFxuIDgyNzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDgyODpcXHRcXHQqcmN1X2xvY2tlZCA9IHRydWU7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuIDgzMTpcXHRcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4MzQ6XFx0fVxcbiA4MzU6XFx0XFxuIDgzNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiA4Mzc6XFx0e1xcbiA4Mzg6XFx0XFx0aWYgKCFyY3VfbG9ja2VkKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NDA6XFx0XFxuIDg0MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODQyOlxcdH1cXG4gODQzOlxcdFxcbiA4NDQ6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA4NDU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gODQ2OlxcdHtcXG4gODQ3OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gODQ4OlxcdFxcdGludCBjcHU7XFxuIDg0OTpcXHRcXG4gODUwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gODUxOlxcdFxcdFxcdHJldHVybjtcXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA4NTQ6XFx0XFxuIDg1NTpcXHRcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG4gODU2OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDg1NzpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDg1ODpcXHRcXG4gODU5OlxcdFxcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRwdXRfY3B1KCk7XFxuIDg2MjpcXHR9XFxuIDg2MzpcXHRcXG4gODY0OlxcdC8qKlxcbiA4NjU6XFx0ICogbW9kX21lbWNnX3N0YXRlIC0gdXBkYXRlIGNncm91cCBtZW1vcnkgc3RhdGlzdGljc1xcbiA4NjY6XFx0ICogQG1lbWNnOiB0aGUgbWVtb3J5IGNncm91cFxcbiA4Njc6XFx0ICogQGlkeDogdGhlIHN0YXQgaXRlbSAtIGNhbiBiZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBlbnVtIG5vZGVfc3RhdF9pdGVtXFxuIDg2ODpcXHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxcbiA4Njk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQzOjMzLjk2Mzk0OTgwOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDAzMTA0NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIG1lbWNnIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGhlYWRzIHRvIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBtZW1jZyBsb2dpYy4gTGV0J3Mgc2VlIGhvdyBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGZpbGUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbCBzaXRlcyDigJMgdW5kZXJzdGFuZGluZyAqd2hlcmUqIGl0J3MgY2FsbGVkIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyBpdCdzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bnJhdmVsaW5nIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb250cm9sIGdyb3Vwcy4gSSB3YW50IHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIHRvIGdpdmUgbWUgYW4gaWRlYSB3aGF0IHByb2JsZW0gaXMgYmVpbmcgc29sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NDoyMy4zNjcwNTg1NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjIxMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz04MTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXFxubW0vbWVtY29udHJvbC5jOjgxNDpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG5tbS9tZW1jb250cm9sLmMtODE1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04MzUtXFxubW0vbWVtY29udHJvbC5jOjgzNjpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04Mzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTg3MD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzctXFxubW0vbWVtY29udHJvbC5jOjg3ODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtODc5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxubW0vbWVtY29udHJvbC5jOjg4MDpcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtODgxLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05MzY9c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTQ1LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjk0NjpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXFx1MDAzZW1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk0Ny1cXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTUwLVxcbm1tL21lbWNvbnRyb2wuYzo5NTE6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ0OjIzLjgyODY4ODY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxMTIyNzAxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1tL3dvcmtpbmdzZXQuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSB3b3JraW5nc2V0IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBhY3RpdmUgbWVtb3J5IHJlZ2lvbnMuIExldCdzIHNlZS4uLiBJJ20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgdHJhY2tzIHBhZ2UgYWNjZXNzLCB0aGUgY3JpdGVyaWEgZm9yIG1vdmluZyBwYWdlcyBiZXR3ZWVuIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIGxpc3RzLCBhbmQgaG93IHRoZSBhbGdvcml0aG0gcmVhY3RzIHRvIG1lbW9yeSBwcmVzc3VyZS4gSSBhbnRpY2lwYXRlIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgYHBnZGF0X3RgIGFuZCBgem9uZV90YCBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgd29ya2luZ3NldCBjb2RlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgZm9jdXNlZCBvbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgdGhhdCBtaWdodCBiZSBhZmZlY3RpbmcgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5LiBJIGhvcGUgSSBkb24ndCBydW4gaW50byBhIHNwYWdoZXR0aSBtZXNzIGluIHRoZXJlISBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCBJIGtub3cgdGhhdCB0aGUgd29ya2luZ3NldCBjb2RlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gSSdtIGhvcGluZyBpdCdzIHdlbGwtY29tbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDQ6NDAuOTQwOTYxNTU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXFxuIDY4MTpcXHRcXHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cXG4gNjgyOlxcdFxcdCAqXFxuIDY4MzpcXHRcXHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xcbiA2ODQ6XFx0XFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcXG4gNjg1OlxcdFxcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XFxuIDY4NjpcXHRcXHQgKlxcbiA2ODc6XFx0XFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXFxuIDY4ODpcXHRcXHQgKi9cXG4gNjg5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjkwOlxcdFxcdGlmIChzYy1cXHUwMDNlbWVtY2cpIHtcXG4gNjkxOlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gNjkyOlxcdFxcdFxcdGludCBpO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIDY5NTpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cXHUwMDNlbmlkKSk7XFxuIDY5NjpcXHRcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gNjk3OlxcdFxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBOUl9MUlVfQkFTRSArIGkpO1xcbiA2OTk6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDcwMDpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAxOlxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiA3MDI6XFx0XFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAzOlxcdFxcdH0gZWxzZVxcbiA3MDQ6XFx0I2VuZGlmXFxuIDcwNTpcXHRcXHRcXHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cXHUwMDNlbmlkKTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bWF4X25vZGVzID0gcGFnZXMgXFx1MDAzZVxcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdGlmIChub2RlcyBcXHUwMDNjPSBtYXhfbm9kZXMpXFxuIDcxMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzExOlxcdFxcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdFxcbiA3MTQ6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbiA3MTY6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cXHUwMDNlbG9jaylcXG4gNzE3OlxcdHtcXG4gNzE4OlxcdFxcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xcbiA3MTk6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ0OjQwLjk0MTA4Nzg0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzM2MDIzMTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIG1lbW9yeSBjZ3JvdXAgc3RhdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdoZW4gYSBtZW1jZyBpcyBvZmZsaW5pbmcsIGFuZCBhbHNvIHRvdWNoaW5nIHRoZSB3b3JraW5nc2V0IGNvZGUuIEhtbSwgbG9va3MgbGlrZSBpdCdzIG1lcmdpbmcgdGhlIHYxIGFuZCB2MiBiZWhhdmlvciwgd2hpY2ggaXMgdXN1YWxseSBpbnRlcmVzdGluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBgbW9kX21lbWNnX3N0YXRlYCAvIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBob3QgcGF0aCBjb25jZXJuLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2lyY2xlIGJhY2sgdG8gdGhhdC5cblxuVGhlIGluc3RydWN0aW9ucyBzYXkgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgYXJlIHByZXR0eSBjbGVhcjogaXQncyAqbm90KiB3b3J0aCBmdXp6aW5nIGlmIGl0J3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpb24sIHVucmVhY2hhYmxlIGNvZGUsIG9yIHZlcnkgc3BlY2lmaWMgZHJpdmVycy4gSG93ZXZlciwgaWYgaXQgdG91Y2hlcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHRoZW4gaXQncyBhIGdvLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudDogYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBJbiBgbW0vbWVtY29udHJvbC5jYCwgaXQncyBhbHRlcmluZyBob3cgc3RhdHMgYXJlIGhhbmRsZWQgd2hlbiBhIG1lbWNnIGlzIGR5aW5nLCBpbmNsdWRpbmcgcmVtb3ZpbmcgYW4gYCNpZmRlZmAgZm9yIHYxLiBUaGlzIG1lYW5zIGl0IGlzIGRpcmVjdGx5IG1vZGlmeWluZyB0aGUgY3JpdGljYWwgcGF0aCBvZiBtZW1jZyBhbmQgcGFnZSBjYWNoZSBoYW5kbGluZy4gVGhlbiwgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0J3MgY2hhbmdpbmcgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGNhbGN1bGF0aW9uIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBHaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IGluIHNheWluZyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIExldCdzIGdldCB0byBpdC4gTGV0J3Mgc3RhcnQgd2l0aCBgY291bnRfc2hhZG93X25vZGVzYC4gT2theSwgaXQncyBgc3RhdGljYC4gRGFtbi4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzLCBhcyBgc3RhdGljYCBmdW5jdGlvbnMgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZXNlIGFyZSBsaWtlbHkgaW5saW5lZC4gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgdGhhdCBjYWxsIHRoaXMsIHNvIGxldCdzIHN0YXJ0IHNlYXJjaGluZyBpbiBgbW0vd29ya2luZ3NldC5jYCBhbmQgc2VlIHdoZXJlIHRoaXMgaXMgcmVnaXN0ZXJlZCBvciB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDY6MzguMzAxMzIyODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg5ODk3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY291bnRfc2hhZG93X25vZGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS93b3JraW5nc2V0LmM9NjI5PXZvaWQgd29ya2luZ3NldF91cGRhdGVfbm9kZShzdHJ1Y3QgeGFfbm9kZSAqbm9kZSlcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02NTUtXFxubW0vd29ya2luZ3NldC5jOjY1NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG5tbS93b3JraW5nc2V0LmMtNjU3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9Nzk3PXN0YXRpYyBpbnQgX19pbml0IHdvcmtpbmdzZXRfaW5pdCh2b2lkKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTgzMy1cXG5tbS93b3JraW5nc2V0LmM6ODM0OlxcdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xcbm1tL3dvcmtpbmdzZXQuYy04MzUtXFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NjozOC44MDAzMTgxMjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3MTY2NDEzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNpcmNsaW5nIGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLCBnaXZlbiB0aG9zZSBmdW5jdGlvbiBuYW1lczogYHNjYW5fc2hhZG93X25vZGVzYCwgYHdvcmtpbmdzZXRfdXBkYXRlX25vZGVgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfYWN0aXZhdGlvbmAuIFRoYXQgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHdvcmtpbmdzZXRzLCBwZXJoYXBzIHNoYWRvdyBub2RlcywgYW5kIGxpa2VseSBzb21lIGZvcm0gb2YgcGFnZSBmYXVsdCBvciBtZW1vcnkgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24uXG5cbk5vdywgd2hlcmUgYXJlIHRoZXNlIG1lY2hhbmljcyBpbXBsZW1lbnRlZD8gTXkgaW5zdGluY3QgaW1tZWRpYXRlbHkgZGlyZWN0cyBtZSB0b3dhcmRzIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoYXQncyBhY3R1YWxseSAqaW4qIGBtbS9tZW1jb250cm9sLmNgLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBtb2RfbWVtY2dfc3RhdGVgLCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAsIGFuZCBgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBhbmQgd2hhdCBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIGFzIHRoZXkgYXBwZWFyIHRvIGJlIGNlbnRyYWwgdG8gbW9kaWZ5aW5nIG1lbW9yeSBjb250cm9sIGdyb3VwIHN0YXRlIG9yIExSVSB2ZWN0b3Igc3RhdGVzLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZWlyIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMuIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlaXIgcGFyYW1ldGVycywgd2hhdCB0aGVpciBzY29wZSBvZiBmdW5jdGlvbiBpcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIEkgc2hvdWxkIGNoZWNrIHRvIGdhaW4gdGhlIGVudGlyZXR5IG9mIHRoZWlyIGNvbnRleHQ/IExldCdzIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIGJvdGggZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDY6NTIuNTE2OTYxODU1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODk4MTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RfbWVtY2dfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkyMz12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjUtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTI2OnZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MjctXFx0XFx0ICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5Mjk6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkzMC1cXHRcXHRcXHRcXHRcXHRlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MzktXFx0aWYgKG1lbWNnKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk0MDpcXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzY0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNjU6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTM2Ni1cXHRcXHRcXHRcXHQgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzcwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNzE6c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNzItXFx0XFx0XFx0XFx0XFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0Njo1Mi42MTU5NDc3ODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQzNDQ5MDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIHRoaW5raW5nLCBmcm9tIGEgdGVjaG5pY2FsIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL21lbWNvbnRyb2wuY2AgZm9yIE1lbWNnIExpZmVjeWNsZSBhbmQgU3RhdHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbGlmZWN5Y2xlIGFuZCBzdGF0aXN0aWNhbCBhc3BlY3RzIG9mIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKS4gSSdtIGRlbGliZXJhdGVseSAqbm90KiBsb29raW5nIGF0IHRoZSBvYnZpb3VzLCB3ZWxsLXRyb2RkZW4gcGF0aHMgbGlrZSB0aGUgXCJob3RcIiBleGVjdXRpb24gcGF0aHMgb3Igc3RhdGljYWxseSBkZWZpbmVkIHN5bWJvbHMgcmlnaHQgYXdheS4gTXkgZ29hbCBpcyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEknbSB0cnlpbmcgdG8gaWRlbnRpZnkgYW55IG90aGVyIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cyBvciBzeW1ib2xzIGluIHRoaXMgZmlsZSB0aGF0IG1pZ2h0IHJlbGF0ZSB0byBob3cgbWVtY2dzIGFyZSBjcmVhdGVkLCBkZXN0cm95ZWQsIG9yIGhvdyB0aGVpciBtZW1vcnkgdXNhZ2UgaXMgdHJhY2tlZCAqYmVzaWRlcyogdGhlIG1vc3Qgb2J2aW91cyBvbmVzLiBJIHdhbnQgdG8gYnVpbGQgYSBtb3JlIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuXG5cbkkgZmlndXJlIHJlYWRpbmcgYXJvdW5kIGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaG9zZSBsb29rIGxpa2Uga2V5IGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzIGZvciBtb2RpZnlpbmcgb3IgdXBkYXRpbmcgdGhlIHN0YXRlIG9mIGEgbWVtY2csIGVzcGVjaWFsbHkgcmVnYXJkaW5nIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgZGF0YS4gSSdtIGJldHRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzdGF0ZXMgYXJlIG1vZGlmaWVkIHdpbGwgaWxsdW1pbmF0ZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGxpa2VseSByZXZlYWwgaG93IHRoZSBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3RoZXIgc3RhdHMgYXJlIHVwZGF0ZWQgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ2OjU5LjA1MDQ0MjQwOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHR2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4gODcxOlxcdFxcdFxcdCAgICAgICBpbnQgdmFsKVxcbiA4NzI6XFx0e1xcbiA4NzM6XFx0XFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XFxuIDg3NDpcXHRcXG4gODc1OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDg3NjpcXHRcXHRcXHRyZXR1cm47XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbiA4Nzk6XFx0XFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcXG4gODgwOlxcdFxcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xcbiA4ODE6XFx0fVxcbiA4ODI6XFx0XFxuIDg4MzpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuIDg4NDpcXHQvKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuIDg4NTpcXHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbiA4ODY6XFx0e1xcbiA4ODc6XFx0XFx0bG9uZyB4O1xcbiA4ODg6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXFxcIiVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGlkeCkpXFxuIDg5MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0eCA9IFJFQURfT05DRShtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xcbiA4OTQ6XFx0I2lmZGVmIENPTkZJR19TTVBcXG4gODk1OlxcdFxcdGlmICh4IFxcdTAwM2MgMClcXG4gODk2OlxcdFxcdFxcdHggPSAwO1xcbiA4OTc6XFx0I2VuZGlmXFxuIDg5ODpcXHRcXHRyZXR1cm4geDtcXG4gODk5OlxcdH1cXG4gOTAwOlxcdFxcbiA5MDE6XFx0dm9pZCByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDkwMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxcbiA5MDM6XFx0e1xcbiA5MDQ6XFx0XFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XFxuIDkwNTpcXHRcXG4gOTA2OlxcdFxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIC12YWx1ZSk7XFxuIDkwNzpcXHRcXHRfX21vZF9tZW1jZ19zdGF0ZShwYXJlbnQsIGlkeCwgdmFsdWUpO1xcbiA5MDg6XFx0fVxcbiA5MDk6XFx0I2VuZGlmXFxuIDkxMDpcXHRcXG4gOTExOlxcdHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuIDkxMjpcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gOTEzOlxcdHtcXG4gOTE0OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBuLVxcdTAwM2VtZW1jZztcXG4gOTE1OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gOTE2OlxcdFxcdGludCBjcHU7XFxuIDkxNzpcXHRcXG4gOTE4OlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gOTE5OlxcdFxcdFxcdHJldHVybjtcXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHQvKiBVcGRhdGUgbWVtY2cgKi9cXG4gOTI0OlxcdFxcdHRoaXNfY3B1X2FkZChtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUtXFx1MDAzZXN0YXRlW2ldLCB2YWwpO1xcbiA5MjU6XFx0XFxuIDkyNjpcXHRcXHQvKiBVcGRhdGUgbHJ1dmVjICovXFxuIDkyNzpcXHRcXHR0aGlzX2NwdV9hZGQocG4tXFx1MDAzZWxydXZlY19zdGF0c19wZXJjcHUtXFx1MDAzZXN0YXRlW2ldLCB2YWwpO1xcbiA5Mjg6XFx0XFxuIDkyOTpcXHRcXHR2YWwgPSBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaWR4LCB2YWwpO1xcbiA5MzA6XFx0XFx0bWVtY2dfcnN0YXRfdXBkYXRlZChtZW1jZywgdmFsLCBjcHUpO1xcbiA5MzE6XFx0XFx0dHJhY2VfbW9kX21lbWNnX2xydXZlY19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5MzI6XFx0XFxuIDkzMzpcXHRcXHRwdXRfY3B1KCk7XFxuIDkzNDpcXHR9XFxuIDkzNTpcXHRcXG4gOTM2OlxcdHN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiA5Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcXG4gOTM4OlxcdFxcdFxcdFxcdFxcdCAgICAgaW50IHZhbClcXG4gOTM5OlxcdHtcXG4gOTQwOlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4gOTQxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG4gOTQyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gOTQzOlxcdFxcdGJvb2wgcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbiA5NDY6XFx0XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVxcdTAwM2VtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbiA5NDc6XFx0XFx0cG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocG4sIGlkeCwgdmFsKTtcXG4gOTUwOlxcdFxcbiA5NTE6XFx0XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxuIDk1MjpcXHR9XFxuIDk1MzpcXHRcXG4gOTU0OlxcdC8qKlxcbiA5NTU6XFx0ICogbW9kX2xydXZlY19zdGF0ZSAtIHVwZGF0ZSBscnV2ZWMgbWVtb3J5IHN0YXRpc3RpY3NcXG4gOTU2OlxcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcXG4gOTU3OlxcdCAqIEBpZHg6IHRoZSBzdGF0IGl0ZW1cXG4gOTU4OlxcdCAqIEB2YWw6IGRlbHRhIHRvIGFkZCB0byB0aGUgY291bnRlciwgY2FuIGJlIG5lZ2F0aXZlXFxuIDk1OTpcXHQgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0Njo1OS4wNTA3Nzk4MzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2Mzk0NDY3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUuXG5cbioqSW52ZXN0aWdhdGluZyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gc29tZW9uZSdzIGFza2VkIG1lIHRvIGxvb2sgaW50byBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbWNnIChtZW1vcnkgY29udHJvbCBncm91cCkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gKnVzZWQqPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSB3aGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgc3RhdGUgb2YgYSBtZW1jZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYW5kIGhvdyB0aGV5IG1pZ2h0IHJlbGF0ZSB0byBMUlUgbWFuYWdlbWVudC4gQXJlIHRoZXJlIGZ1bmN0aW9ucyBmb3IgdXBkYXRpbmcsIHF1ZXJ5aW5nLCBvciBvdGhlcndpc2UgbWFuaXB1bGF0aW5nIHRoZSBMUlUgc3RhdGU/IEtub3dpbmcgdGhlIGxhbmRzY2FwZSBvZiBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIG1ha2luZyBzdXJlIHRvIHRyYWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIE15IGdvYWwgaXMgdG8gcGFpbnQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBMUlUgc3RhdGUgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUgbWVtY2cgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDc6MTMuNjkwMjI5MjM5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTU1OlxcdCAqIG1vZF9scnV2ZWNfc3RhdGUgLSB1cGRhdGUgbHJ1dmVjIG1lbW9yeSBzdGF0aXN0aWNzXFxuIDk1NjpcXHQgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjXFxuIDk1NzpcXHQgKiBAaWR4OiB0aGUgc3RhdCBpdGVtXFxuIDk1ODpcXHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxcbiA5NTk6XFx0ICpcXG4gOTYwOlxcdCAqIFRoZSBscnV2ZWMgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgTlVNQSBub2RlIGFuZCBhIGNncm91cC4gVGhpc1xcbiA5NjE6XFx0ICogZnVuY3Rpb24gdXBkYXRlcyB0aGUgYWxsIHRocmVlIGNvdW50ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGFcXG4gOTYyOlxcdCAqIGNoYW5nZSBvZiBzdGF0ZSBhdCB0aGlzIGxldmVsOiBwZXItbm9kZSwgcGVyLWNncm91cCwgcGVyLWxydXZlYy5cXG4gOTYzOlxcdCAqL1xcbiA5NjQ6XFx0dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuIDk2NTpcXHRcXHRcXHRcXHRpbnQgdmFsKVxcbiA5NjY6XFx0e1xcbiA5Njc6XFx0XFx0LyogVXBkYXRlIG5vZGUgKi9cXG4gOTY4OlxcdFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCwgdmFsKTtcXG4gOTY5OlxcdFxcbiA5NzA6XFx0XFx0LyogVXBkYXRlIG1lbWNnIGFuZCBscnV2ZWMgKi9cXG4gOTcxOlxcdFxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiA5NzI6XFx0XFx0XFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgdmFsKTtcXG4gOTczOlxcdH1cXG4gOTc0OlxcdFxcbiA5NzU6XFx0dm9pZCBscnV2ZWNfc3RhdF9tb2RfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuIDk3NjpcXHRcXHRcXHRcXHQgICAgIGludCB2YWwpXFxuIDk3NzpcXHR7XFxuIDk3ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIDk3OTpcXHRcXHRwZ19kYXRhX3QgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xcbiA5ODA6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiA5ODE6XFx0XFxuIDk4MjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDk4MzpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4gOTg0OlxcdFxcdC8qIFVudHJhY2tlZCBwYWdlcyBoYXZlIG5vIG1lbWNnLCBubyBscnV2ZWMuIFVwZGF0ZSBvbmx5IHRoZSBub2RlICovXFxuIDk4NTpcXHRcXHRpZiAoIW1lbWNnKSB7XFxuIDk4NjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTg3OlxcdFxcdFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIGlkeCwgdmFsKTtcXG4gOTg4OlxcdFxcdFxcdHJldHVybjtcXG4gOTg5OlxcdFxcdH1cXG4gOTkwOlxcdFxcbiA5OTE6XFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4gOTkyOlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpZHgsIHZhbCk7XFxuIDk5MzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gOTk0OlxcdH1cXG4gOTk1OlxcdEVYUE9SVF9TWU1CT0wobHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKTtcXG4gOTk2OlxcdFxcbiA5OTc6XFx0dm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpXFxuIDk5ODpcXHR7XFxuIDk5OTpcXHRcXHRwZ19kYXRhX3QgKnBnZGF0ID0gcGFnZV9wZ2RhdCh2aXJ0X3RvX3BhZ2UocCkpO1xcbjEwMDA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjEwMDE6XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTAwNDpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV92aXJ0KHApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NzoxMy42OTA2NDI3MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEyOTcwMjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgbWVtY2cgb2ZmbGluaW5nL2R5aW5nIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIG1lbWNnIE9mZmxpbmluZyBUcmlnZ2VycyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZWNpc2VseSBjYXVzZXMgYSBtZW1vcnkgY2dyb3VwIChtZW1jZykgdG8gb2ZmbGluZSBvciBkaWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBrbm93IHRoZSBsaWtlbHkgc3VzcGVjdHMgYXJlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC5cblxuTXkgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGVzZSBzdGF0ZXMuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYXMgYSBwcmltYXJ5IHRyaWdnZXIsIGFuZCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9jc3NfcmVsZWFzZWRgIGFuZCBgbWVtX2Nncm91cF9jc3NfZnJlZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMuXG5cbk15IG5leHQgc3RlcCBpcyBhIGNvZGUgc2VhcmNoLiBJJ20gZ29pbmcgdG8ganVtcCByaWdodCBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgXCJjc3Nfb2ZmbGluZVwiLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBhbGwgdGhlIGNhbGwgc2l0ZXMgYW5kIHJlbGF0ZWQgbG9naWMgc3Vycm91bmRpbmcgdGhlIG9mZmxpbmUgcHJvY2VzcywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gbWVtY2cgZGVhY3RpdmF0aW9uLiBJIGV4cGVjdCB0aGlzIGFwcHJvYWNoIHdpbGwgcXVpY2tseSB1bmNvdmVyIHRoZSBjcnVjaWFsIG1lY2hhbmlzbXMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5OTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ3OjIxLjgyMDM0ODA4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxNjc0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3NzX29mZmxpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00MjA1PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI4MS1cXG5tbS9tZW1jb250cm9sLmM6NDI4MjpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxubW0vbWVtY29udHJvbC5jLTQyODMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyODUtXFxubW0vbWVtY29udHJvbC5jOjQyODY6XFx0bWVtY2cxX2Nzc19vZmZsaW5lKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDI4Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDg4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDkwLVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcbm1tL21lbWNvbnRyb2wuYzo1MDkxOlxcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXFxubW0vbWVtY29udHJvbC5jLTUwOTItXFx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0NzoyMS45MTM1MjI4MzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcyNjM1MDczMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29udHJvbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgZm9yIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQsIHRoYXQgbWVhbnMgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VlIHdoYXQncyBjb250cm9sbGluZyB0aGVpciBpbmNsdXNpb24uIExldCdzIHN0YXJ0IHdpdGggYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGNoZWNrIGBpbml0L0tjb25maWdgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIEknbSBhc3N1bWluZyBgQ09ORklHX01FTUNHYCBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIHRoaXMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBvcHRpb24gaW5mbHVlbmNlcyB0aGUgY29tcGlsYXRpb24gb2YgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIG1ha2UgdGhvc2UgbW9kdWxlcyB3b3JrIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0Nzo1OS4xNzcwMzM1MjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjIzNTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDc6NTkuNzEzMjc1NjM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzY0OTA3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgc2V0IHVwLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBvcHRpb24uIEkga25vdyBpdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtYW5hZ2luZyByZXNvdXJjZXMgaW4gdGhlIGtlcm5lbCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgcG90ZW50aWFsbHkgY29uZmlndXJlZCBpbiBgaW5pdC9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGluIHBsYWNlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gc3ludGF4LCBkZXBlbmRlbmNpZXMsIGFuZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHRoYXQgSSBjYW4gcXVpY2tseSBzY2FuIGZvciBhIHF1aWNrIG92ZXJ2aWV3LiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgd2hlcmUgdG8gZ28gbmV4dCBiYXNlZCBvbiB3aGF0IEkgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0ODowNS4yNDk3Njg5ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTU3NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4My1cXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4NS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDYtXFxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDgtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6MDUuMzE1NzMyMTEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4Mzk1NTczMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb25zIGFyb3VuZCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBDb250cm9sIEdyb3VwcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5IGFib3V0IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gV2hlcmUgZG9lcyBgQ09ORklHX01FTUNHYCBmaXQgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbT8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIG9yIGRlcHJlY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgbWVtb3J5IGNncm91cCB2ZXJzaW9ucywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGhvdyBgQ09ORklHX01FTUNHX1YxYCBpcyBoYW5kbGVkIHJlbGF0aXZlIHRvIHRoZSBuZXdlciBjYXBhYmlsaXRpZXMgb3IgZGVmYXVsdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIG1vbm9saXRoaWMgb3B0aW9uIG9yIGlmIHRoZXJlIGFyZSBmaW5lci1ncmFpbmVkIGNob2ljZXMgdGhhdCBiZWNvbWUgYXZhaWxhYmxlIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gRm9yIGluc3RhbmNlLCBhcmUgdGhlcmUgc3ViLW9wdGlvbnMgdGhhdCBjb250cm9sIHNwZWNpZmljIG1lbW9yeSBhY2NvdW50aW5nIG9yIHRocm90dGxpbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkPyBBbmQgaG93IGRvZXMgdGhlIGZpbGUgaGFuZGxlIHRoZSB1c2VyJ3MgZGVmYXVsdCBjaG9pY2U/IFdoYXQga2luZCBvZiBoZWxwIHRleHQgcHJvdmlkZXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIHdoYXQsIGFuZCB3aWxsIGl0IGJlIGNsZWFyIGFuZCBjb25jaXNlPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgbGVnYWN5IHN1cHBvcnQgYW5kIGEgcG90ZW50aWFsIHRyYW5zaXRpb24gcGF0aCwgc28gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdhaW4gYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXNpZ24gc3BhY2UgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHdoZW4gd29ya2luZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjEzLjE1NTI5MjgyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwODE6XFx0XFxuMTA4MjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDgzOlxcdFxcbjEwODQ6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg2OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg3OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4ODpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4OTpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkwOlxcdFxcdGhlbHBcXG4xMDkxOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTI6XFx0XFxuMTA5MzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTQ6XFx0XFx0Ym9vbFxcbjEwOTU6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTg6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5OTpcXHRcXG4xMTAwOlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjExMDE6XFx0XFx0Ym9vbFxcbjExMDI6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjExMDQ6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTEwNTpcXHRcXHRkZWZhdWx0IHlcXG4xMTA2OlxcdFxcbjExMDc6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwODpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMTA6XFx0XFx0ZGVmYXVsdCBuXFxuMTExMTpcXHRcXHRoZWxwXFxuMTExMjpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjExMTM6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjExMTQ6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjExMTU6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMTE2OlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTk6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjEzLjE1NTQ4MzYwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzg1ODYzNzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1FTUNHIGFuZCBpdHMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBNRU1DR2AuIEkga25vdyB0aGF0IEkgbmVlZCB0aGUgYE1FTUNHYCBjb25maWcgb3B0aW9uIGVuYWJsZWQgZm9yIGJvdGggdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYW5kIHRoYXQgY29uZGl0aW9uYWwgYGlmZGVmYCBpbiBgbW0vd29ya2luZ3NldC5jYC4gQnV0IGEgcXVpY2sgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IGlzIGBNRU1DR2AgYWN0dWFsbHkgY29udGluZ2VudCBvbiBgQ0dST1VQU2AgYmVpbmcgZW5hYmxlZD8gVGhpcyBmZWVscyBsaWtlIGEgcXVlc3Rpb24gSSBzaG91bGQgYWJzb2x1dGVseSBrbm93IHRoZSBhbnN3ZXIgdG8sIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dCwgc28gSSBjYW4gY29uZmlybSB3aGV0aGVyIGBNRU1DR2AgaXMgZGlyZWN0bHkgdGllZCB0byBhbiBgaWYgQ0dST1VQU2AgYmxvY2sgb3IgaWYgaXQgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjMxLjAxNDEyMzUzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxNTM3OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDR1JPVVBTfGlmIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDUyPWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDU0LVxcbmluaXQvS2NvbmZpZzoxMDU1Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDU2LVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDY4LVxcbmluaXQvS2NvbmZpZzoxMDY5OmlmIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA3MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6MzEuMTA3MjgyODM0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODA0ODExNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBNRU1DR2AsIHdoaWNoIEkga25vdyBsaXZlcyB1bmRlciB0aGUgYENHUk9VUFNgIHVtYnJlbGxhLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciByZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gR290dGEgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHlvdSBrbm93P1xuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXaGF0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIGluIHRlcm1zIG9mIHdoYXQncyByZWxldmFudCB0byB0aGlzIGFyZWE/IEhlcmUgYXJlIGEgZmV3IHRob3VnaHRzOlxuXG4qICAgYG1vZF9tZW1jZ19zdGF0ZWA6IFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBjb3JlIHN0YXRlIHZhcmlhYmxlLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBsb29raW5nLlxuKiAgIGBtb2RfbHJ1dmVjX3N0YXRlYDogTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBpcyBjcnVjaWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhpcyBsaWtlbHkgcmVsYXRlcyB0byB0aGUgc3RhdGUgb2YgdGhlIExSVSB2ZWN0b3Igd2l0aGluIHRoZSBjZ3JvdXAuIERlZmluaXRlbHkgcmVsZXZhbnQuXG4qICAgYGxydXZlY19zdGF0X21vZF9mb2xpb2A6IFRoaXMgaXMgdmVyeSBzcGVjaWZpYyBidXQgbG9va3MgbGlrZSBpdCBoYW5kbGVzIHVwZGF0aW5nIGZvbGlvIHN0YXRzIHdpdGhpbiB0aGUgTFJVLCBhbHNvIGltcG9ydGFudC5cbiogICBgY291bnRfc2hhZG93X25vZGVzYCAob3IgcGVyaGFwcyBgd29ya2luZ3NldF91cGRhdGVfbm9kZWAgb3IgYHdvcmtpbmdzZXRfcmVmYXVsdGApOiBTaGFkb3cgbm9kZXMgYXJlIGludGVyZXN0aW5nLCBzbyB0aGlzIGNvdW50IHNlZW1zIGltcG9ydGFudC4gSSdtIGFsc28gdGhpbmtpbmcgdXBkYXRlcyBhbmQgcmVmYXVsdHMgaW4gdGhlIHdvcmtpbmcgc2V0IGFyZSByZWxldmFudCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZXNlIGFzIHdlbGwuXG4qICAgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgOiBUaGlzIGlzIHByb2JhYmx5IHRoZSBjZ3JvdXAgc3Vic3lzdGVtIHN0YXRlIG9mZmxpbmUuXG5cbklmIGBNRU1DR19WMWAgaXMgZW5hYmxlZCBJIG5lZWQgdG8gY2hlY2sgYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgc3RhdGljLCB3aGljaCB3b3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6NDEuOTEyMDk2OTUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczNjQ4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0yMjA5PXZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnMV9zdGF0cyk7IGkrKylcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIxNDpcXHRcXHRyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBtZW1jZzFfc3RhdHNbaV0pO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjE1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD03MT12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLXYxLmgtNzItXFxubW0vbWVtY29udHJvbC12MS5oOjczOnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wtdjEuaC03NC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04ODU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MDAtXFxubW0vbWVtY29udHJvbC5jOjkwMTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtOTAyLVxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjQyLjAxOTQ2NjU1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTkzNjE5Njk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgUmVmaW5lbWVudCBmb3IgTWVtY2cgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHJlZmluaW5nIG91ciBmb2N1cyBzeW1ib2xzIGZvciBtZW1jZyBmdXp6aW5nLiBUaGUgZ3VpZGFuY2UgaXMgY2xlYXI6IHdlIG5lZWQgdG8gaXNvbGF0ZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGZ1enouIFdlIHdhbnQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBiYWxhbmNlZCB0ZXN0IGRpc3RyaWJ1dGlvbi4gV2UncmUgYWltaW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIGZ1bmN0aW9ucyB0aGF0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgbm90IGJ1cmllZCBpbmxpbmVkIGhlbHBlcnMuXG5cbkFscmlnaHQsIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBjYW5kaWRhdGUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQ6IGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBgbW9kX21lbWNnX3N0YXRlYCwgYG1vZF9scnV2ZWNfc3RhdGVgLCBgbW9kX2xydXZlY19rbWVtX3N0YXRlYCwgYW5kIGBjb3VudF9zaGFkb3dfbm9kZXNgLlxuXG5JIG5lZWQgdG8gYW5hbHl6ZSBpZiBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9scnV2ZWNfc3RhdGVgIHF1YWxpZnkgYXMgaG90LXBhdGggY2FuZGlkYXRlcy4gV2hpbGUgdGhleSBnZXQgc29tZSBhY3Rpb24gZHVyaW5nIGFsbG9jYXRpb25zIGFuZCBmcmVlaW5nLCB0aG9zZSBhcmUgbm90IHRoZSBtYWluIGFyZWFzIHdlIHdhbnQgdG8gZm9jdXMgb24uIFNwZWNpZmljYWxseSwgbWVtY2cgcmVwYXJlbnRpbmcsIGNncm91cCB0ZWFyZG93biwgYW5kIHNoYWRvdyBzaHJpbmtlciBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgIGlzIHRoZSBjcnVjaWFsIG9uZSBmb3IgdjEgb2ZmbGluaW5nLiBGb3IgdjIsIG9yIGdlbmVyYWwgY2dyb3VwIG9mZmxpbmluZywgdGhlIGtleSBmdW5jdGlvbnMgYXJlIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBhbmQgYG1lbWNnMV9jc3Nfb2ZmbGluZWAuIEFuZCBmaW5hbGx5LCBgY291bnRfc2hhZG93X25vZGVzYCBpcyBzb21ldGhpbmcgd2UgbWlnaHQgY29uc2lkZXIsIGxvY2F0ZWQgaW4gYG1tL3dvcmtpbmdzZXQuY2AuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIG91ciBgRW5hYmxlQ29uZmlnc2AgYXJlIG9uIHBvaW50OiBgQ0dST1VQU2AsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLlxuXG5DcnVjaWFsbHksIHNob3VsZCB3ZSBlbmFibGUgYE1FTUNHX1YxYCB0byBoaXQgYm90aCB2MSBhbmQgdjIgcGF0aHM/IFllcywgYWJzb2x1dGVseS4gYE1FTUNHX1YxYCBlbmFibGVzIHRlc3RpbmcgYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgd2hpY2ggY2FsbHMgYF9fbW9kX21lbWNnX3N0YXRlYCwgd2hpbGUgdjIgYWxzbyBicmluZ3MgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGludG8gdGhlIHBpY3R1cmUuXG5cbk9rYXksIGxldCdzIHRha2Ugb25lIGxhc3QgcGFzcyB0byBjb25maXJtIGFsbCBvZiB0aGlzIGFuZCBmb3JtYXQgdGhlIHJlc3VsdHMgbmVhdGx5IHVzaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODE1LCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0ODo1My45NTU2NjYyODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU0ODU4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICAgIFwibW9kX21lbWNnX3N0YXRlXCIsXG4gICAgXCJtb2RfbHJ1dmVjX3N0YXRlXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiLFxuICAgIFwibW9kX21lbWNnX3N0YXRlXCIsXG4gICAgXCJtb2RfbHJ1dmVjX3N0YXRlXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdHMgaGFuZGxpbmcgYW5kIHJlZGlyZWN0aW9uIGZvciBkeWluZy9vZmZsaW5pbmcgbWVtY2dzIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIChyZW1vdmluZyB0aGUgdjEtb25seSByZXN0cmljdGlvbiksIGFzIHdlbGwgYXMgc2hhZG93IG5vZGUgY291bnRpbmcgY2FsY3VsYXRpb24gaW4gdGhlIHdvcmtpbmdzZXQgc2hyaW5rZXIuIFRoaXMgaXMgY29yZSByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0ODo1NC4xMDExNTk5OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODgxMzAyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDg6NTQuMTAxNjc1OTk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDM4ODA3Nzk5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIG1lbW9yeSBjZ3JvdXAgc3RhdCBhY2NvdW50aW5nIGFuZCB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nOlxcbjEuIEluIGBtbS9tZW1jb250cm9sLmNgLCBpdCBzaW1wbGlmaWVzIGFuZCBleHRlbmRzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFjcm9zcyBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzIGFuZCBhZGp1c3RzIFJDVSBsb2NraW5nIGxvZ2ljIHdoZW4gb2ZmbGluaW5nL3JlcGFyZW50aW5nIG1lbWNncy4gVGhlIG91dC1wYXJhbWV0ZXIgYHJjdV9sb2NrZWRgIGlzIHVuY29uZGl0aW9uYWxseSBpbml0aWFsaXplZCBvbiBhbGwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLlxcbjIuIEluIGBtbS93b3JraW5nc2V0LmNgLCBpdCB1cGRhdGVzIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBpbnN0ZWFkIG9mIGBscnV2ZWNfbHJ1X3NpemUoKWAuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgcmVhZCwgbm8gc3RydWN0cyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgZXhwb3N1cmVzIGFyZSBpbnRyb2R1Y2VkLiBQb3RlbnRpYWwgcmlza3MgKHN1Y2ggYXMgUkNVIGxpZmV0aW1lIGlzc3VlcywgY29uY3VycmVuY3kgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUzOGIwMDJiOTk5Y2QxZTNmZWYxMTdmZjZjNjM2ZDY5ODkyYTk0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjQyOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4MzE5YWQ4YzVjMjNhLi5mNDU0ZDAyNzQ2ZTlmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC04MDUsMTYgKzgwNSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4gXHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIC8qXG4tICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxuKyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4rICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcbiB7XG4tXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuK1x0LypcbitcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbitcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXG4rXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuK1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4rXHQgKi9cbitcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gXHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gXHRcdHJldHVybiBtZW1jZztcbiBcdH1cbkBAIC04MzUsMTcgKzg0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi44NWE0ZTE0ZTk1ZDUxIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02OTMsMTAgKzY5Myw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuIFxuIFx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZW1lbWNnKTtcbiBcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cdTAwM2VuaWQpKTtcbi1cbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcbi1cdFx0XHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbi1cbitcdFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4rXHRcdFx0XHRcdFx0XHQgTlJfTFJVX0JBU0UgKyBpKTtcbiBcdFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ4OjU0LjEwMTY3Nzc0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgyMzczNjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gdGVzdGluZy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgd29ya2luZ3NldCBtYW5hZ2VtZW50LCB3aGljaCBhcmUgYXJlYXMgd2hlcmUgc3VidGxlIGJ1Z3MgY2FuIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgZWFjaCBtb2RpZmljYXRpb24uXG5cbkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYC4gVGhlIHJlbW92YWwgb2YgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHX1YxYCBjb25kaXRpb25hbCBhcm91bmQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBkaXJlY3QgY2hlY2sgZm9yIGAhbWVtY2dfaXNfZHlpbmcobWVtY2cpYCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBgY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKWAgY29uZGl0aW9uYWwgaW5kaWNhdGVzIGEgc2hpZnQgaW4gaG93IG1lbWNnIGRlYXRoIGlzIGhhbmRsZWQgb3IgZGV0ZWN0ZWQuIFRoaXMgY2hhbmdlIGluIGNvbnRyb2wgZmxvdyBpcyBhIGNsYXNzaWMgYXJlYSB0byB0cmlnZ2VyIHByb2JsZW1zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyByYWNlIGNvbmRpdGlvbnMsIGFuZCBpZiB0aGUgbWVtb3J5IGJhY2tpbmcgdGhlIGNncm91cCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCB3aGVuIHRoZSBuZXcgY29kZSBleGVjdXRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHJlbW92YWwgb2YgdGhlIGNvbmRpdGlvbmFsIGFsdGVycyBhbnkgbWVtb3J5IGFsbG9jYXRpb24gZ3VhcmFudGVlcyBvciBhc3N1bXB0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbiBvZiBSQ1UgbG9ja2luZyBsb2dpYyBmb3IgbWVtY2cgYW5jZXN0b3Igd2FsayBkdXJpbmcgb2ZmbGluaW5nL2R5aW5nIGlzIGFsc28gY29uY2VybmluZywgcGFydGljdWxhcmx5IGluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBsb2dpYywgdGhlIGxvY2tpbmcgc3RyYXRlZ3ksIGFuZCBwb3RlbnRpYWwgZm9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuXG5cblNlY29uZCwgdGhlIGNoYW5nZSBpbiBgbW0vd29ya2luZ3NldC5jYCBpbiBgY291bnRfc2hhZG93X25vZGVzKClgIGFwcGVhcnMgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YgaG93IGxydXZlYyBzaXplIGlzIGNhbGN1bGF0ZWQuIFJlcGxhY2luZyBgbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSlgIHdpdGggYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgKyBpKWAgaXMgcG90ZW50aWFsbHkgc3VidGxlLiBJJ2xsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24gb3IgdXNhZ2Ugb2YgbWVtb3J5LCBvciBpZiBpdCBjYW4gbGVhZCB0byB1bmRlci1jb3VudGluZyBvZiBhbGxvY2F0ZWQgcGFnZXMuIEFyZSB3ZSBpbmFkdmVydGVudGx5IHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/XG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnktcmVsYXRlZCBidWdzIGluIGJvdGggZmlsZXMsIEkgd2lsbCBuZWVkIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSdsbCBsaWtlbHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBlbnN1cmluZyB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3Igd3JpdHRlbi4gQW55IGRpdmVyZ2VuY2UgaW4gZXhlY3V0aW9uIHBhdGhzIGJhc2VkIG9uIHRoZSBkZWF0aCBvZiBhIG1lbWNnIG5lZWRzIHRvIGJlIHZlcmlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDk6MTIuOTI1NDE2Nzc2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU3MTEyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTgxMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9tZW1jb250cm9sLmM6ODE0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04MTUte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTg3MD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzctXFxubW0vbWVtY29udHJvbC5jOjg3ODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtODc5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTM2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk0NS1cXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbm1tL21lbWNvbnRyb2wuYzo5NDY6XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVxcdTAwM2VtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wuYy05NDctXFx0cG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDo0OToxMy40MjExMzQzOTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMwMDU4NjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sIGluIG1tL21lbWNvbnRyb2wuYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgbWVtb3J5IGNvbnRyb2wgZnVuY3Rpb25zLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKClgLCBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmVhLCB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmb2N1cyBvbiBgbW0vbWVtY29udHJvbC5jYCwgYW5kIEknbGwganVtcCB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhcm91bmQgbGluZXMgODAwIHRvIDg2MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gaG93IHRoZXkgaGFuZGxlIGR5aW5nIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGVpciByb2xlIGluIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ5OjE2LjcyMTcyMzE1OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXHQvKiBHZXQgdGhlIGFic29sdXRlIHZhbHVlIG9mICh2YWwgKiB1bml0IC8gUEFHRV9TSVpFKS4gKi9cXG4gODAxOlxcdFxcdHJlcyA9IG11bHRfZnJhYyhhYnModmFsKSwgdW5pdCwgUEFHRV9TSVpFKTtcXG4gODAyOlxcdFxcdC8qIFJvdW5kIHVwIHplcm8gdmFsdWVzLiAqL1xcbiA4MDM6XFx0XFx0cmVzID0gcmVzID8gOiAxO1xcbiA4MDQ6XFx0XFxuIDgwNTpcXHRcXHRyZXR1cm4gdmFsIFxcdTAwM2MgMCA/IC1yZXMgOiByZXM7XFxuIDgwNjpcXHR9XFxuIDgwNzpcXHRcXG4gODA4OlxcdC8qXFxuIDgwOTpcXHQgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbiA4MTA6XFx0ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXFxuIDgxMTpcXHQgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXFxuIDgxMjpcXHQgKi9cXG4gODEzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbiA4MTQ6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXFxuIDgxNTpcXHR7XFxuIDgxNjpcXHRcXHQvKlxcbiA4MTc6XFx0XFx0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xcbiA4MTg6XFx0XFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4gODE5OlxcdFxcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXFxuIDgyMDpcXHRcXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cXG4gODIxOlxcdFxcdCAqL1xcbiA4MjI6XFx0XFx0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcXG4gODIzOlxcdFxcdFxcdCpyY3VfbG9ja2VkID0gZmFsc2U7XFxuIDgyNDpcXHRcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIDgyNTpcXHRcXHR9XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gODI4OlxcdFxcdCpyY3VfbG9ja2VkID0gdHJ1ZTtcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0d2hpbGUgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4gODMxOlxcdFxcdFxcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXFxuIDgzNzpcXHR7XFxuIDgzODpcXHRcXHRpZiAoIXJjdV9sb2NrZWQpXFxuIDgzOTpcXHRcXHRcXHRyZXR1cm47XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4NDI6XFx0fVxcbiA4NDM6XFx0XFxuIDg0NDpcXHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIDg0NTpcXHRcXHRcXHRcXHQgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxcbiA4NDY6XFx0e1xcbiA4NDc6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbiA4NDg6XFx0XFx0aW50IGNwdTtcXG4gODQ5OlxcdFxcbiA4NTA6XFx0XFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFxcXCIlczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpZHgpKVxcbiA4NTE6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRjcHUgPSBnZXRfY3B1KCk7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdHRoaXNfY3B1X2FkZChtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUtXFx1MDAzZXN0YXRlW2ldLCB2YWwpO1xcbiA4NTY6XFx0XFx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcXG4gODU3OlxcdFxcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0dHJhY2VfbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ5OjE2LjcyMTk0MTcwOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDMwMTQxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodHMsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlcidzIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTnVhbmNlcyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gZGVlcCBpbiB0aGUgd2VlZHMgb24gdGhpcywgYW5kIEknbSBpdGNoaW5nIHRvIHNlZSBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzICpyZWFsbHkqIHdvcmtpbmcgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbW0vd29ya2luZ3NldC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3b3JraW5nIHNldCBtb2RlbCBpcyBpbXBsZW1lbnRlZCBoZXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgbGlrZSB0aGUgcGFnZSByZXBsYWNlbWVudCBhbGdvcml0aG1zLCBhbmQgaG93IHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgYXJlIHR1bmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgbWFraW5nIHNtYXJ0IGNob2ljZXMgYWJvdXQgcmVzaWRlbnQgc2V0IHNpemUgbGltaXRzLCBvciBpZiB0aGV5IGFyZSBqdXN0IGRvaW5nIHRoZSBiYXJlIG1pbmltdW0uIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gdHJhY2sgdGhlIHdvcmtpbmcgc2V0PyBBcmUgdGhleSBlZmZpY2llbnQ/IERvIHRoZXkgc2NhbGUgd2VsbD8gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHRyYWRlb2ZmcyB0aGV5J3ZlIG1hZGUsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhcmVhcyB3aGVyZSB0aGV5J3ZlIGdvbmUgZG93biBhbiB1bnByb2R1Y3RpdmUgcGF0aC4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGNvbnRlbnRpb24gbWlnaHQgYXJpc2UsIGVzcGVjaWFsbHkgdW5kZXIgaGVhdnkgbG9hZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlbGVnYW5jZSAob3IgbGFjayB0aGVyZW9mKSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDk6MjUuMTUyMDg1OTc4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS93b3JraW5nc2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjg1OlxcdFxcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XFxuIDY4NjpcXHRcXHQgKlxcbiA2ODc6XFx0XFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXFxuIDY4ODpcXHRcXHQgKi9cXG4gNjg5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjkwOlxcdFxcdGlmIChzYy1cXHUwMDNlbWVtY2cpIHtcXG4gNjkxOlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gNjkyOlxcdFxcdFxcdGludCBpO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIDY5NTpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cXHUwMDNlbmlkKSk7XFxuIDY5NjpcXHRcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gNjk3OlxcdFxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBOUl9MUlVfQkFTRSArIGkpO1xcbiA2OTk6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDcwMDpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAxOlxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiA3MDI6XFx0XFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzAzOlxcdFxcdH0gZWxzZVxcbiA3MDQ6XFx0I2VuZGlmXFxuIDcwNTpcXHRcXHRcXHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cXHUwMDNlbmlkKTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0bWF4X25vZGVzID0gcGFnZXMgXFx1MDAzZVxcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdGlmIChub2RlcyBcXHUwMDNjPSBtYXhfbm9kZXMpXFxuIDcxMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzExOlxcdFxcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcXG4gNzEyOlxcdH1cXG4gNzEzOlxcdFxcbiA3MTQ6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gNzE1OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbiA3MTY6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cXHUwMDNlbG9jaylcXG4gNzE3OlxcdHtcXG4gNzE4OlxcdFxcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xcbiA3MTk6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIDcyMDpcXHRcXHRpbnQgcmV0O1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHQvKlxcbiA3MjM6XFx0XFx0ICogUGFnZSBjYWNoZSBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMgc3luY2hyb25vdXNseSBtYWludGFpblxcbiA3MjQ6XFx0XFx0ICogdGhlIHNoYWRvdyBub2RlIExSVSB1bmRlciB0aGUgaV9wYWdlcyBsb2NrIGFuZCB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6NDk6MjUuMTUyMjUwNDc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyODMwMTcyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBLTVNBTiBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgYW5kIHNlZSBpZiB0aGV5IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEga2V5IGNvbmNlcm4gd2hlbiBhc3Nlc3NpbmcgdGhlIG5lZWQgZm9yIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYXNzaW5nIGl0IHRvIHVzZXItc3BhY2UsIG9yIGFueSBvdGhlciBLTVNBTi1yZWxldmFudCBpc3N1ZXMuXG5cbkZpcnN0LCBJJ20gbG9va2luZyBhdCBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZXhhbWluaW5nIHRoZSBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGByY3VfbG9ja2VkYC4gRnJvbSB3aGF0IEkgc2VlLCBgKnJjdV9sb2NrZWRgIGlzIGFsd2F5cyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCByZWdhcmRsZXNzIG9mIHRoZSBjb250cm9sIGZsb3cuIFRoZSBjb2RlIHBhdGhzIGVuc3VyZSBgcmN1X2xvY2tlZGAgZ2V0cyBhIGRlZmluaXRlIGJvb2xlYW4gdmFsdWUgYmVmb3JlIGl0J3MgdXNlZCBlbHNld2hlcmUsIHNwZWNpZmljYWxseSBpbiBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgLiBTbywgbm8gdW5pbml0aWFsaXplZCByZWFkcyB0aGVyZS4gVGhlIGNoYW5nZXMgYXBwZWFyIHRvIG9wdGltaXplIHRoZSBoYW5kbGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlIGxvY2FscyBkdXJpbmcgbWVtY2cgZGVhdGgsIGJ1dCB0aGlzIHNlZW1zIHJlbGF0ZWQgdG8gUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgY29uY2VybnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpdHNlbGYuIFRoaXMgaW52b2x2ZXMgbG9ja2luZyBhbmQgUkNVIHBvaW50ZXIgdHJhdmVyc2FsLCBub3QgS01TQU4tcmVsZXZhbnQgZGF0YSBpc3N1ZXMuXG5cbk1vdmluZyBvbiB0byBgbW0vd29ya2luZ3NldC5jYCwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgYGxydXZlY19scnVfc2l6ZWAgd2l0aCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLiBUaGlzIGZ1bmN0aW9uIHJlYWRzIG1lbWNnIHZtc3RhdHMgcGVyLWNwdSBjb3VudGVycy4gVGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBsb29rcyBsaWtlIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMsIGNvcHlpbmcgdG8gdXNlci1zcGFjZSwgcGFkZGluZywgb3IgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMuIEl0J3MganVzdCByZWFkaW5nIGV4aXN0aW5nIGNvdW50ZXIgZGF0YS5cblxuU28sIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBoZXJl4oCZcyBteSBhc3Nlc3NtZW50OlxuXG4qICAgQXJlIHRoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIGJlaW5nIHBhc3NlZCBvciByZWFkPyBObywgYHJjdV9sb2NrZWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGluIGFsbCByZXR1cm4gcGF0aHMuXG4qICAgQXJlIGFueSBzdHJ1Y3RzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLlxuKiAgIERvZXMgaXQgYWxsb2NhdGUgb3IgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uXG4qICAgRG9lcyBpdCBjaGFuZ2UgYnVmZmVyIGJvdW5kcyBvciBwYXJzaW5nIGxlbmd0aHM/IE5vLCB0aGlzIGFwcGVhcnMgdW5yZWxhdGVkLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgdGhhdCAqZG8qIGV4aXN0IGFyZSBsaWtlbHkgdG8gYmUgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIHByb2JsZW1zIHdpdGggUkNVIGxpZmV0aW1lcywgb3IgaW5jb3JyZWN0IGNvdW50ZXIgdmFsdWVzLiBBbGwgb2YgdGhlc2UgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiBjb25jdXJyZW5jeSBpc3N1ZXMsIGxvZ2ljIGVycm9ycywgb3IgbWlnaHQgYmUgZGV0ZWN0ZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBvciBMT0NLREVQLCBidXQgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIEknbSBjb21mb3J0YWJsZSBjb25jbHVkaW5nIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgTmVlZHNLTVNBTmAgc2hvdWxkIGluZGVlZCBiZSBgZmFsc2VgLiBJJ2xsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBvZiBjb3Vyc2UsIGFuZCBkb2N1bWVudCB0aGUgY2xlYXIgcmVhc29uaW5nIGZvciBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk4LCJPdXRwdXRUb2tlbnMiOjI1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjQ5OjM3Ljk4MjQyNjEwNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgbWVtb3J5IGNncm91cCBzdGF0IGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmc6XFxuMS4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIGl0IHNpbXBsaWZpZXMgYW5kIGV4dGVuZHMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgYW5kIGFkanVzdHMgUkNVIGxvY2tpbmcgbG9naWMgd2hlbiBvZmZsaW5pbmcvcmVwYXJlbnRpbmcgbWVtY2dzLiBUaGUgb3V0LXBhcmFtZXRlciBgcmN1X2xvY2tlZGAgaXMgdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVkIG9uIGFsbCBleGVjdXRpb24gcGF0aHMgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoKWAuXFxuMi4gSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGl0IHVwZGF0ZXMgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZSgpYC5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSByZWFkLCBubyBzdHJ1Y3RzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBleHBvc3VyZXMgYXJlIGludHJvZHVjZWQuIFBvdGVudGlhbCByaXNrcyAoc3VjaCBhcyBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBjb25jdXJyZW5jeSByYWNlcywgb3IgdXNlLWFmdGVyLWZyZWUpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBtZW1vcnkgY2dyb3VwIHN0YXQgYWNjb3VudGluZyBhbmQgd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZzpcXG4xLiBJbiBgbW0vbWVtY29udHJvbC5jYCwgaXQgc2ltcGxpZmllcyBhbmQgZXh0ZW5kcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBhbmQgYWRqdXN0cyBSQ1UgbG9ja2luZyBsb2dpYyB3aGVuIG9mZmxpbmluZy9yZXBhcmVudGluZyBtZW1jZ3MuIFRoZSBvdXQtcGFyYW1ldGVyIGByY3VfbG9ja2VkYCBpcyB1bmNvbmRpdGlvbmFsbHkgaW5pdGlhbGl6ZWQgb24gYWxsIGV4ZWN1dGlvbiBwYXRocyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYC5cXG4yLiBJbiBgbW0vd29ya2luZ3NldC5jYCwgaXQgdXBkYXRlcyBgY291bnRfc2hhZG93X25vZGVzKClgIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgaW5zdGVhZCBvZiBgbHJ1dmVjX2xydV9zaXplKClgLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIHJlYWQsIG5vIHN0cnVjdHMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGV4cG9zdXJlcyBhcmUgaW50cm9kdWNlZC4gUG90ZW50aWFsIHJpc2tzIChzdWNoIGFzIFJDVSBsaWZldGltZSBpc3N1ZXMsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[1] Phase: Succeeded StartedAt: 2026-08-31 10:49:49 +0000 UTC FinishedAt: 2026-08-31 10:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 10:49:49 +0000 UTC FinishedAt: 2026-08-31 10:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2] Phase: Succeeded StartedAt: 2026-08-31 10:49:49 +0000 UTC FinishedAt: 2026-08-31 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 10:49:49 +0000 UTC FinishedAt: 2026-08-31 14:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","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-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 10:49:49 +0000 UTC FinishedAt: 2026-08-31 10:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 10:49:49 +0000 UTC FinishedAt: 2026-08-31 10:50:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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-workflowx2bv8/series-workflowx2bv8-convert-artifact-1216784635/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 10:50:26 +0000 UTC FinishedAt: 2026-08-31 11:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 10:50:26 +0000 UTC FinishedAt: 2026-08-31 11:09:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*53097746-ebca-4cf8-857a-aad339ddbedc,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-workflowx2bv8/series-workflowx2bv8-convert-artifact-1216784635/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": "a1337f1b-2148-4a33-ad58-a232d6a2747c", "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-workflowx2bv8/series-workflowx2bv8-build-action-1552504889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:50:26 +0000 UTC FinishedAt: 2026-08-31 11:09:35 +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:*53097746-ebca-4cf8-857a-aad339ddbedc,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-workflowx2bv8/series-workflowx2bv8-convert-artifact-1216784635/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": "a1337f1b-2148-4a33-ad58-a232d6a2747c", "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-workflowx2bv8/series-workflowx2bv8-build-action-1552504889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 11:09:57 +0000 UTC FinishedAt: 2026-08-31 11:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 11:09:57 +0000 UTC FinishedAt: 2026-08-31 11:09:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 11:09:57 +0000 UTC FinishedAt: 2026-08-31 11:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 11:09:57 +0000 UTC FinishedAt: 2026-08-31 11:10:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","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-workflowx2bv8/series-workflowx2bv8-convert-artifact-2201724242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 11:10:07 +0000 UTC FinishedAt: 2026-08-31 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 11:10:07 +0000 UTC FinishedAt: 2026-08-31 11:11:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a1337f1b-2148-4a33-ad58-a232d6a2747c,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-workflowx2bv8/series-workflowx2bv8-build-action-1552504889/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-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 11:12:02 +0000 UTC FinishedAt: 2026-08-31 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 11:12:02 +0000 UTC FinishedAt: 2026-08-31 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 11:12:02 +0000 UTC FinishedAt: 2026-08-31 11:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 11:12:02 +0000 UTC FinishedAt: 2026-08-31 11:27:46 +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:*53097746-ebca-4cf8-857a-aad339ddbedc,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-workflowx2bv8/series-workflowx2bv8-convert-artifact-2201724242/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": "d0359459-a7b4-4040-ad50-a743fbc2da02", "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-workflowx2bv8/series-workflowx2bv8-build-action-3348767718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 11:12:02 +0000 UTC FinishedAt: 2026-08-31 11:27:36 +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:*53097746-ebca-4cf8-857a-aad339ddbedc,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-workflowx2bv8/series-workflowx2bv8-convert-artifact-2201724242/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": "d0359459-a7b4-4040-ad50-a743fbc2da02", "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-workflowx2bv8/series-workflowx2bv8-build-action-3348767718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 11:27:46 +0000 UTC FinishedAt: 2026-08-31 11:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 11:27:46 +0000 UTC FinishedAt: 2026-08-31 11:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 11:27:46 +0000 UTC FinishedAt: 2026-08-31 11:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 11:27:46 +0000 UTC FinishedAt: 2026-08-31 11:29:43 +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:*d0359459-a7b4-4040-ad50-a743fbc2da02,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-workflowx2bv8/series-workflowx2bv8-build-action-3348767718/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-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 14:32:56 +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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"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:*a1337f1b-2148-4a33-ad58-a232d6a2747c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0359459-a7b4-4040-ad50-a743fbc2da02,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-workflowx2bv8/series-workflowx2bv8-build-action-1552504889/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-workflowx2bv8/series-workflowx2bv8-build-action-3348767718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 11:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 11:29:57 +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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"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-workflowx2bv8/series-workflowx2bv8-convert-artifact-2057560487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 11:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 11:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 11:29:53 +0000 UTC FinishedAt: 2026-08-31 11:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 11:30:03 +0000 UTC FinishedAt: 2026-08-31 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2bv8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"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":["count_shadow_nodes","mod_memcg_state","mod_lruvec_state","reparent_memcg_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08745c62350126bc31b09548137be87e2866f628","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","MEMCG_V1"],"series_id":"2cc2c44c-8b55-4a5a-9989-442ced716ecc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 11:30:03 +0000 UTC FinishedAt: 2026-08-31 14:32:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a1337f1b-2148-4a33-ad58-a232d6a2747c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0359459-a7b4-4040-ad50-a743fbc2da02,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-workflowx2bv8/series-workflowx2bv8-build-action-1552504889/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-workflowx2bv8/series-workflowx2bv8-build-action-3348767718/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-workflowx2bv8/series-workflowx2bv8-convert-artifact-2057560487/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,}