Name: series-workflowwxk9r Phase: Succeeded StartedAt: 2026-09-07 02:15:14 +0000 UTC FinishedAt: 2026-09-07 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[0] Phase: Succeeded StartedAt: 2026-09-07 02:15:14 +0000 UTC FinishedAt: 2026-09-07 02:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 02:15:14 +0000 UTC FinishedAt: 2026-09-07 02:17:52 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE", "HUGETLB_PAGE", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE", "HUGETLB_PAGE", "MEMCG" ], "series_id": "f68db553-0a70-4fac-b1af-4299844ba77b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_ops_filter_match", "damon_va_prep_probes", "damon_va_apply_probes", "damon_va_probe_pmd_entry", "damon_va_probe_hugetlb_entry", "damon_va_filter_match", "damon_pa_filter_match" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX29wc19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcF9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9maWx0ZXJfbWF0Y2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBldmFsdWF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgY3VzdG9tIHBhZ2UgdGFibGUgd2Fsa2luZyBmb3Igbm9ybWFsLCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgaHVnZXRsYiBwYWdlcywgYWxvbmdzaWRlIHNoYXJlZCBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBleGVjdXRlZCBieSB0aGUgREFNT04ga2VybmVsIHdvcmtlciB0aHJlYWQgYW5kIGFyZSByZWFjaGFibGUgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZXMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6IHRlc3RpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNzI2ZDY2YzFjZDI1OGJjNTZkNmQwZTBkYjVmN2Y2Y2E5MjFlZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjoxNjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTQ0NCwzICYjNDM7NDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4mIzQzO1x0XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5pbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7XG4gXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xuJiM0MztcbiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTQzLDI5ICYjNDM7MTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbiBcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4tXHRcdGlmICghbWVtY2cpXG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRlbHNlXG4tXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4gXHR9XG4gXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuJiM0MztcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuJiM0MztcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4mIzQzO1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRpZiAoIW1tKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuJiM0MztcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4mIzQzO1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtbXB1dChtbSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocHRlKVxuJiM0MztcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4mIzQzO1x0ZWxzZSBpZiAocG1kKVxuJiM0MztcdFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XG4mIzQzO1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuJiM0MztcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xuJiM0MztcdHJldHVybiB5b3VuZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbiYjNDM7XHRcdGlmICghZm9saW8pXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSxcbiYjNDM7XHRcdFx0XHRcdGFkZHIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcbiYjNDM7XHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2ZpbHRlciAqZjtcbiYjNDM7XHRib29sIHBhc3MgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xuJiM0MztcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuJiM0MztcdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwYXNzID0gIWYtXHUwMDNlYWxsb3c7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwYXNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4mIzQzO1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4mIzQzO1x0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxuJiM0MztcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiYjNDM7XHRwdGVfdCBwdGVudDtcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0aWYgKHB0bCkge1xuJiM0MztcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiYjNDM7XHRcdFx0Z290byBodWdlX291dDtcbiYjNDM7XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4mIzQzO1x0XHRpZiAoIWZvbGlvKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuJiM0MztcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4mIzQzO1x0XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7aHVnZV9vdXQ6XG4mIzQzO1x0XHRzcGluX3VubG9jayhwdGwpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuJiM0MztcbiYjNDM7XHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiYjNDM7XHRpZiAoIXB0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4mIzQzO1x0aWYgKCFmb2xpbylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbiYjNDM7XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0cHRlX3QgZW50cnk7XG4mIzQzO1xuJiM0MztcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiYjNDM7XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4mIzQzO1x0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2ZW50cnksIE5VTEwsXG4mIzQzO1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xuJiM0MztcdFx0LmN0eCA9IGN0eCxcbiYjNDM7XHRcdC5yID0gcixcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbiYjNDM7XHRcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXG4mIzQzO1x0XHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbiYjNDM7XHRcdFx0XHUwMDI2YXJnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuJiM0MztcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuJiM0MztcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4mIzQzO1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbiYjNDM7XHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG4mIzQzO1x0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4mIzQzO1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChtbSlcbiYjNDM7XHRcdFx0bW1wdXQobW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1heF93c3VtO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiAmIzQzOzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcbiYjNDM7XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxuJiM0MztcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBwcmVwYXJhdGlvbiBhbmQgZXZhbHVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIGN1c3RvbSBwYWdlIHRhYmxlIHdhbGtpbmcgZm9yIG5vcm1hbCwgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIGh1Z2V0bGIgcGFnZXMsIGFsb25nc2lkZSBzaGFyZWQgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZXhlY3V0ZWQgYnkgdGhlIERBTU9OIGtlcm5lbCB3b3JrZXIgdGhyZWFkIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2VzLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6eiB0ZXN0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTcyNmQ2NmMxY2QyNThiYzU2ZDZkMGUwZGI1ZjdmNmNhOTIxZWU4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDI6MTY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uYwpAQCAtNDQ0LDMgJiM0Mzs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KJiM0MzsKJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgomIzQzOwkJaWYgKCFmb2xpbykgewomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCW1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiYjNDM7CQlpZiAoIW1lbWNnKQomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltYXRjaGVkID0gZmlsdGVyLSZndDttZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTsKIAogYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpOwomIzQzOwomIzQzO2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0xNDMsMjkgJiM0MzsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAogCXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgotCQlpZiAoIWZvbGlvKSB7Ci0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQltYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKLQkJYnJlYWs7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKLQkJaWYgKCFmb2xpbykgewotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQltZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTsKLQkJaWYgKCFtZW1jZykKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlicmVhazsKIAljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDoKIAkJaWYgKCFmb2xpbykKIAkJCW1hdGNoZWQgPSBmYWxzZTsKQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJCW1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7CiAJfQogCXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiB9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gbWF4X25yX2FjY2Vzc2VzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ByZXAgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHsKJiM0MzsJCXN3aXRjaCAocC0mZ3Q7YWN0aW9uKSB7CiYjNDM7CQljYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRToKJiM0MzsJCQlkYW1vbl92YV9ta29sZChtbSwgci0mZ3Q7c2FtcGxpbmdfYWRkcik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzOwlzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHsKJiM0MzsJCW1tID0gZGFtb25fZ2V0X21tKHQpOwomIzQzOwkJaWYgKCFtbSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CiYjNDM7CQkJaWYgKHNldF9zYW1wbGVzKQomIzQzOwkJCQlyLSZndDtzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItJmd0O2FyLnN0YXJ0LAomIzQzOwkJCQkJCXItJmd0O2FyLmVuZCk7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KQomIzQzOwkJCQlkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTsKJiM0MzsJCX0KJiM0MzsJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCB5b3VuZyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAocHRlKQomIzQzOwkJeW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7CiYjNDM7CWVsc2UgaWYgKHBtZCkKJiM0MzsJCXlvdW5nID0gcG1kX3lvdW5nKCpwbWQpOwomIzQzOwl5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7CiYjNDM7CXJldHVybiB5b3VuZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSwKJiM0MzsJCQkJCWFkZHIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfcGFzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7CiYjNDM7CWJvb2wgcGFzcyA9IHRydWU7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7CiYjNDM7CQlpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7CiYjNDM7CQkJcGFzcyA9IGYtJmd0O2FsbG93OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcGFzcyA9ICFmLSZndDthbGxvdzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGFzczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkgewomIzQzOwkJaWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLAomIzQzOwkJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkcikpCiYjNDM7CQkJci0mZ3Q7cHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7CiYjNDM7CQlpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJcHRlX3QgKnB0ZTsKJiM0MzsJcHRlX3QgcHRlbnQ7CiYjNDM7CXNwaW5sb2NrX3QgKnB0bDsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay0mZ3Q7dm1hKTsKJiM0MzsJaWYgKHB0bCkgewomIzQzOwkJcG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBtZF9wcmVzZW50KHBtZGUpKQomIzQzOwkJCWdvdG8gaHVnZV9vdXQ7CiYjNDM7CQlmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay0mZ3Q7dm1hLCBhZGRyLCBwbWRlKTsKJiM0MzsJCWlmICghZm9saW8pCiYjNDM7CQkJZ290byBodWdlX291dDsKJiM0MzsJCWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sIE5VTEwsICZhbXA7cG1kZSwKJiM0MzsJCQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7aHVnZV9vdXQ6CiYjNDM7CQlzcGluX3VubG9jayhwdGwpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsjZW5kaWYJLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiYjNDM7CiYjNDM7CXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay0mZ3Q7bW0sIHBtZCwgYWRkciwgJmFtcDtwdGwpOwomIzQzOwlpZiAoIXB0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQocHRlbnQpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstJmd0O3ZtYSwgYWRkciwgcHRlbnQpOwomIzQzOwlpZiAoIWZvbGlvKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sICZhbXA7cHRlbnQsIE5VTEwsCiYjNDM7CQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiYjNDM7c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLSZndDt2bWEpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzcGlubG9ja190ICpwdGw7CiYjNDM7CXB0ZV90IGVudHJ5OwomIzQzOwomIzQzOwlwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstJmd0O21tLCBwdGUpOwomIzQzOwllbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQoZW50cnkpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgJmFtcDtlbnRyeSwgTlVMTCwKJiM0MzsJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNwaW5fdW5sb2NrKHB0bCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMCiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHsKJiM0MzsJCS5jdHggPSBjdHgsCiYjNDM7CQkuciA9IHIsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHsKJiM0MzsJCS5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksCiYjNDM7CQkuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9IHItJmd0O3NhbXBsaW5nX2FkZHI7CiYjNDM7CiYjNDM7CWlmICghbW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCAmYW1wO2RhbW9uX3Byb2JlX3dhbGtfb3BzLAomIzQzOwkJCSZhbXA7YXJnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF93c3VtID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewomIzQzOwkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCV9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpOwomIzQzOwkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiYjNDM7CQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKJiM0MzsJCQkJCQkJY3R4KSwgbWF4X3dzdW0pOwomIzQzOwkJfQomIzQzOwkJaWYgKG1tKQomIzQzOwkJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF4X3dzdW07CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWRwKQpAQCAtOTM4LDYgJiM0MzsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZCkKIAkJLnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSwKIAkJLnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcywKIAkJLmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsCiYjNDM7CQkucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcywKJiM0MzsJCS5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsCiAJCS50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsCiAJCS5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LAogCQkuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgREFNT046IFBhdGNoIEFuYWx5c2lzIGFuZCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZywgYW5kIGlmIHNvLCBob3cuIFRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuCgpCYXNlZCBvbiB0aGUgZmlsZSBsaXN0LCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uaGAsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYCwgaXQmIzM5O3MgY2xlYXJseSBhIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBtb2RpZmljYXRpb24sIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGJlaW5nIGludHJvZHVjZWQgaW4gYG9wcy1jb21tb25gIGFuZCB1dGlsaXplZCBpbiBgcGFkZHIuY2AgYW5kIGB2YWRkci5jYC4gVGhpcyBzdWdnZXN0cyBzb21lIG5ldyBmaWx0ZXJpbmcgb3IgbWF0Y2hpbmcgbWVjaGFuaXNtIHdpdGhpbiBEQU1PTiwgcG9zc2libHkgZm9yIHNlbGVjdGluZyBtZW1vcnkgcmVnaW9ucyB0byBtb25pdG9yIG9yIGluZmx1ZW5jZS4KCkxvb2tpbmcgZGVlcGVyIGF0IGB2YWRkci5jYCwgdGhlIGZ1bmN0aW9ucyBhZGRlZCBhcmUgcGFydGljdWxhcmx5IG5vdGV3b3J0aHk6IGBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbmAsIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AsIGBkYW1vbl92YV95b3VuZ19hZGRyYCwgYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAsIGBkYW1vbl92YV9maWx0ZXJfcGFzc2AsIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYC4gVGhlIGAucHJlcF9wcm9iZXNgIGFuZCBgLmFwcGx5X3Byb2Jlc2AgaG9va3MgaW4gYGRhbW9uX3ZhX2luaXRjYWxsKClgIGFyZSBrZXksIGVzcGVjaWFsbHkgaWYgdGhlc2UgcmVwbGFjZSBmdW5jdGlvbmFsaXR5LiBUaGVzZSBhbGwgcG9pbnQgdG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgd2l0aGluIERBTU9OLiBUaGlzIHN1Z2dlc3RzIGEgbmV3IGFwcHJvYWNoIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyBvciBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHNwb3QgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyB0byB0aGUgY29uZmlndXJhdGlvbiBzaWRlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8ga25vdyB3aGljaCBEQU1PTiBmZWF0dXJlcywgYW5kIHNwZWNpZmljYWxseSBgREFNT05fVkFERFJgIG9yIGBEQU1PTl9QQUREUmAsIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSeKAmWxsIG5lZWQgdG8gcnVuIGdyZXBwZXIgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL0tjb25maWdgIHRvIHBpbiB0aGlzIGRvd24gcXVpY2tseS4gQW55IGNvbmZpZ3VyYXRpb24gaXNzdWVzIGFyZSwgb2J2aW91c2x5LCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGFueSBmb2N1cyBzeW1ib2xzIHRoYXQgY291bGQgaW1wYWN0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNYWtlZmlsZSBJbnZlc3RpZ2F0aW9uIGZvciBPcHMtQ29tbW9uIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb3BzLWNvbW1vbi5jYCwgYHZhZGRyLmNgLCBhbmQgYHBhZGRyLmNgIGFyZSBiZWluZyBjb21waWxlZC4gVG8gZG8gdGhhdCBlZmZpY2llbnRseSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkOiBgL21tL2RhbW9uL01ha2VmaWxlYC4gQSBxdWljayBzY2FuIG9mIHRoYXQgYE1ha2VmaWxlYCBzaG91bGQgcmV2ZWFsIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgbGlua2luZyBzdGVwcyBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIHRob3NlIGNyaXRpY2FsIGZpbGVzLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgYW5kIHRyb3VibGVzaG9vdCBidWlsZCBlcnJvcnMsIGRlcGVuZGVuY3kgcHJvYmxlbXMsIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGNoZWNrOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQ2hlY2sqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHBhcnNlIHRoYXQgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBhbmQgZXZlbiBgc291cmNlYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgdGhvc2UgREFNT04gZmVhdHVyZXMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGljaCBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBwcmVyZXF1aXNpdGUgZm9yIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIG9yIHJ1bnRpbWUgaXNzdWVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGludGVyYWN0IGFuZCBpbXBhY3Qgb25lIGFub3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMsIGRldGVybWluaW5nIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSwgYW5kIHVsdGltYXRlbHkganVkZ2luZyBpZiBmdXp6aW5nIGl0IGlzIHdvcnRod2hpbGUuIFRoaXMgaXMgY29yZSBNTSBzdWJzeXN0ZW0gY29kZSwgREFNT04sIHNvIGl0JiMzOTtzIGluaGVyZW50bHkgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKRnJvbSB3aGF0IEkgc2VlLCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIHZpcnR1YWwgYWRkcmVzcyBwcm9iZXMsIHNwZWNpZmljYWxseSBgZGFtb25fdmFfcHJlcF9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYC4gSXQgbG9va3MgbGlrZSBpdCBhbHNvIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkgcGFnZSB0YWJsZSB3YWxrc+KAlGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWDigJRhbG9uZyB3aXRoIGZpbHRlciBtYXRjaGluZyBmdW5jdGlvbnMgbGlrZSBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCBhbmQgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyB0aGUgdXN1YWwgc3lzZnMvY29yZSBEQU1PTiBpbnRlZ3JhdGlvbi4gQWxsIHN0YW5kYXJkIHN0dWZmLCByZWFsbHkuCgpUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyAqZnVsbHkqIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMgZmFudGFzdGljIGZvciBmdXp6aW5nLiBXZSBoYXZlIHRoZSBzeXNmcyBEQU1PTiBpbnRlcmZhY2UgKGBDT05GSUdfREFNT05fU1lTRlNgLCBldGMuKSBhcyBhIGRpcmVjdCBhdHRhY2sgdmVjdG9yLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBEQU1PTiBjb250cm9sIGludGVyZmFjZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCwgbGlrZSBkZWJ1Z2ZzLCBidXQgSSYjMzk7bGwgZm9jdXMgb24gc3lzZnMgZm9yIG5vdy4gSXQgaXMgbGlrZWx5IHRoZSBiZXN0IHBhdGggZm9yIGZ1enplciBpbnRlZ3JhdGlvbi4KCkkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHN5c2ZzIGludGVyZmFjZSBhbGxvd3MgdXMgdG8gY29uZmlndXJlIHRoZXNlIHByb2JlcyBvciB0aGUgREFNT04gY29udGV4dHMvdGFyZ2V0cy4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgY2FsbHMgdG8gYHByZXBfcHJvYmVzYCBvciBgYXBwbHlfcHJvYmVzYCB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhleSYjMzk7cmUgYWN0dWFsbHkgdXNlZC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGx5X3Byb2JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTQ1LVx0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozOTQ2Olx0XHRpZiAoY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcbm1tL2RhbW9uL2NvcmUuYy0zOTQ3LVx0XHRcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk1Mi1cdFx0XHRcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjM5NTM6XHRcdFx0bWF4X3dzdW0gPSBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgsXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhZG9fcHJlcCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE2MD1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE3NS1cbm1tL2RhbW9uL3BhZGRyLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDY0LVx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NjYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NjY5PXN0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjk2LVxubW0vZGFtb24vdmFkZHIuYzo2OTc6c3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vdmFkZHIuYy02OTgtXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTcxNi1cbm1tL2RhbW9uL3ZhZGRyLmM6NzE3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczMC1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi92YWRkci5jOjczMTpcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNzMyLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMTcxLVx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MjpcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2Jlcyxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE3My1cdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKioKCkFscmlnaHQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBEQU1PTiBhbmQgaXRzIGludGVybmFscywgYW5kIEkmIzM5O20gZmVlbGluZyB0aGF0IGl0Y2ggdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgaXMgb3BlcmF0aW5nLiBJJiMzOTt2ZSBnb3QgbXkgaGVhZCBhcm91bmQgYSBmZXcga2V5IGFyZWFzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3cgZm9jdXNpbmcgaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJlYWxpemluZyB0aGVyZSYjMzk7cyBvbmUgc3BlY2lmaWMgdGhpbmcgdGhhdCByZWFsbHkgbmVlZHMgYSBsb29rIGF0OiBgcHJlcF9wcm9iZXNgLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBEQU1PTiBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcF9wcm9iZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzg5Mz1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cbm1tL2RhbW9uL2NvcmUuYzozOTM0Olx0XHRkb19wcmVwID0gY3R4LVx1MDAzZW9wcy5wcmVwX3Byb2JlcyBcdTAwMjZcdTAwMjYgZGFtb25faGFzX3ByZXAoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTM4LVx0XHRpZiAoZG9fcHJlcClcbm1tL2RhbW9uL2NvcmUuYzozOTM5Olx0XHRcdGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMoY3R4LCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpO1xubW0vZGFtb24vY29yZS5jLTM5NDAtXG4tLVxubW0vZGFtb24vcGFkZHIuYz05Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEwNy1cbm1tL2RhbW9uL3BhZGRyLmM6MTA4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0xMDktXHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEyNC1cbm1tL2RhbW9uL3BhZGRyLmM6MTI1OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbm1tL2RhbW9uL3BhZGRyLmMtMTI2LXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEzNi1cdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG5tbS9kYW1vbi9wYWRkci5jOjEzNzpcdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xubW0vZGFtb24vcGFkZHIuYy0xMzgtXHRcdH1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDYzLVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY0Olx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmMtNDY1LVx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTUyOS1cbm1tL2RhbW9uL3ZhZGRyLmM6NTMwOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbm1tL2RhbW9uL3ZhZGRyLmMtNTMxLXtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTExNjM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTExNzAtXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxubW0vZGFtb24vdmFkZHIuYzoxMTcxOlx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE3Mi1cdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFByb2JlIGFuZCBGaWx0ZXIgTG9naWMgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBEQU1PTiBjb2RlIHRoYXQmIzM5O3MgYmVlbiBpbnRyb2R1Y2VkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBga2RhbW9uZF9mbmAgZnVuY3Rpb24gYW5kIGhvdyBEQU1PTiBpcyBtYW5hZ2VkLiBJdCYjMzk7cyB0aGUgY29yZSBEQU1PTiBrZXJuZWwgdGhyZWFkLCBzdGFydGVkIHdoZW4gREFNT04gaXMgZW5hYmxlZCB0aHJvdWdoIHN5c2ZzIHVzaW5nIGF0dHJpYnV0ZXMgbGlrZSBga2RhbW9uZF9ucl9zY2hlbWVzYCBhbmQgdGhlICYjMzQ7b24mIzM0OyBzdGF0ZSBpbiBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvLi4uYC4gSSYjMzk7bSB3b3JraW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBjb2RlIGlzIHJ1bm5pbmcgd2hlbiB3ZSYjMzk7cmUgYWN0aXZlbHkgbW9uaXRvcmluZyB2aXJ0dWFsIGFkZHJlc3NlcyB1c2luZyBwcm9iZXMgb3IgZmlsdGVycy4KClRoZSBvYnZpb3VzIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHN0YW5kYXJkIHNldHVwcywgc2F5IGluIFFFTVUuIFRoZSBhbnN3ZXIgaXMgeWVzLCBnaXZlbiBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3lzZnMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgbm9ybS4KCk5vdywgaXMgdGhpcyBjb2RlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY29tcGxldGVseSBuZXcgcHJvYmUgZXhlY3V0aW9uIGxvZ2ljLCB0aGUgbWVjaGFuaWNzIG9mIHdhbGtpbmcgbWVtb3J5IGFkZHJlc3NlcyAoYGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZWApLCBkZWVwIGRpdmVzIGludG8gdGhlIHBhZ2UgdGFibGVzIChgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgKSwgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2UpIGxvY2tpbmcsIGh1Z2UgcGFnZSBsb2NraW5nLCBmb2xpbyBoYW5kbGluZywgYW5kIGZpbHRlciBjaGVja2luZyDigJMgYWxsIGNvcmUgYXJlYXMgd2l0aGluIHRoZSBgbW0vZGFtb25gIHN1YnN5c3RlbS4gVGhpcyBpcyBhIGZlcnRpbGUgZ3JvdW5kIGZvciBkaXNjb3ZlcnkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFdoYXQgZGlkIHRoZSBwYXRjaCBhY3R1YWxseSBpbnRyb2R1Y2Ugb3IgbW9kaWZ5PyBMZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRoZSBkaWZmOgoKMS4gIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYAoyLiAgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgCjMuICBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gIGluIGBtbS9kYW1vbi92YWRkci5jYAo0LiAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKNS4gIGBkYW1vbl92YV95b3VuZ19hZGRyYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKNi4gIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGluIGBtbS9kYW1vbi92YWRkci5jYAo3LiAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKOC4gIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgCjkuICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKMTAuIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKMTEuIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgCjEyLiBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKCkFyZSB0aGVzZSBzdGF0aWMgb3IgZXhwb3J0ZWQ/IExldCYjMzk7cyBzZWU6CgoqICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBhbmQgZGVjbGFyZWQgaW4gYG9wcy1jb21tb24uaGAuCiogICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYCBpcyBzdGF0aWMgaW4gYG1tL2RhbW9uL3BhZGRyLmNgLgoqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgYXJlIG9wZXJhdGlvbiBjYWxsYmFja3MgaW4gYGRhbW9uX3ZhX2luaXRjYWxsYCAvIGBkYW1vbl9vcGVyYXRpb25zYC4KKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBldGMuIGFyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYHZhZGRyLmNgLgoKT2theSwgbGV0JiMzOTtzIHNlbGVjdCB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1cnRoZXIgcmV2aWV3OgoKKiAgIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYAoqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYAoqICAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AKKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgCiogICBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAKKiAgIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgCiogICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYAoKV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQ/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBjb3JyZWN0bHkgc2V0IHdoZW4gd2UgcnVuOgoKKiAgIGBEQU1PTmAKKiAgIGBEQU1PTl9WQUREUmAKKiAgIGBEQU1PTl9QQUREUmAKKiAgIGBEQU1PTl9TWVNGU2AKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgKGZvciBgI2lmZGVmIENPTkZJR19UUkFOCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcdHJldHVybiBwYXNzO1xuIDYwMTpcdH1cbiA2MDI6XHRcbiA2MDM6XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbiA2MDQ6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiA2MDU6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4gNjA2Olx0fTtcbiA2MDc6XHRcbiA2MDg6XHRzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gNjA5Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gNjEwOlx0XHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDYxMTpcdHtcbiA2MTI6XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4gNjEzOlx0XHRpbnQgaSA9IDA7XG4gNjE0Olx0XG4gNjE1Olx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4gNjE2Olx0XHRcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcbiA2MTc6XHRcdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbiA2MTg6XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuIDYxOTpcdFx0XHRpJiM0MzsmIzQzOztcbiA2MjA6XHRcdH1cbiA2MjE6XHR9XG4gNjIyOlx0XG4gNjIzOlx0c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDYyNDpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDYyNTpcdHtcbiA2MjY6XHRcdHB0ZV90ICpwdGU7XG4gNjI3Olx0XHRwdGVfdCBwdGVudDtcbiA2Mjg6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiA2Mjk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNjMwOlx0XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIDYzMTpcdFxuIDYzMjpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA2MzM6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4gNjM0Olx0XHRpZiAocHRsKSB7XG4gNjM1Olx0XHRcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xuIDYzNjpcdFxuIDYzNzpcdFx0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxuIDYzODpcdFx0XHRcdGdvdG8gaHVnZV9vdXQ7XG4gNjM5Olx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4gNjQwOlx0XHRcdGlmICghZm9saW8pXG4gNjQxOlx0XHRcdFx0Z290byBodWdlX291dDtcbiA2NDI6XHRcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4gNjQzOlx0XHRcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4gNjQ0Olx0XG4gNjQ1Olx0aHVnZV9vdXQ6XG4gNjQ2Olx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gNjQ3Olx0XHRcdHJldHVybiAwO1xuIDY0ODpcdFx0fVxuIDY0OTpcdCNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gNjUwOlx0XG4gNjUxOlx0XHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiA2NTI6XHRcdGlmICghcHRlKVxuIDY1MzpcdFx0XHRyZXR1cm4gMDtcbiA2NTQ6XHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiA2NTU6XHRcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxuIDY1NjpcdFx0XHRnb3RvIG91dDtcbiA2NTc6XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4gNjU4Olx0XHRpZiAoIWZvbGlvKVxuIDY1OTpcdFx0XHRnb3RvIG91dDtcbiA2NjA6XHRcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbiA2NjE6XHRcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4gNjYyOlx0XG4gNjYzOlx0b3V0OlxuIDY2NDpcdFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XG4gNjY1Olx0XHRyZXR1cm4gMDtcbiA2NjY6XHR9XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiA2Njk6XHRzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiA2NzA6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNjcxOlx0e1xuIDY3MjpcdFx0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiA2NzM6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiA2NzQ6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNjc1Olx0XHRzcGlubG9ja190ICpwdGw7XG4gNjc2Olx0XHRwdGVfdCBlbnRyeTtcbiA2Nzc6XHRcbiA2Nzg6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiA2Nzk6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc4NQoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IHBhdGNoIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgb3BzLWNvbW1vbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLiBJIHNlZSBpdCB1c2VzIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGFuZCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYCBhbmQgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYWN0aXZlIGlmIGBNRU1DR2AgaXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5LgoKTGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSYjMzk7dmUgZmxhZ2dlZCB0aGlzIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIGludGVyZXN0LiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIGEgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb25zIGluY2x1ZGluZyBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGNydWNpYWxseSwgYE1FTUNHYC4gQWxsIG9mIHRob3NlIGhhdmUgYmVlbiBlbmFibGVkLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgcGFnZSB0YWJsZSB3YWxraW5nIGZ1bmN0aW9ucyBsaWtlIGBwbWRfZW50cnlgIGFuZCBgaHVnZXRsYl9lbnRyeWAsIHBsdXMgZmlsdGVyIG1hdGNoaW5nLCBhbmQgcHJvYmluZyBjYWxsYmFja3MuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IHNjcnV0aW55IGR1cmluZyBmdXp6IHRlc3RpbmcuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IERBTU9OIFN5c2ZzL2tkYW1vbmQgaW50ZXJmYWNlcyBleHBvc2UgdGhlc2UgZnVuY3Rpb25zLgoKVGhpcyBwYXRjaCBsb29rcyByaXBlIGZvciBmdXp6aW5nLiBUaGUgY29tYmluYXRpb24gb2YgcGFnZSB0YWJsZSB3YWxraW5nLCBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9ucyAodmlhIGBNRU1DR2AgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb25zKSwgYW5kIHN5c2ZzIGludGVyZmFjZXMgbWFrZXMgaXQgYSBsaWtlbHkgdGFyZ2V0LiBJIHNob3VsZCBwcm9iYWJseSBpbnZva2UgYHNldC1yZXN1bHRzYCBhdCB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBwcmVwYXJhdGlvbiBhbmQgZXZhbHVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIGN1c3RvbSBwYWdlIHRhYmxlIHdhbGtpbmcgZm9yIG5vcm1hbCwgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIGh1Z2V0bGIgcGFnZXMsIGFsb25nc2lkZSBzaGFyZWQgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZXhlY3V0ZWQgYnkgdGhlIERBTU9OIGtlcm5lbCB3b3JrZXIgdGhyZWFkIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2VzLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6eiB0ZXN0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9vcHNfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3ByZXBfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfZmlsdGVyX21hdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBldmFsdWF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgY3VzdG9tIHBhZ2UgdGFibGUgd2Fsa2luZyBmb3Igbm9ybWFsLCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgaHVnZXRsYiBwYWdlcywgYWxvbmdzaWRlIHNoYXJlZCBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBleGVjdXRlZCBieSB0aGUgREFNT04ga2VybmVsIHdvcmtlciB0aHJlYWQgYW5kIGFyZSByZWFjaGFibGUgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZXMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6IHRlc3RpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzI2ZDY2YzFjZDI1OGJjNTZkNmQwZTBkYjVmN2Y2Y2E5MjFlZThiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMjoxNjo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCA3MjE5YzYwOGIxOTUyLi5jZmNkNGVkZWUzNDZhIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC00NDQsMyAmIzQzOzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlib29sIG1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwomIzQzOwlzd2l0Y2ggKGZpbHRlci0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJbWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKJiM0MzsJCWlmICghZm9saW8pIHsKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQltZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTsKJiM0MzsJCWlmICghbWVtY2cpCiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJZWxzZQomIzQzOwkJCW1hdGNoZWQgPSBmaWx0ZXItJmd0O21lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmgKQEAgLTIxLDMgJiM0MzsyMSw1IEBAIGJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpOwogCiBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcyk7CiYjNDM7CiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCBjMWU3ZDdhNGY0MGRmLi5mZmRlODhlYTdhMTNjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTE0MywyOSAmIzQzOzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsCiAJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKLQljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046Ci0JCWlmICghZm9saW8pIHsKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwotCQlicmVhazsKLQljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOgotCQlpZiAoIWZvbGlvKSB7Ci0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pOwotCQlpZiAoIW1lbWNnKQotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQllbHNlCi0JCQltYXRjaGVkID0gZmlsdGVyLSZndDttZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWJyZWFrOwogCWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgogCQlpZiAoIWZvbGlvKQogCQkJbWF0Y2hlZCA9IGZhbHNlOwpAQCAtMTczLDcgJiM0MzsxNTIsNyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQkJbWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYnJlYWs7CiYjNDM7CQlyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTsKIAl9CiAJcmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLSZndDttYXRjaGluZzsKIH0KZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNTEwLDYgJiM0Mzs1MTAsMjM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiBtYXhfbnJfYWNjZXNzZXM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKJiM0MzsJCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJlcCAqcDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkgewomIzQzOwkJc3dpdGNoIChwLSZndDthY3Rpb24pIHsKJiM0MzsJCWNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOgomIzQzOwkJCWRhbW9uX3ZhX21rb2xkKG1tLCByLSZndDtzYW1wbGluZ19hZGRyKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewomIzQzOwkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiYjNDM7CQlpZiAoIW1tKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKJiM0MzsJCQlpZiAoc2V0X3NhbXBsZXMpCiYjNDM7CQkJCXItJmd0O3NhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci0mZ3Q7YXIuc3RhcnQsCiYjNDM7CQkJCQkJci0mZ3Q7YXIuZW5kKTsKJiM0MzsJCQlkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpCiYjNDM7CQkJCWRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKGN0eCwgbW0sIHIsIHApOwomIzQzOwkJfQomIzQzOwkJbW1wdXQobW0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nX2FkZHIoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIHlvdW5nID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwdGUpCiYjNDM7CQl5b3VuZyA9IHB0ZV95b3VuZygqcHRlKTsKJiM0MzsJZWxzZSBpZiAocG1kKQomIzQzOwkJeW91bmcgPSBwbWRfeW91bmcoKnBtZCk7CiYjNDM7CXlvdW5nID0geW91bmcgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKJiM0MzsJCW1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKG1tLCBhZGRyKTsKJiM0MzsJcmV0dXJuIHlvdW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIG1hdGNoZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6CiYjNDM7CQlpZiAoIWZvbGlvKQomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLAomIzQzOwkJCQkJYWRkcik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pOwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwKJiM0MzsJCXB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2ZpbHRlciAqZjsKJiM0MzsJYm9vbCBwYXNzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHsKJiM0MzsJCWlmIChkYW1vbl92YV9maWx0ZXJfbWF0Y2goZiwgZm9saW8sIHB0ZSwgcG1kLCBtbSwgYWRkcikpIHsKJiM0MzsJCQlwYXNzID0gZi0mZ3Q7YWxsb3c7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlwYXNzID0gIWYtJmd0O2FsbG93OwomIzQzOwl9CiYjNDM7CXJldHVybiBwYXNzOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHsKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7CiYjNDM7CQlpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sCiYjNDM7CQkJCQlyLSZndDtzYW1wbGluZ19hZGRyKSkKJiM0MzsJCQlyLSZndDtwcm9iZV9oaXRzW2ldJiM0MzsmIzQzOzsKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwlwdGVfdCBwdGVudDsKJiM0MzsJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CXB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLSZndDt2bWEpOwomIzQzOwlpZiAocHRsKSB7CiYjNDM7CQlwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTsKJiM0MzsKJiM0MzsJCWlmICghcG1kX3ByZXNlbnQocG1kZSkpCiYjNDM7CQkJZ290byBodWdlX291dDsKJiM0MzsJCWZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLSZndDt2bWEsIGFkZHIsIHBtZGUpOwomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQlnb3RvIGh1Z2Vfb3V0OwomIzQzOwkJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgTlVMTCwgJmFtcDtwbWRlLAomIzQzOwkJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsKJiM0MztodWdlX291dDoKJiM0MzsJCXNwaW5fdW5sb2NrKHB0bCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOyNlbmRpZgkvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KJiM0MzsKJiM0MzsJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLSZndDttbSwgcG1kLCBhZGRyLCAmYW1wO3B0bCk7CiYjNDM7CWlmICghcHRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXB0ZW50ID0gcHRlcF9nZXQocHRlKTsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChwdGVudCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay0mZ3Q7dm1hLCBhZGRyLCBwdGVudCk7CiYjNDM7CWlmICghZm9saW8pCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgJmFtcDtwdGVudCwgTlVMTCwKJiM0MzsJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstJmd0O3ZtYSk7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXNwaW5sb2NrX3QgKnB0bDsKJiM0MzsJcHRlX3QgZW50cnk7CiYjNDM7CiYjNDM7CXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay0mZ3Q7bW0sIHB0ZSk7CiYjNDM7CWVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLSZndDttbSwgYWRkciwgcHRlKTsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChlbnRyeSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwomIzQzOwlmb2xpb19nZXQoZm9saW8pOwomIzQzOwlkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LSZndDtjdHgsIHByaXYtJmd0O3IsIGZvbGlvLCAmYW1wO2VudHJ5LCBOVUxMLAomIzQzOwkJCXdhbGstJmd0O3ZtYS0mZ3Q7dm1fbW0pOwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwomIzQzOwomIzQzO291dDoKJiM0MzsJc3Bpbl91bmxvY2socHRsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTEwKJiM0MzsjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0gewomIzQzOwkJLmN0eCA9IGN0eCwKJiM0MzsJCS5yID0gciwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX3Byb2JlX3dhbGtfb3BzID0gewomIzQzOwkJLnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwKJiM0MzsJCS5odWdldGxiX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyID0gci0mZ3Q7c2FtcGxpbmdfYWRkcjsKJiM0MzsKJiM0MzsJaWYgKCFtbSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICYjNDM7IDEsICZhbXA7ZGFtb25fcHJvYmVfd2Fsa19vcHMsCiYjNDM7CQkJJmFtcDthcmcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X3dzdW0gPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQltbSA9IGRhbW9uX2dldF9tbSh0KTsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CiYjNDM7CQkJaWYgKHNldF9zYW1wbGVzKQomIzQzOwkJCQlyLSZndDtzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItJmd0O2FyLnN0YXJ0LAomIzQzOwkJCQkJCXItJmd0O2FyLmVuZCk7CiYjNDM7CQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiYjNDM7CQkJaWYgKHJldHVybl9tYXhfd3N1bSkKJiM0MzsJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAomIzQzOwkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQl9CiYjNDM7CQlpZiAobW0pCiYjNDM7CQkJbW1wdXQobW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBtYXhfd3N1bTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcG1kX3QgKnBtZHApCkBAIC05MzgsNiAmIzQzOzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKQogCQkudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLAogCQkucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLAogCQkuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcywKJiM0MzsJCS5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLAomIzQzOwkJLmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcywKIAkJLnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCwKIAkJLmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsCiAJCS5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIFJlZmFjdG9yaW5nIGFuZCBWaXJ0dWFsIEFkZHJlc3MgUHJvYmluZyBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aXRoaW4gREFNT04sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB2aXJ0dWFsIGFkZHJlc3Nlcy4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9kYW1vbi9vcHMtY29tbW9uLmhgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhpc3RpbmcgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBmcmFtZXdvcmsgaXMgZXZvbHZpbmcuCgpGaXJzdCwgaXQgbG9va3MgbGlrZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgaXMgYmVpbmcgYWJzdHJhY3RlZCBpbnRvIGBvcHMtY29tbW9uLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduOyByZWZhY3RvcmluZyBjb21tb24gZnVuY3Rpb25hbGl0eSBsaWtlIHRoYXQgdXN1YWxseSBzaWduYWxzIGFuIGludGVudCB0byBzdHJlYW1saW5lIHRoZSBjb3JlIERBTU9OIG9wZXJhdGlvbnMgYW5kIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhhdCBpbXBhY3RzIHRoZSBmaWx0ZXIgbG9naWMgZG93bnN0cmVhbS4KCk5vdywgdGhlIG1lYXQgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGluIGBtbS9kYW1vbi92YWRkci5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIGRlc2lnbmVkIHRvIHN1cHBvcnQgcHJvYmluZyB2aXJ0dWFsIGFkZHJlc3NlcyBkaXJlY3RseS4gSSBzZWUgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCwgYW5kIHRoZW4gZnVuY3Rpb25zIGZvciBwcm9iaW5nIGF0IHRoZSBmb2xpbywgcG1kLCBhbmQgaHVnZXRsYiBsZXZlbHM6IGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAuIEZpbmFsbHksIHRoZSBwYXRjaCBhZGRzICBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCB0byBpbXBsZW1lbnQgdGhlIHByb2JlIGFwcGxpY2F0aW9uIHByb2Nlc3MuIFRoZSByZWdpc3RyYXRpb24gb2YgYHByZXBfcHJvYmVzYCBhbmQgYGFwcGx5X3Byb2Jlc2AgY2FsbGJhY2tzIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgIGNvbmZpcm1zIHRoYXQgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29tcGxldGUgcmV3cml0ZSBmb3IgdmlydHVhbCBhZGRyZXNzIGhhbmRsaW5nIHdpdGhpbiBEQU1PTi4KCkkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgbW9yZSB0aG9yb3VnaGx5LiBJ4oCZbGwgbmVlZCB0byB1dGlsaXplIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBmdWxseSBncmFzcCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXNlIHZpcnR1YWwgYWRkcmVzcyBwcm9iaW5nIGZ1bmN0aW9ucyBpbnRlcmZhY2Ugd2l0aCB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLiBJJiMzOTtsbCBmb2N1cyBwYXJ0aWN1bGFybHkgb24gaG93IHRoaXMgaXMgbWFuYWdpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSB0YWJsZSBsZXZlbHMuIEl0IGFsc28gd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhIHdheSB0byBjb25maWd1cmUgdGhlIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nLCBhbmQgaG93IHRoaXMgd2lsbCB3b3JrIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgREFNT04gbW9kdWxlcy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGNhcGFiaWxpdHkgYmVpbmcgYWRkZWQgdG8gREFNT04uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2Zvcl9lYWNoX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJlcChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjMtXG5tbS9kYW1vbi9jb3JlLmM6MTY0Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xNjUtXHRcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpXG4tLVxubW0vZGFtb24vY29yZS5jPTI2MT1zdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY1LVxubW0vZGFtb24vY29yZS5jOjI2NjpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vY29yZS5jLTI2Ny1cdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4tLVxubW0vZGFtb24vY29yZS5jPTI3Mz1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzYtXG5tbS9kYW1vbi9jb3JlLmM6Mjc3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgYykge1xubW0vZGFtb24vY29yZS5jLTI3OC1cdFx0aWYgKHAtXHUwMDNld2VpZ2h0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00NzY9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ4Mi1cbm1tL2RhbW9uL2NvcmUuYzo0ODM6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtNDg0LVx0XHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTUwPXZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShwLCBuZXh0X3AsIGN0eClcbm1tL2RhbW9uL2NvcmUuYy05NjEtXHRcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUocCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAxNi1cbm1tL2RhbW9uL2NvcmUuYzoxMDE3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtMTAxOC1cdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG4tLVxubW0vZGFtb24vY29yZS5jPTE0Mjc9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzNS1cdG5yX3Byb2JlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MTQzNjpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTQzNy1cdFx0bnJfcHJvYmVzJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MC1cdHdzdW0gPSAwO1xubW0vZGFtb24vY29yZS5jOjE0NTE6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1Mi1cdFx0aWYgKHByb2JlLVx1MDAzZXdlaWdodCBcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg0MD1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NDQtXG5tbS9kYW1vbi9jb3JlLmM6MTg0NTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoZHN0X3Byb2JlLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYy0xODQ2LVx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSYjNDM7JiM0MzssIHNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTktXG5tbS9kYW1vbi9jb3JlLmM6MTg2MDpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoc3JjX3Byb2JlLCBuZXh0LCBzcmMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xODYxLVx0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG4tLVxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMDAtXHRpZiAodHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWRfZW5hYmxlZCgpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjMwMTpcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpXG5tbS9kYW1vbi9jb3JlLmMtMjMwMi1cdFx0XHRucl9wcm9iZXMmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTI1PXN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEzNS1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9wYWRkci5jOjEzNjpcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG5tbS9kYW1vbi9wYWRkci5jLTEzNy1cdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE5NS1cdFx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYSkpO1xubW0vZGFtb24vcGFkZHIuYzoxOTY6XHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cdFx0XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05OC1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwOC1cdGkgPSAwO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwOTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTAtXHRcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqc3lzX3Byb2JlO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDI4PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ5LVx0bnJfZHN0X3Byb2JlcyA9IDA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ1MDpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NTEtXHRcdG5yX2RzdF9wcm9iZXMmIzQzOyYjNDM7O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NTItXHRucl9zcmNfcHJvYmVzID0gMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDUzOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1NC1cdFx0bnJfc3JjX3Byb2JlcyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NTgtXHRucl9kc3RfcHJvYmVzID0gMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDU5Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDYwLVx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTUzMD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG4tLVxubW0vZGFtb24vdmFkZHIuYy01NDQtXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xubW0vZGFtb24vdmFkZHIuYzo1NDU6XHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxubW0vZGFtb24vdmFkZHIuYy01NDYtXHRcdFx0XHRkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy02MTQtXG5tbS9kYW1vbi92YWRkci5jOjYxNTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL3ZhZGRyLmMtNjE2LVx0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24gQ2hlY2sqKgoKT2theSwgdGltZSB0byBkcmlsbCBkb3duIG9uIHRoZXNlIHZhcmlhYmxlcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYGRhbW9uX3JlZ2lvbmAgYW5kIGBwcm9iZV9oaXRzYCBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O3ZlIHNlZW4gY291bnRsZXNzIGlzc3VlcyBzdGVtIGZyb20gaW1wcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbG93LWxldmVsIGNvZGUgbGlrZSB0aGlzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgdGhlIG1lbW9yeSBpcyBiZWluZyByZXF1ZXN0ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgYW5kIGFsaWdubWVudCwgYW5kIHRoYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2V0IHVwIHdpdGggdGhlaXIgaW5pdGlhbCB2YWx1ZXMgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3Igb3VyIGFsZ29yaXRobSwgbGlrZWx5IHplcm9lZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNpemUgY2FsY3VsYXRpb25zIGFyZSBjb3JyZWN0LiBBbnkgc2xpcC11cCBoZXJlIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHN1YnRsZSBidWdzIHRoYXQgYXJlIGluY3JlZGlibHkgZGlmZmljdWx0IHRvIGRlYnVnIGxhdGVyIG9uLCBzbyBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgaXMgcm9jayBzb2xpZCBiZWZvcmUgbW92aW5nIG9uLiBJ4oCZbSB0aGlua2luZyBJ4oCZbGwgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBhbGxvY2F0aW9uIGNhbGxzLCBsb29rIGF0IHRoZSBzaXplcyBiZWluZyBwYXNzZWQsIGFuZCB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aHMuIE5vIHN0b25lIHVudHVybmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZV9oaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ4LVxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNTAtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzY2LVx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxubW0vZGFtb24vY29yZS5jOjM2NzpcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XG5tbS9kYW1vbi9jb3JlLmMtMzY4LVxubW0vZGFtb24vY29yZS5jOjM2OTpcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcbm1tL2RhbW9uL2NvcmUuYzozNzA6XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xubW0vZGFtb24vY29yZS5jLTM3MS19XG4tLVxubW0vZGFtb24vY29yZS5jPTM4OT1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjQwMzpcdFx0cmVnaW9uLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xubW0vZGFtb24vY29yZS5jOjQwNDpcdFx0cmVnaW9uLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtNDA1LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00NjI9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDY4LS8qKlxubW0vZGFtb24vY29yZS5jOjQ2OTogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmMtNDcwLSAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0NzY6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTQ4NC1cdFx0aWYgKGxhc3QpXG5tbS9kYW1vbi9jb3JlLmM6NDg1Olx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtXHUwMDNld2VpZ2h0O1xubW0vZGFtb24vY29yZS5jLTQ4Ni1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjQ4NzpcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg4LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cbm1tL2RhbW9uL2NvcmUuYzoxMDEwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDE3LVx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTAxODpcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcdFx0XHRcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cdFx0aWYgKCFhZ2dyZWdhdGluZylcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDIyOlx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0sIG9sZF9hdHRycyxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVx0XHRcdFx0XHRuZXdfYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTEwMjQtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzoxMDI1Olx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTAyNi1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMzA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzMte1xubW0vZGFtb24vY29yZS5jOjEwMzQ6XHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDI5LVx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG5tbS9kYW1vbi9jb3JlLmM6MTQzMDpcdHVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7XG5tbS9kYW1vbi9jb3JlLmMtMTQzMS1cdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4tLVxubW0vZGFtb24vY29yZS5jLTE0NDgtXHQvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqL1xubW0vZGFtb24vY29yZS5jOjE0NDk6XHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDUwLVx0d3N1bSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1MS1cdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlx0XHRpZiAocHJvYmUtXHUwMDNld2VpZ2h0IFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTE0NTMtXHRcdFx0cmV0dXJuIGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjE0NTQ6XHRcdHdzdW1fdG9fYWRkID0gcHJvYmUtXHUwMDNld2VpZ2h0ICogbWF4X3Byb2JlX2hpdHM7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1NS1cdFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcdTAwM2Mgd3N1bV90b19hZGQpXG4tLVxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTYtXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMzE3Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVx1MDAzZXByb2JlX2hpdHNbaV07XG5tbS9kYW1vbi9jb3JlLmM6MjMxODpcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMjMxOS1cdFx0XHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KVxubW0vZGFtb24vY29yZS5jOjM0Mzg6XHRcdGwtXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICYjNDM7IHItXHUwMDNlcHJvYmVfaGl0c1tpXVxubW0vZGFtb24vY29yZS5jLTM0MzktXHRcdFx0XHQqIHN6X3IpIC8gKHN6X2wgJiM0Mzsgc3pfcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmM6MzQ0NTpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTM0NDYte1xubW0vZGFtb24vY29yZS5jOjM0NDc6XHRpZiAodXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmM6MzQ0ODpcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xubW0vZGFtb24vY29yZS5jLTM0NDktXHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ2MT1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpwcmV2ID0gTlVMTCwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmM6MzQ2NTpcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTM0NjYtXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NjktXG5tbS9kYW1vbi9jb3JlLmM6MzQ3MDpcdFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG5tbS9kYW1vbi9jb3JlLmM6MzQ3MTpcdFx0bGFzdF9zY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIHRydWUsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xubW0vZGFtb24vY29yZS5jLTM0NzItXG4tLVxubW0vZGFtb24vY29yZS5jLTM0ODYtXHRcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcbm1tL2RhbW9uL2NvcmUuYzozNDg3Olx0XHRcdFx0XHR1c2VfcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jLTM0ODgtXHRcdGlmIChkaWZmIFx1MDAzZSB0aHJlcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzU2Nj1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNTgxLVx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXG5tbS9kYW1vbi9jb3JlLmM6MzU4MjpcdG1lbWNweShuZXctXHUwMDNlcHJvYmVfaGl0cywgci1cdTAwM2Vwcm9iZV9oaXRzLCBzaXplb2Yoci1cdTAwM2Vwcm9iZV9oaXRzKSk7XG5tbS9kYW1vbi9jb3JlLmM6MzU4MzpcdG1lbWNweShuZXctXHUwMDNlbGFzdF9wcm9iZV9oaXRzLCByLVx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcbm1tL2RhbW9uL2NvcmUuYzozNTg0Olx0XHRcdHNpemVvZihyLVx1MDAzZWxhc3RfcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jLTM1ODUtXG4tLVxubW0vZGFtb24vcGFkZHIuYz0xNzY9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTk3LVx0XHRcdFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXG5tbS9kYW1vbi9wYWRkci5jOjE5ODpcdFx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldJiM0MzsmIzQzOztcbm1tL2RhbW9uL3BhZGRyLmMtMTk5LVx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMDMtXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbm1tL2RhbW9uL3BhZGRyLmM6MjA0Olx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxubW0vZGFtb24vcGFkZHIuYy0yMDUtXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OS1cdFx0X19BVFRSX1JPX01PREUoaGl0cywgMDQwMCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19wcm9iZV9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlx0XHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXHROVUxMLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cdFx0aWYgKCFzeXNfcHJvYmUpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQtXHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSAxNTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTU6XHRyLVx1MDAzZXByb2JlX2hpdHNbMF0gPSA3O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NjpcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdID0gMztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTctXHRyLVx1MDAzZWFnZSA9IDEwO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzItXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzM6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vwcm9iZV9oaXRzWzBdLCByX25ldy1cdTAwM2Vwcm9iZV9oaXRzWzBdKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0sIHJfbmV3LVx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTc1LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCByX25ldy1cdTAwM2VhZ2UpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTUtXHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTk2Olx0ci1cdTAwM2Vwcm9iZV9oaXRzWzBdID0gNjtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTctXHRyLVx1MDAzZWFnZSA9IDk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNC1cdHIyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjA1Olx0cjItXHUwMDNlcHJvYmVfaGl0c1swXSA9IDE0O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNi1cdHIyLVx1MDAzZWFnZSA9IDIxO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTItXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMTM6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vwcm9iZV9oaXRzWzBdLCAxMSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjE0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAxN3UpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTE0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUzOC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTM5Olx0LyogTW9yZSBzYW1wbGVzIGNvdWxkIG92ZXJmbG93IHRoZSBwcm9iZV9oaXRzIGNvdW50ZXJzLiAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NDAtXHRjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDI1Njtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy02MTctXHRcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkcikpXG5tbS9kYW1vbi92YWRkci5jOjYxODpcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xubW0vZGFtb24vdmFkZHIuYy02MTktXHRcdGkmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NzE3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczMi1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxubW0vZGFtb24vdmFkZHIuYzo3MzM6XHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG5tbS9kYW1vbi92YWRkci5jLTczNC1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjcKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogREFNT04gVmlydHVhbCBBZGRyZXNzIFByb2JpbmcgYW5kIEZpbHRlcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgdGhleSYjMzk7dmUgcmVmYWN0b3JlZCB0aGUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9uLCBtb3ZpbmcgaXQgdG8gYG9wcy1jb21tb24uY2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGNoYW5nZS4gQ2hlY2tpbmcgdGhlIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBjb2RlIGl0c2VsZiwgSSBzZWUgaXQmIzM5O3MgcHJvcGVybHkgaGFuZGxpbmcgZGlmZmVyZW50IGZpbHRlciB0eXBlcyAoQU5PTiwgTUVNQ0cpLCBhbmQgYWxsIHZhcmlhYmxlcyB3aXRoaW4gYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHNwZWNpZmljYWxseSBgbWF0Y2hlZGAgYW5kIGBtZW1jZ2AuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIFRoZSBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfcmVhZF91bmxvY2tgIGFyZSBhcHByb3ByaWF0ZWx5IHBhaXJlZCB3aXRoaW4gdGhlIE1FTUNHIGNoZWNrLgoKTmV4dCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcgY29kZSBpbiBgdmFkZHIuY2AuIFRoZSBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gIGFuZCBgZGFtb25fdmFfcHJlcF9wcm9iZXNgIGZ1bmN0aW9ucyBsb29rIHN0cmFpZ2h0Zm9yd2FyZCwgc2V0dGluZyB1cCB0aGUgcHJvYmluZyBwcm9jZXNzLiBOb3csIGxldCYjMzk7cyBleGFtaW5lIGBkYW1vbl92YV95b3VuZ19hZGRyYC4gSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHZhbGlkaXR5IG9mIGBwdGVgIGFuZCBgcG1kYCBkZXJlZmVyZW5jZXMgaGVyZS4gTG9va2luZyBhdCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLCBJIHNlZSB0aGF0IHdpdGhpbiBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBlaXRoZXIgYHB0ZWAgb3IgYHBtZGAgaXMgcGFzc2VkLiBUaGUgaW5pdGlhbGl6YXRpb24gaW4gYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCBzZWVtcyByb2J1c3QgdXNpbmcgYHBtZHBfZ2V0YCwgYHB0ZXBfZ2V0YCBhbmQgYGh1Z2VfcHRlcF9nZXRgIHJlc3BlY3RpdmVseSwgd2hpY2ggYXJlIGdvb2QuIFRoZSBgeW91bmdgIHZhcmlhYmxlIGlzIGFsc28gaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQuCgpUaGUgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGlzIHNpbXBsZSBhbmQsIGlmIG5vdCwgaXQgZGVmZXJzIHRvIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB3aGljaCB3ZSByZXZpZXdlZCBlYXJsaWVyLiBUaGUgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCBmdW5jdGlvbiBpcyBzaW1pbGFybHkgc2ltcGxlIHdpdGggYSBgcGFzc2AgZmxhZyBiZWluZyBpbml0aWFsaXplZC4gVGhlIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIHdoaWNoIGNvbnRhaW4gbG9vcHMgYW5kIHdhbGtlcnMsIGFyZSBjYXJlZnVsbHkgaGFuZGxpbmcgcHJvYmVzIGFuZCBpbmNyZW1lbnRpbmcgYHItJmd0O3Byb2JlX2hpdHNbaV0mIzQzOyYjNDM7YCwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjaGVjaywgd2hpY2ggc2VlbXMgb2theS4gU3RydWN0cyBpbiBwYWdlIHdhbGtzLCBsaWtlIGBhcmdgLCBhcmUgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGFyZWFzLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHZpYSB0aGluZ3MgbGlrZSBgY29weV90b191c2VyYCwgaW9jdGxzLCBvciBuZXRsaW5rLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGNvcGllZCwgd2hpY2ggaXMgZ29vZC4KCkNvdWxkIHdlIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBhbnN3ZXIgaXMgJiMzNDtubyYjMzQ7LiBIb3dldmVyLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OgoKKiAgICoqTG9ja2luZy9SZWZlcmVuY2UgQ291bnRpbmc6KiogUG90ZW50aWFsbHkgdGhpbmdzIGxpa2UgYGZvbGlvX2dldGAvYGZvbGlvX3B1dGAsIG9yIGxvY2tpbmcgaW4gdGhlIHBhZ2UgdGFibGUgd2FsayAoYHB0ZV9vZmZzZXRfbWFwX2xvY2tgLCBgc3Bpbl91bmxvY2tgKSBhcmUgYSBwcmltYXJ5IGZvY3VzIGZvciBzdGFuZGFyZCBkZXRlY3RvcnMuIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgY2F0Y2ggdGhhdC4KKiAgICoqT3V0LW9mLUJvdW5kcyBBY2Nlc3M6KiogV2hpbGUgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb29wIHRoYXQgaW5jcmVtZW50cyBgci0mZ3Q7cHJvYmVfaGl0c1tpXWAsIGNoZWNraW5nIGBucl9wcm9iZXMgJmd0OyBEQU1PTl9NQVhfUFJPQkVTYCB3b3VsZCBiZSBuZWNlc3NhcnkuIEtBU0FOL1VCU0FOIHNob3VsZCBmbGFnIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KKiAgICoqQ29uY3VycmVuY3kgSXNzdWVzOioqIFBhZ2UgdGFibGUgd2Fsa3MgY2FuIGJlIHRyaWNreS4gUGFnZSB0YWJsZSB3YWxrIGNvbmN1cnJlbmN5IC8gcGFnZSBzdGF0ZSBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gb24gYW55IE1NIGNvZGUsIGNhbiBiZSBwaWNrZWQgdXAgYnkgS0FTQU4va2VybmVsIGFzc2VydGlvbnMuCgpUaGVyZWZvcmUsIGZvciBhIEtNU0FOIHBlcnNwZWN0aXZlLCBhbGwgb2YgdGhlc2UgbWVtb3J5IGVycm9ycyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGRldGVjdG9ycy4gSSB3aWxsIGRvdWJsZS1jaGVjayB0aGUgNCBjcml0ZXJpYSBmb3IgTmVlZHNLTVNBTjoKCjEuICAqKktlcm5lbC10by1Vc2VyOioqIE5vdGhpbmcuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljL0JyYW5jaGluZzoqKiBFeHBsaWNpdCBpbml0aWFsaXphdGlvbi4KMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogTm8gYWxsb2NhdGlvbiwgb3IgdW5pbml0aWFsaXplZCByZWFkLgo0LiAgKipCb3VuZHMgQ2hlY2tzOioqIE5vIHN1cnJvdW5kaW5nIGNvZGUgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpCYXNlZCBvbiB0aGlzLCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiouCgoqKktNU0FOIHZzIEtBU0FOIFJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3MgcHJvYmluZyBhbmQgZmlsdGVyIG1hdGNoaW5nIHdpdGhpbiBEQU1PTi4gQWxsIHJlbGV2YW50IGxvY2FsIHZhcmlhYmxlcywgZmxhZ3MsIGFuZCB3YWxrZXIgc3RydWN0cyBhcmUgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBpbnRyb2R1Y2VkLiBJc3N1ZXMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGJvdW5kcyBjaGVja3MgKHByb2JlXF9oaXRzKSwgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOL1VCU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHdhcnJhbnRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE2OjQzLjcyNjkyMjQyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzEzMTEwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdmlydHVhbCBhZGRyZXNzIHByb2JlIG9wZXJhdGlvbnMgKHByZXAgYW5kIGFwcGx5IHByb2JlcykgYW5kIHJlZmFjdG9ycyBjb21tb24gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIFxcblxcbkV2YWx1YXRpbmcgYWdhaW5zdCBLTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBtYXRjaGVkYCwgYHlvdW5nYCwgYHBhc3NgLCBgaWApLCBzdGFjayBzdHJ1Y3R1cmVzIChgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlYCwgYG1tX3dhbGtfb3BzYCksIGFuZCBwYWdlIHRhYmxlIGVudHJ5IGNvcGllcyAoYHB0ZW50YCwgYHBtZGVgLCBgZW50cnlgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50OiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcyBvbiBgcHJvYmVfaGl0c2AsIGZvbGlvIHJlZmVyZW5jZSBjb3VudCBtaXNtYXRjaGVzLCBvciBwYWdlIHRhYmxlIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHNxdWFyZWx5IHdpdGhpbiB0aGUgcHVydmlldyBvZiBLQVNBTiwgVUJTQU4sIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTY6NDMuNzI2OTI2MTM5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI0NjA3NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTcyNmQ2NmMxY2QyNThiYzU2ZDZkMGUwZGI1ZjdmNmNhOTIxZWU4YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjE2OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuQEAgLTQ0NCwzICs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4rXFxuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFxuK1xcdHN3aXRjaCAoZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcXG4rXFx0XFx0aWYgKCFmb2xpbykge1xcbitcXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4rXFx0XFx0aWYgKCFmb2xpbykge1xcbitcXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XFxuK1xcdFxcdGlmICghbWVtY2cpXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRtYXRjaGVkID0gZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXFx1MDAzZW1hdGNoaW5nO1xcbit9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuQEAgLTIxLDMgKzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTtcXG4gXFxuIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTtcXG4rXFxuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMTQzLDI5ICsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbiBcXHRzd2l0Y2ggKGZpbHRlci1cXHUwMDNldHlwZSkge1xcbi1cXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XFxuLVxcdFxcdGlmICghZm9saW8pIHtcXG4tXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFxuLVxcdFxcdGlmICghZm9saW8pIHtcXG4tXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xcbi1cXHRcXHRpZiAoIW1lbWNnKVxcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bWF0Y2hlZCA9IGZpbHRlci1cXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XFxuIFxcdFxcdGlmICghZm9saW8pXFxuIFxcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG5AQCAtMTczLDcgKzE1Miw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdFxcdG1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVxcdTAwM2VtYXRjaGluZztcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNTEwLDYgKzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ByZXAgKnA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7XFxuK1xcdFxcdHN3aXRjaCAocC1cXHUwMDNlYWN0aW9uKSB7XFxuK1xcdFxcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxcbitcXHRcXHRcXHRkYW1vbl92YV9ta29sZChtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkcik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4rXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xcbitcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcXG4rXFx0XFx0aWYgKCFtbSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxuK1xcdFxcdFxcdGlmIChzZXRfc2FtcGxlcylcXG4rXFx0XFx0XFx0XFx0ci1cXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVxcdTAwM2Vhci5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG4rXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxcbitcXHRcXHRcXHRcXHRkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRtbXB1dChtbSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmdfYWRkcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxcbitcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4rXFxuK1xcdGlmIChwdGUpXFxuK1xcdFxcdHlvdW5nID0gcHRlX3lvdW5nKCpwdGUpO1xcbitcXHRlbHNlIGlmIChwbWQpXFxuK1xcdFxcdHlvdW5nID0gcG1kX3lvdW5nKCpwbWQpO1xcbitcXHR5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuK1xcdFxcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKG1tLCBhZGRyKTtcXG4rXFx0cmV0dXJuIHlvdW5nO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxcbitcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoIChmaWx0ZXItXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XFxuK1xcdFxcdGlmICghZm9saW8pXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRtYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLFxcbitcXHRcXHRcXHRcXHRcXHRhZGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xcbitcXHR9XFxuK1xcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cXHUwMDNlbWF0Y2hpbmc7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcXG4rXFx0XFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmO1xcbitcXHRib29sIHBhc3MgPSB0cnVlO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcXG4rXFx0XFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xcbitcXHRcXHRcXHRwYXNzID0gZi1cXHUwMDNlYWxsb3c7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHBhc3MgPSAhZi1cXHUwMDNlYWxsb3c7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHBhc3M7XFxuK31cXG4rXFxuK3N0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUge1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdGludCBpID0gMDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG4rXFx0XFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLFxcbitcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyKSlcXG4rXFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbitcXHRcXHRpKys7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbit7XFxuK1xcdHB0ZV90ICpwdGU7XFxuK1xcdHB0ZV90IHB0ZW50O1xcbitcXHRzcGlubG9ja190ICpwdGw7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbitcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4rXFx0aWYgKHB0bCkge1xcbitcXHRcXHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcXG4rXFxuK1xcdFxcdGlmICghcG1kX3ByZXNlbnQocG1kZSkpXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuK1xcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xcbitcXHRcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRcXHRnb3RvIGh1Z2Vfb3V0O1xcbitcXHRcXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVxcdTAwM2VjdHgsIHByaXYtXFx1MDAzZXIsIGZvbGlvLCBOVUxMLCBcXHUwMDI2cG1kZSxcXG4rXFx0XFx0XFx0XFx0d2Fsay1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcbitodWdlX291dDpcXG4rXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rI2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuK1xcbitcXHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXFx1MDAzZW1tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbitcXHRpZiAoIXB0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4rXFx0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcXG4rXFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIFxcdTAwMjZwdGVudCwgTlVMTCxcXG4rXFx0XFx0XFx0d2Fsay1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcbitvdXQ6XFxuK1xcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVxcdTAwM2V2bWEpO1xcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRzcGlubG9ja190ICpwdGw7XFxuK1xcdHB0ZV90IGVudHJ5O1xcbitcXG4rXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG4rXFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuK1xcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIFxcdTAwMjZlbnRyeSwgTlVMTCxcXG4rXFx0XFx0XFx0d2Fsay1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitvdXQ6XFxuK1xcdHNwaW5fdW5sb2NrKHB0bCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbHNlXFxuKyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMXFxuKyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuK1xcbitzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHtcXG4rXFx0XFx0LmN0eCA9IGN0eCxcXG4rXFx0XFx0LnIgPSByLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fcHJvYmVfd2Fsa19vcHMgPSB7XFxuK1xcdFxcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXFxuK1xcdFxcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gci1cXHUwMDNlc2FtcGxpbmdfYWRkcjtcXG4rXFxuK1xcdGlmICghbW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcXG4rXFx0XFx0XFx0XFx1MDAyNmFyZyk7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuK1xcdFxcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xcbitcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbitcXHRcXHRcXHRpZiAoc2V0X3NhbXBsZXMpXFxuK1xcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cXHUwMDNlYXIuc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZWFyLmVuZCk7XFxuK1xcdFxcdFxcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xcbitcXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbitcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGN0eCksIG1heF93c3VtKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobW0pXFxuK1xcdFxcdFxcdG1tcHV0KG1tKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG1heF93c3VtO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcG1kX3QgKnBtZHApXFxuQEAgLTkzOCw2ICsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4gXFx0XFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcXG4gXFx0XFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcXG4gXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXFxuK1xcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxcbitcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLFxcbiBcXHRcXHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxcbiBcXHRcXHQuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCxcXG4gXFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTY6NDUuMjUyMjg0NDgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjk5ODQ3OTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9vcHNfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwX3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fcGFfZmlsdGVyX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzI2ZDY2YzFjZDI1OGJjNTZkNmQwZTBkYjVmN2Y2Y2E5MjFlZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjoxNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtNDQ0LDMgKzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuK1xuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4rXHRcdGlmICghZm9saW8pIHtcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuK1x0XHRpZiAoIW1lbWNnKVxuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuK31cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTIxLDMgKzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xuIFxuIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTtcbitcbitib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xNDMsMjkgKzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4tXHRcdGlmICghZm9saW8pIHtcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuLVx0XHRpZiAoIW1lbWNnKVxuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuIFx0XHRpZiAoIWZvbGlvKVxuIFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbkBAIC0xNzMsNyArMTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbiBcdH1cbiBcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNTEwLDYgKzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbWF4X25yX2FjY2Vzc2VzO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuK1x0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcmVwICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuK1x0XHRzd2l0Y2ggKHAtXHUwMDNlYWN0aW9uKSB7XG4rXHRcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxuK1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuK1x0XHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcbitcdFx0aWYgKCFtbSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbitcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4rXHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbitcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG4rXHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxuK1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4rXHRcdH1cbitcdFx0bW1wdXQobW0pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuK1xuK1x0aWYgKHB0ZSlcbitcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4rXHRlbHNlIGlmIChwbWQpXG4rXHRcdHlvdW5nID0gcG1kX3lvdW5nKCpwbWQpO1xuK1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7XG4rXHRyZXR1cm4geW91bmc7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLFxuK1x0XHRcdFx0XHRhZGRyKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbitcdH1cbitcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLFxuK1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XG4rXHRib29sIHBhc3MgPSB0cnVlO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcbitcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuK1x0XHRcdHBhc3MgPSBmLVx1MDAzZWFsbG93O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHBhc3MgPSAhZi1cdTAwM2VhbGxvdztcbitcdH1cbitcdHJldHVybiBwYXNzO1xuK31cbitcbitzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4rXHRcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcbitcdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbitcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0rKztcbitcdFx0aSsrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4re1xuK1x0cHRlX3QgKnB0ZTtcbitcdHB0ZV90IHB0ZW50O1xuK1x0c3BpbmxvY2tfdCAqcHRsO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4rXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbitcdGlmIChwdGwpIHtcbitcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4rXG4rXHRcdGlmICghcG1kX3ByZXNlbnQocG1kZSkpXG4rXHRcdFx0Z290byBodWdlX291dDtcbitcdFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwbWRlKTtcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuK1x0XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgTlVMTCwgXHUwMDI2cG1kZSxcbitcdFx0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitodWdlX291dDpcbitcdFx0c3Bpbl91bmxvY2socHRsKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rI2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbitcbitcdHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cdTAwM2VtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuK1x0aWYgKCFwdGUpXG4rXHRcdHJldHVybiAwO1xuK1x0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcbitcdGlmICghZm9saW8pXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNnB0ZW50LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitvdXQ6XG4rXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cdTAwM2V2bWEpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHNwaW5sb2NrX3QgKnB0bDtcbitcdHB0ZV90IGVudHJ5O1xuK1xuK1x0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVx1MDAzZW1tLCBwdGUpO1xuK1x0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4rXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4rXHRmb2xpb19nZXQoZm9saW8pO1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNmVudHJ5LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4rXG4rb3V0OlxuK1x0c3Bpbl91bmxvY2socHRsKTtcbitcdHJldHVybiAwO1xuK31cbisjZWxzZVxuKyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMXG4rI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbitcbitzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHtcbitcdFx0LmN0eCA9IGN0eCxcbitcdFx0LnIgPSByLFxuK1x0fTtcbitcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbitcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSxcbitcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHItXHUwMDNlc2FtcGxpbmdfYWRkcjtcbitcbitcdGlmICghbW0pXG4rXHRcdHJldHVybjtcbitcbitcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFx1MDAyNmRhbW9uX3Byb2JlX3dhbGtfb3BzLFxuK1x0XHRcdFx1MDAyNmFyZyk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuK1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbitcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVx1MDAzZWFyLnN0YXJ0LFxuK1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbitcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbitcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuK1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHR9XG4rXHRcdGlmIChtbSlcbitcdFx0XHRtbXB1dChtbSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbWF4X3dzdW07XG4rfVxuK1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiArMTE2OCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4gXHRcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXG4gXHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4gXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxuK1x0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcyxcbitcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNjo0NS4yNTIyODU3ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5OTI2NTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERBTU9OOiBQYXRjaCBBbmFseXNpcyBhbmQgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdy4gVGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy5cblxuQmFzZWQgb24gdGhlIGZpbGUgbGlzdCwgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9kYW1vbi9vcHMtY29tbW9uLmhgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0J3MgY2xlYXJseSBhIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBtb2RpZmljYXRpb24sIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGJlaW5nIGludHJvZHVjZWQgaW4gYG9wcy1jb21tb25gIGFuZCB1dGlsaXplZCBpbiBgcGFkZHIuY2AgYW5kIGB2YWRkci5jYC4gVGhpcyBzdWdnZXN0cyBzb21lIG5ldyBmaWx0ZXJpbmcgb3IgbWF0Y2hpbmcgbWVjaGFuaXNtIHdpdGhpbiBEQU1PTiwgcG9zc2libHkgZm9yIHNlbGVjdGluZyBtZW1vcnkgcmVnaW9ucyB0byBtb25pdG9yIG9yIGluZmx1ZW5jZS5cblxuTG9va2luZyBkZWVwZXIgYXQgYHZhZGRyLmNgLCB0aGUgZnVuY3Rpb25zIGFkZGVkIGFyZSBwYXJ0aWN1bGFybHkgbm90ZXdvcnRoeTogYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCwgYGRhbW9uX3ZhX3Byb2JlX2ZvbGlvYCwgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCwgYF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzYCwgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBUaGUgYC5wcmVwX3Byb2Jlc2AgYW5kIGAuYXBwbHlfcHJvYmVzYCBob29rcyBpbiBgZGFtb25fdmFfaW5pdGNhbGwoKWAgYXJlIGtleSwgZXNwZWNpYWxseSBpZiB0aGVzZSByZXBsYWNlIGZ1bmN0aW9uYWxpdHkuIFRoZXNlIGFsbCBwb2ludCB0byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyB3aXRoaW4gREFNT04uIFRoaXMgc3VnZ2VzdHMgYSBuZXcgYXBwcm9hY2ggdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIG9yIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc3BvdCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycyB0byB0aGUgY29uZmlndXJhdGlvbiBzaWRlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8ga25vdyB3aGljaCBEQU1PTiBmZWF0dXJlcywgYW5kIHNwZWNpZmljYWxseSBgREFNT05fVkFERFJgIG9yIGBEQU1PTl9QQUREUmAsIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSeKAmWxsIG5lZWQgdG8gcnVuIGdyZXBwZXIgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL0tjb25maWdgIHRvIHBpbiB0aGlzIGRvd24gcXVpY2tseS4gQW55IGNvbmZpZ3VyYXRpb24gaXNzdWVzIGFyZSwgb2J2aW91c2x5LCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGFueSBmb2N1cyBzeW1ib2xzIHRoYXQgY291bGQgaW1wYWN0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTY6NTYuMzUxNTUzNjYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjQ4NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE2OjU2LjM5NDgwNTk1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODU2NTE1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1ha2VmaWxlIEludmVzdGlnYXRpb24gZm9yIE9wcy1Db21tb24gQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG9wcy1jb21tb24uY2AsIGB2YWRkci5jYCwgYW5kIGBwYWRkci5jYCBhcmUgYmVpbmcgY29tcGlsZWQuIFRvIGRvIHRoYXQgZWZmaWNpZW50bHksIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkOiBgL21tL2RhbW9uL01ha2VmaWxlYC4gQSBxdWljayBzY2FuIG9mIHRoYXQgYE1ha2VmaWxlYCBzaG91bGQgcmV2ZWFsIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgbGlua2luZyBzdGVwcyBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIHRob3NlIGNyaXRpY2FsIGZpbGVzLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgYW5kIHRyb3VibGVzaG9vdCBidWlsZCBlcnJvcnMsIGRlcGVuZGVuY3kgcHJvYmxlbXMsIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNjo1OC42ODA0NTk3NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNjo1OC42ODA1MTgzMjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcyNzMzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGNoZWNrOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBDaGVjayoqXG5cbkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcGFyc2UgdGhhdCBLY29uZmlnIGZpbGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYW5kIGV2ZW4gYHNvdXJjZWAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yIG9mIHRob3NlIERBTU9OIGZlYXR1cmVzLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hpY2ggb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGZlYXR1cmVzLCBvciBjb25maWd1cmF0aW9ucyBhcmUgcHJlcmVxdWlzaXRlIGZvciBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIG9yIHJ1bnRpbWUgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QgYW5kIGltcGFjdCBvbmUgYW5vdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDEuMDUzMjUzNjgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDEuMDUzMzM4NTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1NTk4NTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgdGhlIHBhdGNoJ3MgY2hhbmdlcywgZGV0ZXJtaW5pbmcgaWYgdGhleSdyZSByZWFjaGFibGUsIGFuZCB1bHRpbWF0ZWx5IGp1ZGdpbmcgaWYgZnV6emluZyBpdCBpcyB3b3J0aHdoaWxlLiBUaGlzIGlzIGNvcmUgTU0gc3Vic3lzdGVtIGNvZGUsIERBTU9OLCBzbyBpdCdzIGluaGVyZW50bHkgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLlxuXG5Gcm9tIHdoYXQgSSBzZWUsIHRoZSBwYXRjaCBpcyBpbXBsZW1lbnRpbmcgdmlydHVhbCBhZGRyZXNzIHByb2Jlcywgc3BlY2lmaWNhbGx5IGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBJdCBsb29rcyBsaWtlIGl0IGFsc28gaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBwYWdlIHRhYmxlIHdhbGtz4oCUYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YOKAlGFsb25nIHdpdGggZmlsdGVyIG1hdGNoaW5nIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGFuZCBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAuIEZpbmFsbHksIHRoZXJlJ3MgdGhlIHVzdWFsIHN5c2ZzL2NvcmUgREFNT04gaW50ZWdyYXRpb24uIEFsbCBzdGFuZGFyZCBzdHVmZiwgcmVhbGx5LlxuXG5UaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCdzICpmdWxseSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBmYW50YXN0aWMgZm9yIGZ1enppbmcuIFdlIGhhdmUgdGhlIHN5c2ZzIERBTU9OIGludGVyZmFjZSAoYENPTkZJR19EQU1PTl9TWVNGU2AsIGV0Yy4pIGFzIGEgZGlyZWN0IGF0dGFjayB2ZWN0b3IuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgREFNT04gY29udHJvbCBpbnRlcmZhY2VzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGxpa2UgZGVidWdmcywgYnV0IEknbGwgZm9jdXMgb24gc3lzZnMgZm9yIG5vdy4gSXQgaXMgbGlrZWx5IHRoZSBiZXN0IHBhdGggZm9yIGZ1enplciBpbnRlZ3JhdGlvbi5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBzeXNmcyBpbnRlcmZhY2UgYWxsb3dzIHVzIHRvIGNvbmZpZ3VyZSB0aGVzZSBwcm9iZXMgb3IgdGhlIERBTU9OIGNvbnRleHRzL3RhcmdldHMuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGNhbGxzIHRvIGBwcmVwX3Byb2Jlc2Agb3IgYGFwcGx5X3Byb2Jlc2AgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXkncmUgYWN0dWFsbHkgdXNlZC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkxNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjA0LjQwOTMyNzU1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzQwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBwbHlfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NDUtXFx0XFx0XFx0bWF4X21lcmdlX3Njb3JlID0gY3R4LVxcdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk0NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XFxubW0vZGFtb24vY29yZS5jLTM5NDctXFx0XFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTUyLVxcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYzozOTUzOlxcdFxcdFxcdG1heF93c3VtID0gY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXFx1MDAyNlxcdTAwMjYgIWRvX3ByZXAsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE2MD1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTc1LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ2NC1cXHRcXHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2JlcyxcXG5tbS9kYW1vbi9wYWRkci5jOjQ2NTpcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDY2LVxcdFxcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz02Njk9c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cXG5tbS9kYW1vbi92YWRkci5jOjY5NzpzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vdmFkZHIuYy02OTgtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MTYtXFxubW0vZGFtb24vdmFkZHIuYzo3MTc6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjczMTpcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTExNzEtXFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYzoxMTcyOlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYy0xMTczLVxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjA0LjQ1NDQ2NTg1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYzMDY1Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIERlZXBlciBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKipcblxuQWxyaWdodCwgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgREFNT04gYW5kIGl0cyBpbnRlcm5hbHMsIGFuZCBJJ20gZmVlbGluZyB0aGF0IGl0Y2ggdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgaXMgb3BlcmF0aW5nLiBJJ3ZlIGdvdCBteSBoZWFkIGFyb3VuZCBhIGZldyBrZXkgYXJlYXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEknbSBub3cgZm9jdXNpbmcgaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJlYWxpemluZyB0aGVyZSdzIG9uZSBzcGVjaWZpYyB0aGluZyB0aGF0IHJlYWxseSBuZWVkcyBhIGxvb2sgYXQ6IGBwcmVwX3Byb2Jlc2AuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDYuMjE3NTM0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjczMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9wcm9iZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTM4OTM9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MzkzNDpcXHRcXHRkb19wcmVwID0gY3R4LVxcdTAwM2VvcHMucHJlcF9wcm9iZXMgXFx1MDAyNlxcdTAwMjYgZGFtb25faGFzX3ByZXAoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzkzNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTM4LVxcdFxcdGlmIChkb19wcmVwKVxcbm1tL2RhbW9uL2NvcmUuYzozOTM5OlxcdFxcdFxcdGN0eC1cXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgYWNjZXNzX2NoZWNrX2Rpc2FibGVkKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk0MC1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9OTI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEwNy1cXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTEwOS1cXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyNC1cXG5tbS9kYW1vbi9wYWRkci5jOjEyNTpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxubW0vZGFtb24vcGFkZHIuYy0xMjYte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMzYtXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxcbm1tL2RhbW9uL3BhZGRyLmM6MTM3OlxcdFxcdFxcdFxcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTM4LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ2My1cXHRcXHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyxcXG5tbS9kYW1vbi9wYWRkci5jOjQ2NDpcXHRcXHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2JlcyxcXG5tbS9kYW1vbi9wYWRkci5jLTQ2NS1cXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01MTM9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01MjktXFxubW0vZGFtb24vdmFkZHIuYzo1MzA6c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTMxLXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTE2Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0xMTcwLVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MTpcXHRcXHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcyxcXG5tbS9kYW1vbi92YWRkci5jLTExNzItXFx0XFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDYuMjYzMjY2MjkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0Nzk2MDIyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUHJvYmUgYW5kIEZpbHRlciBMb2dpYyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgcmlnaHQgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBEQU1PTiBjb2RlIHRoYXQncyBiZWVuIGludHJvZHVjZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBrZGFtb25kX2ZuYCBmdW5jdGlvbiBhbmQgaG93IERBTU9OIGlzIG1hbmFnZWQuIEl0J3MgdGhlIGNvcmUgREFNT04ga2VybmVsIHRocmVhZCwgc3RhcnRlZCB3aGVuIERBTU9OIGlzIGVuYWJsZWQgdGhyb3VnaCBzeXNmcyB1c2luZyBhdHRyaWJ1dGVzIGxpa2UgYGtkYW1vbmRfbnJfc2NoZW1lc2AgYW5kIHRoZSBcIm9uXCIgc3RhdGUgaW4gYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLmAuIEknbSB3b3JraW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBjb2RlIGlzIHJ1bm5pbmcgd2hlbiB3ZSdyZSBhY3RpdmVseSBtb25pdG9yaW5nIHZpcnR1YWwgYWRkcmVzc2VzIHVzaW5nIHByb2JlcyBvciBmaWx0ZXJzLlxuXG5UaGUgb2J2aW91cyBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzZXR1cHMsIHNheSBpbiBRRU1VLiBUaGUgYW5zd2VyIGlzIHllcywgZ2l2ZW4gc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5c2ZzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIG5vcm0uXG5cbk5vdywgaXMgdGhpcyBjb2RlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UncmUgbG9va2luZyBhdCBjb21wbGV0ZWx5IG5ldyBwcm9iZSBleGVjdXRpb24gbG9naWMsIHRoZSBtZWNoYW5pY3Mgb2Ygd2Fsa2luZyBtZW1vcnkgYWRkcmVzc2VzIChgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlYCksIGRlZXAgZGl2ZXMgaW50byB0aGUgcGFnZSB0YWJsZXMgKGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWApLCBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZSkgbG9ja2luZywgaHVnZSBwYWdlIGxvY2tpbmcsIGZvbGlvIGhhbmRsaW5nLCBhbmQgZmlsdGVyIGNoZWNraW5nIOKAkyBhbGwgY29yZSBhcmVhcyB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZmVydGlsZSBncm91bmQgZm9yIGRpc2NvdmVyeS5cblxuQWxyaWdodCwgbGV0J3MgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFdoYXQgZGlkIHRoZSBwYXRjaCBhY3R1YWxseSBpbnRyb2R1Y2Ugb3IgbW9kaWZ5PyBMZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGRpZmY6XG5cbjEuICBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2BcbjIuICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYCBpbiBgbW0vZGFtb24vcGFkZHIuY2BcbjMuICBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gIGluIGBtbS9kYW1vbi92YWRkci5jYFxuNC4gIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgXG41LiAgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgIGluIGBtbS9kYW1vbi92YWRkci5jYFxuNi4gIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGluIGBtbS9kYW1vbi92YWRkci5jYFxuNy4gIGBkYW1vbl92YV9maWx0ZXJfcGFzc2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgXG44LiAgYGRhbW9uX3ZhX3Byb2JlX2ZvbGlvYCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcbjkuICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcbjEwLiBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgXG4xMS4gYF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcbjEyLiBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcblxuQXJlIHRoZXNlIHN0YXRpYyBvciBleHBvcnRlZD8gTGV0J3Mgc2VlOlxuXG4qICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBhbmQgZGVjbGFyZWQgaW4gYG9wcy1jb21tb24uaGAuXG4qICAgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgaXMgc3RhdGljIGluIGBtbS9kYW1vbi9wYWRkci5jYC5cbiogICBgZGFtb25fdmFfcHJlcF9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBhcmUgb3BlcmF0aW9uIGNhbGxiYWNrcyBpbiBgZGFtb25fdmFfaW5pdGNhbGxgIC8gYGRhbW9uX29wZXJhdGlvbnNgLlxuKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBldGMuIGFyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYHZhZGRyLmNgLlxuXG5Pa2F5LCBsZXQncyBzZWxlY3QgdGhlIGtleSBzeW1ib2xzIGZvciBmdXJ0aGVyIHJldmlldzpcblxuKiAgIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYFxuKiAgIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2BcbiogICBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYFxuKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgXG4qICAgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgXG4qICAgYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGBcbiogICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYFxuXG5XaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZD8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgd2hlbiB3ZSBydW46XG5cbiogICBgREFNT05gXG4qICAgYERBTU9OX1ZBRERSYFxuKiAgIGBEQU1PTl9QQUREUmBcbiogICBgREFNT05fU1lTRlNgXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAoZm9yIGAjaWZkZWYgQ09ORklHX1RSQU5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNzoxMy43NDI4NzA3OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFx0cmV0dXJuIHBhc3M7XFxuIDYwMTpcXHR9XFxuIDYwMjpcXHRcXG4gNjAzOlxcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUge1xcbiA2MDQ6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbiA2MDU6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4gNjA2OlxcdH07XFxuIDYwNzpcXHRcXG4gNjA4OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gNjA5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDYxMDpcXHRcXHRcXHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gNjExOlxcdHtcXG4gNjEyOlxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuIDYxMzpcXHRcXHRpbnQgaSA9IDA7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG4gNjE2OlxcdFxcdFxcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIpKVxcbiA2MTg6XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbiA2MTk6XFx0XFx0XFx0aSsrO1xcbiA2MjA6XFx0XFx0fVxcbiA2MjE6XFx0fVxcbiA2MjI6XFx0XFxuIDYyMzpcXHRzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDYyNDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiA2MjU6XFx0e1xcbiA2MjY6XFx0XFx0cHRlX3QgKnB0ZTtcXG4gNjI3OlxcdFxcdHB0ZV90IHB0ZW50O1xcbiA2Mjg6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA2Mjk6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gNjMwOlxcdFxcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiA2MzE6XFx0XFxuIDYzMjpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDYzMzpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4gNjM0OlxcdFxcdGlmIChwdGwpIHtcXG4gNjM1OlxcdFxcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxcbiA2Mzg6XFx0XFx0XFx0XFx0Z290byBodWdlX291dDtcXG4gNjM5OlxcdFxcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xcbiA2NDA6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4gNjQxOlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDY0MjpcXHRcXHRcXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVxcdTAwM2VjdHgsIHByaXYtXFx1MDAzZXIsIGZvbGlvLCBOVUxMLCBcXHUwMDI2cG1kZSxcXG4gNjQzOlxcdFxcdFxcdFxcdFxcdHdhbGstXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0pO1xcbiA2NDQ6XFx0XFxuIDY0NTpcXHRodWdlX291dDpcXG4gNjQ2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDY0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjQ4OlxcdFxcdH1cXG4gNjQ5OlxcdCNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXFx1MDAzZW1tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbiA2NTI6XFx0XFx0aWYgKCFwdGUpXFxuIDY1MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjU0OlxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNjU1OlxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxcbiA2NTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDY1NzpcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcXG4gNjU4OlxcdFxcdGlmICghZm9saW8pXFxuIDY1OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjYwOlxcdFxcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIFxcdTAwMjZwdGVudCwgTlVMTCxcXG4gNjYxOlxcdFxcdFxcdFxcdHdhbGstXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0pO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRvdXQ6XFxuIDY2NDpcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcXG4gNjY1OlxcdFxcdHJldHVybiAwO1xcbiA2NjY6XFx0fVxcbiA2Njc6XFx0XFxuIDY2ODpcXHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiA2Njk6XFx0c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuIDY3MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiA2NzM6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gNjc0OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY3NTpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDY3NjpcXHRcXHRwdGVfdCBlbnRyeTtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG4gNjc5OlxcdFxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MTMuNzQyOTY1NTI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MjQyNjAyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IHBhdGNoIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgb3BzLWNvbW1vbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLiBJIHNlZSBpdCB1c2VzIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGFuZCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYCBhbmQgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYWN0aXZlIGlmIGBNRU1DR2AgaXMgZW5hYmxlZCwgc28gdGhhdCdzIGEga2V5IGRlcGVuZGVuY3kuXG5cbkxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEknbSBzZWVpbmcgdGhhdCB3ZSd2ZSBmbGFnZ2VkIHRoaXMgYXMgYFdvcnRoRnV6emluZ2AsIHdoaWNoIGFsaWducyB3aXRoIG15IGluaXRpYWwgaW50ZXJlc3QuIFRoZSBwYXRjaCBsZXZlcmFnZXMgYSBudW1iZXIgb2YgY29uZmlndXJhdGlvbnMgaW5jbHVkaW5nIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBIVUdFVExCX1BBR0VgLCBhbmQgY3J1Y2lhbGx5LCBgTUVNQ0dgLiBBbGwgb2YgdGhvc2UgaGF2ZSBiZWVuIGVuYWJsZWQuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyBmdW5jdGlvbnMgbGlrZSBgcG1kX2VudHJ5YCBhbmQgYGh1Z2V0bGJfZW50cnlgLCBwbHVzIGZpbHRlciBtYXRjaGluZywgYW5kIHByb2JpbmcgY2FsbGJhY2tzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IHNjcnV0aW55IGR1cmluZyBmdXp6IHRlc3RpbmcuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IERBTU9OIFN5c2ZzL2tkYW1vbmQgaW50ZXJmYWNlcyBleHBvc2UgdGhlc2UgZnVuY3Rpb25zLlxuXG5UaGlzIHBhdGNoIGxvb2tzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBjb21iaW5hdGlvbiBvZiBwYWdlIHRhYmxlIHdhbGtpbmcsIGNvbXBsZXggbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zICh2aWEgYE1FTUNHYCBhbmQgb3RoZXIgY29uZmlndXJhdGlvbnMpLCBhbmQgc3lzZnMgaW50ZXJmYWNlcyBtYWtlcyBpdCBhIGxpa2VseSB0YXJnZXQuIEkgc2hvdWxkIHByb2JhYmx5IGludm9rZSBgc2V0LXJlc3VsdHNgIGF0IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzg1LCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjE4LjE2NzIyODk5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTMxMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9vcHNfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwX3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fcGFfZmlsdGVyX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9vcHNfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwX3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fcGFfZmlsdGVyX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MTguMjUwNzY3NTU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4OTI1NzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjE4LjI1MTIyOTk1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMTg4NzkxMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcXG5cXG5FdmFsdWF0aW5nIGFnYWluc3QgS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4yLiBObyB1c2VyLXNwYWNlIGNvcHkgbWVjaGFuaXNtczogVGhlIHBhdGNoIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBrZXJuZWwgYnVmZmVycyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXFxuMy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudDogUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgb24gYHByb2JlX2hpdHNgLCBmb2xpbyByZWZlcmVuY2UgY291bnQgbWlzbWF0Y2hlcywgb3IgcGFnZSB0YWJsZSBsb2NraW5nIGlzc3VlcykgZmFsbCBzcXVhcmVseSB3aXRoaW4gdGhlIHB1cnZpZXcgb2YgS0FTQU4sIFVCU0FOLCBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3MjZkNjZjMWNkMjU4YmM1NmQ2ZDBlMGRiNWY3ZjZjYTkyMWVlOGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjE2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCA3MjE5YzYwOGIxOTUyLi5jZmNkNGVkZWUzNDZhIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC00NDQsMyArNDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4rXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcbitcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuK1x0XHRpZiAoIWZvbGlvKSB7XG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4rXHRcdGlmICghbWVtY2cpXG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4rfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuaW5kZXggMzhkMjk1NDg4ZmExOC4uYjgzMjE2OWIxY2Y4YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uaFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5AQCAtMjEsMyArMjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7XG4gXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xuK1xuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCBjMWU3ZDdhNGY0MGRmLi5mZmRlODhlYTdhMTNjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuKysrIGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTE0MywyOSArMTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbiBcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4tXHRcdGlmICghbWVtY2cpXG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRlbHNlXG4tXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuQEAgLTE3Myw3ICsxNTIsNyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxuIFx0XHRcdG1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuIFx0fVxuIFx0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggZjg4NGQzZjc4ZjMwYS4uMDkwMzE3MTkxOTczYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC01MTAsNiArNTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4rXHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG4re1xuK1x0c3RydWN0IGRhbW9uX3ByZXAgKnA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7XG4rXHRcdHN3aXRjaCAocC1cdTAwM2VhY3Rpb24pIHtcbitcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4rXHRcdFx0ZGFtb25fdmFfbWtvbGQobW0sIHItXHUwMDNlc2FtcGxpbmdfYWRkcik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxuK3tcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuK1x0XHRpZiAoIW1tKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuK1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbitcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVx1MDAzZWFyLnN0YXJ0LFxuK1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbitcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4rXHRcdFx0XHRkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTtcbitcdFx0fVxuK1x0XHRtbXB1dChtbSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nX2FkZHIoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRib29sIHlvdW5nID0gZmFsc2U7XG4rXG4rXHRpZiAocHRlKVxuK1x0XHR5b3VuZyA9IHB0ZV95b3VuZygqcHRlKTtcbitcdGVsc2UgaWYgKHBtZClcbitcdFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XG4rXHR5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4rXHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKG1tLCBhZGRyKTtcbitcdHJldHVybiB5b3VuZztcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbitcbitcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuK1x0XHRpZiAoIWZvbGlvKVxuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1hdGNoZWQgPSBkYW1vbl92YV95b3VuZ19hZGRyKGZvbGlvLCBwdGUsIHBtZCwgbW0sXG4rXHRcdFx0XHRcdGFkZHIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuK1x0fVxuK1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfcGFzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsXG4rXHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0c3RydWN0IGRhbW9uX2ZpbHRlciAqZjtcbitcdGJvb2wgcGFzcyA9IHRydWU7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xuK1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7XG4rXHRcdFx0cGFzcyA9IGYtXHUwMDNlYWxsb3c7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0cGFzcyA9ICFmLVx1MDAzZWFsbG93O1xuK1x0fVxuK1x0cmV0dXJuIHBhc3M7XG4rfVxuK1xuK3N0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUge1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4re1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbitcdGludCBpID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbitcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLFxuK1x0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxuK1x0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xuK1x0XHRpKys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbit7XG4rXHRwdGVfdCAqcHRlO1xuK1x0cHRlX3QgcHRlbnQ7XG4rXHRzcGlubG9ja190ICpwdGw7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xuK1x0aWYgKHB0bCkge1xuK1x0XHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcbitcbitcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbitcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuK1x0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay1cdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xuK1x0XHRpZiAoIWZvbGlvKVxuK1x0XHRcdGdvdG8gaHVnZV9vdXQ7XG4rXHRcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBOVUxMLCBcdTAwMjZwbWRlLFxuK1x0XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuK1xuK2h1Z2Vfb3V0OlxuK1x0XHRzcGluX3VubG9jayhwdGwpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbisjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuK1xuK1x0cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVx1MDAzZW1tLCBwbWQsIGFkZHIsIFx1MDAyNnB0bCk7XG4rXHRpZiAoIXB0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4rXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbitcdFx0Z290byBvdXQ7XG4rXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcHRlbnQpO1xuK1x0aWYgKCFmb2xpbylcbitcdFx0Z290byBvdXQ7XG4rXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2cHRlbnQsIE5VTEwsXG4rXHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuK1xuK291dDpcbitcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuK3tcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3BpbmxvY2tfdCAqcHRsO1xuK1x0cHRlX3QgZW50cnk7XG4rXG4rXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXHUwMDNlbW0sIHB0ZSk7XG4rXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbitcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbitcdGZvbGlvX2dldChmb2xpbyk7XG4rXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2ZW50cnksIE5VTEwsXG4rXHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbitcbitvdXQ6XG4rXHRzcGluX3VubG9jayhwdGwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rI2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcbisjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuK1xuK3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuK3tcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xuK1x0XHQuY3R4ID0gY3R4LFxuK1x0XHQuciA9IHIsXG4rXHR9O1xuK1x0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX3Byb2JlX3dhbGtfb3BzID0ge1xuK1x0XHQucG1kX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LFxuK1x0XHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksXG4rXHR9O1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gci1cdTAwM2VzYW1wbGluZ19hZGRyO1xuK1xuK1x0aWYgKCFtbSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXHUwMDI2ZGFtb25fcHJvYmVfd2Fsa19vcHMsXG4rXHRcdFx0XHUwMDI2YXJnKTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK1x0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbitcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4rXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuK1x0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuK1x0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4rXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4rXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4rXHRcdH1cbitcdFx0aWYgKG1tKVxuK1x0XHRcdG1tcHV0KG1tKTtcbitcdH1cbitcbitcdHJldHVybiBtYXhfd3N1bTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWRwKVxuQEAgLTkzOCw2ICsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcbiBcdFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcbiBcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbiBcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXG4rXHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxuK1x0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLFxuIFx0XHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxuIFx0XHQuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCxcbiBcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjE4LjI1MTIzMDkzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTIzNzI0MDc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBSZWZhY3RvcmluZyBhbmQgVmlydHVhbCBBZGRyZXNzIFByb2JpbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aXRoaW4gREFNT04sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB2aXJ0dWFsIGFkZHJlc3Nlcy4gSXQncyB0b3VjaGluZyBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uaGAsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGlzdGluZyBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIGZyYW1ld29yayBpcyBldm9sdmluZy5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGJlaW5nIGFic3RyYWN0ZWQgaW50byBgb3BzLWNvbW1vbi5jYC4gVGhhdCdzIGEgZ29vZCBzaWduOyByZWZhY3RvcmluZyBjb21tb24gZnVuY3Rpb25hbGl0eSBsaWtlIHRoYXQgdXN1YWxseSBzaWduYWxzIGFuIGludGVudCB0byBzdHJlYW1saW5lIHRoZSBjb3JlIERBTU9OIG9wZXJhdGlvbnMgYW5kIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGltcGFjdHMgdGhlIGZpbHRlciBsb2dpYyBkb3duc3RyZWFtLlxuXG5Ob3csIHRoZSBtZWF0IG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIGRlc2lnbmVkIHRvIHN1cHBvcnQgcHJvYmluZyB2aXJ0dWFsIGFkZHJlc3NlcyBkaXJlY3RseS4gSSBzZWUgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCwgYW5kIHRoZW4gZnVuY3Rpb25zIGZvciBwcm9iaW5nIGF0IHRoZSBmb2xpbywgcG1kLCBhbmQgaHVnZXRsYiBsZXZlbHM6IGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAuIEZpbmFsbHksIHRoZSBwYXRjaCBhZGRzICBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCB0byBpbXBsZW1lbnQgdGhlIHByb2JlIGFwcGxpY2F0aW9uIHByb2Nlc3MuIFRoZSByZWdpc3RyYXRpb24gb2YgYHByZXBfcHJvYmVzYCBhbmQgYGFwcGx5X3Byb2Jlc2AgY2FsbGJhY2tzIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgIGNvbmZpcm1zIHRoYXQgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29tcGxldGUgcmV3cml0ZSBmb3IgdmlydHVhbCBhZGRyZXNzIGhhbmRsaW5nIHdpdGhpbiBEQU1PTi5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBtb3JlIHRob3JvdWdobHkuIEnigJlsbCBuZWVkIHRvIHV0aWxpemUgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGZ1bGx5IGdyYXNwIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhlc2UgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcgZnVuY3Rpb25zIGludGVyZmFjZSB3aXRoIHRoZSBleGlzdGluZyBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcuIEknbGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIGhvdyB0aGlzIGlzIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHBhZ2UgdGFibGUgbGV2ZWxzLiBJdCBhbHNvIHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZywgYW5kIGhvdyB0aGlzIHdpbGwgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIERBTU9OIG1vZHVsZXMuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBjYXBhYmlsaXR5IGJlaW5nIGFkZGVkIHRvIERBTU9OLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MjkuNDg4NDc1NTc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk2NjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9mb3JfZWFjaF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYzLVxcbm1tL2RhbW9uL2NvcmUuYzoxNjQ6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTY1LVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjYxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NS1cXG5tbS9kYW1vbi9jb3JlLmM6MjY2OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNjctXFx0XFx0aWYgKGkrKyA9PSBuKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3Mz1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3Ni1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjc4LVxcdFxcdGlmIChwLVxcdTAwM2V3ZWlnaHQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDc2PXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ4Mi1cXG5tbS9kYW1vbi9jb3JlLmM6NDgzOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmMtNDg0LVxcdFxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTk1MD12b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NTktXFxubW0vZGFtb24vY29yZS5jOjk2MDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHAsIG5leHRfcCwgY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy05NjEtXFx0XFx0ZGFtb25fZGVzdHJveV9wcm9iZShwKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDEwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAxNi1cXG5tbS9kYW1vbi9jb3JlLmM6MTAxNzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTAxOC1cXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MzUtXFx0bnJfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MTQzNjpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0xNDM3LVxcdFxcdG5yX3Byb2JlcysrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NTAtXFx0d3N1bSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjE0NTE6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYy0xNDUyLVxcdFxcdGlmIChwcm9iZS1cXHUwMDNld2VpZ2h0IFxcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODQwPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODQ0LVxcbm1tL2RhbW9uL2NvcmUuYzoxODQ1OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoZHN0X3Byb2JlLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTg0Ni1cXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NTktXFxubW0vZGFtb24vY29yZS5jOjE4NjA6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShzcmNfcHJvYmUsIG5leHQsIHNyYykge1xcbm1tL2RhbW9uL2NvcmUuYy0xODYxLVxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMwMC1cXHRpZiAodHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWRfZW5hYmxlZCgpKSB7XFxubW0vZGFtb24vY29yZS5jOjIzMDE6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpXFxubW0vZGFtb24vY29yZS5jLTIzMDItXFx0XFx0XFx0bnJfcHJvYmVzKys7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTEyNT1zdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEzNS1cXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTM2OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcXG5tbS9kYW1vbi9wYWRkci5jLTEzNy1cXHRcXHRcXHRcXHRkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24ociwgcCwgY3R4KTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTk1LVxcdFxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7XFxubW0vZGFtb24vcGFkZHIuYzoxOTY6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYy0xOTctXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05OC1cXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4LVxcdGkgPSAwO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDk6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTAtXFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpzeXNfcHJvYmU7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQyOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ5LVxcdG5yX2RzdF9wcm9iZXMgPSAwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDUwOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDUxLVxcdFxcdG5yX2RzdF9wcm9iZXMrKztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1Mi1cXHRucl9zcmNfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ1MzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1NC1cXHRcXHRucl9zcmNfcHJvYmVzKys7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1OC1cXHRucl9kc3RfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ1OTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDYwLVxcdFxcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShucl9kc3RfcHJvYmVzLCBzcmMpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01MzA9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01NDQtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjU0NTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxubW0vZGFtb24vdmFkZHIuYy01NDYtXFx0XFx0XFx0XFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTYxNC1cXG5tbS9kYW1vbi92YWRkci5jOjYxNTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vdmFkZHIuYy02MTYtXFx0XFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNzoyOS41MzU0NDg2NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1MzQyMzU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uIENoZWNrKipcblxuT2theSwgdGltZSB0byBkcmlsbCBkb3duIG9uIHRoZXNlIHZhcmlhYmxlcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYGRhbW9uX3JlZ2lvbmAgYW5kIGBwcm9iZV9oaXRzYCBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkndmUgc2VlbiBjb3VudGxlc3MgaXNzdWVzIHN0ZW0gZnJvbSBpbXByb3BlciBtZW1vcnkgbWFuYWdlbWVudCBpbiBsb3ctbGV2ZWwgY29kZSBsaWtlIHRoaXMuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCB0aGUgbWVtb3J5IGlzIGJlaW5nIHJlcXVlc3RlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyBhbmQgYWxpZ25tZW50LCBhbmQgdGhhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZXQgdXAgd2l0aCB0aGVpciBpbml0aWFsIHZhbHVlcyB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciBvdXIgYWxnb3JpdGhtLCBsaWtlbHkgemVyb2VkLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgYXJlIGNvcnJlY3QuIEFueSBzbGlwLXVwIGhlcmUgY291bGQgbGVhZCB0byBjcmFzaGVzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3Igc3VidGxlIGJ1Z3MgdGhhdCBhcmUgaW5jcmVkaWJseSBkaWZmaWN1bHQgdG8gZGVidWcgbGF0ZXIgb24sIHNvIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGlzIHJvY2sgc29saWQgYmVmb3JlIG1vdmluZyBvbi4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgYWxsb2NhdGlvbiBjYWxscywgbG9vayBhdCB0aGUgc2l6ZXMgYmVpbmcgcGFzc2VkLCBhbmQgdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHBhdGhzLiBObyBzdG9uZSB1bnR1cm5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjMxLjY4ODg3NDU5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NDgyOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmVfaGl0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0OC1cXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0zNTAtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2Ni1cXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXFxubW0vZGFtb24vY29yZS5jOjM2NzpcXHRcXHRyZXR1cm4gci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XFxubW0vZGFtb24vY29yZS5jLTM2OC1cXG5tbS9kYW1vbi9jb3JlLmM6MzY5OlxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXFxubW0vZGFtb24vY29yZS5jOjM3MDpcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xcbm1tL2RhbW9uL2NvcmUuYy0zNzEtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM4OT1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjQwMzpcXHRcXHRyZWdpb24tXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo0MDQ6XFx0XFx0cmVnaW9uLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy00MDUtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ2OC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG5tbS9kYW1vbi9jb3JlLmMtNDcwLSAqIEByOlxcdFxcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzUtICovXFxubW0vZGFtb24vY29yZS5jOjQ3Njp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODQtXFx0XFx0aWYgKGxhc3QpXFxubW0vZGFtb24vY29yZS5jOjQ4NTpcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbm1tL2RhbW9uL2NvcmUuYy00ODYtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzo0ODc6XFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jLTQ4OC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAwMz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cXG5tbS9kYW1vbi9jb3JlLmM6MTAxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDExLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDE3LVxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMDE4OlxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cXHRcXHRpZiAoIWFnZ3JlZ2F0aW5nKVxcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jOjEwMjI6XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVxcdFxcdFxcdFxcdFxcdG5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTEwMjQtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDI1OlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI2LVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDMwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzMte1xcbm1tL2RhbW9uL2NvcmUuYzoxMDM0OlxcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDI3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQyOS1cXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcXG5tbS9kYW1vbi9jb3JlLmM6MTQzMDpcXHR1bnNpZ25lZCBjaGFyIG1heF9wcm9iZV9oaXRzO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDMxLVxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ0OC1cXHQvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNDQ5OlxcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE0NTAtXFx0d3N1bSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTE0NTEtXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlxcdFxcdGlmIChwcm9iZS1cXHUwMDNld2VpZ2h0IFxcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1My1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjE0NTQ6XFx0XFx0d3N1bV90b19hZGQgPSBwcm9iZS1cXHUwMDNld2VpZ2h0ICogbWF4X3Byb2JlX2hpdHM7XFxubW0vZGFtb24vY29yZS5jLTE0NTUtXFx0XFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcXHUwMDNjIHdzdW1fdG9fYWRkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMxNi1cXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIzMTc6XFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gci1cXHUwMDNlcHJvYmVfaGl0c1tpXTtcXG5tbS9kYW1vbi9jb3JlLmM6MjMxODpcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjMxOS1cXHRcXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQyNj1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MzQzODpcXHRcXHRsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXFx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICsgci1cXHUwMDNlcHJvYmVfaGl0c1tpXVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM5LVxcdFxcdFxcdFxcdCogc3pfcikgLyAoc3pfbCArIHN6X3IpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jOjM0NDU6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDQ2LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ0NzpcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjM0NDg6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDQ5LVxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYzozNDY1OlxcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDY2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjktXFxubW0vZGFtb24vY29yZS5jOjM0NzA6XFx0XFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XFxubW0vZGFtb24vY29yZS5jOjM0NzE6XFx0XFx0bGFzdF9zY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIHRydWUsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDcyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODYtXFx0XFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxcbm1tL2RhbW9uL2NvcmUuYzozNDg3OlxcdFxcdFxcdFxcdFxcdHVzZV9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM0ODgtXFx0XFx0aWYgKGRpZmYgXFx1MDAzZSB0aHJlcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNTY2PXN0YXRpYyBpbnQgZGFtb25fc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzU4MS1cXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzU4MjpcXHRtZW1jcHkobmV3LVxcdTAwM2Vwcm9iZV9oaXRzLCByLVxcdTAwM2Vwcm9iZV9oaXRzLCBzaXplb2Yoci1cXHUwMDNlcHJvYmVfaGl0cykpO1xcbm1tL2RhbW9uL2NvcmUuYzozNTgzOlxcdG1lbWNweShuZXctXFx1MDAzZWxhc3RfcHJvYmVfaGl0cywgci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzLFxcbm1tL2RhbW9uL2NvcmUuYzozNTg0OlxcdFxcdFxcdHNpemVvZihyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzU4NS1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTk3LVxcdFxcdFxcdFxcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxcbm1tL2RhbW9uL3BhZGRyLmM6MTk4OlxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0rKztcXG5tbS9kYW1vbi9wYWRkci5jLTE5OS1cXHRcXHRcXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA0OlxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDA9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShoaXRzLCAwNDAwKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01MT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcHJvYmVfYXR0cnNbXSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01My1cXHROVUxMLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2JlcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTMtXFx0XFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExNDpcXHRcXHRcXHRcXHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cXHRcXHRpZiAoIXN5c19wcm9iZSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0MD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQtXFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDE1O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTU6XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1swXSA9IDc7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NjpcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0gPSAzO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTctXFx0ci1cXHUwMDNlYWdlID0gMTA7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3MzpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlcHJvYmVfaGl0c1swXSwgcl9uZXctXFx1MDAzZXByb2JlX2hpdHNbMF0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzQ6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSwgcl9uZXctXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3NS1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCByX25ldy1cXHUwMDNlYWdlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5NS1cXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDEwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxOTY6XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1swXSA9IDY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5Ny1cXHRyLVxcdTAwM2VhZ2UgPSA5O1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNC1cXHRyMi1cXHUwMDNlbnJfYWNjZXNzZXMgPSAyMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjA1OlxcdHIyLVxcdTAwM2Vwcm9iZV9oaXRzWzBdID0gMTQ7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNi1cXHRyMi1cXHUwMDNlYWdlID0gMjE7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjEyLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjEzOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vwcm9iZV9oaXRzWzBdLCAxMSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxNC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCAxN3UpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1MTQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MzgtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1Mzk6XFx0LyogTW9yZSBzYW1wbGVzIGNvdWxkIG92ZXJmbG93IHRoZSBwcm9iZV9oaXRzIGNvdW50ZXJzLiAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQwLVxcdGN0eC1cXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDI1NjtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjA4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjE3LVxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIpKVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjE4OlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0rKztcXG5tbS9kYW1vbi92YWRkci5jLTYxOS1cXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTcxNz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbm1tL2RhbW9uL3ZhZGRyLmM6NzMzOlxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG5tbS9kYW1vbi92YWRkci5jLTczNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjMxLjczMzQyNzQ5NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzA2NTc2MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBEQU1PTiBWaXJ0dWFsIEFkZHJlc3MgUHJvYmluZyBhbmQgRmlsdGVyaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgdGhleSd2ZSByZWZhY3RvcmVkIHRoZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24sIG1vdmluZyBpdCB0byBgb3BzLWNvbW1vbi5jYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBvcmdhbml6YXRpb25hbCBjaGFuZ2UuIENoZWNraW5nIHRoZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgY29kZSBpdHNlbGYsIEkgc2VlIGl0J3MgcHJvcGVybHkgaGFuZGxpbmcgZGlmZmVyZW50IGZpbHRlciB0eXBlcyAoQU5PTiwgTUVNQ0cpLCBhbmQgYWxsIHZhcmlhYmxlcyB3aXRoaW4gYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHNwZWNpZmljYWxseSBgbWF0Y2hlZGAgYW5kIGBtZW1jZ2AuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIFRoZSBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfcmVhZF91bmxvY2tgIGFyZSBhcHByb3ByaWF0ZWx5IHBhaXJlZCB3aXRoaW4gdGhlIE1FTUNHIGNoZWNrLlxuXG5OZXh0LCBJJ20gZGl2aW5nIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBwcm9iaW5nIGNvZGUgaW4gYHZhZGRyLmNgLiBUaGUgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCBhbmQgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBmdW5jdGlvbnMgbG9vayBzdHJhaWdodGZvcndhcmQsIHNldHRpbmcgdXAgdGhlIHByb2JpbmcgcHJvY2Vzcy4gTm93LCBsZXQncyBleGFtaW5lIGBkYW1vbl92YV95b3VuZ19hZGRyYC4gSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHZhbGlkaXR5IG9mIGBwdGVgIGFuZCBgcG1kYCBkZXJlZmVyZW5jZXMgaGVyZS4gTG9va2luZyBhdCB3aGVyZSB0aGV5J3JlIHVzZWQsIEkgc2VlIHRoYXQgd2l0aGluIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGVpdGhlciBgcHRlYCBvciBgcG1kYCBpcyBwYXNzZWQuIFRoZSBpbml0aWFsaXphdGlvbiBpbiBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgIHNlZW1zIHJvYnVzdCB1c2luZyBgcG1kcF9nZXRgLCBgcHRlcF9nZXRgIGFuZCBgaHVnZV9wdGVwX2dldGAgcmVzcGVjdGl2ZWx5LCB3aGljaCBhcmUgZ29vZC4gVGhlIGB5b3VuZ2AgdmFyaWFibGUgaXMgYWxzbyBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC5cblxuVGhlIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCBpcyBzaW1wbGUgYW5kLCBpZiBub3QsIGl0IGRlZmVycyB0byBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgd2hpY2ggd2UgcmV2aWV3ZWQgZWFybGllci4gVGhlIGBkYW1vbl92YV9maWx0ZXJfcGFzc2AgZnVuY3Rpb24gaXMgc2ltaWxhcmx5IHNpbXBsZSB3aXRoIGEgYHBhc3NgIGZsYWcgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCBhbmQgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCB3aGljaCBjb250YWluIGxvb3BzIGFuZCB3YWxrZXJzLCBhcmUgY2FyZWZ1bGx5IGhhbmRsaW5nIHByb2JlcyBhbmQgaW5jcmVtZW50aW5nIGByLVx1MDAzZXByb2JlX2hpdHNbaV0rK2AsIHNvIGl0J3MgYSBjcml0aWNhbCBwb2ludCB0byBjaGVjaywgd2hpY2ggc2VlbXMgb2theS4gU3RydWN0cyBpbiBwYWdlIHdhbGtzLCBsaWtlIGBhcmdgLCBhcmUgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBhcmVhcy4gSSdtIG5vdCBzZWVpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHZpYSB0aGluZ3MgbGlrZSBgY29weV90b191c2VyYCwgaW9jdGxzLCBvciBuZXRsaW5rLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGNvcGllZCwgd2hpY2ggaXMgZ29vZC5cblxuQ291bGQgd2UgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhlIGFuc3dlciBpcyBcIm5vXCIuIEhvd2V2ZXIsIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqTG9ja2luZy9SZWZlcmVuY2UgQ291bnRpbmc6KiogUG90ZW50aWFsbHkgdGhpbmdzIGxpa2UgYGZvbGlvX2dldGAvYGZvbGlvX3B1dGAsIG9yIGxvY2tpbmcgaW4gdGhlIHBhZ2UgdGFibGUgd2FsayAoYHB0ZV9vZmZzZXRfbWFwX2xvY2tgLCBgc3Bpbl91bmxvY2tgKSBhcmUgYSBwcmltYXJ5IGZvY3VzIGZvciBzdGFuZGFyZCBkZXRlY3RvcnMuIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgY2F0Y2ggdGhhdC5cbiogICAqKk91dC1vZi1Cb3VuZHMgQWNjZXNzOioqIFdoaWxlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9vcCB0aGF0IGluY3JlbWVudHMgYHItXHUwMDNlcHJvYmVfaGl0c1tpXWAsIGNoZWNraW5nIGBucl9wcm9iZXMgXHUwMDNlIERBTU9OX01BWF9QUk9CRVNgIHdvdWxkIGJlIG5lY2Vzc2FyeS4gS0FTQU4vVUJTQU4gc2hvdWxkIGZsYWcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuKiAgICoqQ29uY3VycmVuY3kgSXNzdWVzOioqIFBhZ2UgdGFibGUgd2Fsa3MgY2FuIGJlIHRyaWNreS4gUGFnZSB0YWJsZSB3YWxrIGNvbmN1cnJlbmN5IC8gcGFnZSBzdGF0ZSBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gb24gYW55IE1NIGNvZGUsIGNhbiBiZSBwaWNrZWQgdXAgYnkgS0FTQU4va2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgZm9yIGEgS01TQU4gcGVyc3BlY3RpdmUsIGFsbCBvZiB0aGVzZSBtZW1vcnkgZXJyb3JzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4vVUJTQU4gZGV0ZWN0b3JzLiBJIHdpbGwgZG91YmxlLWNoZWNrIHRoZSA0IGNyaXRlcmlhIGZvciBOZWVkc0tNU0FOOlxuXG4xLiAgKipLZXJuZWwtdG8tVXNlcjoqKiBOb3RoaW5nLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIEV4cGxpY2l0IGluaXRpYWxpemF0aW9uLlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogTm8gYWxsb2NhdGlvbiwgb3IgdW5pbml0aWFsaXplZCByZWFkLlxuNC4gICoqQm91bmRzIENoZWNrczoqKiBObyBzdXJyb3VuZGluZyBjb2RlIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5CYXNlZCBvbiB0aGlzLCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiouXG5cbioqS01TQU4gdnMgS0FTQU4gUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHZpcnR1YWwgYWRkcmVzcyBwcm9iaW5nIGFuZCBmaWx0ZXIgbWF0Y2hpbmcgd2l0aGluIERBTU9OLiBBbGwgcmVsZXZhbnQgbG9jYWwgdmFyaWFibGVzLCBmbGFncywgYW5kIHdhbGtlciBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgdG91Y2gga2VybmVsLXRvLXVzZXIgbWVtb3J5IHRyYW5zZmVycy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludHJvZHVjZWQuIElzc3VlcyBsaWtlIHJhY2UgY29uZGl0aW9ucywgYm91bmRzIGNoZWNrcyAocHJvYmVcXF9oaXRzKSwgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOL1VCU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHdhcnJhbnRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIyNywiT3V0cHV0VG9rZW5zIjoyNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjQxLjQ0MDAwNjI1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgb3BlcmF0aW9ucyAocHJlcCBhbmQgYXBwbHkgcHJvYmVzKSBhbmQgcmVmYWN0b3JzIGNvbW1vbiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gXFxuXFxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogQWxsIGxvY2FsIHZhcmlhYmxlcyAoYG1hdGNoZWRgLCBgeW91bmdgLCBgcGFzc2AsIGBpYCksIHN0YWNrIHN0cnVjdHVyZXMgKGBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGVgLCBgbW1fd2Fsa19vcHNgKSwgYW5kIHBhZ2UgdGFibGUgZW50cnkgY29waWVzIChgcHRlbnRgLCBgcG1kZWAsIGBlbnRyeWApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuMi4gTm8gdXNlci1zcGFjZSBjb3B5IG1lY2hhbmlzbXM6IFRoZSBwYXRjaCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGJ1ZmZlcnMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcXG5cXG5FdmFsdWF0aW5nIGFnYWluc3QgS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4yLiBObyB1c2VyLXNwYWNlIGNvcHkgbWVjaGFuaXNtczogVGhlIHBhdGNoIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBrZXJuZWwgYnVmZmVycyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXFxuMy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudDogUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgb24gYHByb2JlX2hpdHNgLCBmb2xpbyByZWZlcmVuY2UgY291bnQgbWlzbWF0Y2hlcywgb3IgcGFnZSB0YWJsZSBsb2NraW5nIGlzc3VlcykgZmFsbCBzcXVhcmVseSB3aXRoaW4gdGhlIHB1cnZpZXcgb2YgS0FTQU4sIFVCU0FOLCBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwxk9r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 02:15:14 +0000 UTC FinishedAt: 2026-09-07 02:17:42 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE", "HUGETLB_PAGE", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE", "HUGETLB_PAGE", "MEMCG" ], "series_id": "f68db553-0a70-4fac-b1af-4299844ba77b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_ops_filter_match", "damon_va_prep_probes", "damon_va_apply_probes", "damon_va_probe_pmd_entry", "damon_va_probe_hugetlb_entry", "damon_va_filter_match", "damon_pa_filter_match" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX29wc19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcF9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9maWx0ZXJfbWF0Y2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBldmFsdWF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgY3VzdG9tIHBhZ2UgdGFibGUgd2Fsa2luZyBmb3Igbm9ybWFsLCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgaHVnZXRsYiBwYWdlcywgYWxvbmdzaWRlIHNoYXJlZCBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBleGVjdXRlZCBieSB0aGUgREFNT04ga2VybmVsIHdvcmtlciB0aHJlYWQgYW5kIGFyZSByZWFjaGFibGUgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZXMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6IHRlc3RpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNzI2ZDY2YzFjZDI1OGJjNTZkNmQwZTBkYjVmN2Y2Y2E5MjFlZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjoxNjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTQ0NCwzICYjNDM7NDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4mIzQzO1x0XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5pbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7XG4gXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xuJiM0MztcbiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTQzLDI5ICYjNDM7MTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbiBcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4tXHRcdGlmICghbWVtY2cpXG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRlbHNlXG4tXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4gXHR9XG4gXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuJiM0MztcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuJiM0MztcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4mIzQzO1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRpZiAoIW1tKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuJiM0MztcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4mIzQzO1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtbXB1dChtbSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocHRlKVxuJiM0MztcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4mIzQzO1x0ZWxzZSBpZiAocG1kKVxuJiM0MztcdFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XG4mIzQzO1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuJiM0MztcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xuJiM0MztcdHJldHVybiB5b3VuZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbiYjNDM7XHRcdGlmICghZm9saW8pXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSxcbiYjNDM7XHRcdFx0XHRcdGFkZHIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcbiYjNDM7XHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2ZpbHRlciAqZjtcbiYjNDM7XHRib29sIHBhc3MgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xuJiM0MztcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuJiM0MztcdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwYXNzID0gIWYtXHUwMDNlYWxsb3c7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwYXNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4mIzQzO1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4mIzQzO1x0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxuJiM0MztcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiYjNDM7XHRwdGVfdCBwdGVudDtcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0aWYgKHB0bCkge1xuJiM0MztcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiYjNDM7XHRcdFx0Z290byBodWdlX291dDtcbiYjNDM7XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4mIzQzO1x0XHRpZiAoIWZvbGlvKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuJiM0MztcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4mIzQzO1x0XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7aHVnZV9vdXQ6XG4mIzQzO1x0XHRzcGluX3VubG9jayhwdGwpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuJiM0MztcbiYjNDM7XHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiYjNDM7XHRpZiAoIXB0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4mIzQzO1x0aWYgKCFmb2xpbylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbiYjNDM7XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0cHRlX3QgZW50cnk7XG4mIzQzO1xuJiM0MztcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiYjNDM7XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4mIzQzO1x0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2ZW50cnksIE5VTEwsXG4mIzQzO1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xuJiM0MztcdFx0LmN0eCA9IGN0eCxcbiYjNDM7XHRcdC5yID0gcixcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbiYjNDM7XHRcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXG4mIzQzO1x0XHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbiYjNDM7XHRcdFx0XHUwMDI2YXJnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuJiM0MztcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuJiM0MztcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4mIzQzO1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbiYjNDM7XHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG4mIzQzO1x0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4mIzQzO1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChtbSlcbiYjNDM7XHRcdFx0bW1wdXQobW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1heF93c3VtO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiAmIzQzOzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcbiYjNDM7XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxuJiM0MztcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBwcmVwYXJhdGlvbiBhbmQgZXZhbHVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIGN1c3RvbSBwYWdlIHRhYmxlIHdhbGtpbmcgZm9yIG5vcm1hbCwgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIGh1Z2V0bGIgcGFnZXMsIGFsb25nc2lkZSBzaGFyZWQgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZXhlY3V0ZWQgYnkgdGhlIERBTU9OIGtlcm5lbCB3b3JrZXIgdGhyZWFkIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2VzLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6eiB0ZXN0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTcyNmQ2NmMxY2QyNThiYzU2ZDZkMGUwZGI1ZjdmNmNhOTIxZWU4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDI6MTY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uYwpAQCAtNDQ0LDMgJiM0Mzs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KJiM0MzsKJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgomIzQzOwkJaWYgKCFmb2xpbykgewomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCW1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiYjNDM7CQlpZiAoIW1lbWNnKQomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltYXRjaGVkID0gZmlsdGVyLSZndDttZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTsKIAogYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpOwomIzQzOwomIzQzO2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0xNDMsMjkgJiM0MzsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAogCXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgotCQlpZiAoIWZvbGlvKSB7Ci0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQltYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKLQkJYnJlYWs7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKLQkJaWYgKCFmb2xpbykgewotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQltZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTsKLQkJaWYgKCFtZW1jZykKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlicmVhazsKIAljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDoKIAkJaWYgKCFmb2xpbykKIAkJCW1hdGNoZWQgPSBmYWxzZTsKQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJCW1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7CiAJfQogCXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiB9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gbWF4X25yX2FjY2Vzc2VzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ByZXAgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHsKJiM0MzsJCXN3aXRjaCAocC0mZ3Q7YWN0aW9uKSB7CiYjNDM7CQljYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRToKJiM0MzsJCQlkYW1vbl92YV9ta29sZChtbSwgci0mZ3Q7c2FtcGxpbmdfYWRkcik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzOwlzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHsKJiM0MzsJCW1tID0gZGFtb25fZ2V0X21tKHQpOwomIzQzOwkJaWYgKCFtbSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CiYjNDM7CQkJaWYgKHNldF9zYW1wbGVzKQomIzQzOwkJCQlyLSZndDtzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItJmd0O2FyLnN0YXJ0LAomIzQzOwkJCQkJCXItJmd0O2FyLmVuZCk7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KQomIzQzOwkJCQlkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTsKJiM0MzsJCX0KJiM0MzsJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCB5b3VuZyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAocHRlKQomIzQzOwkJeW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7CiYjNDM7CWVsc2UgaWYgKHBtZCkKJiM0MzsJCXlvdW5nID0gcG1kX3lvdW5nKCpwbWQpOwomIzQzOwl5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7CiYjNDM7CXJldHVybiB5b3VuZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSwKJiM0MzsJCQkJCWFkZHIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfcGFzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7CiYjNDM7CWJvb2wgcGFzcyA9IHRydWU7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7CiYjNDM7CQlpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7CiYjNDM7CQkJcGFzcyA9IGYtJmd0O2FsbG93OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcGFzcyA9ICFmLSZndDthbGxvdzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGFzczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkgewomIzQzOwkJaWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLAomIzQzOwkJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkcikpCiYjNDM7CQkJci0mZ3Q7cHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7CiYjNDM7CQlpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJcHRlX3QgKnB0ZTsKJiM0MzsJcHRlX3QgcHRlbnQ7CiYjNDM7CXNwaW5sb2NrX3QgKnB0bDsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay0mZ3Q7dm1hKTsKJiM0MzsJaWYgKHB0bCkgewomIzQzOwkJcG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBtZF9wcmVzZW50KHBtZGUpKQomIzQzOwkJCWdvdG8gaHVnZV9vdXQ7CiYjNDM7CQlmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay0mZ3Q7dm1hLCBhZGRyLCBwbWRlKTsKJiM0MzsJCWlmICghZm9saW8pCiYjNDM7CQkJZ290byBodWdlX291dDsKJiM0MzsJCWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sIE5VTEwsICZhbXA7cG1kZSwKJiM0MzsJCQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7aHVnZV9vdXQ6CiYjNDM7CQlzcGluX3VubG9jayhwdGwpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsjZW5kaWYJLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiYjNDM7CiYjNDM7CXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay0mZ3Q7bW0sIHBtZCwgYWRkciwgJmFtcDtwdGwpOwomIzQzOwlpZiAoIXB0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQocHRlbnQpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstJmd0O3ZtYSwgYWRkciwgcHRlbnQpOwomIzQzOwlpZiAoIWZvbGlvKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sICZhbXA7cHRlbnQsIE5VTEwsCiYjNDM7CQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiYjNDM7c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLSZndDt2bWEpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzcGlubG9ja190ICpwdGw7CiYjNDM7CXB0ZV90IGVudHJ5OwomIzQzOwomIzQzOwlwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstJmd0O21tLCBwdGUpOwomIzQzOwllbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQoZW50cnkpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgJmFtcDtlbnRyeSwgTlVMTCwKJiM0MzsJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNwaW5fdW5sb2NrKHB0bCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMCiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHsKJiM0MzsJCS5jdHggPSBjdHgsCiYjNDM7CQkuciA9IHIsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHsKJiM0MzsJCS5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksCiYjNDM7CQkuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9IHItJmd0O3NhbXBsaW5nX2FkZHI7CiYjNDM7CiYjNDM7CWlmICghbW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCAmYW1wO2RhbW9uX3Byb2JlX3dhbGtfb3BzLAomIzQzOwkJCSZhbXA7YXJnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF93c3VtID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewomIzQzOwkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCV9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpOwomIzQzOwkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiYjNDM7CQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKJiM0MzsJCQkJCQkJY3R4KSwgbWF4X3dzdW0pOwomIzQzOwkJfQomIzQzOwkJaWYgKG1tKQomIzQzOwkJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF4X3dzdW07CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWRwKQpAQCAtOTM4LDYgJiM0MzsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZCkKIAkJLnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSwKIAkJLnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcywKIAkJLmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsCiYjNDM7CQkucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcywKJiM0MzsJCS5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsCiAJCS50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsCiAJCS5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LAogCQkuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgREFNT046IFBhdGNoIEFuYWx5c2lzIGFuZCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZywgYW5kIGlmIHNvLCBob3cuIFRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuCgpCYXNlZCBvbiB0aGUgZmlsZSBsaXN0LCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uaGAsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYCwgaXQmIzM5O3MgY2xlYXJseSBhIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBtb2RpZmljYXRpb24sIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGJlaW5nIGludHJvZHVjZWQgaW4gYG9wcy1jb21tb25gIGFuZCB1dGlsaXplZCBpbiBgcGFkZHIuY2AgYW5kIGB2YWRkci5jYC4gVGhpcyBzdWdnZXN0cyBzb21lIG5ldyBmaWx0ZXJpbmcgb3IgbWF0Y2hpbmcgbWVjaGFuaXNtIHdpdGhpbiBEQU1PTiwgcG9zc2libHkgZm9yIHNlbGVjdGluZyBtZW1vcnkgcmVnaW9ucyB0byBtb25pdG9yIG9yIGluZmx1ZW5jZS4KCkxvb2tpbmcgZGVlcGVyIGF0IGB2YWRkci5jYCwgdGhlIGZ1bmN0aW9ucyBhZGRlZCBhcmUgcGFydGljdWxhcmx5IG5vdGV3b3J0aHk6IGBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbmAsIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AsIGBkYW1vbl92YV95b3VuZ19hZGRyYCwgYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAsIGBkYW1vbl92YV9maWx0ZXJfcGFzc2AsIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYC4gVGhlIGAucHJlcF9wcm9iZXNgIGFuZCBgLmFwcGx5X3Byb2Jlc2AgaG9va3MgaW4gYGRhbW9uX3ZhX2luaXRjYWxsKClgIGFyZSBrZXksIGVzcGVjaWFsbHkgaWYgdGhlc2UgcmVwbGFjZSBmdW5jdGlvbmFsaXR5LiBUaGVzZSBhbGwgcG9pbnQgdG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgd2l0aGluIERBTU9OLiBUaGlzIHN1Z2dlc3RzIGEgbmV3IGFwcHJvYWNoIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyBvciBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHNwb3QgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyB0byB0aGUgY29uZmlndXJhdGlvbiBzaWRlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8ga25vdyB3aGljaCBEQU1PTiBmZWF0dXJlcywgYW5kIHNwZWNpZmljYWxseSBgREFNT05fVkFERFJgIG9yIGBEQU1PTl9QQUREUmAsIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSeKAmWxsIG5lZWQgdG8gcnVuIGdyZXBwZXIgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL0tjb25maWdgIHRvIHBpbiB0aGlzIGRvd24gcXVpY2tseS4gQW55IGNvbmZpZ3VyYXRpb24gaXNzdWVzIGFyZSwgb2J2aW91c2x5LCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGFueSBmb2N1cyBzeW1ib2xzIHRoYXQgY291bGQgaW1wYWN0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNYWtlZmlsZSBJbnZlc3RpZ2F0aW9uIGZvciBPcHMtQ29tbW9uIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb3BzLWNvbW1vbi5jYCwgYHZhZGRyLmNgLCBhbmQgYHBhZGRyLmNgIGFyZSBiZWluZyBjb21waWxlZC4gVG8gZG8gdGhhdCBlZmZpY2llbnRseSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkOiBgL21tL2RhbW9uL01ha2VmaWxlYC4gQSBxdWljayBzY2FuIG9mIHRoYXQgYE1ha2VmaWxlYCBzaG91bGQgcmV2ZWFsIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgbGlua2luZyBzdGVwcyBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIHRob3NlIGNyaXRpY2FsIGZpbGVzLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgYW5kIHRyb3VibGVzaG9vdCBidWlsZCBlcnJvcnMsIGRlcGVuZGVuY3kgcHJvYmxlbXMsIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGNoZWNrOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQ2hlY2sqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1lTRlNgLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHBhcnNlIHRoYXQgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBhbmQgZXZlbiBgc291cmNlYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgdGhvc2UgREFNT04gZmVhdHVyZXMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGljaCBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBwcmVyZXF1aXNpdGUgZm9yIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIG9yIHJ1bnRpbWUgaXNzdWVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGludGVyYWN0IGFuZCBpbXBhY3Qgb25lIGFub3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMsIGRldGVybWluaW5nIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSwgYW5kIHVsdGltYXRlbHkganVkZ2luZyBpZiBmdXp6aW5nIGl0IGlzIHdvcnRod2hpbGUuIFRoaXMgaXMgY29yZSBNTSBzdWJzeXN0ZW0gY29kZSwgREFNT04sIHNvIGl0JiMzOTtzIGluaGVyZW50bHkgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKRnJvbSB3aGF0IEkgc2VlLCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIHZpcnR1YWwgYWRkcmVzcyBwcm9iZXMsIHNwZWNpZmljYWxseSBgZGFtb25fdmFfcHJlcF9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYC4gSXQgbG9va3MgbGlrZSBpdCBhbHNvIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkgcGFnZSB0YWJsZSB3YWxrc+KAlGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWDigJRhbG9uZyB3aXRoIGZpbHRlciBtYXRjaGluZyBmdW5jdGlvbnMgbGlrZSBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCBhbmQgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyB0aGUgdXN1YWwgc3lzZnMvY29yZSBEQU1PTiBpbnRlZ3JhdGlvbi4gQWxsIHN0YW5kYXJkIHN0dWZmLCByZWFsbHkuCgpUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyAqZnVsbHkqIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMgZmFudGFzdGljIGZvciBmdXp6aW5nLiBXZSBoYXZlIHRoZSBzeXNmcyBEQU1PTiBpbnRlcmZhY2UgKGBDT05GSUdfREFNT05fU1lTRlNgLCBldGMuKSBhcyBhIGRpcmVjdCBhdHRhY2sgdmVjdG9yLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBEQU1PTiBjb250cm9sIGludGVyZmFjZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCwgbGlrZSBkZWJ1Z2ZzLCBidXQgSSYjMzk7bGwgZm9jdXMgb24gc3lzZnMgZm9yIG5vdy4gSXQgaXMgbGlrZWx5IHRoZSBiZXN0IHBhdGggZm9yIGZ1enplciBpbnRlZ3JhdGlvbi4KCkkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHN5c2ZzIGludGVyZmFjZSBhbGxvd3MgdXMgdG8gY29uZmlndXJlIHRoZXNlIHByb2JlcyBvciB0aGUgREFNT04gY29udGV4dHMvdGFyZ2V0cy4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgY2FsbHMgdG8gYHByZXBfcHJvYmVzYCBvciBgYXBwbHlfcHJvYmVzYCB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhleSYjMzk7cmUgYWN0dWFsbHkgdXNlZC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGx5X3Byb2JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTQ1LVx0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozOTQ2Olx0XHRpZiAoY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcbm1tL2RhbW9uL2NvcmUuYy0zOTQ3LVx0XHRcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk1Mi1cdFx0XHRcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjM5NTM6XHRcdFx0bWF4X3dzdW0gPSBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgsXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhZG9fcHJlcCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE2MD1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE3NS1cbm1tL2RhbW9uL3BhZGRyLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDY0LVx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NjYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NjY5PXN0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjk2LVxubW0vZGFtb24vdmFkZHIuYzo2OTc6c3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vdmFkZHIuYy02OTgtXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTcxNi1cbm1tL2RhbW9uL3ZhZGRyLmM6NzE3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczMC1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi92YWRkci5jOjczMTpcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNzMyLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMTcxLVx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MjpcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2Jlcyxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE3My1cdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKioKCkFscmlnaHQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBEQU1PTiBhbmQgaXRzIGludGVybmFscywgYW5kIEkmIzM5O20gZmVlbGluZyB0aGF0IGl0Y2ggdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgaXMgb3BlcmF0aW5nLiBJJiMzOTt2ZSBnb3QgbXkgaGVhZCBhcm91bmQgYSBmZXcga2V5IGFyZWFzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3cgZm9jdXNpbmcgaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJlYWxpemluZyB0aGVyZSYjMzk7cyBvbmUgc3BlY2lmaWMgdGhpbmcgdGhhdCByZWFsbHkgbmVlZHMgYSBsb29rIGF0OiBgcHJlcF9wcm9iZXNgLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBEQU1PTiBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcF9wcm9iZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzg5Mz1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cbm1tL2RhbW9uL2NvcmUuYzozOTM0Olx0XHRkb19wcmVwID0gY3R4LVx1MDAzZW9wcy5wcmVwX3Byb2JlcyBcdTAwMjZcdTAwMjYgZGFtb25faGFzX3ByZXAoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTM4LVx0XHRpZiAoZG9fcHJlcClcbm1tL2RhbW9uL2NvcmUuYzozOTM5Olx0XHRcdGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMoY3R4LCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpO1xubW0vZGFtb24vY29yZS5jLTM5NDAtXG4tLVxubW0vZGFtb24vcGFkZHIuYz05Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEwNy1cbm1tL2RhbW9uL3BhZGRyLmM6MTA4OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vcGFkZHIuYy0xMDktXHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEyNC1cbm1tL2RhbW9uL3BhZGRyLmM6MTI1OnN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbm1tL2RhbW9uL3BhZGRyLmMtMTI2LXtcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEzNi1cdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG5tbS9kYW1vbi9wYWRkci5jOjEzNzpcdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xubW0vZGFtb24vcGFkZHIuYy0xMzgtXHRcdH1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDYzLVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY0Olx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmMtNDY1LVx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTUyOS1cbm1tL2RhbW9uL3ZhZGRyLmM6NTMwOnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbm1tL2RhbW9uL3ZhZGRyLmMtNTMxLXtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTExNjM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTExNzAtXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxubW0vZGFtb24vdmFkZHIuYzoxMTcxOlx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE3Mi1cdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFByb2JlIGFuZCBGaWx0ZXIgTG9naWMgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBEQU1PTiBjb2RlIHRoYXQmIzM5O3MgYmVlbiBpbnRyb2R1Y2VkLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBga2RhbW9uZF9mbmAgZnVuY3Rpb24gYW5kIGhvdyBEQU1PTiBpcyBtYW5hZ2VkLiBJdCYjMzk7cyB0aGUgY29yZSBEQU1PTiBrZXJuZWwgdGhyZWFkLCBzdGFydGVkIHdoZW4gREFNT04gaXMgZW5hYmxlZCB0aHJvdWdoIHN5c2ZzIHVzaW5nIGF0dHJpYnV0ZXMgbGlrZSBga2RhbW9uZF9ucl9zY2hlbWVzYCBhbmQgdGhlICYjMzQ7b24mIzM0OyBzdGF0ZSBpbiBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvLi4uYC4gSSYjMzk7bSB3b3JraW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBjb2RlIGlzIHJ1bm5pbmcgd2hlbiB3ZSYjMzk7cmUgYWN0aXZlbHkgbW9uaXRvcmluZyB2aXJ0dWFsIGFkZHJlc3NlcyB1c2luZyBwcm9iZXMgb3IgZmlsdGVycy4KClRoZSBvYnZpb3VzIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHN0YW5kYXJkIHNldHVwcywgc2F5IGluIFFFTVUuIFRoZSBhbnN3ZXIgaXMgeWVzLCBnaXZlbiBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3lzZnMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgbm9ybS4KCk5vdywgaXMgdGhpcyBjb2RlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY29tcGxldGVseSBuZXcgcHJvYmUgZXhlY3V0aW9uIGxvZ2ljLCB0aGUgbWVjaGFuaWNzIG9mIHdhbGtpbmcgbWVtb3J5IGFkZHJlc3NlcyAoYGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZWApLCBkZWVwIGRpdmVzIGludG8gdGhlIHBhZ2UgdGFibGVzIChgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgKSwgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2UpIGxvY2tpbmcsIGh1Z2UgcGFnZSBsb2NraW5nLCBmb2xpbyBoYW5kbGluZywgYW5kIGZpbHRlciBjaGVja2luZyDigJMgYWxsIGNvcmUgYXJlYXMgd2l0aGluIHRoZSBgbW0vZGFtb25gIHN1YnN5c3RlbS4gVGhpcyBpcyBhIGZlcnRpbGUgZ3JvdW5kIGZvciBkaXNjb3ZlcnkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFdoYXQgZGlkIHRoZSBwYXRjaCBhY3R1YWxseSBpbnRyb2R1Y2Ugb3IgbW9kaWZ5PyBMZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRoZSBkaWZmOgoKMS4gIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYAoyLiAgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgCjMuICBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gIGluIGBtbS9kYW1vbi92YWRkci5jYAo0LiAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKNS4gIGBkYW1vbl92YV95b3VuZ19hZGRyYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKNi4gIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGluIGBtbS9kYW1vbi92YWRkci5jYAo3LiAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKOC4gIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgCjkuICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKMTAuIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKMTEuIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgCjEyLiBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2AKCkFyZSB0aGVzZSBzdGF0aWMgb3IgZXhwb3J0ZWQ/IExldCYjMzk7cyBzZWU6CgoqICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBhbmQgZGVjbGFyZWQgaW4gYG9wcy1jb21tb24uaGAuCiogICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYCBpcyBzdGF0aWMgaW4gYG1tL2RhbW9uL3BhZGRyLmNgLgoqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgYXJlIG9wZXJhdGlvbiBjYWxsYmFja3MgaW4gYGRhbW9uX3ZhX2luaXRjYWxsYCAvIGBkYW1vbl9vcGVyYXRpb25zYC4KKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBldGMuIGFyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYHZhZGRyLmNgLgoKT2theSwgbGV0JiMzOTtzIHNlbGVjdCB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1cnRoZXIgcmV2aWV3OgoKKiAgIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYAoqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYAoqICAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AKKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgCiogICBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAKKiAgIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgCiogICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYAoKV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQ/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBjb3JyZWN0bHkgc2V0IHdoZW4gd2UgcnVuOgoKKiAgIGBEQU1PTmAKKiAgIGBEQU1PTl9WQUREUmAKKiAgIGBEQU1PTl9QQUREUmAKKiAgIGBEQU1PTl9TWVNGU2AKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgKGZvciBgI2lmZGVmIENPTkZJR19UUkFOCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDA6XHRcdHJldHVybiBwYXNzO1xuIDYwMTpcdH1cbiA2MDI6XHRcbiA2MDM6XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbiA2MDQ6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiA2MDU6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4gNjA2Olx0fTtcbiA2MDc6XHRcbiA2MDg6XHRzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gNjA5Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gNjEwOlx0XHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDYxMTpcdHtcbiA2MTI6XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4gNjEzOlx0XHRpbnQgaSA9IDA7XG4gNjE0Olx0XG4gNjE1Olx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4gNjE2Olx0XHRcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcbiA2MTc6XHRcdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbiA2MTg6XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuIDYxOTpcdFx0XHRpJiM0MzsmIzQzOztcbiA2MjA6XHRcdH1cbiA2MjE6XHR9XG4gNjIyOlx0XG4gNjIzOlx0c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDYyNDpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIDYyNTpcdHtcbiA2MjY6XHRcdHB0ZV90ICpwdGU7XG4gNjI3Olx0XHRwdGVfdCBwdGVudDtcbiA2Mjg6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiA2Mjk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNjMwOlx0XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuIDYzMTpcdFxuIDYzMjpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA2MzM6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4gNjM0Olx0XHRpZiAocHRsKSB7XG4gNjM1Olx0XHRcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xuIDYzNjpcdFxuIDYzNzpcdFx0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxuIDYzODpcdFx0XHRcdGdvdG8gaHVnZV9vdXQ7XG4gNjM5Olx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4gNjQwOlx0XHRcdGlmICghZm9saW8pXG4gNjQxOlx0XHRcdFx0Z290byBodWdlX291dDtcbiA2NDI6XHRcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4gNjQzOlx0XHRcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4gNjQ0Olx0XG4gNjQ1Olx0aHVnZV9vdXQ6XG4gNjQ2Olx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gNjQ3Olx0XHRcdHJldHVybiAwO1xuIDY0ODpcdFx0fVxuIDY0OTpcdCNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gNjUwOlx0XG4gNjUxOlx0XHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiA2NTI6XHRcdGlmICghcHRlKVxuIDY1MzpcdFx0XHRyZXR1cm4gMDtcbiA2NTQ6XHRcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiA2NTU6XHRcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxuIDY1NjpcdFx0XHRnb3RvIG91dDtcbiA2NTc6XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4gNjU4Olx0XHRpZiAoIWZvbGlvKVxuIDY1OTpcdFx0XHRnb3RvIG91dDtcbiA2NjA6XHRcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbiA2NjE6XHRcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4gNjYyOlx0XG4gNjYzOlx0b3V0OlxuIDY2NDpcdFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XG4gNjY1Olx0XHRyZXR1cm4gMDtcbiA2NjY6XHR9XG4gNjY3Olx0XG4gNjY4Olx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiA2Njk6XHRzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiA2NzA6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gNjcxOlx0e1xuIDY3MjpcdFx0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiA2NzM6XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbiA2NzQ6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNjc1Olx0XHRzcGlubG9ja190ICpwdGw7XG4gNjc2Olx0XHRwdGVfdCBlbnRyeTtcbiA2Nzc6XHRcbiA2Nzg6XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiA2Nzk6XHRcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc4NQoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IHBhdGNoIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgb3BzLWNvbW1vbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLiBJIHNlZSBpdCB1c2VzIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGFuZCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYCBhbmQgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYWN0aXZlIGlmIGBNRU1DR2AgaXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5LgoKTGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSYjMzk7dmUgZmxhZ2dlZCB0aGlzIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIGludGVyZXN0LiBUaGUgcGF0Y2ggbGV2ZXJhZ2VzIGEgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb25zIGluY2x1ZGluZyBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGNydWNpYWxseSwgYE1FTUNHYC4gQWxsIG9mIHRob3NlIGhhdmUgYmVlbiBlbmFibGVkLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgcGFnZSB0YWJsZSB3YWxraW5nIGZ1bmN0aW9ucyBsaWtlIGBwbWRfZW50cnlgIGFuZCBgaHVnZXRsYl9lbnRyeWAsIHBsdXMgZmlsdGVyIG1hdGNoaW5nLCBhbmQgcHJvYmluZyBjYWxsYmFja3MuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IHNjcnV0aW55IGR1cmluZyBmdXp6IHRlc3RpbmcuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IERBTU9OIFN5c2ZzL2tkYW1vbmQgaW50ZXJmYWNlcyBleHBvc2UgdGhlc2UgZnVuY3Rpb25zLgoKVGhpcyBwYXRjaCBsb29rcyByaXBlIGZvciBmdXp6aW5nLiBUaGUgY29tYmluYXRpb24gb2YgcGFnZSB0YWJsZSB3YWxraW5nLCBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9ucyAodmlhIGBNRU1DR2AgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb25zKSwgYW5kIHN5c2ZzIGludGVyZmFjZXMgbWFrZXMgaXQgYSBsaWtlbHkgdGFyZ2V0LiBJIHNob3VsZCBwcm9iYWJseSBpbnZva2UgYHNldC1yZXN1bHRzYCBhdCB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBwcmVwYXJhdGlvbiBhbmQgZXZhbHVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIGN1c3RvbSBwYWdlIHRhYmxlIHdhbGtpbmcgZm9yIG5vcm1hbCwgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIGh1Z2V0bGIgcGFnZXMsIGFsb25nc2lkZSBzaGFyZWQgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZXhlY3V0ZWQgYnkgdGhlIERBTU9OIGtlcm5lbCB3b3JrZXIgdGhyZWFkIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBEQU1PTiBzeXNmcyBpbnRlcmZhY2VzLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6eiB0ZXN0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9vcHNfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3ByZXBfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfZmlsdGVyX21hdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgREFNT04gdmlydHVhbCBhZGRyZXNzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBldmFsdWF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgY3VzdG9tIHBhZ2UgdGFibGUgd2Fsa2luZyBmb3Igbm9ybWFsLCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgaHVnZXRsYiBwYWdlcywgYWxvbmdzaWRlIHNoYXJlZCBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBleGVjdXRlZCBieSB0aGUgREFNT04ga2VybmVsIHdvcmtlciB0aHJlYWQgYW5kIGFyZSByZWFjaGFibGUgdmlhIERBTU9OIHN5c2ZzIGludGVyZmFjZXMsIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6IHRlc3RpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzI2ZDY2YzFjZDI1OGJjNTZkNmQwZTBkYjVmN2Y2Y2E5MjFlZThiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMjoxNjo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCA3MjE5YzYwOGIxOTUyLi5jZmNkNGVkZWUzNDZhIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC00NDQsMyAmIzQzOzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlib29sIG1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwomIzQzOwlzd2l0Y2ggKGZpbHRlci0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJbWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKJiM0MzsJCWlmICghZm9saW8pIHsKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQltZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTsKJiM0MzsJCWlmICghbWVtY2cpCiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJZWxzZQomIzQzOwkJCW1hdGNoZWQgPSBmaWx0ZXItJmd0O21lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmgKQEAgLTIxLDMgJiM0MzsyMSw1IEBAIGJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpOwogCiBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcyk7CiYjNDM7CiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCBjMWU3ZDdhNGY0MGRmLi5mZmRlODhlYTdhMTNjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTE0MywyOSAmIzQzOzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsCiAJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJYm9vbCBtYXRjaGVkID0gZmFsc2U7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCiAJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKLQljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046Ci0JCWlmICghZm9saW8pIHsKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwotCQlicmVhazsKLQljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOgotCQlpZiAoIWZvbGlvKSB7Ci0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pOwotCQlpZiAoIW1lbWNnKQotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQllbHNlCi0JCQltYXRjaGVkID0gZmlsdGVyLSZndDttZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWJyZWFrOwogCWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgogCQlpZiAoIWZvbGlvKQogCQkJbWF0Y2hlZCA9IGZhbHNlOwpAQCAtMTczLDcgJiM0MzsxNTIsNyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQkJbWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYnJlYWs7CiYjNDM7CQlyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTsKIAl9CiAJcmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLSZndDttYXRjaGluZzsKIH0KZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jCmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNTEwLDYgJiM0Mzs1MTAsMjM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiBtYXhfbnJfYWNjZXNzZXM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKJiM0MzsJCXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJlcCAqcDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkgewomIzQzOwkJc3dpdGNoIChwLSZndDthY3Rpb24pIHsKJiM0MzsJCWNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOgomIzQzOwkJCWRhbW9uX3ZhX21rb2xkKG1tLCByLSZndDtzYW1wbGluZ19hZGRyKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewomIzQzOwkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiYjNDM7CQlpZiAoIW1tKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKJiM0MzsJCQlpZiAoc2V0X3NhbXBsZXMpCiYjNDM7CQkJCXItJmd0O3NhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci0mZ3Q7YXIuc3RhcnQsCiYjNDM7CQkJCQkJci0mZ3Q7YXIuZW5kKTsKJiM0MzsJCQlkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpCiYjNDM7CQkJCWRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKGN0eCwgbW0sIHIsIHApOwomIzQzOwkJfQomIzQzOwkJbW1wdXQobW0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nX2FkZHIoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIHlvdW5nID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwdGUpCiYjNDM7CQl5b3VuZyA9IHB0ZV95b3VuZygqcHRlKTsKJiM0MzsJZWxzZSBpZiAocG1kKQomIzQzOwkJeW91bmcgPSBwbWRfeW91bmcoKnBtZCk7CiYjNDM7CXlvdW5nID0geW91bmcgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHwKJiM0MzsJCW1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKG1tLCBhZGRyKTsKJiM0MzsJcmV0dXJuIHlvdW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlib29sIG1hdGNoZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6CiYjNDM7CQlpZiAoIWZvbGlvKQomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLAomIzQzOwkJCQkJYWRkcik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pOwomIzQzOwl9CiYjNDM7CXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwKJiM0MzsJCXB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX2ZpbHRlciAqZjsKJiM0MzsJYm9vbCBwYXNzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHsKJiM0MzsJCWlmIChkYW1vbl92YV9maWx0ZXJfbWF0Y2goZiwgZm9saW8sIHB0ZSwgcG1kLCBtbSwgYWRkcikpIHsKJiM0MzsJCQlwYXNzID0gZi0mZ3Q7YWxsb3c7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlwYXNzID0gIWYtJmd0O2FsbG93OwomIzQzOwl9CiYjNDM7CXJldHVybiBwYXNzOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHsKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqY3R4OwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCXB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7CiYjNDM7CQlpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sCiYjNDM7CQkJCQlyLSZndDtzYW1wbGluZ19hZGRyKSkKJiM0MzsJCQlyLSZndDtwcm9iZV9oaXRzW2ldJiM0MzsmIzQzOzsKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwlwdGVfdCBwdGVudDsKJiM0MzsJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CXB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLSZndDt2bWEpOwomIzQzOwlpZiAocHRsKSB7CiYjNDM7CQlwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTsKJiM0MzsKJiM0MzsJCWlmICghcG1kX3ByZXNlbnQocG1kZSkpCiYjNDM7CQkJZ290byBodWdlX291dDsKJiM0MzsJCWZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLSZndDt2bWEsIGFkZHIsIHBtZGUpOwomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQlnb3RvIGh1Z2Vfb3V0OwomIzQzOwkJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgTlVMTCwgJmFtcDtwbWRlLAomIzQzOwkJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsKJiM0MztodWdlX291dDoKJiM0MzsJCXNwaW5fdW5sb2NrKHB0bCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOyNlbmRpZgkvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KJiM0MzsKJiM0MzsJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLSZndDttbSwgcG1kLCBhZGRyLCAmYW1wO3B0bCk7CiYjNDM7CWlmICghcHRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXB0ZW50ID0gcHRlcF9nZXQocHRlKTsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChwdGVudCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay0mZ3Q7dm1hLCBhZGRyLCBwdGVudCk7CiYjNDM7CWlmICghZm9saW8pCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgJmFtcDtwdGVudCwgTlVMTCwKJiM0MzsJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstJmd0O3ZtYSk7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXNwaW5sb2NrX3QgKnB0bDsKJiM0MzsJcHRlX3QgZW50cnk7CiYjNDM7CiYjNDM7CXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay0mZ3Q7bW0sIHB0ZSk7CiYjNDM7CWVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLSZndDttbSwgYWRkciwgcHRlKTsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChlbnRyeSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpOwomIzQzOwlmb2xpb19nZXQoZm9saW8pOwomIzQzOwlkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LSZndDtjdHgsIHByaXYtJmd0O3IsIGZvbGlvLCAmYW1wO2VudHJ5LCBOVUxMLAomIzQzOwkJCXdhbGstJmd0O3ZtYS0mZ3Q7dm1fbW0pOwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwomIzQzOwomIzQzO291dDoKJiM0MzsJc3Bpbl91bmxvY2socHRsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTEwKJiM0MzsjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0gewomIzQzOwkJLmN0eCA9IGN0eCwKJiM0MzsJCS5yID0gciwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX3Byb2JlX3dhbGtfb3BzID0gewomIzQzOwkJLnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwKJiM0MzsJCS5odWdldGxiX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyID0gci0mZ3Q7c2FtcGxpbmdfYWRkcjsKJiM0MzsKJiM0MzsJaWYgKCFtbSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICYjNDM7IDEsICZhbXA7ZGFtb25fcHJvYmVfd2Fsa19vcHMsCiYjNDM7CQkJJmFtcDthcmcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X3dzdW0gPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQltbSA9IGRhbW9uX2dldF9tbSh0KTsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CiYjNDM7CQkJaWYgKHNldF9zYW1wbGVzKQomIzQzOwkJCQlyLSZndDtzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItJmd0O2FyLnN0YXJ0LAomIzQzOwkJCQkJCXItJmd0O2FyLmVuZCk7CiYjNDM7CQkJX19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7CiYjNDM7CQkJaWYgKHJldHVybl9tYXhfd3N1bSkKJiM0MzsJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAomIzQzOwkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiYjNDM7CQl9CiYjNDM7CQlpZiAobW0pCiYjNDM7CQkJbW1wdXQobW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBtYXhfd3N1bTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcG1kX3QgKnBtZHApCkBAIC05MzgsNiAmIzQzOzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKQogCQkudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLAogCQkucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLAogCQkuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcywKJiM0MzsJCS5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLAomIzQzOwkJLmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcywKIAkJLnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCwKIAkJLmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsCiAJCS5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIFJlZmFjdG9yaW5nIGFuZCBWaXJ0dWFsIEFkZHJlc3MgUHJvYmluZyBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aXRoaW4gREFNT04sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB2aXJ0dWFsIGFkZHJlc3Nlcy4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9kYW1vbi9vcHMtY29tbW9uLmhgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhpc3RpbmcgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBmcmFtZXdvcmsgaXMgZXZvbHZpbmcuCgpGaXJzdCwgaXQgbG9va3MgbGlrZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgaXMgYmVpbmcgYWJzdHJhY3RlZCBpbnRvIGBvcHMtY29tbW9uLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduOyByZWZhY3RvcmluZyBjb21tb24gZnVuY3Rpb25hbGl0eSBsaWtlIHRoYXQgdXN1YWxseSBzaWduYWxzIGFuIGludGVudCB0byBzdHJlYW1saW5lIHRoZSBjb3JlIERBTU9OIG9wZXJhdGlvbnMgYW5kIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhhdCBpbXBhY3RzIHRoZSBmaWx0ZXIgbG9naWMgZG93bnN0cmVhbS4KCk5vdywgdGhlIG1lYXQgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGluIGBtbS9kYW1vbi92YWRkci5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIGRlc2lnbmVkIHRvIHN1cHBvcnQgcHJvYmluZyB2aXJ0dWFsIGFkZHJlc3NlcyBkaXJlY3RseS4gSSBzZWUgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCwgYW5kIHRoZW4gZnVuY3Rpb25zIGZvciBwcm9iaW5nIGF0IHRoZSBmb2xpbywgcG1kLCBhbmQgaHVnZXRsYiBsZXZlbHM6IGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAuIEZpbmFsbHksIHRoZSBwYXRjaCBhZGRzICBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCB0byBpbXBsZW1lbnQgdGhlIHByb2JlIGFwcGxpY2F0aW9uIHByb2Nlc3MuIFRoZSByZWdpc3RyYXRpb24gb2YgYHByZXBfcHJvYmVzYCBhbmQgYGFwcGx5X3Byb2Jlc2AgY2FsbGJhY2tzIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgIGNvbmZpcm1zIHRoYXQgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29tcGxldGUgcmV3cml0ZSBmb3IgdmlydHVhbCBhZGRyZXNzIGhhbmRsaW5nIHdpdGhpbiBEQU1PTi4KCkkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUgbW9yZSB0aG9yb3VnaGx5LiBJ4oCZbGwgbmVlZCB0byB1dGlsaXplIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBmdWxseSBncmFzcCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IHRoZXNlIHZpcnR1YWwgYWRkcmVzcyBwcm9iaW5nIGZ1bmN0aW9ucyBpbnRlcmZhY2Ugd2l0aCB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nLiBJJiMzOTtsbCBmb2N1cyBwYXJ0aWN1bGFybHkgb24gaG93IHRoaXMgaXMgbWFuYWdpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSB0YWJsZSBsZXZlbHMuIEl0IGFsc28gd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhIHdheSB0byBjb25maWd1cmUgdGhlIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nLCBhbmQgaG93IHRoaXMgd2lsbCB3b3JrIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgREFNT04gbW9kdWxlcy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGNhcGFiaWxpdHkgYmVpbmcgYWRkZWQgdG8gREFNT04uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2Zvcl9lYWNoX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJlcChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjMtXG5tbS9kYW1vbi9jb3JlLmM6MTY0Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xNjUtXHRcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpXG4tLVxubW0vZGFtb24vY29yZS5jPTI2MT1zdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY1LVxubW0vZGFtb24vY29yZS5jOjI2NjpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vY29yZS5jLTI2Ny1cdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4tLVxubW0vZGFtb24vY29yZS5jPTI3Mz1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzYtXG5tbS9kYW1vbi9jb3JlLmM6Mjc3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgYykge1xubW0vZGFtb24vY29yZS5jLTI3OC1cdFx0aWYgKHAtXHUwMDNld2VpZ2h0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00NzY9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ4Mi1cbm1tL2RhbW9uL2NvcmUuYzo0ODM6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtNDg0LVx0XHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9OTUwPXZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShwLCBuZXh0X3AsIGN0eClcbm1tL2RhbW9uL2NvcmUuYy05NjEtXHRcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUocCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAxNi1cbm1tL2RhbW9uL2NvcmUuYzoxMDE3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtMTAxOC1cdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG4tLVxubW0vZGFtb24vY29yZS5jPTE0Mjc9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzNS1cdG5yX3Byb2JlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MTQzNjpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTQzNy1cdFx0bnJfcHJvYmVzJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MC1cdHdzdW0gPSAwO1xubW0vZGFtb24vY29yZS5jOjE0NTE6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1Mi1cdFx0aWYgKHByb2JlLVx1MDAzZXdlaWdodCBcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTg0MD1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NDQtXG5tbS9kYW1vbi9jb3JlLmM6MTg0NTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoZHN0X3Byb2JlLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYy0xODQ2LVx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSYjNDM7JiM0MzssIHNyYyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTktXG5tbS9kYW1vbi9jb3JlLmM6MTg2MDpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoc3JjX3Byb2JlLCBuZXh0LCBzcmMpIHtcbm1tL2RhbW9uL2NvcmUuYy0xODYxLVx0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG4tLVxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMDAtXHRpZiAodHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWRfZW5hYmxlZCgpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjMwMTpcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpXG5tbS9kYW1vbi9jb3JlLmMtMjMwMi1cdFx0XHRucl9wcm9iZXMmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTI1PXN0YXRpYyB2b2lkIGRhbW9uX3BhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEzNS1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9wYWRkci5jOjEzNjpcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG5tbS9kYW1vbi9wYWRkci5jLTEzNy1cdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE5NS1cdFx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYSkpO1xubW0vZGFtb24vcGFkZHIuYzoxOTY6XHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cdFx0XHRcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk2LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05OC1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwOC1cdGkgPSAwO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwOTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTAtXHRcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqc3lzX3Byb2JlO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDI4PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ5LVx0bnJfZHN0X3Byb2JlcyA9IDA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ1MDpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NTEtXHRcdG5yX2RzdF9wcm9iZXMmIzQzOyYjNDM7O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NTItXHRucl9zcmNfcHJvYmVzID0gMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDUzOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1NC1cdFx0bnJfc3JjX3Byb2JlcyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0NTgtXHRucl9kc3RfcHJvYmVzID0gMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDU5Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDYwLVx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTUzMD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG4tLVxubW0vZGFtb24vdmFkZHIuYy01NDQtXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xubW0vZGFtb24vdmFkZHIuYzo1NDU6XHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxubW0vZGFtb24vdmFkZHIuYy01NDYtXHRcdFx0XHRkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy02MTQtXG5tbS9kYW1vbi92YWRkci5jOjYxNTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL3ZhZGRyLmMtNjE2LVx0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24gQ2hlY2sqKgoKT2theSwgdGltZSB0byBkcmlsbCBkb3duIG9uIHRoZXNlIHZhcmlhYmxlcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYGRhbW9uX3JlZ2lvbmAgYW5kIGBwcm9iZV9oaXRzYCBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O3ZlIHNlZW4gY291bnRsZXNzIGlzc3VlcyBzdGVtIGZyb20gaW1wcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbG93LWxldmVsIGNvZGUgbGlrZSB0aGlzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgdGhlIG1lbW9yeSBpcyBiZWluZyByZXF1ZXN0ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgYW5kIGFsaWdubWVudCwgYW5kIHRoYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2V0IHVwIHdpdGggdGhlaXIgaW5pdGlhbCB2YWx1ZXMgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3Igb3VyIGFsZ29yaXRobSwgbGlrZWx5IHplcm9lZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNpemUgY2FsY3VsYXRpb25zIGFyZSBjb3JyZWN0LiBBbnkgc2xpcC11cCBoZXJlIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHN1YnRsZSBidWdzIHRoYXQgYXJlIGluY3JlZGlibHkgZGlmZmljdWx0IHRvIGRlYnVnIGxhdGVyIG9uLCBzbyBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgaXMgcm9jayBzb2xpZCBiZWZvcmUgbW92aW5nIG9uLiBJ4oCZbSB0aGlua2luZyBJ4oCZbGwgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBhbGxvY2F0aW9uIGNhbGxzLCBsb29rIGF0IHRoZSBzaXplcyBiZWluZyBwYXNzZWQsIGFuZCB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aHMuIE5vIHN0b25lIHVudHVybmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZV9oaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ4LVxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0zNTAtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzY2LVx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxubW0vZGFtb24vY29yZS5jOjM2NzpcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XG5tbS9kYW1vbi9jb3JlLmMtMzY4LVxubW0vZGFtb24vY29yZS5jOjM2OTpcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcbm1tL2RhbW9uL2NvcmUuYzozNzA6XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xubW0vZGFtb24vY29yZS5jLTM3MS19XG4tLVxubW0vZGFtb24vY29yZS5jPTM4OT1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjQwMzpcdFx0cmVnaW9uLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xubW0vZGFtb24vY29yZS5jOjQwNDpcdFx0cmVnaW9uLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtNDA1LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00NjI9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDY4LS8qKlxubW0vZGFtb24vY29yZS5jOjQ2OTogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmMtNDcwLSAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0NzY6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTQ4NC1cdFx0aWYgKGxhc3QpXG5tbS9kYW1vbi9jb3JlLmM6NDg1Olx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtXHUwMDNld2VpZ2h0O1xubW0vZGFtb24vY29yZS5jLTQ4Ni1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjQ4NzpcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg4LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cbm1tL2RhbW9uL2NvcmUuYzoxMDEwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDE3LVx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTAxODpcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcdFx0XHRcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cdFx0aWYgKCFhZ2dyZWdhdGluZylcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDIyOlx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0sIG9sZF9hdHRycyxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVx0XHRcdFx0XHRuZXdfYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTEwMjQtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzoxMDI1Olx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTAyNi1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMzA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzMte1xubW0vZGFtb24vY29yZS5jOjEwMzQ6XHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDI5LVx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG5tbS9kYW1vbi9jb3JlLmM6MTQzMDpcdHVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7XG5tbS9kYW1vbi9jb3JlLmMtMTQzMS1cdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4tLVxubW0vZGFtb24vY29yZS5jLTE0NDgtXHQvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqL1xubW0vZGFtb24vY29yZS5jOjE0NDk6XHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDUwLVx0d3N1bSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1MS1cdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlx0XHRpZiAocHJvYmUtXHUwMDNld2VpZ2h0IFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTE0NTMtXHRcdFx0cmV0dXJuIGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjE0NTQ6XHRcdHdzdW1fdG9fYWRkID0gcHJvYmUtXHUwMDNld2VpZ2h0ICogbWF4X3Byb2JlX2hpdHM7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1NS1cdFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcdTAwM2Mgd3N1bV90b19hZGQpXG4tLVxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTYtXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMzE3Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVx1MDAzZXByb2JlX2hpdHNbaV07XG5tbS9kYW1vbi9jb3JlLmM6MjMxODpcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMjMxOS1cdFx0XHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KVxubW0vZGFtb24vY29yZS5jOjM0Mzg6XHRcdGwtXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICYjNDM7IHItXHUwMDNlcHJvYmVfaGl0c1tpXVxubW0vZGFtb24vY29yZS5jLTM0MzktXHRcdFx0XHQqIHN6X3IpIC8gKHN6X2wgJiM0Mzsgc3pfcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmM6MzQ0NTpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTM0NDYte1xubW0vZGFtb24vY29yZS5jOjM0NDc6XHRpZiAodXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmM6MzQ0ODpcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xubW0vZGFtb24vY29yZS5jLTM0NDktXHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ2MT1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpwcmV2ID0gTlVMTCwgKm5leHQ7XG5tbS9kYW1vbi9jb3JlLmM6MzQ2NTpcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTM0NjYtXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NjktXG5tbS9kYW1vbi9jb3JlLmM6MzQ3MDpcdFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG5tbS9kYW1vbi9jb3JlLmM6MzQ3MTpcdFx0bGFzdF9zY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIHRydWUsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xubW0vZGFtb24vY29yZS5jLTM0NzItXG4tLVxubW0vZGFtb24vY29yZS5jLTM0ODYtXHRcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcbm1tL2RhbW9uL2NvcmUuYzozNDg3Olx0XHRcdFx0XHR1c2VfcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jLTM0ODgtXHRcdGlmIChkaWZmIFx1MDAzZSB0aHJlcylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzU2Nj1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNTgxLVx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXG5tbS9kYW1vbi9jb3JlLmM6MzU4MjpcdG1lbWNweShuZXctXHUwMDNlcHJvYmVfaGl0cywgci1cdTAwM2Vwcm9iZV9oaXRzLCBzaXplb2Yoci1cdTAwM2Vwcm9iZV9oaXRzKSk7XG5tbS9kYW1vbi9jb3JlLmM6MzU4MzpcdG1lbWNweShuZXctXHUwMDNlbGFzdF9wcm9iZV9oaXRzLCByLVx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcbm1tL2RhbW9uL2NvcmUuYzozNTg0Olx0XHRcdHNpemVvZihyLVx1MDAzZWxhc3RfcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jLTM1ODUtXG4tLVxubW0vZGFtb24vcGFkZHIuYz0xNzY9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTk3LVx0XHRcdFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXG5tbS9kYW1vbi9wYWRkci5jOjE5ODpcdFx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldJiM0MzsmIzQzOztcbm1tL2RhbW9uL3BhZGRyLmMtMTk5LVx0XHRcdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0yMDMtXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbm1tL2RhbW9uL3BhZGRyLmM6MjA0Olx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxubW0vZGFtb24vcGFkZHIuYy0yMDUtXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OS1cdFx0X19BVFRSX1JPX01PREUoaGl0cywgMDQwMCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTUxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19wcm9iZV9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlx0XHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXHROVUxMLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cdFx0aWYgKCFzeXNfcHJvYmUpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQwPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQtXHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSAxNTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTU6XHRyLVx1MDAzZXByb2JlX2hpdHNbMF0gPSA3O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NjpcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdID0gMztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTctXHRyLVx1MDAzZWFnZSA9IDEwO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzItXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzM6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vwcm9iZV9oaXRzWzBdLCByX25ldy1cdTAwM2Vwcm9iZV9oaXRzWzBdKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0sIHJfbmV3LVx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTc1LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCByX25ldy1cdTAwM2VhZ2UpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTUtXHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTk2Olx0ci1cdTAwM2Vwcm9iZV9oaXRzWzBdID0gNjtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTctXHRyLVx1MDAzZWFnZSA9IDk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNC1cdHIyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjA1Olx0cjItXHUwMDNlcHJvYmVfaGl0c1swXSA9IDE0O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNi1cdHIyLVx1MDAzZWFnZSA9IDIxO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTItXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMTM6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vwcm9iZV9oaXRzWzBdLCAxMSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjE0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAxN3UpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTE0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUzOC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTM5Olx0LyogTW9yZSBzYW1wbGVzIGNvdWxkIG92ZXJmbG93IHRoZSBwcm9iZV9oaXRzIGNvdW50ZXJzLiAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NDAtXHRjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDI1Njtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy02MTctXHRcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkcikpXG5tbS9kYW1vbi92YWRkci5jOjYxODpcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xubW0vZGFtb24vdmFkZHIuYy02MTktXHRcdGkmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NzE3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczMi1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxubW0vZGFtb24vdmFkZHIuYzo3MzM6XHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG5tbS9kYW1vbi92YWRkci5jLTczNC1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjcKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogREFNT04gVmlydHVhbCBBZGRyZXNzIFByb2JpbmcgYW5kIEZpbHRlcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgdGhleSYjMzk7dmUgcmVmYWN0b3JlZCB0aGUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9uLCBtb3ZpbmcgaXQgdG8gYG9wcy1jb21tb24uY2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGNoYW5nZS4gQ2hlY2tpbmcgdGhlIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBjb2RlIGl0c2VsZiwgSSBzZWUgaXQmIzM5O3MgcHJvcGVybHkgaGFuZGxpbmcgZGlmZmVyZW50IGZpbHRlciB0eXBlcyAoQU5PTiwgTUVNQ0cpLCBhbmQgYWxsIHZhcmlhYmxlcyB3aXRoaW4gYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHNwZWNpZmljYWxseSBgbWF0Y2hlZGAgYW5kIGBtZW1jZ2AuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIFRoZSBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfcmVhZF91bmxvY2tgIGFyZSBhcHByb3ByaWF0ZWx5IHBhaXJlZCB3aXRoaW4gdGhlIE1FTUNHIGNoZWNrLgoKTmV4dCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcgY29kZSBpbiBgdmFkZHIuY2AuIFRoZSBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gIGFuZCBgZGFtb25fdmFfcHJlcF9wcm9iZXNgIGZ1bmN0aW9ucyBsb29rIHN0cmFpZ2h0Zm9yd2FyZCwgc2V0dGluZyB1cCB0aGUgcHJvYmluZyBwcm9jZXNzLiBOb3csIGxldCYjMzk7cyBleGFtaW5lIGBkYW1vbl92YV95b3VuZ19hZGRyYC4gSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHZhbGlkaXR5IG9mIGBwdGVgIGFuZCBgcG1kYCBkZXJlZmVyZW5jZXMgaGVyZS4gTG9va2luZyBhdCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLCBJIHNlZSB0aGF0IHdpdGhpbiBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBlaXRoZXIgYHB0ZWAgb3IgYHBtZGAgaXMgcGFzc2VkLiBUaGUgaW5pdGlhbGl6YXRpb24gaW4gYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCBzZWVtcyByb2J1c3QgdXNpbmcgYHBtZHBfZ2V0YCwgYHB0ZXBfZ2V0YCBhbmQgYGh1Z2VfcHRlcF9nZXRgIHJlc3BlY3RpdmVseSwgd2hpY2ggYXJlIGdvb2QuIFRoZSBgeW91bmdgIHZhcmlhYmxlIGlzIGFsc28gaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQuCgpUaGUgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGlzIHNpbXBsZSBhbmQsIGlmIG5vdCwgaXQgZGVmZXJzIHRvIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB3aGljaCB3ZSByZXZpZXdlZCBlYXJsaWVyLiBUaGUgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCBmdW5jdGlvbiBpcyBzaW1pbGFybHkgc2ltcGxlIHdpdGggYSBgcGFzc2AgZmxhZyBiZWluZyBpbml0aWFsaXplZC4gVGhlIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIHdoaWNoIGNvbnRhaW4gbG9vcHMgYW5kIHdhbGtlcnMsIGFyZSBjYXJlZnVsbHkgaGFuZGxpbmcgcHJvYmVzIGFuZCBpbmNyZW1lbnRpbmcgYHItJmd0O3Byb2JlX2hpdHNbaV0mIzQzOyYjNDM7YCwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjaGVjaywgd2hpY2ggc2VlbXMgb2theS4gU3RydWN0cyBpbiBwYWdlIHdhbGtzLCBsaWtlIGBhcmdgLCBhcmUgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGFyZWFzLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHZpYSB0aGluZ3MgbGlrZSBgY29weV90b191c2VyYCwgaW9jdGxzLCBvciBuZXRsaW5rLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGNvcGllZCwgd2hpY2ggaXMgZ29vZC4KCkNvdWxkIHdlIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoZSBhbnN3ZXIgaXMgJiMzNDtubyYjMzQ7LiBIb3dldmVyLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OgoKKiAgICoqTG9ja2luZy9SZWZlcmVuY2UgQ291bnRpbmc6KiogUG90ZW50aWFsbHkgdGhpbmdzIGxpa2UgYGZvbGlvX2dldGAvYGZvbGlvX3B1dGAsIG9yIGxvY2tpbmcgaW4gdGhlIHBhZ2UgdGFibGUgd2FsayAoYHB0ZV9vZmZzZXRfbWFwX2xvY2tgLCBgc3Bpbl91bmxvY2tgKSBhcmUgYSBwcmltYXJ5IGZvY3VzIGZvciBzdGFuZGFyZCBkZXRlY3RvcnMuIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgY2F0Y2ggdGhhdC4KKiAgICoqT3V0LW9mLUJvdW5kcyBBY2Nlc3M6KiogV2hpbGUgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb29wIHRoYXQgaW5jcmVtZW50cyBgci0mZ3Q7cHJvYmVfaGl0c1tpXWAsIGNoZWNraW5nIGBucl9wcm9iZXMgJmd0OyBEQU1PTl9NQVhfUFJPQkVTYCB3b3VsZCBiZSBuZWNlc3NhcnkuIEtBU0FOL1VCU0FOIHNob3VsZCBmbGFnIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KKiAgICoqQ29uY3VycmVuY3kgSXNzdWVzOioqIFBhZ2UgdGFibGUgd2Fsa3MgY2FuIGJlIHRyaWNreS4gUGFnZSB0YWJsZSB3YWxrIGNvbmN1cnJlbmN5IC8gcGFnZSBzdGF0ZSBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gb24gYW55IE1NIGNvZGUsIGNhbiBiZSBwaWNrZWQgdXAgYnkgS0FTQU4va2VybmVsIGFzc2VydGlvbnMuCgpUaGVyZWZvcmUsIGZvciBhIEtNU0FOIHBlcnNwZWN0aXZlLCBhbGwgb2YgdGhlc2UgbWVtb3J5IGVycm9ycyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGRldGVjdG9ycy4gSSB3aWxsIGRvdWJsZS1jaGVjayB0aGUgNCBjcml0ZXJpYSBmb3IgTmVlZHNLTVNBTjoKCjEuICAqKktlcm5lbC10by1Vc2VyOioqIE5vdGhpbmcuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljL0JyYW5jaGluZzoqKiBFeHBsaWNpdCBpbml0aWFsaXphdGlvbi4KMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogTm8gYWxsb2NhdGlvbiwgb3IgdW5pbml0aWFsaXplZCByZWFkLgo0LiAgKipCb3VuZHMgQ2hlY2tzOioqIE5vIHN1cnJvdW5kaW5nIGNvZGUgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpCYXNlZCBvbiB0aGlzLCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiouCgoqKktNU0FOIHZzIEtBU0FOIFJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3MgcHJvYmluZyBhbmQgZmlsdGVyIG1hdGNoaW5nIHdpdGhpbiBEQU1PTi4gQWxsIHJlbGV2YW50IGxvY2FsIHZhcmlhYmxlcywgZmxhZ3MsIGFuZCB3YWxrZXIgc3RydWN0cyBhcmUgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBpbnRyb2R1Y2VkLiBJc3N1ZXMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGJvdW5kcyBjaGVja3MgKHByb2JlXF9oaXRzKSwgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOL1VCU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHdhcnJhbnRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcblxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE2OjQzLjcyNjkyMjQyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzEzMTEwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdmlydHVhbCBhZGRyZXNzIHByb2JlIG9wZXJhdGlvbnMgKHByZXAgYW5kIGFwcGx5IHByb2JlcykgYW5kIHJlZmFjdG9ycyBjb21tb24gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIFxcblxcbkV2YWx1YXRpbmcgYWdhaW5zdCBLTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBtYXRjaGVkYCwgYHlvdW5nYCwgYHBhc3NgLCBgaWApLCBzdGFjayBzdHJ1Y3R1cmVzIChgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlYCwgYG1tX3dhbGtfb3BzYCksIGFuZCBwYWdlIHRhYmxlIGVudHJ5IGNvcGllcyAoYHB0ZW50YCwgYHBtZGVgLCBgZW50cnlgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbjIuIE5vIHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zOiBUaGUgcGF0Y2ggZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBidWZmZXJzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50OiBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcyBvbiBgcHJvYmVfaGl0c2AsIGZvbGlvIHJlZmVyZW5jZSBjb3VudCBtaXNtYXRjaGVzLCBvciBwYWdlIHRhYmxlIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHNxdWFyZWx5IHdpdGhpbiB0aGUgcHVydmlldyBvZiBLQVNBTiwgVUJTQU4sIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTY6NDMuNzI2OTI2MTM5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI0NjA3NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTcyNmQ2NmMxY2QyNThiYzU2ZDZkMGUwZGI1ZjdmNmNhOTIxZWU4YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjE2OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuQEAgLTQ0NCwzICs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4rXFxuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFxuK1xcdHN3aXRjaCAoZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcXG4rXFx0XFx0aWYgKCFmb2xpbykge1xcbitcXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4rXFx0XFx0aWYgKCFmb2xpbykge1xcbitcXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XFxuK1xcdFxcdGlmICghbWVtY2cpXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRtYXRjaGVkID0gZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXFx1MDAzZW1hdGNoaW5nO1xcbit9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuQEAgLTIxLDMgKzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTtcXG4gXFxuIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTtcXG4rXFxuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMTQzLDI5ICsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbiBcXHRzd2l0Y2ggKGZpbHRlci1cXHUwMDNldHlwZSkge1xcbi1cXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XFxuLVxcdFxcdGlmICghZm9saW8pIHtcXG4tXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFxuLVxcdFxcdGlmICghZm9saW8pIHtcXG4tXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xcbi1cXHRcXHRpZiAoIW1lbWNnKVxcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bWF0Y2hlZCA9IGZpbHRlci1cXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XFxuIFxcdFxcdGlmICghZm9saW8pXFxuIFxcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG5AQCAtMTczLDcgKzE1Miw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdFxcdG1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVxcdTAwM2VtYXRjaGluZztcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNTEwLDYgKzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ByZXAgKnA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7XFxuK1xcdFxcdHN3aXRjaCAocC1cXHUwMDNlYWN0aW9uKSB7XFxuK1xcdFxcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxcbitcXHRcXHRcXHRkYW1vbl92YV9ta29sZChtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkcik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4rXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xcbitcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcXG4rXFx0XFx0aWYgKCFtbSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxuK1xcdFxcdFxcdGlmIChzZXRfc2FtcGxlcylcXG4rXFx0XFx0XFx0XFx0ci1cXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVxcdTAwM2Vhci5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG4rXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxcbitcXHRcXHRcXHRcXHRkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRtbXB1dChtbSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmdfYWRkcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxcbitcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4rXFxuK1xcdGlmIChwdGUpXFxuK1xcdFxcdHlvdW5nID0gcHRlX3lvdW5nKCpwdGUpO1xcbitcXHRlbHNlIGlmIChwbWQpXFxuK1xcdFxcdHlvdW5nID0gcG1kX3lvdW5nKCpwbWQpO1xcbitcXHR5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XFxuK1xcdFxcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKG1tLCBhZGRyKTtcXG4rXFx0cmV0dXJuIHlvdW5nO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxcbitcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoIChmaWx0ZXItXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XFxuK1xcdFxcdGlmICghZm9saW8pXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRtYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLFxcbitcXHRcXHRcXHRcXHRcXHRhZGRyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xcbitcXHR9XFxuK1xcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cXHUwMDNlbWF0Y2hpbmc7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcXG4rXFx0XFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmO1xcbitcXHRib29sIHBhc3MgPSB0cnVlO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcXG4rXFx0XFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xcbitcXHRcXHRcXHRwYXNzID0gZi1cXHUwMDNlYWxsb3c7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHBhc3MgPSAhZi1cXHUwMDNlYWxsb3c7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHBhc3M7XFxuK31cXG4rXFxuK3N0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUge1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdGludCBpID0gMDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG4rXFx0XFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLFxcbitcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyKSlcXG4rXFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbitcXHRcXHRpKys7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbit7XFxuK1xcdHB0ZV90ICpwdGU7XFxuK1xcdHB0ZV90IHB0ZW50O1xcbitcXHRzcGlubG9ja190ICpwdGw7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbitcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4rXFx0aWYgKHB0bCkge1xcbitcXHRcXHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcXG4rXFxuK1xcdFxcdGlmICghcG1kX3ByZXNlbnQocG1kZSkpXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuK1xcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xcbitcXHRcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRcXHRnb3RvIGh1Z2Vfb3V0O1xcbitcXHRcXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVxcdTAwM2VjdHgsIHByaXYtXFx1MDAzZXIsIGZvbGlvLCBOVUxMLCBcXHUwMDI2cG1kZSxcXG4rXFx0XFx0XFx0XFx0d2Fsay1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcbitodWdlX291dDpcXG4rXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rI2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuK1xcbitcXHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXFx1MDAzZW1tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbitcXHRpZiAoIXB0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4rXFx0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcXG4rXFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIFxcdTAwMjZwdGVudCwgTlVMTCxcXG4rXFx0XFx0XFx0d2Fsay1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcbitvdXQ6XFxuK1xcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVxcdTAwM2V2bWEpO1xcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRzcGlubG9ja190ICpwdGw7XFxuK1xcdHB0ZV90IGVudHJ5O1xcbitcXG4rXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG4rXFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuK1xcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIFxcdTAwMjZlbnRyeSwgTlVMTCxcXG4rXFx0XFx0XFx0d2Fsay1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitvdXQ6XFxuK1xcdHNwaW5fdW5sb2NrKHB0bCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbHNlXFxuKyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMXFxuKyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuK1xcbitzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHtcXG4rXFx0XFx0LmN0eCA9IGN0eCxcXG4rXFx0XFx0LnIgPSByLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fcHJvYmVfd2Fsa19vcHMgPSB7XFxuK1xcdFxcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXFxuK1xcdFxcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gci1cXHUwMDNlc2FtcGxpbmdfYWRkcjtcXG4rXFxuK1xcdGlmICghbW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcXG4rXFx0XFx0XFx0XFx1MDAyNmFyZyk7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuK1xcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuK1xcdFxcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xcbitcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbitcXHRcXHRcXHRpZiAoc2V0X3NhbXBsZXMpXFxuK1xcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cXHUwMDNlYXIuc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZWFyLmVuZCk7XFxuK1xcdFxcdFxcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xcbitcXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbitcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGN0eCksIG1heF93c3VtKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobW0pXFxuK1xcdFxcdFxcdG1tcHV0KG1tKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG1heF93c3VtO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcG1kX3QgKnBtZHApXFxuQEAgLTkzOCw2ICsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4gXFx0XFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcXG4gXFx0XFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcXG4gXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXFxuK1xcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxcbitcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLFxcbiBcXHRcXHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxcbiBcXHRcXHQuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCxcXG4gXFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTY6NDUuMjUyMjg0NDgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjk5ODQ3OTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9vcHNfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwX3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fcGFfZmlsdGVyX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzI2ZDY2YzFjZDI1OGJjNTZkNmQwZTBkYjVmN2Y2Y2E5MjFlZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMjoxNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtNDQ0LDMgKzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuK1xuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4rXHRcdGlmICghZm9saW8pIHtcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuK1x0XHRpZiAoIW1lbWNnKVxuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuK31cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTIxLDMgKzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xuIFxuIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTtcbitcbitib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xNDMsMjkgKzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4tXHRcdGlmICghZm9saW8pIHtcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuLVx0XHRpZiAoIW1lbWNnKVxuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuIFx0XHRpZiAoIWZvbGlvKVxuIFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbkBAIC0xNzMsNyArMTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbiBcdH1cbiBcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNTEwLDYgKzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbWF4X25yX2FjY2Vzc2VzO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuK1x0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcmVwICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuK1x0XHRzd2l0Y2ggKHAtXHUwMDNlYWN0aW9uKSB7XG4rXHRcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxuK1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuK1x0XHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcbitcdFx0aWYgKCFtbSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbitcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4rXHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbitcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG4rXHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxuK1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4rXHRcdH1cbitcdFx0bW1wdXQobW0pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuK1xuK1x0aWYgKHB0ZSlcbitcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4rXHRlbHNlIGlmIChwbWQpXG4rXHRcdHlvdW5nID0gcG1kX3lvdW5nKCpwbWQpO1xuK1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7XG4rXHRyZXR1cm4geW91bmc7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLFxuK1x0XHRcdFx0XHRhZGRyKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbitcdH1cbitcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLFxuK1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XG4rXHRib29sIHBhc3MgPSB0cnVlO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcbitcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuK1x0XHRcdHBhc3MgPSBmLVx1MDAzZWFsbG93O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHBhc3MgPSAhZi1cdTAwM2VhbGxvdztcbitcdH1cbitcdHJldHVybiBwYXNzO1xuK31cbitcbitzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4rXHRcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcbitcdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbitcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0rKztcbitcdFx0aSsrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4re1xuK1x0cHRlX3QgKnB0ZTtcbitcdHB0ZV90IHB0ZW50O1xuK1x0c3BpbmxvY2tfdCAqcHRsO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4rXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbitcdGlmIChwdGwpIHtcbitcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4rXG4rXHRcdGlmICghcG1kX3ByZXNlbnQocG1kZSkpXG4rXHRcdFx0Z290byBodWdlX291dDtcbitcdFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwbWRlKTtcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuK1x0XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgTlVMTCwgXHUwMDI2cG1kZSxcbitcdFx0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitodWdlX291dDpcbitcdFx0c3Bpbl91bmxvY2socHRsKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rI2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbitcbitcdHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cdTAwM2VtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuK1x0aWYgKCFwdGUpXG4rXHRcdHJldHVybiAwO1xuK1x0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcbitcdGlmICghZm9saW8pXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNnB0ZW50LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitvdXQ6XG4rXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cdTAwM2V2bWEpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHNwaW5sb2NrX3QgKnB0bDtcbitcdHB0ZV90IGVudHJ5O1xuK1xuK1x0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVx1MDAzZW1tLCBwdGUpO1xuK1x0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4rXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4rXHRmb2xpb19nZXQoZm9saW8pO1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNmVudHJ5LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4rXG4rb3V0OlxuK1x0c3Bpbl91bmxvY2socHRsKTtcbitcdHJldHVybiAwO1xuK31cbisjZWxzZVxuKyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMXG4rI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbitcbitzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHtcbitcdFx0LmN0eCA9IGN0eCxcbitcdFx0LnIgPSByLFxuK1x0fTtcbitcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbitcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSxcbitcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHItXHUwMDNlc2FtcGxpbmdfYWRkcjtcbitcbitcdGlmICghbW0pXG4rXHRcdHJldHVybjtcbitcbitcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFx1MDAyNmRhbW9uX3Byb2JlX3dhbGtfb3BzLFxuK1x0XHRcdFx1MDAyNmFyZyk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuK1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbitcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVx1MDAzZWFyLnN0YXJ0LFxuK1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbitcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbitcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuK1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHR9XG4rXHRcdGlmIChtbSlcbitcdFx0XHRtbXB1dChtbSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbWF4X3dzdW07XG4rfVxuK1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiArMTE2OCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4gXHRcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXG4gXHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4gXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxuK1x0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcyxcbitcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNjo0NS4yNTIyODU3ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5OTI2NTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERBTU9OOiBQYXRjaCBBbmFseXNpcyBhbmQgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdy4gVGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy5cblxuQmFzZWQgb24gdGhlIGZpbGUgbGlzdCwgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9kYW1vbi9vcHMtY29tbW9uLmhgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AsIGl0J3MgY2xlYXJseSBhIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBtb2RpZmljYXRpb24sIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGJlaW5nIGludHJvZHVjZWQgaW4gYG9wcy1jb21tb25gIGFuZCB1dGlsaXplZCBpbiBgcGFkZHIuY2AgYW5kIGB2YWRkci5jYC4gVGhpcyBzdWdnZXN0cyBzb21lIG5ldyBmaWx0ZXJpbmcgb3IgbWF0Y2hpbmcgbWVjaGFuaXNtIHdpdGhpbiBEQU1PTiwgcG9zc2libHkgZm9yIHNlbGVjdGluZyBtZW1vcnkgcmVnaW9ucyB0byBtb25pdG9yIG9yIGluZmx1ZW5jZS5cblxuTG9va2luZyBkZWVwZXIgYXQgYHZhZGRyLmNgLCB0aGUgZnVuY3Rpb25zIGFkZGVkIGFyZSBwYXJ0aWN1bGFybHkgbm90ZXdvcnRoeTogYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCwgYGRhbW9uX3ZhX3Byb2JlX2ZvbGlvYCwgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCwgYF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzYCwgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBUaGUgYC5wcmVwX3Byb2Jlc2AgYW5kIGAuYXBwbHlfcHJvYmVzYCBob29rcyBpbiBgZGFtb25fdmFfaW5pdGNhbGwoKWAgYXJlIGtleSwgZXNwZWNpYWxseSBpZiB0aGVzZSByZXBsYWNlIGZ1bmN0aW9uYWxpdHkuIFRoZXNlIGFsbCBwb2ludCB0byB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyB3aXRoaW4gREFNT04uIFRoaXMgc3VnZ2VzdHMgYSBuZXcgYXBwcm9hY2ggdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIG9yIG1hbmlwdWxhdGlvbiB3aXRoaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc3BvdCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBzaGlmdCBnZWFycyB0byB0aGUgY29uZmlndXJhdGlvbiBzaWRlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8ga25vdyB3aGljaCBEQU1PTiBmZWF0dXJlcywgYW5kIHNwZWNpZmljYWxseSBgREFNT05fVkFERFJgIG9yIGBEQU1PTl9QQUREUmAsIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSeKAmWxsIG5lZWQgdG8gcnVuIGdyZXBwZXIgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL0tjb25maWdgIHRvIHBpbiB0aGlzIGRvd24gcXVpY2tseS4gQW55IGNvbmZpZ3VyYXRpb24gaXNzdWVzIGFyZSwgb2J2aW91c2x5LCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGFueSBmb2N1cyBzeW1ib2xzIHRoYXQgY291bGQgaW1wYWN0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTY6NTYuMzUxNTUzNjYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjQ4NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE2OjU2LjM5NDgwNTk1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODU2NTE1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1ha2VmaWxlIEludmVzdGlnYXRpb24gZm9yIE9wcy1Db21tb24gQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG9wcy1jb21tb24uY2AsIGB2YWRkci5jYCwgYW5kIGBwYWRkci5jYCBhcmUgYmVpbmcgY29tcGlsZWQuIFRvIGRvIHRoYXQgZWZmaWNpZW50bHksIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkOiBgL21tL2RhbW9uL01ha2VmaWxlYC4gQSBxdWljayBzY2FuIG9mIHRoYXQgYE1ha2VmaWxlYCBzaG91bGQgcmV2ZWFsIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgbGlua2luZyBzdGVwcyBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIHRob3NlIGNyaXRpY2FsIGZpbGVzLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgYW5kIHRyb3VibGVzaG9vdCBidWlsZCBlcnJvcnMsIGRlcGVuZGVuY3kgcHJvYmxlbXMsIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNjo1OC42ODA0NTk3NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNjo1OC42ODA1MTgzMjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcyNzMzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGNoZWNrOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBDaGVjayoqXG5cbkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcGFyc2UgdGhhdCBLY29uZmlnIGZpbGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYW5kIGV2ZW4gYHNvdXJjZWAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYXZhaWxhYmlsaXR5IG9yIGJlaGF2aW9yIG9mIHRob3NlIERBTU9OIGZlYXR1cmVzLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hpY2ggb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGZlYXR1cmVzLCBvciBjb25maWd1cmF0aW9ucyBhcmUgcHJlcmVxdWlzaXRlIGZvciBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gY29uZmxpY3RzIG9yIHJ1bnRpbWUgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QgYW5kIGltcGFjdCBvbmUgYW5vdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDEuMDUzMjUzNjgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDEuMDUzMzM4NTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1NTk4NTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgdGhlIHBhdGNoJ3MgY2hhbmdlcywgZGV0ZXJtaW5pbmcgaWYgdGhleSdyZSByZWFjaGFibGUsIGFuZCB1bHRpbWF0ZWx5IGp1ZGdpbmcgaWYgZnV6emluZyBpdCBpcyB3b3J0aHdoaWxlLiBUaGlzIGlzIGNvcmUgTU0gc3Vic3lzdGVtIGNvZGUsIERBTU9OLCBzbyBpdCdzIGluaGVyZW50bHkgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLlxuXG5Gcm9tIHdoYXQgSSBzZWUsIHRoZSBwYXRjaCBpcyBpbXBsZW1lbnRpbmcgdmlydHVhbCBhZGRyZXNzIHByb2Jlcywgc3BlY2lmaWNhbGx5IGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBJdCBsb29rcyBsaWtlIGl0IGFsc28gaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBwYWdlIHRhYmxlIHdhbGtz4oCUYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YOKAlGFsb25nIHdpdGggZmlsdGVyIG1hdGNoaW5nIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGFuZCBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAuIEZpbmFsbHksIHRoZXJlJ3MgdGhlIHVzdWFsIHN5c2ZzL2NvcmUgREFNT04gaW50ZWdyYXRpb24uIEFsbCBzdGFuZGFyZCBzdHVmZiwgcmVhbGx5LlxuXG5UaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCdzICpmdWxseSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBmYW50YXN0aWMgZm9yIGZ1enppbmcuIFdlIGhhdmUgdGhlIHN5c2ZzIERBTU9OIGludGVyZmFjZSAoYENPTkZJR19EQU1PTl9TWVNGU2AsIGV0Yy4pIGFzIGEgZGlyZWN0IGF0dGFjayB2ZWN0b3IuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgREFNT04gY29udHJvbCBpbnRlcmZhY2VzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGxpa2UgZGVidWdmcywgYnV0IEknbGwgZm9jdXMgb24gc3lzZnMgZm9yIG5vdy4gSXQgaXMgbGlrZWx5IHRoZSBiZXN0IHBhdGggZm9yIGZ1enplciBpbnRlZ3JhdGlvbi5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBzeXNmcyBpbnRlcmZhY2UgYWxsb3dzIHVzIHRvIGNvbmZpZ3VyZSB0aGVzZSBwcm9iZXMgb3IgdGhlIERBTU9OIGNvbnRleHRzL3RhcmdldHMuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGNhbGxzIHRvIGBwcmVwX3Byb2Jlc2Agb3IgYGFwcGx5X3Byb2Jlc2AgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXkncmUgYWN0dWFsbHkgdXNlZC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkxNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjA0LjQwOTMyNzU1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzQwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBwbHlfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NDUtXFx0XFx0XFx0bWF4X21lcmdlX3Njb3JlID0gY3R4LVxcdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk0NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XFxubW0vZGFtb24vY29yZS5jLTM5NDctXFx0XFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTUyLVxcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYzozOTUzOlxcdFxcdFxcdG1heF93c3VtID0gY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXFx1MDAyNlxcdTAwMjYgIWRvX3ByZXAsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE2MD1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTc1LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ2NC1cXHRcXHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2JlcyxcXG5tbS9kYW1vbi9wYWRkci5jOjQ2NTpcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDY2LVxcdFxcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz02Njk9c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cXG5tbS9kYW1vbi92YWRkci5jOjY5NzpzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vdmFkZHIuYy02OTgtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MTYtXFxubW0vZGFtb24vdmFkZHIuYzo3MTc6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjczMTpcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTExNzEtXFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYzoxMTcyOlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYy0xMTczLVxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjA0LjQ1NDQ2NTg1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYzMDY1Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIERlZXBlciBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgKipcblxuQWxyaWdodCwgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgREFNT04gYW5kIGl0cyBpbnRlcm5hbHMsIGFuZCBJJ20gZmVlbGluZyB0aGF0IGl0Y2ggdG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgaXMgb3BlcmF0aW5nLiBJJ3ZlIGdvdCBteSBoZWFkIGFyb3VuZCBhIGZldyBrZXkgYXJlYXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEknbSBub3cgZm9jdXNpbmcgaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJlYWxpemluZyB0aGVyZSdzIG9uZSBzcGVjaWZpYyB0aGluZyB0aGF0IHJlYWxseSBuZWVkcyBhIGxvb2sgYXQ6IGBwcmVwX3Byb2Jlc2AuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDYuMjE3NTM0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjczMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9wcm9iZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTM4OTM9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cXG5tbS9kYW1vbi9jb3JlLmM6MzkzNDpcXHRcXHRkb19wcmVwID0gY3R4LVxcdTAwM2VvcHMucHJlcF9wcm9iZXMgXFx1MDAyNlxcdTAwMjYgZGFtb25faGFzX3ByZXAoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzkzNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTM4LVxcdFxcdGlmIChkb19wcmVwKVxcbm1tL2RhbW9uL2NvcmUuYzozOTM5OlxcdFxcdFxcdGN0eC1cXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgYWNjZXNzX2NoZWNrX2Rpc2FibGVkKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk0MC1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9OTI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEwNy1cXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTEwOS1cXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyNC1cXG5tbS9kYW1vbi9wYWRkci5jOjEyNTpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxubW0vZGFtb24vcGFkZHIuYy0xMjYte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMzYtXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxcbm1tL2RhbW9uL3BhZGRyLmM6MTM3OlxcdFxcdFxcdFxcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTM4LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ2My1cXHRcXHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyxcXG5tbS9kYW1vbi9wYWRkci5jOjQ2NDpcXHRcXHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2JlcyxcXG5tbS9kYW1vbi9wYWRkci5jLTQ2NS1cXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01MTM9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01MjktXFxubW0vZGFtb24vdmFkZHIuYzo1MzA6c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTMxLXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTE2Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0xMTcwLVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MTpcXHRcXHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcyxcXG5tbS9kYW1vbi92YWRkci5jLTExNzItXFx0XFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MDYuMjYzMjY2MjkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0Nzk2MDIyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUHJvYmUgYW5kIEZpbHRlciBMb2dpYyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgcmlnaHQgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldyBEQU1PTiBjb2RlIHRoYXQncyBiZWVuIGludHJvZHVjZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBrZGFtb25kX2ZuYCBmdW5jdGlvbiBhbmQgaG93IERBTU9OIGlzIG1hbmFnZWQuIEl0J3MgdGhlIGNvcmUgREFNT04ga2VybmVsIHRocmVhZCwgc3RhcnRlZCB3aGVuIERBTU9OIGlzIGVuYWJsZWQgdGhyb3VnaCBzeXNmcyB1c2luZyBhdHRyaWJ1dGVzIGxpa2UgYGtkYW1vbmRfbnJfc2NoZW1lc2AgYW5kIHRoZSBcIm9uXCIgc3RhdGUgaW4gYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLmAuIEknbSB3b3JraW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBjb2RlIGlzIHJ1bm5pbmcgd2hlbiB3ZSdyZSBhY3RpdmVseSBtb25pdG9yaW5nIHZpcnR1YWwgYWRkcmVzc2VzIHVzaW5nIHByb2JlcyBvciBmaWx0ZXJzLlxuXG5UaGUgb2J2aW91cyBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzZXR1cHMsIHNheSBpbiBRRU1VLiBUaGUgYW5zd2VyIGlzIHllcywgZ2l2ZW4gc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5c2ZzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIG5vcm0uXG5cbk5vdywgaXMgdGhpcyBjb2RlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidC4gV2UncmUgbG9va2luZyBhdCBjb21wbGV0ZWx5IG5ldyBwcm9iZSBleGVjdXRpb24gbG9naWMsIHRoZSBtZWNoYW5pY3Mgb2Ygd2Fsa2luZyBtZW1vcnkgYWRkcmVzc2VzIChgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlYCksIGRlZXAgZGl2ZXMgaW50byB0aGUgcGFnZSB0YWJsZXMgKGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWApLCBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZSkgbG9ja2luZywgaHVnZSBwYWdlIGxvY2tpbmcsIGZvbGlvIGhhbmRsaW5nLCBhbmQgZmlsdGVyIGNoZWNraW5nIOKAkyBhbGwgY29yZSBhcmVhcyB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZmVydGlsZSBncm91bmQgZm9yIGRpc2NvdmVyeS5cblxuQWxyaWdodCwgbGV0J3MgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFdoYXQgZGlkIHRoZSBwYXRjaCBhY3R1YWxseSBpbnRyb2R1Y2Ugb3IgbW9kaWZ5PyBMZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGRpZmY6XG5cbjEuICBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2BcbjIuICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYCBpbiBgbW0vZGFtb24vcGFkZHIuY2BcbjMuICBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gIGluIGBtbS9kYW1vbi92YWRkci5jYFxuNC4gIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgXG41LiAgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgIGluIGBtbS9kYW1vbi92YWRkci5jYFxuNi4gIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGluIGBtbS9kYW1vbi92YWRkci5jYFxuNy4gIGBkYW1vbl92YV9maWx0ZXJfcGFzc2AgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgXG44LiAgYGRhbW9uX3ZhX3Byb2JlX2ZvbGlvYCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcbjkuICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcbjEwLiBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAgaW4gYG1tL2RhbW9uL3ZhZGRyLmNgXG4xMS4gYF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcbjEyLiBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBpbiBgbW0vZGFtb24vdmFkZHIuY2BcblxuQXJlIHRoZXNlIHN0YXRpYyBvciBleHBvcnRlZD8gTGV0J3Mgc2VlOlxuXG4qICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBhbmQgZGVjbGFyZWQgaW4gYG9wcy1jb21tb24uaGAuXG4qICAgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgaXMgc3RhdGljIGluIGBtbS9kYW1vbi9wYWRkci5jYC5cbiogICBgZGFtb25fdmFfcHJlcF9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBhcmUgb3BlcmF0aW9uIGNhbGxiYWNrcyBpbiBgZGFtb25fdmFfaW5pdGNhbGxgIC8gYGRhbW9uX29wZXJhdGlvbnNgLlxuKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBldGMuIGFyZSBzdGF0aWMgaGVscGVycyB3aXRoaW4gYHZhZGRyLmNgLlxuXG5Pa2F5LCBsZXQncyBzZWxlY3QgdGhlIGtleSBzeW1ib2xzIGZvciBmdXJ0aGVyIHJldmlldzpcblxuKiAgIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYFxuKiAgIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2BcbiogICBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYFxuKiAgIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgXG4qICAgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgXG4qICAgYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGBcbiogICBgZGFtb25fcGFfZmlsdGVyX21hdGNoYFxuXG5XaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZD8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgd2hlbiB3ZSBydW46XG5cbiogICBgREFNT05gXG4qICAgYERBTU9OX1ZBRERSYFxuKiAgIGBEQU1PTl9QQUREUmBcbiogICBgREFNT05fU1lTRlNgXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAoZm9yIGAjaWZkZWYgQ09ORklHX1RSQU5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNzoxMy43NDI4NzA3OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdmFkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFx0cmV0dXJuIHBhc3M7XFxuIDYwMTpcXHR9XFxuIDYwMjpcXHRcXG4gNjAzOlxcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUge1xcbiA2MDQ6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbiA2MDU6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4gNjA2OlxcdH07XFxuIDYwNzpcXHRcXG4gNjA4OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gNjA5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDYxMDpcXHRcXHRcXHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gNjExOlxcdHtcXG4gNjEyOlxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuIDYxMzpcXHRcXHRpbnQgaSA9IDA7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG4gNjE2OlxcdFxcdFxcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIpKVxcbiA2MTg6XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xcbiA2MTk6XFx0XFx0XFx0aSsrO1xcbiA2MjA6XFx0XFx0fVxcbiA2MjE6XFx0fVxcbiA2MjI6XFx0XFxuIDYyMzpcXHRzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDYyNDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiA2MjU6XFx0e1xcbiA2MjY6XFx0XFx0cHRlX3QgKnB0ZTtcXG4gNjI3OlxcdFxcdHB0ZV90IHB0ZW50O1xcbiA2Mjg6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA2Mjk6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gNjMwOlxcdFxcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiA2MzE6XFx0XFxuIDYzMjpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDYzMzpcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4gNjM0OlxcdFxcdGlmIChwdGwpIHtcXG4gNjM1OlxcdFxcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxcbiA2Mzg6XFx0XFx0XFx0XFx0Z290byBodWdlX291dDtcXG4gNjM5OlxcdFxcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xcbiA2NDA6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4gNjQxOlxcdFxcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuIDY0MjpcXHRcXHRcXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVxcdTAwM2VjdHgsIHByaXYtXFx1MDAzZXIsIGZvbGlvLCBOVUxMLCBcXHUwMDI2cG1kZSxcXG4gNjQzOlxcdFxcdFxcdFxcdFxcdHdhbGstXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0pO1xcbiA2NDQ6XFx0XFxuIDY0NTpcXHRodWdlX291dDpcXG4gNjQ2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDY0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjQ4OlxcdFxcdH1cXG4gNjQ5OlxcdCNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXFx1MDAzZW1tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbiA2NTI6XFx0XFx0aWYgKCFwdGUpXFxuIDY1MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjU0OlxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNjU1OlxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxcbiA2NTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDY1NzpcXHRcXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVxcdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcXG4gNjU4OlxcdFxcdGlmICghZm9saW8pXFxuIDY1OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjYwOlxcdFxcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIFxcdTAwMjZwdGVudCwgTlVMTCxcXG4gNjYxOlxcdFxcdFxcdFxcdHdhbGstXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0pO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRvdXQ6XFxuIDY2NDpcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcXG4gNjY1OlxcdFxcdHJldHVybiAwO1xcbiA2NjY6XFx0fVxcbiA2Njc6XFx0XFxuIDY2ODpcXHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiA2Njk6XFx0c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuIDY3MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4gNjcxOlxcdHtcXG4gNjcyOlxcdFxcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiA2NzM6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKTtcXG4gNjc0OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDY3NTpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDY3NjpcXHRcXHRwdGVfdCBlbnRyeTtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG4gNjc5OlxcdFxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MTMuNzQyOTY1NTI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MjQyNjAyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IHBhdGNoIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgb3BzLWNvbW1vbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLiBJIHNlZSBpdCB1c2VzIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGFuZCBjYWxscyBgZm9saW9fbWVtY2dfY2hlY2soZm9saW8pYCBhbmQgYG1lbV9jZ3JvdXBfaWQobWVtY2cpYC4gTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYWN0aXZlIGlmIGBNRU1DR2AgaXMgZW5hYmxlZCwgc28gdGhhdCdzIGEga2V5IGRlcGVuZGVuY3kuXG5cbkxldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEknbSBzZWVpbmcgdGhhdCB3ZSd2ZSBmbGFnZ2VkIHRoaXMgYXMgYFdvcnRoRnV6emluZ2AsIHdoaWNoIGFsaWducyB3aXRoIG15IGluaXRpYWwgaW50ZXJlc3QuIFRoZSBwYXRjaCBsZXZlcmFnZXMgYSBudW1iZXIgb2YgY29uZmlndXJhdGlvbnMgaW5jbHVkaW5nIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBIVUdFVExCX1BBR0VgLCBhbmQgY3J1Y2lhbGx5LCBgTUVNQ0dgLiBBbGwgb2YgdGhvc2UgaGF2ZSBiZWVuIGVuYWJsZWQuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyBmdW5jdGlvbnMgbGlrZSBgcG1kX2VudHJ5YCBhbmQgYGh1Z2V0bGJfZW50cnlgLCBwbHVzIGZpbHRlciBtYXRjaGluZywgYW5kIHByb2JpbmcgY2FsbGJhY2tzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IHNjcnV0aW55IGR1cmluZyBmdXp6IHRlc3RpbmcuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IERBTU9OIFN5c2ZzL2tkYW1vbmQgaW50ZXJmYWNlcyBleHBvc2UgdGhlc2UgZnVuY3Rpb25zLlxuXG5UaGlzIHBhdGNoIGxvb2tzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBjb21iaW5hdGlvbiBvZiBwYWdlIHRhYmxlIHdhbGtpbmcsIGNvbXBsZXggbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zICh2aWEgYE1FTUNHYCBhbmQgb3RoZXIgY29uZmlndXJhdGlvbnMpLCBhbmQgc3lzZnMgaW50ZXJmYWNlcyBtYWtlcyBpdCBhIGxpa2VseSB0YXJnZXQuIEkgc2hvdWxkIHByb2JhYmx5IGludm9rZSBgc2V0LXJlc3VsdHNgIGF0IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Nzg1LCJPdXRwdXRUb2tlbnMiOjIzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjE4LjE2NzIyODk5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNTMxMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9vcHNfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwX3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fcGFfZmlsdGVyX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9vcHNfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl92YV9wcmVwX3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfYXBwbHlfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImRhbW9uX3ZhX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fcGFfZmlsdGVyX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEQU1PTiB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgcHJlcGFyYXRpb24gYW5kIGV2YWx1YXRpb24gbG9naWMsIGluY2x1ZGluZyBjdXN0b20gcGFnZSB0YWJsZSB3YWxraW5nIGZvciBub3JtYWwsIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCBodWdldGxiIHBhZ2VzLCBhbG9uZ3NpZGUgc2hhcmVkIGZpbHRlciBtYXRjaGluZyBsb2dpYy4gVGhlc2UgcGF0aHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBEQU1PTiBrZXJuZWwgd29ya2VyIHRocmVhZCBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgREFNT04gc3lzZnMgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enogdGVzdGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MTguMjUwNzY3NTU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4OTI1NzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjE4LjI1MTIyOTk1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMTg4NzkxMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcXG5cXG5FdmFsdWF0aW5nIGFnYWluc3QgS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4yLiBObyB1c2VyLXNwYWNlIGNvcHkgbWVjaGFuaXNtczogVGhlIHBhdGNoIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBrZXJuZWwgYnVmZmVycyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXFxuMy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudDogUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgb24gYHByb2JlX2hpdHNgLCBmb2xpbyByZWZlcmVuY2UgY291bnQgbWlzbWF0Y2hlcywgb3IgcGFnZSB0YWJsZSBsb2NraW5nIGlzc3VlcykgZmFsbCBzcXVhcmVseSB3aXRoaW4gdGhlIHB1cnZpZXcgb2YgS0FTQU4sIFVCU0FOLCBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3MjZkNjZjMWNkMjU4YmM1NmQ2ZDBlMGRiNWY3ZjZjYTkyMWVlOGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAyOjE2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCA3MjE5YzYwOGIxOTUyLi5jZmNkNGVkZWUzNDZhIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC00NDQsMyArNDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4rXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcbitcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuK1x0XHRpZiAoIWZvbGlvKSB7XG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4rXHRcdGlmICghbWVtY2cpXG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4rfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuaW5kZXggMzhkMjk1NDg4ZmExOC4uYjgzMjE2OWIxY2Y4YyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uaFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5AQCAtMjEsMyArMjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7XG4gXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xuK1xuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCBjMWU3ZDdhNGY0MGRmLi5mZmRlODhlYTdhMTNjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuKysrIGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTE0MywyOSArMTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbiBcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4tXHRcdGlmICghbWVtY2cpXG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRlbHNlXG4tXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuQEAgLTE3Myw3ICsxNTIsNyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxuIFx0XHRcdG1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuIFx0fVxuIFx0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggZjg4NGQzZjc4ZjMwYS4uMDkwMzE3MTkxOTczYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC01MTAsNiArNTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4rXHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG4re1xuK1x0c3RydWN0IGRhbW9uX3ByZXAgKnA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7XG4rXHRcdHN3aXRjaCAocC1cdTAwM2VhY3Rpb24pIHtcbitcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4rXHRcdFx0ZGFtb25fdmFfbWtvbGQobW0sIHItXHUwMDNlc2FtcGxpbmdfYWRkcik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxuK3tcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuK1x0XHRpZiAoIW1tKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuK1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbitcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVx1MDAzZWFyLnN0YXJ0LFxuK1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbitcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4rXHRcdFx0XHRkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTtcbitcdFx0fVxuK1x0XHRtbXB1dChtbSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nX2FkZHIoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRib29sIHlvdW5nID0gZmFsc2U7XG4rXG4rXHRpZiAocHRlKVxuK1x0XHR5b3VuZyA9IHB0ZV95b3VuZygqcHRlKTtcbitcdGVsc2UgaWYgKHBtZClcbitcdFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XG4rXHR5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8XG4rXHRcdG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKG1tLCBhZGRyKTtcbitcdHJldHVybiB5b3VuZztcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbitcbitcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuK1x0XHRpZiAoIWZvbGlvKVxuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1hdGNoZWQgPSBkYW1vbl92YV95b3VuZ19hZGRyKGZvbGlvLCBwdGUsIHBtZCwgbW0sXG4rXHRcdFx0XHRcdGFkZHIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuK1x0fVxuK1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfcGFzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsXG4rXHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0c3RydWN0IGRhbW9uX2ZpbHRlciAqZjtcbitcdGJvb2wgcGFzcyA9IHRydWU7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xuK1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7XG4rXHRcdFx0cGFzcyA9IGYtXHUwMDNlYWxsb3c7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0cGFzcyA9ICFmLVx1MDAzZWFsbG93O1xuK1x0fVxuK1x0cmV0dXJuIHBhc3M7XG4rfVxuK1xuK3N0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUge1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4re1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbitcdGludCBpID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbitcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLFxuK1x0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxuK1x0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSsrO1xuK1x0XHRpKys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0dW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbit7XG4rXHRwdGVfdCAqcHRlO1xuK1x0cHRlX3QgcHRlbnQ7XG4rXHRzcGlubG9ja190ICpwdGw7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cdTAwM2V2bWEpO1xuK1x0aWYgKHB0bCkge1xuK1x0XHRwbWRfdCBwbWRlID0gcG1kcF9nZXQocG1kKTtcbitcbitcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbitcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuK1x0XHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay1cdTAwM2V2bWEsIGFkZHIsIHBtZGUpO1xuK1x0XHRpZiAoIWZvbGlvKVxuK1x0XHRcdGdvdG8gaHVnZV9vdXQ7XG4rXHRcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBOVUxMLCBcdTAwMjZwbWRlLFxuK1x0XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuK1xuK2h1Z2Vfb3V0OlxuK1x0XHRzcGluX3VubG9jayhwdGwpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbisjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuK1xuK1x0cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLVx1MDAzZW1tLCBwbWQsIGFkZHIsIFx1MDAyNnB0bCk7XG4rXHRpZiAoIXB0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4rXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbitcdFx0Z290byBvdXQ7XG4rXHRmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcHRlbnQpO1xuK1x0aWYgKCFmb2xpbylcbitcdFx0Z290byBvdXQ7XG4rXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2cHRlbnQsIE5VTEwsXG4rXHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuK1xuK291dDpcbitcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuK3tcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3BpbmxvY2tfdCAqcHRsO1xuK1x0cHRlX3QgZW50cnk7XG4rXG4rXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXHUwMDNlbW0sIHB0ZSk7XG4rXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbitcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcbitcdGZvbGlvX2dldChmb2xpbyk7XG4rXHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2ZW50cnksIE5VTEwsXG4rXHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbitcbitvdXQ6XG4rXHRzcGluX3VubG9jayhwdGwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rI2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcbisjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuK1xuK3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuK3tcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xuK1x0XHQuY3R4ID0gY3R4LFxuK1x0XHQuciA9IHIsXG4rXHR9O1xuK1x0c3RydWN0IG1tX3dhbGtfb3BzIGRhbW9uX3Byb2JlX3dhbGtfb3BzID0ge1xuK1x0XHQucG1kX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LFxuK1x0XHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksXG4rXHR9O1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gci1cdTAwM2VzYW1wbGluZ19hZGRyO1xuK1xuK1x0aWYgKCFtbSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXHUwMDI2ZGFtb25fcHJvYmVfd2Fsa19vcHMsXG4rXHRcdFx0XHUwMDI2YXJnKTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK1x0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbitcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4rXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuK1x0XHRcdF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpO1xuK1x0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4rXHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG4rXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4rXHRcdH1cbitcdFx0aWYgKG1tKVxuK1x0XHRcdG1tcHV0KG1tKTtcbitcdH1cbitcbitcdHJldHVybiBtYXhfd3N1bTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWRwKVxuQEAgLTkzOCw2ICsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcbiBcdFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcbiBcdFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcbiBcdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXG4rXHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxuK1x0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLFxuIFx0XHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxuIFx0XHQuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCxcbiBcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjE4LjI1MTIzMDkzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTIzNzI0MDc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBSZWZhY3RvcmluZyBhbmQgVmlydHVhbCBBZGRyZXNzIFByb2JpbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aXRoaW4gREFNT04sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB2aXJ0dWFsIGFkZHJlc3Nlcy4gSXQncyB0b3VjaGluZyBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uaGAsIGBtbS9kYW1vbi9wYWRkci5jYCwgYW5kIGBtbS9kYW1vbi92YWRkci5jYCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGlzdGluZyBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIGZyYW1ld29yayBpcyBldm9sdmluZy5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGlzIGJlaW5nIGFic3RyYWN0ZWQgaW50byBgb3BzLWNvbW1vbi5jYC4gVGhhdCdzIGEgZ29vZCBzaWduOyByZWZhY3RvcmluZyBjb21tb24gZnVuY3Rpb25hbGl0eSBsaWtlIHRoYXQgdXN1YWxseSBzaWduYWxzIGFuIGludGVudCB0byBzdHJlYW1saW5lIHRoZSBjb3JlIERBTU9OIG9wZXJhdGlvbnMgYW5kIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGltcGFjdHMgdGhlIGZpbHRlciBsb2dpYyBkb3duc3RyZWFtLlxuXG5Ob3csIHRoZSBtZWF0IG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSB3aG9sZSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zIGRlc2lnbmVkIHRvIHN1cHBvcnQgcHJvYmluZyB2aXJ0dWFsIGFkZHJlc3NlcyBkaXJlY3RseS4gSSBzZWUgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX3lvdW5nX2FkZHJgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYCwgYW5kIHRoZW4gZnVuY3Rpb25zIGZvciBwcm9iaW5nIGF0IHRoZSBmb2xpbywgcG1kLCBhbmQgaHVnZXRsYiBsZXZlbHM6IGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAuIEZpbmFsbHksIHRoZSBwYXRjaCBhZGRzICBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgIGFuZCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCB0byBpbXBsZW1lbnQgdGhlIHByb2JlIGFwcGxpY2F0aW9uIHByb2Nlc3MuIFRoZSByZWdpc3RyYXRpb24gb2YgYHByZXBfcHJvYmVzYCBhbmQgYGFwcGx5X3Byb2Jlc2AgY2FsbGJhY2tzIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgIGNvbmZpcm1zIHRoYXQgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29tcGxldGUgcmV3cml0ZSBmb3IgdmlydHVhbCBhZGRyZXNzIGhhbmRsaW5nIHdpdGhpbiBEQU1PTi5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBtb3JlIHRob3JvdWdobHkuIEnigJlsbCBuZWVkIHRvIHV0aWxpemUgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGZ1bGx5IGdyYXNwIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhlc2UgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcgZnVuY3Rpb25zIGludGVyZmFjZSB3aXRoIHRoZSBleGlzdGluZyBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcuIEknbGwgZm9jdXMgcGFydGljdWxhcmx5IG9uIGhvdyB0aGlzIGlzIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHBhZ2UgdGFibGUgbGV2ZWxzLiBJdCBhbHNvIHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZywgYW5kIGhvdyB0aGlzIHdpbGwgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIERBTU9OIG1vZHVsZXMuIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBjYXBhYmlsaXR5IGJlaW5nIGFkZGVkIHRvIERBTU9OLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDI6MTc6MjkuNDg4NDc1NTc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk2NjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9mb3JfZWFjaF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYzLVxcbm1tL2RhbW9uL2NvcmUuYzoxNjQ6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTY1LVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocHJlcCwgcHJvYmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjYxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2NS1cXG5tbS9kYW1vbi9jb3JlLmM6MjY2OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNjctXFx0XFx0aWYgKGkrKyA9PSBuKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3Mz1zdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3Ni1cXG5tbS9kYW1vbi9jb3JlLmM6Mjc3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjc4LVxcdFxcdGlmIChwLVxcdTAwM2V3ZWlnaHQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDc2PXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ4Mi1cXG5tbS9kYW1vbi9jb3JlLmM6NDgzOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmMtNDg0LVxcdFxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTk1MD12b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NTktXFxubW0vZGFtb24vY29yZS5jOjk2MDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHAsIG5leHRfcCwgY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy05NjEtXFx0XFx0ZGFtb25fZGVzdHJveV9wcm9iZShwKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDEwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAxNi1cXG5tbS9kYW1vbi9jb3JlLmM6MTAxNzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTAxOC1cXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MzUtXFx0bnJfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MTQzNjpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0xNDM3LVxcdFxcdG5yX3Byb2JlcysrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NTAtXFx0d3N1bSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjE0NTE6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYy0xNDUyLVxcdFxcdGlmIChwcm9iZS1cXHUwMDNld2VpZ2h0IFxcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xODQwPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODQ0LVxcbm1tL2RhbW9uL2NvcmUuYzoxODQ1OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoZHN0X3Byb2JlLCBuZXh0LCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMTg0Ni1cXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NTktXFxubW0vZGFtb24vY29yZS5jOjE4NjA6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShzcmNfcHJvYmUsIG5leHQsIHNyYykge1xcbm1tL2RhbW9uL2NvcmUuYy0xODYxLVxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMwMC1cXHRpZiAodHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWRfZW5hYmxlZCgpKSB7XFxubW0vZGFtb24vY29yZS5jOjIzMDE6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpXFxubW0vZGFtb24vY29yZS5jLTIzMDItXFx0XFx0XFx0bnJfcHJvYmVzKys7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTEyNT1zdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEzNS1cXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTM2OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcXG5tbS9kYW1vbi9wYWRkci5jLTEzNy1cXHRcXHRcXHRcXHRkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24ociwgcCwgY3R4KTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTk1LVxcdFxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7XFxubW0vZGFtb24vcGFkZHIuYzoxOTY6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vcGFkZHIuYy0xOTctXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBhLCBmb2xpbywgcCkpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05OC1cXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4LVxcdGkgPSAwO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDk6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTAtXFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpzeXNfcHJvYmU7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQyOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ5LVxcdG5yX2RzdF9wcm9iZXMgPSAwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDUwOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDUxLVxcdFxcdG5yX2RzdF9wcm9iZXMrKztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1Mi1cXHRucl9zcmNfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ1MzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1NC1cXHRcXHRucl9zcmNfcHJvYmVzKys7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ1OC1cXHRucl9kc3RfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQ1OTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDYwLVxcdFxcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShucl9kc3RfcHJvYmVzLCBzcmMpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz01MzA9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01NDQtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjU0NTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxubW0vZGFtb24vdmFkZHIuYy01NDYtXFx0XFx0XFx0XFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTYxNC1cXG5tbS9kYW1vbi92YWRkci5jOjYxNTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vdmFkZHIuYy02MTYtXFx0XFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMjoxNzoyOS41MzU0NDg2NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1MzQyMzU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uIENoZWNrKipcblxuT2theSwgdGltZSB0byBkcmlsbCBkb3duIG9uIHRoZXNlIHZhcmlhYmxlcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYGRhbW9uX3JlZ2lvbmAgYW5kIGBwcm9iZV9oaXRzYCBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkndmUgc2VlbiBjb3VudGxlc3MgaXNzdWVzIHN0ZW0gZnJvbSBpbXByb3BlciBtZW1vcnkgbWFuYWdlbWVudCBpbiBsb3ctbGV2ZWwgY29kZSBsaWtlIHRoaXMuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCB0aGUgbWVtb3J5IGlzIGJlaW5nIHJlcXVlc3RlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyBhbmQgYWxpZ25tZW50LCBhbmQgdGhhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZXQgdXAgd2l0aCB0aGVpciBpbml0aWFsIHZhbHVlcyB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciBvdXIgYWxnb3JpdGhtLCBsaWtlbHkgemVyb2VkLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgYXJlIGNvcnJlY3QuIEFueSBzbGlwLXVwIGhlcmUgY291bGQgbGVhZCB0byBjcmFzaGVzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3Igc3VidGxlIGJ1Z3MgdGhhdCBhcmUgaW5jcmVkaWJseSBkaWZmaWN1bHQgdG8gZGVidWcgbGF0ZXIgb24sIHNvIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGlzIHJvY2sgc29saWQgYmVmb3JlIG1vdmluZyBvbi4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgYWxsb2NhdGlvbiBjYWxscywgbG9vayBhdCB0aGUgc2l6ZXMgYmVpbmcgcGFzc2VkLCBhbmQgdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHBhdGhzLiBObyBzdG9uZSB1bnR1cm5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjMxLjY4ODg3NDU5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NDgyOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmVfaGl0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0OC1cXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0zNTAtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2Ni1cXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXFxubW0vZGFtb24vY29yZS5jOjM2NzpcXHRcXHRyZXR1cm4gci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF07XFxubW0vZGFtb24vY29yZS5jLTM2OC1cXG5tbS9kYW1vbi9jb3JlLmM6MzY5OlxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXFxubW0vZGFtb24vY29yZS5jOjM3MDpcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xcbm1tL2RhbW9uL2NvcmUuYy0zNzEtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM4OT1zdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjQwMzpcXHRcXHRyZWdpb24tXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo0MDQ6XFx0XFx0cmVnaW9uLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy00MDUtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ2OC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG5tbS9kYW1vbi9jb3JlLmMtNDcwLSAqIEByOlxcdFxcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NzUtICovXFxubW0vZGFtb24vY29yZS5jOjQ3Njp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODQtXFx0XFx0aWYgKGxhc3QpXFxubW0vZGFtb24vY29yZS5jOjQ4NTpcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbm1tL2RhbW9uL2NvcmUuYy00ODYtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzo0ODc6XFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZXByb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jLTQ4OC1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAwMz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cXG5tbS9kYW1vbi9jb3JlLmM6MTAxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDExLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDE3LVxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMDE4OlxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cXHRcXHRpZiAoIWFnZ3JlZ2F0aW5nKVxcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jOjEwMjI6XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVxcdFxcdFxcdFxcdFxcdG5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTEwMjQtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDI1OlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI2LVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDMwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzMte1xcbm1tL2RhbW9uL2NvcmUuYzoxMDM0OlxcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDI3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQyOS1cXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcXG5tbS9kYW1vbi9jb3JlLmM6MTQzMDpcXHR1bnNpZ25lZCBjaGFyIG1heF9wcm9iZV9oaXRzO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDMxLVxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTQ0OC1cXHQvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNDQ5OlxcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE0NTAtXFx0d3N1bSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTE0NTEtXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlxcdFxcdGlmIChwcm9iZS1cXHUwMDNld2VpZ2h0IFxcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1My1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjE0NTQ6XFx0XFx0d3N1bV90b19hZGQgPSBwcm9iZS1cXHUwMDNld2VpZ2h0ICogbWF4X3Byb2JlX2hpdHM7XFxubW0vZGFtb24vY29yZS5jLTE0NTUtXFx0XFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcXHUwMDNjIHdzdW1fdG9fYWRkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyOTM9c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMxNi1cXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIzMTc6XFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gci1cXHUwMDNlcHJvYmVfaGl0c1tpXTtcXG5tbS9kYW1vbi9jb3JlLmM6MjMxODpcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjMxOS1cXHRcXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzQyNj1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MzQzODpcXHRcXHRsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXFx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICsgci1cXHUwMDNlcHJvYmVfaGl0c1tpXVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM5LVxcdFxcdFxcdFxcdCogc3pfcikgLyAoc3pfbCArIHN6X3IpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jOjM0NDU6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDQ2LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ0NzpcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjM0NDg6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDQ5LVxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYzozNDY1OlxcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDY2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjktXFxubW0vZGFtb24vY29yZS5jOjM0NzA6XFx0XFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XFxubW0vZGFtb24vY29yZS5jOjM0NzE6XFx0XFx0bGFzdF9zY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIHRydWUsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDcyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODYtXFx0XFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxcbm1tL2RhbW9uL2NvcmUuYzozNDg3OlxcdFxcdFxcdFxcdFxcdHVzZV9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM0ODgtXFx0XFx0aWYgKGRpZmYgXFx1MDAzZSB0aHJlcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNTY2PXN0YXRpYyBpbnQgZGFtb25fc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzU4MS1cXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzU4MjpcXHRtZW1jcHkobmV3LVxcdTAwM2Vwcm9iZV9oaXRzLCByLVxcdTAwM2Vwcm9iZV9oaXRzLCBzaXplb2Yoci1cXHUwMDNlcHJvYmVfaGl0cykpO1xcbm1tL2RhbW9uL2NvcmUuYzozNTgzOlxcdG1lbWNweShuZXctXFx1MDAzZWxhc3RfcHJvYmVfaGl0cywgci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzLFxcbm1tL2RhbW9uL2NvcmUuYzozNTg0OlxcdFxcdFxcdHNpemVvZihyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzU4NS1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTc2PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTk3LVxcdFxcdFxcdFxcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxcbm1tL2RhbW9uL3BhZGRyLmM6MTk4OlxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0rKztcXG5tbS9kYW1vbi9wYWRkci5jLTE5OS1cXHRcXHRcXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA0OlxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDA9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00OS1cXHRcXHRfX0FUVFJfUk9fTU9ERShoaXRzLCAwNDAwKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz01MT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcHJvYmVfYXR0cnNbXSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01My1cXHROVUxMLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2JlcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTMtXFx0XFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExNDpcXHRcXHRcXHRcXHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cXHRcXHRpZiAoIXN5c19wcm9iZSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0MD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQtXFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDE1O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTU6XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1swXSA9IDc7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NjpcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0gPSAzO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTctXFx0ci1cXHUwMDNlYWdlID0gMTA7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTcyLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3MzpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlcHJvYmVfaGl0c1swXSwgcl9uZXctXFx1MDAzZXByb2JlX2hpdHNbMF0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzQ6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSwgcl9uZXctXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3NS1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCByX25ldy1cXHUwMDNlYWdlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5NS1cXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDEwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxOTY6XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1swXSA9IDY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5Ny1cXHRyLVxcdTAwM2VhZ2UgPSA5O1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNC1cXHRyMi1cXHUwMDNlbnJfYWNjZXNzZXMgPSAyMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjA1OlxcdHIyLVxcdTAwM2Vwcm9iZV9oaXRzWzBdID0gMTQ7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIwNi1cXHRyMi1cXHUwMDNlYWdlID0gMjE7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjEyLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MjEzOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vwcm9iZV9oaXRzWzBdLCAxMSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxNC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCAxN3UpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1MTQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MzgtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1Mzk6XFx0LyogTW9yZSBzYW1wbGVzIGNvdWxkIG92ZXJmbG93IHRoZSBwcm9iZV9oaXRzIGNvdW50ZXJzLiAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTQwLVxcdGN0eC1cXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDI1NjtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjA4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjE3LVxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIpKVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjE4OlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0rKztcXG5tbS9kYW1vbi92YWRkci5jLTYxOS1cXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTcxNz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbm1tL2RhbW9uL3ZhZGRyLmM6NzMzOlxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG5tbS9kYW1vbi92YWRkci5jLTczNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjMxLjczMzQyNzQ5NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzA2NTc2MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBEQU1PTiBWaXJ0dWFsIEFkZHJlc3MgUHJvYmluZyBhbmQgRmlsdGVyaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgdGhleSd2ZSByZWZhY3RvcmVkIHRoZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb24sIG1vdmluZyBpdCB0byBgb3BzLWNvbW1vbi5jYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBvcmdhbml6YXRpb25hbCBjaGFuZ2UuIENoZWNraW5nIHRoZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgY29kZSBpdHNlbGYsIEkgc2VlIGl0J3MgcHJvcGVybHkgaGFuZGxpbmcgZGlmZmVyZW50IGZpbHRlciB0eXBlcyAoQU5PTiwgTUVNQ0cpLCBhbmQgYWxsIHZhcmlhYmxlcyB3aXRoaW4gYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHNwZWNpZmljYWxseSBgbWF0Y2hlZGAgYW5kIGBtZW1jZ2AuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIFRoZSBgcmN1X3JlYWRfbG9ja2AgYW5kIGByY3VfcmVhZF91bmxvY2tgIGFyZSBhcHByb3ByaWF0ZWx5IHBhaXJlZCB3aXRoaW4gdGhlIE1FTUNHIGNoZWNrLlxuXG5OZXh0LCBJJ20gZGl2aW5nIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBwcm9iaW5nIGNvZGUgaW4gYHZhZGRyLmNgLiBUaGUgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCBhbmQgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBmdW5jdGlvbnMgbG9vayBzdHJhaWdodGZvcndhcmQsIHNldHRpbmcgdXAgdGhlIHByb2JpbmcgcHJvY2Vzcy4gTm93LCBsZXQncyBleGFtaW5lIGBkYW1vbl92YV95b3VuZ19hZGRyYC4gSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHZhbGlkaXR5IG9mIGBwdGVgIGFuZCBgcG1kYCBkZXJlZmVyZW5jZXMgaGVyZS4gTG9va2luZyBhdCB3aGVyZSB0aGV5J3JlIHVzZWQsIEkgc2VlIHRoYXQgd2l0aGluIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AsIGVpdGhlciBgcHRlYCBvciBgcG1kYCBpcyBwYXNzZWQuIFRoZSBpbml0aWFsaXphdGlvbiBpbiBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgIHNlZW1zIHJvYnVzdCB1c2luZyBgcG1kcF9nZXRgLCBgcHRlcF9nZXRgIGFuZCBgaHVnZV9wdGVwX2dldGAgcmVzcGVjdGl2ZWx5LCB3aGljaCBhcmUgZ29vZC4gVGhlIGB5b3VuZ2AgdmFyaWFibGUgaXMgYWxzbyBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC5cblxuVGhlIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCBpcyBzaW1wbGUgYW5kLCBpZiBub3QsIGl0IGRlZmVycyB0byBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgd2hpY2ggd2UgcmV2aWV3ZWQgZWFybGllci4gVGhlIGBkYW1vbl92YV9maWx0ZXJfcGFzc2AgZnVuY3Rpb24gaXMgc2ltaWxhcmx5IHNpbXBsZSB3aXRoIGEgYHBhc3NgIGZsYWcgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCBhbmQgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCB3aGljaCBjb250YWluIGxvb3BzIGFuZCB3YWxrZXJzLCBhcmUgY2FyZWZ1bGx5IGhhbmRsaW5nIHByb2JlcyBhbmQgaW5jcmVtZW50aW5nIGByLVx1MDAzZXByb2JlX2hpdHNbaV0rK2AsIHNvIGl0J3MgYSBjcml0aWNhbCBwb2ludCB0byBjaGVjaywgd2hpY2ggc2VlbXMgb2theS4gU3RydWN0cyBpbiBwYWdlIHdhbGtzLCBsaWtlIGBhcmdgLCBhcmUgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBhcmVhcy4gSSdtIG5vdCBzZWVpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2VyIHNwYWNlIHZpYSB0aGluZ3MgbGlrZSBgY29weV90b191c2VyYCwgaW9jdGxzLCBvciBuZXRsaW5rLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGNvcGllZCwgd2hpY2ggaXMgZ29vZC5cblxuQ291bGQgd2UgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhlIGFuc3dlciBpcyBcIm5vXCIuIEhvd2V2ZXIsIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqTG9ja2luZy9SZWZlcmVuY2UgQ291bnRpbmc6KiogUG90ZW50aWFsbHkgdGhpbmdzIGxpa2UgYGZvbGlvX2dldGAvYGZvbGlvX3B1dGAsIG9yIGxvY2tpbmcgaW4gdGhlIHBhZ2UgdGFibGUgd2FsayAoYHB0ZV9vZmZzZXRfbWFwX2xvY2tgLCBgc3Bpbl91bmxvY2tgKSBhcmUgYSBwcmltYXJ5IGZvY3VzIGZvciBzdGFuZGFyZCBkZXRlY3RvcnMuIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgY2F0Y2ggdGhhdC5cbiogICAqKk91dC1vZi1Cb3VuZHMgQWNjZXNzOioqIFdoaWxlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9vcCB0aGF0IGluY3JlbWVudHMgYHItXHUwMDNlcHJvYmVfaGl0c1tpXWAsIGNoZWNraW5nIGBucl9wcm9iZXMgXHUwMDNlIERBTU9OX01BWF9QUk9CRVNgIHdvdWxkIGJlIG5lY2Vzc2FyeS4gS0FTQU4vVUJTQU4gc2hvdWxkIGZsYWcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuKiAgICoqQ29uY3VycmVuY3kgSXNzdWVzOioqIFBhZ2UgdGFibGUgd2Fsa3MgY2FuIGJlIHRyaWNreS4gUGFnZSB0YWJsZSB3YWxrIGNvbmN1cnJlbmN5IC8gcGFnZSBzdGF0ZSBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gb24gYW55IE1NIGNvZGUsIGNhbiBiZSBwaWNrZWQgdXAgYnkgS0FTQU4va2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgZm9yIGEgS01TQU4gcGVyc3BlY3RpdmUsIGFsbCBvZiB0aGVzZSBtZW1vcnkgZXJyb3JzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4vVUJTQU4gZGV0ZWN0b3JzLiBJIHdpbGwgZG91YmxlLWNoZWNrIHRoZSA0IGNyaXRlcmlhIGZvciBOZWVkc0tNU0FOOlxuXG4xLiAgKipLZXJuZWwtdG8tVXNlcjoqKiBOb3RoaW5nLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIEV4cGxpY2l0IGluaXRpYWxpemF0aW9uLlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogTm8gYWxsb2NhdGlvbiwgb3IgdW5pbml0aWFsaXplZCByZWFkLlxuNC4gICoqQm91bmRzIENoZWNrczoqKiBObyBzdXJyb3VuZGluZyBjb2RlIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5CYXNlZCBvbiB0aGlzLCAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlKiouXG5cbioqS01TQU4gdnMgS0FTQU4gUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHZpcnR1YWwgYWRkcmVzcyBwcm9iaW5nIGFuZCBmaWx0ZXIgbWF0Y2hpbmcgd2l0aGluIERBTU9OLiBBbGwgcmVsZXZhbnQgbG9jYWwgdmFyaWFibGVzLCBmbGFncywgYW5kIHdhbGtlciBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgdG91Y2gga2VybmVsLXRvLXVzZXIgbWVtb3J5IHRyYW5zZmVycy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludHJvZHVjZWQuIElzc3VlcyBsaWtlIHJhY2UgY29uZGl0aW9ucywgYm91bmRzIGNoZWNrcyAocHJvYmVcXF9oaXRzKSwgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBsaWtlIEtBU0FOL1VCU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHdhcnJhbnRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIyNywiT3V0cHV0VG9rZW5zIjoyNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAyOjE3OjQxLjQ0MDAwNjI1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB2aXJ0dWFsIGFkZHJlc3MgcHJvYmUgb3BlcmF0aW9ucyAocHJlcCBhbmQgYXBwbHkgcHJvYmVzKSBhbmQgcmVmYWN0b3JzIGNvbW1vbiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gXFxuXFxuRXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogQWxsIGxvY2FsIHZhcmlhYmxlcyAoYG1hdGNoZWRgLCBgeW91bmdgLCBgcGFzc2AsIGBpYCksIHN0YWNrIHN0cnVjdHVyZXMgKGBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGVgLCBgbW1fd2Fsa19vcHNgKSwgYW5kIHBhZ2UgdGFibGUgZW50cnkgY29waWVzIChgcHRlbnRgLCBgcG1kZWAsIGBlbnRyeWApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuMi4gTm8gdXNlci1zcGFjZSBjb3B5IG1lY2hhbmlzbXM6IFRoZSBwYXRjaCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGJ1ZmZlcnMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcbjMuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ6IFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzIG9uIGBwcm9iZV9oaXRzYCwgZm9saW8gcmVmZXJlbmNlIGNvdW50IG1pc21hdGNoZXMsIG9yIHBhZ2UgdGFibGUgbG9ja2luZyBpc3N1ZXMpIGZhbGwgc3F1YXJlbHkgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBVQlNBTiwgYW5kIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZpcnR1YWwgYWRkcmVzcyBwcm9iZSBvcGVyYXRpb25zIChwcmVwIGFuZCBhcHBseSBwcm9iZXMpIGFuZCByZWZhY3RvcnMgY29tbW9uIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBcXG5cXG5FdmFsdWF0aW5nIGFnYWluc3QgS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBBbGwgbG9jYWwgdmFyaWFibGVzIChgbWF0Y2hlZGAsIGB5b3VuZ2AsIGBwYXNzYCwgYGlgKSwgc3RhY2sgc3RydWN0dXJlcyAoYGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZWAsIGBtbV93YWxrX29wc2ApLCBhbmQgcGFnZSB0YWJsZSBlbnRyeSBjb3BpZXMgKGBwdGVudGAsIGBwbWRlYCwgYGVudHJ5YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4yLiBObyB1c2VyLXNwYWNlIGNvcHkgbWVjaGFuaXNtczogVGhlIHBhdGNoIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBrZXJuZWwgYnVmZmVycyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXFxuMy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudDogUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChzdWNoIGFzIGFycmF5IG91dC1vZi1ib3VuZHMgb24gYHByb2JlX2hpdHNgLCBmb2xpbyByZWZlcmVuY2UgY291bnQgbWlzbWF0Y2hlcywgb3IgcGFnZSB0YWJsZSBsb2NraW5nIGlzc3VlcykgZmFsbCBzcXVhcmVseSB3aXRoaW4gdGhlIHB1cnZpZXcgb2YgS0FTQU4sIFVCU0FOLCBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwxk9r[1] Phase: Succeeded StartedAt: 2026-09-07 02:17:52 +0000 UTC FinishedAt: 2026-09-07 02:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 02:17:52 +0000 UTC FinishedAt: 2026-09-07 02:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2] Phase: Succeeded StartedAt: 2026-09-07 02:17:52 +0000 UTC FinishedAt: 2026-09-07 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 02:17:52 +0000 UTC FinishedAt: 2026-09-07 05:59:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","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-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 02:17:52 +0000 UTC FinishedAt: 2026-09-07 02:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 02:17:52 +0000 UTC FinishedAt: 2026-09-07 02:17:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxk9r/series-workflowwxk9r-convert-artifact-3518860416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 02:18:02 +0000 UTC FinishedAt: 2026-09-07 02:33:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 02:18:02 +0000 UTC FinishedAt: 2026-09-07 02:33:49 +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:*2a91c038-e8cd-4b75-905c-01cb639b9032,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-workflowwxk9r/series-workflowwxk9r-convert-artifact-3518860416/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": "de4e4301-1a49-4515-bdfd-698bad54c10d", "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-workflowwxk9r/series-workflowwxk9r-build-action-2949306182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 02:18:02 +0000 UTC FinishedAt: 2026-09-07 02:33:39 +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:*2a91c038-e8cd-4b75-905c-01cb639b9032,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-workflowwxk9r/series-workflowwxk9r-convert-artifact-3518860416/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": "de4e4301-1a49-4515-bdfd-698bad54c10d", "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-workflowwxk9r/series-workflowwxk9r-build-action-2949306182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 02:33:49 +0000 UTC FinishedAt: 2026-09-07 02:33:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 02:33:49 +0000 UTC FinishedAt: 2026-09-07 02:33:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 02:33:49 +0000 UTC FinishedAt: 2026-09-07 02:34:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 02:33:49 +0000 UTC FinishedAt: 2026-09-07 02:33:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","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-workflowwxk9r/series-workflowwxk9r-convert-artifact-4041449767/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 02:34:00 +0000 UTC FinishedAt: 2026-09-07 02:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 02:34:00 +0000 UTC FinishedAt: 2026-09-07 02:35:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*de4e4301-1a49-4515-bdfd-698bad54c10d,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-workflowwxk9r/series-workflowwxk9r-build-action-2949306182/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-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 02:35:51 +0000 UTC FinishedAt: 2026-09-07 02:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 02:35:51 +0000 UTC FinishedAt: 2026-09-07 02:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 02:35:51 +0000 UTC FinishedAt: 2026-09-07 02:54:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 02:35:51 +0000 UTC FinishedAt: 2026-09-07 02:54:34 +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:*2a91c038-e8cd-4b75-905c-01cb639b9032,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-workflowwxk9r/series-workflowwxk9r-convert-artifact-4041449767/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": "f5ec4db3-ab01-4ff5-aac0-7ccc2eb4f437", "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-workflowwxk9r/series-workflowwxk9r-build-action-1093931691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 02:35:51 +0000 UTC FinishedAt: 2026-09-07 02:54:24 +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:*2a91c038-e8cd-4b75-905c-01cb639b9032,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-workflowwxk9r/series-workflowwxk9r-convert-artifact-4041449767/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": "f5ec4db3-ab01-4ff5-aac0-7ccc2eb4f437", "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-workflowwxk9r/series-workflowwxk9r-build-action-1093931691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 02:54:34 +0000 UTC FinishedAt: 2026-09-07 02:54:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 02:54:34 +0000 UTC FinishedAt: 2026-09-07 02:54:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 02:54:34 +0000 UTC FinishedAt: 2026-09-07 02:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 02:54:34 +0000 UTC FinishedAt: 2026-09-07 02:56:07 +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:*f5ec4db3-ab01-4ff5-aac0-7ccc2eb4f437,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-workflowwxk9r/series-workflowwxk9r-build-action-1093931691/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-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 05:59:27 +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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"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:*de4e4301-1a49-4515-bdfd-698bad54c10d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f5ec4db3-ab01-4ff5-aac0-7ccc2eb4f437,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-workflowwxk9r/series-workflowwxk9r-build-action-2949306182/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-workflowwxk9r/series-workflowwxk9r-build-action-1093931691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 02:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 02:56:21 +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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"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-workflowwxk9r/series-workflowwxk9r-convert-artifact-1247269760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 02:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 02:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 02:56:17 +0000 UTC FinishedAt: 2026-09-07 02:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxk9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","TRANSPARENT_HUGEPAGE","HUGETLB_PAGE","MEMCG"],"series_id":"f68db553-0a70-4fac-b1af-4299844ba77b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 02:56:27 +0000 UTC FinishedAt: 2026-09-07 05:59:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*de4e4301-1a49-4515-bdfd-698bad54c10d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f5ec4db3-ab01-4ff5-aac0-7ccc2eb4f437,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-workflowwxk9r/series-workflowwxk9r-build-action-2949306182/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-workflowwxk9r/series-workflowwxk9r-build-action-1093931691/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-workflowwxk9r/series-workflowwxk9r-convert-artifact-1247269760/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,}