Name: series-workflowzddjx Phase: Succeeded StartedAt: 2026-08-18 11:25:49 +0000 UTC FinishedAt: 2026-08-18 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[0] Phase: Succeeded StartedAt: 2026-08-18 11:25:49 +0000 UTC FinishedAt: 2026-08-18 11:46:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 11:25:49 +0000 UTC FinishedAt: 2026-08-18 11:46:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e80456d79ec83b00a6bd44c377684b1632ccc3c7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV", "NF_TABLES_INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e80456d79ec83b00a6bd44c377684b1632ccc3c7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV", "NF_TABLES_INET", "IPV6" ], "series_id": "ae561d16-016a-45c0-bdaf-5dc647fd2df3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_newchain", "nf_tables_delchain", "nf_tables_updchain", "nf_tables_newflowtable", "nf_tables_delflowtable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3Y2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbGNoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc191cGRjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGhvb2tzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4IHN0YXR1cyAoZS5nLiwgbWF0Y2hpbmcgXCYjMzQ7ZXRoXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMFwmIzM0OykuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NTNkMjUwZDg2MTlkNTQ0NWUxZTQ5NmRhNWNhZWI5NjNiZmNiODEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTE6NDM6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTE5NzMsNyAmIzQzOzE5NzMsNyBAQCBzdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKVxuIFx0cmV0dXJuIC1FTk9TUEM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbiYjNDM7c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxuIHtcbiBcdHJldHVybiBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW47XG4gfVxuQEAgLTI0NDAsOCAmIzQzOzI0NDAsMTEgQEAgc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbiBcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4tXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbiYjNDM7XHRcdGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG4gXHRcdFx0aWYgKGhvb2stXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9IT09LX1JFTU9WRSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld2NoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfdXBkY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld2Zsb3d0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIG1hdGNoaW5nIGxvZ2ljIGZvciBuZXRkZXYgaG9va3MgaW4gbmZfdGFibGVzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBwYXJzaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgbmV0ZGV2IGhvb2tzIGZvciBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaG9vayBtYXRjaGluZyBhbmQgc3Vic2VxdWVudCBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1M2QyNTBkODYxOWQ1NDQ1ZTFlNDk2ZGE1Y2FlYjk2M2JmY2I4MTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxMTo0Mzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTE5NzMsNyAmIzQzOzE5NzMsNyBAQCBzdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKQogCXJldHVybiAtRU5PU1BDOwogfQogCi1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spCiYjNDM7c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKQogewogCXJldHVybiBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW47CiB9CkBAIC0yNDQwLDggJiM0MzsyNDQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsCiAJc3RydWN0IG5mdF9ob29rICpob29rOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJuY21wKGhvb2stJmd0O2lmbmFtZSwgdGhpcy0mZ3Q7aWZuYW1lLAotCQkJICAgICBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pKSkgewomIzQzOwkJaWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsIGhvb2stJmd0O2lmbmFtZWxlbikpIHsKIAkJCWlmIChob29rLSZndDtmbGFncyAmYW1wOyBORlRfSE9PS19SRU1PVkUpCiAJCQkJY29udGludWU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GdGFibGVzIEFQSSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCBub3cgYWNjZXB0cyBhIGBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2tgIGFzIGFuIGFyZ3VtZW50LiBUaGF0JiMzOTtzIGEgZ29vZCBjaGFuZ2UsIG1ha2VzIGl0IG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IHJldXNhYmxlLgoKVGhlbiBJIHNlZSB0aGUgY2hhbmdlIHdpdGhpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYC4gVGhleSYjMzk7dmUgYWRkZWQgc29tZSBhZGRpdGlvbmFsIGNoZWNrcyBiZWZvcmUgdGhlIGBzdHJuY21wYCBjYWxsLiBTbWFydC4gVGhleSYjMzk7cmUgbm93IGNvbXBhcmluZyB0aGUgcmVzdWx0cyBvZiBgaG9va19pc19wcmVmaXgoaG9vaylgIHdpdGggYGhvb2tfaXNfcHJlZml4KHRoaXMpYCwgKmFuZCogdGhleSYjMzk7cmUgY2hlY2tpbmcgaWYgYGhvb2stJmd0O2lmbmFtZWxlbmAgaXMgZGlmZmVyZW50IGZyb20gYHRoaXMtJmd0O2lmbmFtZWxlbmAuIFRoaXMgaXMgYWxsIHRvIG9wdGltaXplIHRoZSBzZWFyY2ggYW5kIHByZXZlbnQgdW5uZWNlc3NhcnkgY2FsbHMgdG8gYHN0cm5jbXBgLiBCeSBzaG9ydC1jaXJjdWl0aW5nIHdoZW4gdGhlcmUmIzM5O3MgYSBxdWljayBkaWZmZXJlbmNlIChwcmVmaXggc3RhdHVzIG9yIGxlbmd0aCksIHRoZXkmIzM5O3JlIGF2b2lkaW5nIHRoZSBtb3JlIGV4cGVuc2l2ZSBzdHJpbmcgY29tcGFyaXNvbiB3aGVuIGl0JiMzOTtzIG5vdCBuZWVkZWQuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBydWxlIHNldHMuIEkmIzM5O2QgbGlrZSB0byBkaWcgaW50byAqd2h5KiB0aGV5IGNob3NlIHRoZXNlIHBhcnRpY3VsYXIgY2hlY2tzLCBidXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgbGlrZSBhIHNlbnNpYmxlIG9wdGltaXphdGlvbiB0byBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfaG9va19saXN0X2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0Mzc6c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVx0XHRcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5ND1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI5NDQ6XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTU3Olx0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU4LVx0XHRcdFx0XHRcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXHUwMDI2aG9vayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjU4Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cdFx0aWYgKCFob29rKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAzMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTA0NzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwNDgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMjUtXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEzNzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNTYtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNTc6XHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU4LVx0XHRpZiAoIWhvb2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIE5ldGZpbHRlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgLCB3aGljaCBpcyBhIGNvcmUgZnVuY3Rpb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgYXJlYSB0byBmb2N1cyBvbi4gTmV0ZmlsdGVyIGlzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IG9mIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgYW5kIGFueSB2dWxuZXJhYmlsaXRpZXMgdGhlcmUgYXJlIGEgc2lnbmlmaWNhbnQgcmlzay4gVGhpcyBpcyB0aGUgcGVyZmVjdCBhcmVhIHRvIGJlZ2luIHNvbWUgZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uIGZvciBmdXp6aW5nIHNob3VsZCBiZSBgbmZ0X2hvb2tfbGlzdF9maW5kYCAoc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBpdCwgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXR0YWNrIHN1cmZhY2UpLCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc2AsIGBuZnRfZmxvd3RhYmxlX3VwZGF0ZWAsIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvb2sgbWFuYWdlbWVudCBhbmQgY2hhaW4gdXBkYXRlcywgc28gdGhleSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHBvaW50cyBvZiBpbnRlcmFjdGlvbi4KCkJlZm9yZSBnZXR0aW5nIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0byBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYW5kLCBjb25zZXF1ZW50bHksIHByb3Blcmx5IHNldHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGJhc2UgY29uZmlnIGlzIGRlZmluaXRlbHkgYE5GX1RBQkxFU2AsIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGFsc28gbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgZm9yIHRoaXMgcGF0Y2guIFRoZSBwYXRjaCB0b3VjaGVzIGBuZnRfaG9va19saXN0X2ZpbmRgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBzY3JlYW1zICYjMzQ7bmV0ZGV2IGhvb2tzJiMzNDsuIFRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byBuZXRkZXYgaG9va3MgYnV0IEkmIzM5O3ZlIGdvdCB0byBjaGVjayB3aGV0aGVyIGl0JiMzOTtzIGd1YXJkZWQgYnkgdGhlIGBORl9UQUJMRVNfTkVUREVWYCBvcHRpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZSBmdW5jdGlvbiYjMzk7cyBpbmNsdXNpb24gb3IgdXNlIGlzIGNvbmRpdGlvbmFsIG9uIHRoYXQgc3BlY2lmaWMgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG5mX3RhYmxlc19hcGkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2hvb2tfbGlzdF9maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM5Mj1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDM3OnN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDM4LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODYtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0ODc6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4OC1cdFx0XHROTF9TRVRfQkFEX0FUVFIoZXh0YWNrLCB0bXApO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTQ0Olx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0NS1cdFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2aC1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk1OC1cdFx0XHRcdFx0XHRuZnRfY2hhaW5fcmVsZWFzZV9ob29rKFx1MDAyNmhvb2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMzc9c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmNoYWluX2hvb2subGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCB0aGlzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTktXHRcdGlmICghaG9vaykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTA0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmdC1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVx0XHRcdFx0ZXJyID0gLUVFWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyMy1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTI0Olx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTI1LVx0XHRcdGxpc3RfZGVsKFx1MDAyNmhvb2stXHUwMDNlbGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMzgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkzNDA9c3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU2LVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MzU3Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cdFx0aWYgKCFob29rKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5OAoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgbmZ0X2hvb2tfbGlzdF9maW5kYCoqCgpPa2F5LCBzbyBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gR29vZC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gU2luY2UgaXQmIzM5O3Mgbm90IGV4cG9zZWQgZ2xvYmFsbHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0ICpkbyogY2FsbCBpdC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSB0ZWxscyBtZSBpdCYjMzk7cyB0aGVzZSBvbmVzOiBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AsIGBuZl90YWJsZXNfdXBkY2hhaW5gLCBgbmZ0X2RlbGNoYWluX2hvb2tgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2AuIFJpZ2h0LCB0aG9zZSBhcmUgbXkgdGFyZ2V0cy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhvc2UgZnVuY3Rpb25zIGluIGRldGFpbCB0byBzZWUgKnRoZWlyKiBzdGF0aWMgc3RhdHVzLiBUaGF0IHdpbGwgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0IGFuZCBwaW5wb2ludCB0aGUgdHJ1ZSBjYWxsIGZsb3cuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhleSB0aGVtc2VsdmVzIGFyZSBzdGF0aWMsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzfG5mX3RhYmxlc191cGRjaGFpbnxuZnRfZGVsY2hhaW5faG9va3xuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc3xuZnRfZmxvd3RhYmxlX3VwZGF0ZXxuZnRfZGVsZmxvd3RhYmxlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDM3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ1Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0NTg6c3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NTktXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzQtXHR9IGVsc2UgaWYgKHRiW05GVEFfSE9PS19ERVZTXSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNTpcdFx0ZXJyID0gbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhuZXQsIHRiW05GVEFfSE9PS19ERVZTXSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzYtXHRcdFx0XHRcdFx0ICAgaG9va19saXN0LCBleHRhY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDg9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjg5My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI4OTQ6c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjg5NS1cdFx0XHQgICAgICB1MzIgZmxhZ3MsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzExMD1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMDMtXHRcdGZsYWdzIHw9IGNoYWluLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fQkFTRTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMDQ6XHRcdHJldHVybiBuZl90YWJsZXNfdXBkY2hhaW4oXHUwMDI2Y3R4LCBnZW5tYXNrLCBwb2xpY3ksIGZsYWdzLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIwNS1cdFx0XHRcdFx0ICBleHRhY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMjc9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2RlbGhvb2tfYWJvcnQoc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMzc6c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIzOC1cdFx0XHQgICAgIHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyOTI9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzQ1LVx0XHRcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzM0NjpcdFx0XHRcdHJldHVybiBuZnRfZGVsY2hhaW5faG9vayhcdTAwMjZjdHgsIGJhc2VjaGFpbiwgZXh0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNDctXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODY5PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV9wYXJzZV9ob29rKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkyMS1cdGlmICh0YltORlRBX0ZMT1dUQUJMRV9IT09LX0RFVlNdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4OTIyOlx0XHRlcnIgPSBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKGN0eC1cdTAwM2VuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTIzLVx0XHRcdFx0XHRcdCAgIHRiW05GVEFfRkxPV1RBQkxFX0hPT0tfREVWU10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAxMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfb3BzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDMxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTAzMjpzdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwMzMtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDg2PXN0YXRpYyB2b2lkIG5mdF9mbG93dGFibGVfdW5yZWdpc3Rlcl90cmFuc19ob29rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTAzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEwNDpzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEwNS1cdFx0XHRcdHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE1OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNTk6XHRlcnIgPSBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNldGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTYwLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgZmxvd3RhYmxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTk2PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyMzktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MjQwOlx0XHRyZXR1cm4gbmZ0X2Zsb3d0YWJsZV91cGRhdGUoXHUwMDI2Y3R4LCBpbmZvLVx1MDAzZW5saCwgZmxvd3RhYmxlLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTI0MS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzAwLVx0LyogVGhpcyBtdXN0IGJlIExBU1QgdG8gZW5zdXJlIG5vIHBhY2tldHMgYXJlIHdhbGtpbmcgb3ZlciB0aGlzIGZsb3d0YWJsZS4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzMDE6XHRlcnIgPSBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhjdHgubmV0LCB0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzMDItXHRcdFx0XHRcdCAgICAgICBcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkzMzA9c3RhdGljIHZvaWQgbmZ0X2Zsb3d0YWJsZV9ob29rX3JlbGVhc2Uoc3RydWN0IG5mdF9mbG93dGFibGVfaG9vayAqZmxvd3RhYmxlX2hvb2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTMzOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNDA6c3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNDEtXHRcdFx0XHQgc3RydWN0IG5mdF9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MzkyPXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk0MzYtXHRpZiAobmxhW05GVEFfRkxPV1RBQkxFX0hPT0tdKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTQzNzpcdFx0cmV0dXJuIG5mdF9kZWxmbG93dGFibGVfaG9vayhcdTAwMjZjdHgsIGZsb3d0YWJsZSwgZXh0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk0MzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjIKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBUYWJsZSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBhbGwgdGhlc2UgY29yZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB3aGF0IEkgKmFscmVhZHkqIGtub3csIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGludG8gdGhpcyBtb2R1bGUgYXJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIGRlZXBlciwgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCAqdGhvc2UqIGVudHJ5IHBvaW50cyBhcmUgYWxzbywgYnkgZGVzaWduLCBkZWNsYXJlZCBhcyBzdGF0aWMuIExldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLCBpdCB3aWxsIHNhdmUgdGltZSBpbiB0aGUgbG9uZyBydW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19uZXdjaGFpbnxuZl90YWJsZXNfZGVsY2hhaW58bmZfdGFibGVzX25ld2Zsb3d0YWJsZXxuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzA5Mj1zdGF0aWMgc3RydWN0IG5mdF9jaGFpbiAqbmZ0X2NoYWluX2xvb2t1cF9ieWlkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTA5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzExMDpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzExMS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyOTI6c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyOTMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTk1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE5NjpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdmbG93dGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxOTctXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzOTEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MzkyOnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM5My1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NTEtXHRbTkZUX01TR19ORVdDSEFJTl0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTUyOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19uZXdjaGFpbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NTMtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05OTYzLVx0W05GVF9NU0dfREVMQ0hBSU5dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk2NDpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfZGVsY2hhaW4sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05OTY1LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk2OS1cdFtORlRfTVNHX0RFU1RST1lDSEFJTl0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTcwOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxjaGFpbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NzEtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA5My1cdFtORlRfTVNHX05FV0ZMT1dUQUJMRV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA5NDpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwOTUtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDEwNS1cdFtORlRfTVNHX0RFTEZMT1dUQUJMRV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDEwNjpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfZGVsZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMDctXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDExMS1cdFtORlRfTVNHX0RFU1RST1lGTE9XVEFCTEVdID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAxMTI6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbGZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTEzLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgVGFibGVzIEFQSSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBOZXRmaWx0ZXIgVGFibGVzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjYWxsYmFja3MgaW4gYG5mX3RhYmxlc19jYmAgd291bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0LCBhbmQgdGhhdCB0aGUgbWFpbiBlbnRyeSBwb2ludCBtaWdodCBiZSBzb21ldGhpbmcgbGlrZSBgbmZuZXRsaW5rX3Jjdl9tc2dgLiBCdXQgYWN0dWFsbHksIHRoaW5raW5nIGFib3V0IHRoZSBwcm9tcHQmIzM5O3MgaW5zdHJ1Y3Rpb25zLCBldmVuIHRob3VnaCBmdW5jdGlvbnMgbGlrZSBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYCBhcmUgKnN0YXRpYyosIHRoZXkmIzM5O3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIG1lYW5zIHRoZXkgKmFyZW4mIzM5O3QqIGlubGluZWQuIFRoaXMgbWFrZXMgdGhlbSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZvY3VzLCBiZWNhdXNlIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0b2xkIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucywgYW5kIHNpbmNlIHRoZSBjb21waWxlciYjMzk7cyBub3QgZ29pbmcgdG8gaW5saW5lIHRoZXNlIGR1ZSB0byBob3cgdGhleSBhcmUgdXNlZCwgdGhleSBmaXQgdGhlIGJpbGwuIE5vdywgaXMgdGhlcmUgYW55IGNoYW5jZSBmb3IgKm5vbiotc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9ucz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2OT1fX3ByaW50ZigyLCAzKSBpbnQgbmZ0X3JlcXVlc3RfbW9kdWxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZm10LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQtfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcmVxdWVzdF9tb2R1bGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNi0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xODMyPXZvaWQgbmZ0X3JlZ2lzdGVyX2NoYWluX3R5cGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbl90eXBlICpjdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xODQxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE4NDI6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZ2lzdGVyX2NoYWluX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE4NDQ9dm9pZCBuZnRfdW5yZWdpc3Rlcl9jaGFpbl90eXBlKGNvbnN0IHN0cnVjdCBuZnRfY2hhaW5fdHlwZSAqY3R5cGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0OS19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxODUwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX2NoYWluX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg1MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMzg3PWludCBuZnRfcmVnaXN0ZXJfZXhwcihzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM0MDI6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZ2lzdGVyX2V4cHIpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzQwMy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNDEwPXZvaWQgbmZ0X3VucmVnaXN0ZXJfZXhwcihzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDE1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM0MTY6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3VucmVnaXN0ZXJfZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDE3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTgwNzA9aW50IG5mdF9yZWdpc3Rlcl9vYmooc3RydWN0IG5mdF9vYmplY3RfdHlwZSAqb2JqX3R5cGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA3OS19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4MDgwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWdpc3Rlcl9vYmopO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA4MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04MDg4PXZvaWQgbmZ0X3VucmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwOTMtfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODA5NDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9vYmopO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA5NS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04NzUyPXZvaWQgbmZ0X29ial9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzcwLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg3NzE6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X29ial9ub3RpZnkpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc3Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04Nzg0PXZvaWQgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04Nzg5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg3OTA6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3OTEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04NzkyPXZvaWQgbmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlICp0eXBlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3OTctfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODc5ODpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04Nzk5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4MTA9c3RydWN0IG5mdF9mbG93dGFibGUgKm5mdF9mbG93dGFibGVfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04ODIzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg4MjQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3d0YWJsZV9sb29rdXApO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODgyNS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4MjY9dm9pZCBuZl90YWJsZXNfZGVhY3RpdmF0ZV9mbG93dGFibGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04ODQwLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg4NDE6RVhQT1JUX1NZTUJPTF9HUEwobmZfdGFibGVzX2RlYWN0aXZhdGVfZmxvd3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4NDItXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTc0Mj1zdHJ1Y3QgbmZfaG9va19vcHMgKm5mdF9ob29rX2ZpbmRfb3BzKGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vayxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05NzUyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk3NTM6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2hvb2tfZmluZF9vcHMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc1NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk3NTU9c3RydWN0IG5mX2hvb2tfb3BzICpuZnRfaG9va19maW5kX29wc19yY3UoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NjUtfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTc2NjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfaG9va19maW5kX29wc19yY3UpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc2Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDI4Mz12b2lkIG5mX3RhYmxlc190cmFuc19kZXN0cm95X2ZsdXNoX3dvcmsoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjg4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMjg5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX3RhYmxlc190cmFuc19kZXN0cm95X2ZsdXNoX3dvcmspO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAyOTAtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1Mzc9aW50IG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KGNvbnN0IHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTQ4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTQ5OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTUwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1NTE9aW50IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTU2Ni19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU2NzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1NjgtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1ODE9aW50IG5mdF9wYXJzZV91MzJfY2hlY2soY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IG1heCwgdTMyICpkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTkxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV91MzJfY2hlY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1OTMtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE2MjQ9aW50IG5mdF9kdW1wX3JlZ2lzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhdHRyLCB1bnNpZ25lZCBpbnQgcmVnKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjMyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjMzOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kdW1wX3JlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjM0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNjQ3PWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfbG9hZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjc4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjc5OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV9yZWdpc3Rlcl9sb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNzIzPWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTc0MS19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTc0MjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE3NDMtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE5MDg9aW50IG5mdF9kYXRhX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9kYXRhICpkYXRhLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExOTM5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExOTQwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kYXRhX2luaXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE5NDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5ldGZpbHRlciBUYWJsZSBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIG5ldGZpbHRlciB0YWJsZXMgY29kZS4gVGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIGFyZSB0aG9zZSBgbmZuZXRsaW5rYCBjYWxsYmFja3MsIGJ1dCBmb3IgdGhpcyBmdXp6aW5nIGV4ZXJjaXNlLCBJIHRoaW5rIHRhcmdldGluZyB0aG9zZSBsYXJnZXIsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucyBsaWtlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgIGlzIHRoZSByaWdodCBtb3ZlLiBUaGV5JiMzOTtyZSBnb2luZyB0byBnaXZlIG1lIG1vcmUgc3VyZmFjZSBhcmVhIHRvIHdvcmsgd2l0aC4KCldhaXQgYSBzZWNvbmQsIEkganVzdCBzYXcgdGhhdCBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgZmluZSwgYnV0IHNvIGlzIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBzbyB0aGF0JiMzOTtzIG5vdCBhIGRpc3F1YWxpZmllci4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRob3NlIGNvcmUgZnVuY3Rpb25zIGFsb25nIHdpdGggYG5mX3RhYmxlc191cGRjaGFpbmAgbWFrZSBpdCBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYC4KCk5vdywgaXMgYE5GX1RBQkxFU2AgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gSSBzdHJvbmdseSBzdXNwZWN0IGl0IGlzLCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gSSYjMzk7bGwgcG9rZSBhcm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCB0byBsb29rIGZvciBhIGAjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NDc9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NTgtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTU5OiNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2MC1cdFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQ1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYE5GUFJPVE9fTkVUREVWYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBORlBST1RPX05FVERFVmAgZnVuY3Rpb25hbGl0eSBpcyBjb250aW5nZW50IHVwb24gYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBiZWluZyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXZhaWxhYmlsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLgoKSSBzZWUgdGhhdCBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgbmV0ZGV2IGhvb2tzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIG5ldGRldiBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgcmV2b2x2ZXMgYXJvdW5kIGxpc3QgbWFuaXB1bGF0aW9uIGZvciBob29rIG1hbmFnZW1lbnQuIEkgc2hvdWxkIGxvb2sgaW50byBob3cgdGhhdCBmdW5jdGlvbiB3b3JrcyB0byBjbGFyaWZ5IHRoaXMuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIG1vcmUgZ3JhbnVsYXIgYXNwZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2YCB0byB1bmRlcnN0YW5kIGhvdyBuZXRkZXYtc3BlY2lmaWMgY2hhaW5zIGFyZSBwYXJzZWQgYW5kIGRlZmluZWQuIFNpbXVsdGFuZW91c2x5LCBJIHdhbnQgdG8gZXhwbG9yZSBob3cgdGhlIHN5c3RlbSBzZXRzIHVwIGFuZCByZWdpc3RlcnMgdGhlIG5lY2Vzc2FyeSBuZXRkZXYgaG9va3MgdXNpbmcgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYC4gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGdvaW5nIHRvIGV4cG9zZSB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IGFsbCB0aGlzIG5ldGRldiBpbnRlZ3JhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxMj1zdHJ1Y3QgbmZ0X2NoYWluX2hvb2sge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MTgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNTE5OnN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTIwLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjU0OT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9ob29rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjMwLVx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIGhvb2stXHUwMDNlbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjYzMTpcdFx0ZXJyID0gbmZ0X2NoYWluX3BhcnNlX25ldGRldihuZXQsIGhhLCBcdTAwMjZob29rLVx1MDAzZWxpc3QsIGV4dGFjaywgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMi1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgTmV0ZmlsdGVyIGFuZCBlQlBGIGludGVybmFsczoKCioqRGl2aW5nIGludG8gYG5mdF9iYXNlX2NoYWluX25ldGRldmAqKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgZ29pbmcgdG8gY2FsbCBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkLCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGlzOiBpcyB0aGlzIGNoYWluIGV2ZW4gYSBuZXRkZXYgY2hhaW4/IFRoYXQmIzM5O3MgdGhlIHZlcnkgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIGlzIGNydWNpYWwuIEFtIEkgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgZmlsdGVyIGNoYWluLCBvciBzb21ldGhpbmcgc3BlY2lmaWNhbGx5IHRpZWQgdG8gbmV0d29yayBkZXZpY2UgcHJvY2Vzc2luZz8gIFRoZSBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YCBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QuIFdoYXQgZG9lcyB0aGF0IGZ1bmN0aW9uIGRvPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfYmFzZV9jaGFpbl9uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjU9c3RhdGljIGludCBuZl90YWJsZXNfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQyOlx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDMtXHRcdHJldHVybiBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKG5ldCwgXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDQ4PXN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDYxLVx0LyogbXVzdCBhbHNvIGJlIGNhbGxlZCBmb3IgZG9ybWFudCB0YWJsZXMgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ2MjpcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NjMtXHRcdG5mdF9uZXRkZXZfdW5yZWdpc3Rlcl9ob29rcyhuZXQsIHRhYmxlLCBcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIwNDI9c3RhdGljIGludCBuZnRfZHVtcF9iYXNlY2hhaW5faG9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwNTktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyMDYwOlx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIG9wcy1cdTAwM2Vob29rbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjA2MS1cdFx0bmVzdF9kZXZzID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgTkZUQV9IT09LX0RFVlMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMzcxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM3MjpcdFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzNzMtXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjU0OT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9ob29rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjI5LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI2MzA6XHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGZhbWlseSwgaG9vay1cdTAwM2VudW0pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjMxLVx0XHRlcnIgPSBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KG5ldCwgaGEsIFx1MDAyNmhvb2stXHUwMDNlbGlzdCwgZXh0YWNrLCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5OT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MDktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzEwOlx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIGhvb2stXHUwMDNlbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMS1cdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZob29rLVx1MDAzZWxpc3QsIFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5MzMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTM0Olx0XHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGN0eC1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5MzUtXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGgsIG5leHQsIFx1MDAyNmhvb2subGlzdCwgbGlzdCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5OTktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDAwOlx0XHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KHRhYmxlLVx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVx1MDAzZW9wcy5ob29rbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzAwMS1cdFx0XHRlcnIgPSBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKGN0eC1cdTAwM2VuZXQsIFx1MDAyNmhvb2subGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI5Mj1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNDQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzQ1Olx0XHRcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0Ni1cdFx0XHRcdHJldHVybiBuZnRfZGVsY2hhaW5faG9vayhcdTAwMjZjdHgsIGJhc2VjaGFpbiwgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGlzIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgIHRoaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBzdHJ1Y3R1cmUsIGl0cyBrZXkgbWVtYmVycywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgb3IgZmxhZ3MuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBnaXZlbiBpdHMgbmFtZSBzdWdnZXN0aW5nIGEgbmV0d29yayBkZXZpY2UgYXNzb2NpYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgc29tZSBraW5kIG9mIE5ldGZpbHRlciBob29rIGZvciB0cmFmZmljIHRyYXZlcnNpbmcgbmV0d29yayBkZXZpY2VzLCBidXQgYSBxdWljayBpbnNwZWN0aW9uIG9mIHRoZSBkZWZpbml0aW9uIHdpbGwgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYW55IGV4aXN0aW5nIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZSBwcmVzZW5jZSBvZiBhbnkgbG9ja2luZyBtZWNoYW5pc21zLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgc3RydWN0dXJlICppcyogYmVmb3JlIEkgY2FuIGRldGVybWluZSB3aGF0IGl0ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD0xMzM2PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfdGFibGVfaXNfb3JwaGFuKGNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xMzQxLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjEzNDI6c3RhdGljIGlubGluZSBib29sIG5mdF9iYXNlX2NoYWluX25ldGRldihpbnQgZmFtaWx5LCB1MzIgaG9va251bSlcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xMzQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4ODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTkZUYWJsZXMgQ29yZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBiYXNlIGNoYWluIG5ldHdvcmsgZGV2aWNlIGludGVncmF0aW9uIHdvcmtzIGluIE5GVGFibGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gSSYjMzk7bGwgb3BlbiB1cCBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGJ1aWxkaW5nIGJsb2Nrcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGdyYXNwaW5nIHRoZSBuZXRkZXYtcmVsYXRlZCBhc3BlY3RzIG9mIHJ1bGUgcHJvY2Vzc2luZyBhbmQgaG93IHRoZXkmIzM5O3JlIGNvbm5lY3RlZCB3aXRoaW4gdGhlIE5GVGFibGVzIGZyYW1ld29yay4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhbmQgaG93IGl0JiMzOTtzIGxpbmtlZCB0byB0aGUgdGFibGVzIGFuZCBjaGFpbnMuIEtub3dsZWRnZSBvZiB0aGlzIGlzIGVzc2VudGlhbCB0byBkZWJ1Z2dpbmcgYW5kIHRvIHdyaXRpbmcgb3B0aW1hbCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfYmFzZV9jaGFpbl9uZXRkZXYoaW50IGZhbWlseSwgdTMyIGhvb2tudW0pXG4xMzQzOlx0e1xuMTM0NDpcdFx0cmV0dXJuIGZhbWlseSA9PSBORlBST1RPX05FVERFViB8fFxuMTM0NTpcdFx0ICAgICAgIChmYW1pbHkgPT0gTkZQUk9UT19JTkVUIFx1MDAyNlx1MDAyNiBob29rbnVtID09IE5GX0lORVRfSU5HUkVTUyk7XG4xMzQ2Olx0fVxuMTM0NzpcdFxuMTM0ODpcdHZvaWQgbmZ0X3JlZ2lzdGVyX2NoYWluX3R5cGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbl90eXBlICopO1xuMTM0OTpcdHZvaWQgbmZ0X3VucmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKik7XG4xMzUwOlx0XG4xMzUxOlx0aW50IG5mdF9yZWdpc3Rlcl9leHByKHN0cnVjdCBuZnRfZXhwcl90eXBlICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldGZpbHRlciBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBuZXR3b3JrIGZpbHRlcmluZywgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIHJlbGV2YW50IE5ldGZpbHRlciBwcm90b2NvbHM6IGBORlBST1RPX05FVERFVmAgYW5kIGBORlBST1RPX0lORVRgLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBORl9JTkVUX0lOR1JFU1NgLiBHaXZlbiB0aGF0LCBgTkZfVEFCTEVTX0lORVRgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRoZSBiaWcgcGljdHVyZS4gU2luY2UgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGF2YWlsYWJsZSwgSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIGBORl9UQUJMRVNfTkVUREVWYCBhcyB3ZWxsLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgYm90aC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcgYW5kIGNhbiBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhvc2UgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9UQUJMRVNfTkVUREVWfGNvbmZpZyBORl9UQUJMRVNfSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgbmZ0YWJsZXNgLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgYXJlIGJvdGggZGVzaXJhYmxlIHRvIGhhdmUgZW5hYmxlZCwgYW5kIG5hdHVyYWxseSwgd2UgbmVlZCBgTkZfVEFCTEVTYCBpdHNlbGYgYXMgYSBiYXNlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHNldHVwLiBBaCwgaGVyZSYjMzk7cyBhIGRlcGVuZGVuY3k6IGBORl9UQUJMRVNfSU5FVGAgcmVsaWVzIG9uIGBJUFY2YC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhIHJlYXNvbmFibGUgZGVwZW5kZW5jeS4gQ29uc2VxdWVudGx5LCBgSVBWNmAgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBwcm9wZXJseSB1dGlsaXplIGBORl9UQUJMRVNfSU5FVGAuIEFscmlnaHQsIG5vdyBJIHdpbGwgbW92ZSBvbiB0byBleGFtaW5pbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfVEFCTEVTX05FVERFVmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzI6XHRjb25maWcgTkZfVEFCTEVTX0lORVRcbiA0NzM6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDQ3NDpcdFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XG4gNDc1Olx0XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjZcbiA0NzY6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBtaXhlZCBJUHY0L0lQdjYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0Nzc6XHRcdGhlbHBcbiA0Nzg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG1peGVkIElQdjQvSVB2NiBcJiMzNDtpbmV0XCYjMzQ7IHRhYmxlLlxuIDQ3OTpcdFxuIDQ4MDpcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG4gNDgxOlx0XHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNDgyOlx0XHRoZWxwXG4gNDgzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFwmIzM0O25ldGRldlwmIzM0OyB0YWJsZS5cbiA0ODQ6XHRcbiA0ODU6XHRjb25maWcgTkZUX05VTUdFTlxuIDQ4NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVwmIzM0O1xuIDQ4NzpcdFx0aGVscFxuIDQ4ODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBudW1iZXIgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdXNlZCB0byBwZXJmb3JtXG4gNDg5Olx0XHQgIGluY3JlbWVudGFsIGNvdW50aW5nIGFuZCByYW5kb20gbnVtYmVycyBib3VuZCB0byBhIHVwcGVyIGxpbWl0LlxuIDQ5MDpcdFxuIDQ5MTpcdGNvbmZpZyBORlRfQ1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBGb2N1czogTmV0ZmlsdGVyIFRhYmxlcyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBuZXRmaWx0ZXIgdGFibGVzIHN0dWZmLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGVuYWJsaW5nIGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX05FVERFVmAsIGFuZCBgTkZfVEFCTEVTX0lORVRgLCBwbHVzIGBJUFY2YCwgb2YgY291cnNlLiBOb3csIGFyZSBgTkZfVEFCTEVTX0lQVjRgIGFuZCBgTkZfVEFCTEVTX0lQVjZgIG5lY2Vzc2FyeT8gQWgsIG5vLCBgTkZfVEFCTEVTX0lORVRgIHNlbGVjdHMgdGhvc2UuIFJpZ2h0LCBrZWVwIGl0IGNvbmNpc2U7IGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX05FVERFVmAsIGBORl9UQUJMRVNfSU5FVGAsIGFuZCBgSVBWNmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUga2V5IHRvIG1hbmFnaW5nIHRoZXNlIHRhYmxlcz8gSSYjMzk7ZCBsaWtlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gVGhvc2Ugc2VlbSBjZW50cmFsIHRvIHRoZSBhY3R1YWwgdGFibGUgYW5kIGNoYWluIG1hbmlwdWxhdGlvbi4KCkxldCYjMzk7cyBzZWXigKYgSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYG5mdF9ob29rX2xpc3RfZmluZGAsIGJ1dCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSSBjYW4mIzM5O3QgcmVhbGx5IGZvY3VzIG9uIGl0IGRpcmVjdGx5IGlmIGl0JiMzOTtzIGlubGluZWQuIEkgd29uZGVyIGlmIGl0ICppcyogaW5saW5lZD8gSXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgbWFya2VkIGFzIGBpbmxpbmVgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBhbHdheXMgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIEhtbS4uLgoKV2FpdCBhIG1pbnV0ZSwgYG5mX3RhYmxlc19uZXdjaGFpbmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhhdCB3b3Jrcy4gTGV0IG1lIHRoaW5rIG1vcmUgYWJvdXQgdGhhdC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQgYW5kIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1pZ2h0IGJlIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LiBBaCwgYG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3NgIHNlZW1zIHRvIGJlIG5vbi1zdGF0aWMuIEdvb2QuIEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMTE9dm9pZCBuZl90YWJsZXNfdW5iaW5kX2NoYWluKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMxNS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMxNjpzdGF0aWMgaW50IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzE3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDI1PXN0YXRpYyBpbnQgbmZfdGFibGVzX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0Mi1cdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQzOlx0XHRyZXR1cm4gbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rcyhuZXQsIFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMwMDAtXHRcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDAxOlx0XHRcdGVyciA9IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MoY3R4LVx1MDAzZW5ldCwgXHUwMDI2aG9vay5saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMwMDItXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5ldGZpbHRlciBUYWJsZXMqKgoKT2theSwgc28gdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgZ29vZCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gYXZvaWQgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuCgpJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBmb2N1c2luZyBvbiBzdGF0aWMgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG5ldGxpbmsgY2FsbGJhY2tzLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG5mbmV0bGlua19yY3ZfbXNnYCBpcyB0aGUgY2VudHJhbCBlbnRyeSBwb2ludCBmb3IgYWxsIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzLiBIb3dldmVyLCBpdCBpcyB0b28gZ2VuZXJpYy4gSSBzdGFydGVkIGNoZWNraW5nIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWxsIG5ldGxpbmsuIFRoZXJlZm9yZSwgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgIGFyZSBwcm9taXNpbmcuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYG5mX3RhYmxlc191cGRjaGFpbmAgaXMgc3RhdGljLi4uIHllcywgaXQgaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IG90aGVyIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBoYXZlIGZvdW5kIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgd2hpY2ggaXMgc3RhdGljLiBJIHdpbGwgbGlzdCB0aGUgbmV0bGluayBjYWxsYmFja3MuIFRoZXkgd2lsbCBkZWZpbml0ZWx5IG5vdCBiZSBpbmxpbmVkLCBiZWNhdXNlIHRoZXkgYXJlIHJlZmVyZW5jZWQgaW4gYW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBkaWZmIHRvIHNlZSB3aHkgSSBzdGFydGVkIHRoaXMgaW52ZXN0aWdhdGlvbi4gQWgsIHJpZ2h0LCB0aGVyZSYjMzk7cyBhIGJ1ZyBmaXggaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgcmVsYXRpbmcgdG8gbWF0Y2hpbmcgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgdGhlIGJ1ZyBjYW4gY2F1c2UgaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYmVoYXZpb3Igd2l0aCBjaGFpbiBvciBmbG93dGFibGUgYWRkaXRpb24sIHJlbW92YWwsIG9yIHVwZGF0ZS4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZ29pbmcgdG8gYmUgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgLgoKTm93LCBpcyBgbmZfdGFibGVzX3VwZGNoYWluYCBpbmxpbmVkPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbmZfdGFibGVzX25ld2NoYWluYCBhbmQgYG5mX3RhYmxlc19kZWxjaGFpbmAuIEdpdmVuIGl0cyBzaXplLCBpdCYjMzk7cyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gIGlzIGluIGBuZl90YWJsZXNfYXBpLmNgLiBZZXAsIGl0IGlzLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkLiBJIHNlZSBgTkZfVEFCTEVTYCwgYE5GX1RBQkxFU19ORVRERVZgLCBgTkZfVEFCTEVTX0lORVRgLCBhbmQgYElQVjZgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gYE5GX1RBQkxFU2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgd2hpY2ggaXMgc3RhbmRhcmQuIGBORl9UQUJMRVNfTkVUREVWYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNgLCBhbmQgYE5GX1RBQkxFU19JTkVUYCBkZXBlbmRzIG9uIGBJUFY2YCBhbmQgYE5GX1RBQkxFU2AuIFNvLCBpdCBsb29rcyBsaWtlIHRoZXNlIGZvdXIgY29uZmlncyBzaG91bGQgYmUgZW5vdWdoLgoKRmluYWxseSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gbWFrZSBzdXJlLiBBbmQgdGhhdCBpcyB0aGUgc3VtbWFyeSBvZiB0aGUgcHJvY2VzcywgYW5kIHdoYXQgSSBiZWxpZXZlIGFyZSB0aGUgYmVzdCBjaG9pY2VzIGZvciBmdXp6IHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9ob29rX2xpc3RfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0Mzc6c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVx0XHRcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5ND1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI5NDQ6XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTU3Olx0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU4LVx0XHRcdFx0XHRcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXHUwMDI2aG9vayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjU4Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cdFx0aWYgKCFob29rKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAzMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTA0NzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwNDgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMjUtXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEzNzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNTYtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNTc6XHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU4LVx0XHRpZiAoIWhvb2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMTUKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBuZl90YWJsZXNfYXBpLmNgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBjb2RlYmFzZS4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSB1c2FnZSByZXZlYWxzIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBpcyBvbmx5IGVtcGxveWVkIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gVGhpcyBpcyBnb29kLCBpdCBnaXZlcyBtZSBhIHZlcnkgbGltaXRlZCBzY29wZSB0byBmb2N1cyBvbi4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGF0IHNwZWNpZmljIGZpbGUuIFRoaXMgbGltaXRlZCBzY29wZSBpcyBhIGdvb2QgdGhpbmc7IGl0IG1lYW5zIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBpc3N1ZXMgaXMgcmVkdWNlZC4gSG93ZXZlciwgYSBsb2NhbGl6ZWQgaXNzdWUgY291bGQgYmUgYSBzZXJpb3VzIGlzc3VlLCBnaXZlbiBuZXRmaWx0ZXLigJlzIGNvcmUgcm9sZS4KCk5vdywgbXkgcGxhbiB0byBmb3JtYWxseSByZXBvcnQgdGhpcyBmaW5kaW5nIHRvIHRoZSB0ZWFtLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGdldCB0aGUgZnVsbCByZXBvcnQgZ2VuZXJhdGVkLiBJIHRoaW5rIGl04oCZcyBzbWFydCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhpcy4gSXTigJlsbCBhbGxvdyBtZSB0byBwcm9wZXJseSBhbmQgY29uc2lzdGVudGx5IGNvbW11bmljYXRlIHRoZXNlIGZpbmRpbmdzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlYW0uIFdlIHNob3VsZCBhbHNvIGxvb2sgaW50byBob3cgdG8gZ2V0IHRoaXMgYXV0b21hdGVkIHNvIHdlIGNhbiBwcmV2ZW50IHRoZXNlIHR5cGVzIG9mIHRoaW5ncyBpbiB0aGUgZnV0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX3VwZGNoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdmbG93dGFibGUmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbGZsb3d0YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3Y2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbGNoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc191cGRjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgbWF0Y2hpbmcgbG9naWMgZm9yIG5ldGRldiBob29rcyBpbiBuZl90YWJsZXMuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHBhcnNpbmcsIHVwZGF0aW5nLCBvciBkZWxldGluZyBuZXRkZXYgaG9va3MgZm9yIGNoYWlucyBhbmQgZmxvd3RhYmxlcy4gVGhlIGJ1ZyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIG1hdGNoaW5nIGFuZCBzdWJzZXF1ZW50IGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXRmaWx0ZXIuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGBzdHJuY21wYCB3aXRoIGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3Mgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXggc3RhdHVzIChlLmcuLCBtYXRjaGluZyBcJiMzNDtldGhcJiMzNDsgd2l0aCBcJiMzNDtldGgwXCYjMzQ7KS4gVGhlIGBuZnRfaG9va2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBhbmQgaXRzIGBpZm5hbWVgIGZpZWxkIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbmxhX3N0cnNjcHlgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBzdHJpbmcgY29tcGFyaXNvbiBsb2dpYyBidWcsIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1M2QyNTBkODYxOWQ1NDQ1ZTFlNDk2ZGE1Y2FlYjk2M2JmY2I4MTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxMTo0Mzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTE5NzMsNyAmIzQzOzE5NzMsNyBAQCBzdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKQogCXJldHVybiAtRU5PU1BDOwogfQogCi1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spCiYjNDM7c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKQogewogCXJldHVybiBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW47CiB9CkBAIC0yNDQwLDggJiM0MzsyNDQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsCiAJc3RydWN0IG5mdF9ob29rICpob29rOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJuY21wKGhvb2stJmd0O2lmbmFtZSwgdGhpcy0mZ3Q7aWZuYW1lLAotCQkJICAgICBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pKSkgewomIzQzOwkJaWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsIGhvb2stJmd0O2lmbmFtZWxlbikpIHsKIAkJCWlmIChob29rLSZndDtmbGFncyAmYW1wOyBORlRfSE9PS19SRU1PVkUpCiAJCQkJY29udGludWU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSXQmIzM5O3MgY2hhbmdpbmcgYGhvb2tfaXNfcHJlZml4YCB0byB0YWtlIGEgYGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9va2AuIFRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgd2hlcmUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjb21wYXJpc29uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHN3YXBwaW5nIHRoaXM6CgpgYGBjCgkJaWYgKCFzdHJuY21wKGhvb2stJmd0O2lmbmFtZSwgdGhpcy0mZ3Q7aWZuYW1lLAoJCQkgICAgIG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbikpKSB7CmBgYAoKd2l0aCB0aGlzOgoKYGBgYwoJCWlmIChob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuKQoJCQljb250aW51ZTsKCQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsIGhvb2stJmd0O2lmbmFtZWxlbikpIHsKYGBgCgpBbmQgaXQmIzM5O3MgYWxzbyBhZGRpbmcgYGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlgIGFzIGFuIGVhcmx5IGNoZWNrLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgcmlzayBoZXJlPyBgaG9vay0mZ3Q7aWZuYW1lYCBhbmQgYHRoaXMtJmd0O2lmbmFtZWAgYXJlIHN0cmluZ3MsIGFuZCBgaG9vay0mZ3Q7aWZuYW1lbGVuYCBhbmQgYHRoaXMtJmd0O2lmbmFtZWxlbmAgYXJlIGxlbmd0aHMuIFRoaXMgaXMgY2xlYXJseSBmaXhpbmcgYSBidWcgYmVjYXVzZSB0aGUgcHJldmlvdXMgYG1pbigpYCBjYWxsIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHByZWZpeCBtYXRjaGluZyBvciBzb21ldGhpbmcsIGJhc2VkIG9uIGhvdyB0aGUgbGVuZ3RocyB3ZXJlIGJlaW5nIGNvbXBhcmVkLgoKQWgsIHJpZ2h0LCBgaG9va19pc19wcmVmaXhgIGlzIHRoZSBrZXkuIEl0IGNoZWNrcyBpZiBgc3RybGVuKGhvb2stJmd0O2lmbmFtZSkgJmd0Oz0gaG9vay0mZ3Q7aWZuYW1lbGVuYC4gU28sIGBob29rLSZndDtpZm5hbWVsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlICppbnRlcmZhY2UgbmFtZSogc3RyaW5nLCByaWdodD8gSWYgYGhvb2tfaXNfcHJlZml4KGhvb2spYCBpcyB0cnVlLCBpdCBtZWFucyB0aGUgYWN0dWFsIGludGVyZmFjZSBuYW1lIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGhvb2stJmd0O2lmbmFtZWxlbmAuIEhtbSwgZG9lcyBgaG9vay0mZ3Q7aWZuYW1lbGVuYCByZXByZXNlbnQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICp3aXRob3V0KiBhIHdpbGRjYXJkIGNoYXJhY3RlciBvciBzb21ldGhpbmc/CgpMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBob29rX2lzX3ByZWZpeGAgdG8gY29uZmlybS4uLiBZZXAsIGBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW5gLiBPa2F5LCBzbyBpZiBgaG9vay0mZ3Q7aWZuYW1lYCAqd2VyZSogdW5pbml0aWFsaXplZCwgYHN0cmxlbmAgY291bGQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHdhaXQuLi4gYGhvb2stJmd0O2lmbmFtZWAgaXMgKmFscmVhZHkqIGJlaW5nIHJlYWQgYnkgYm90aCBgc3RybmNtcGAgYW5kIGBzdHJsZW5gICp3aXRoaW4qIGBob29rX2lzX3ByZWZpeGAgaXRzZWxmLiBTbywgaWYgdGhlcmUgd2FzIGFuIGlzc3VlLCB3ZSYjMzk7ZCBoYXZlIHNlZW4gaXQgZWFybGllci4KClNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgbG9naWMgZXJyb3IgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAsIGxpa2VseSByZWxhdGluZyB0byBwcmVmaXggbWF0Y2hpbmcsIGJ1dCB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBJIHNob3VsZCBwcm9iYWJseSBzdGlsbCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlIGFmZmVjdGVkIGxvZ2ljIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIGl0c2VsZiwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfaG9va19saXN0X2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0Mzc6c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVx0XHRcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5ND1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI5NDQ6XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTU3Olx0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU4LVx0XHRcdFx0XHRcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXHUwMDI2aG9vayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjU4Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cdFx0aWYgKCFob29rKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAzMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTA0NzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwNDgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMjUtXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEzNzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNTYtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNTc6XHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU4LVx0XHRpZiAoIWhvb2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhvb2sgTWF0Y2hpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0aWdodGVuaW5nIHVwIHRoZSBsb2dpYyBmb3IgaG93IHdlIGZpbmQgaG9va3MgaW4gdGhpcyBsaXN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBgc3RybmNtcGAgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtaXNtYXRjaGVzIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcywgZXNwZWNpYWxseSBpbiBwcmVmaXggc2NlbmFyaW9zLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4uLiBJIHNlZSB0aGUgb3JpZ2luYWwgaXNzdWU6IFRoZSBgbWluYCBmdW5jdGlvbiBjYWxsIGluIHRoZSBgc3RybmNtcGAgY29tcGFyaXNvbiB3YXMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgbWF0Y2hlcy4gSWYgYSBob29rJiMzOTtzIGludGVyZmFjZSBuYW1lLCBsZXQmIzM5O3Mgc2F5ICYjMzQ7ZXRoLCYjMzQ7IGhhZCBhIGxlbmd0aCBvZiAzIChgaG9vay0mZ3Q7aWZuYW1lbGVuYCksIGFuZCB0aGUgaW50ZXJmYWNlIHdlJiMzOTtyZSBjaGVja2luZyBhZ2FpbnN0LCAmIzM0O2V0aDAsJiMzNDsgaGFkIGEgbGVuZ3RoIG9mIDQgKGB0aGlzLSZndDtpZm5hbWVsZW5gKSwgdGhlbiBgbWluYCB3b3VsZCByZXN1bHQgaW4gMy4gVGhpcyBtZWFudCBgc3RybmNtcCgmIzM0O2V0aCYjMzQ7LCAmIzM0O2V0aDAmIzM0OywgMylgIHdhcyByZXR1cm5pbmcgYSBtYXRjaCAoMCksIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRpZmZlcmVudC4gVGhpcyBtZWFudCAmIzM0O2V0aDAmIzM0OyB3YXMgbWF0Y2hpbmcgJiMzNDtldGgmIzM0Oywgd2hpY2ggaXMgaW5jb3JyZWN0LCB1bmxlc3MgJiMzNDtldGgmIzM0OyB3YXMgaW50ZW5kZWQgYXMgYSBwcmVmaXguCgpOb3csIGhvbGQgb24uLi4gdGhlIGNvZGUgdGhlbiBjaGVja3MgYGhvb2tfaXNfcHJlZml4YC4gVGhhdCBtYWtlcyBzZW5zZS4gSWYgYGhvb2tfaXNfcHJlZml4YCBpcyB0cnVlLCB0aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwcmVmaXggbWF0Y2ggKGxpa2UgJiMzNDtldGgqJiMzNDspLiBUaGVuIEkgbG9vayBhdCB0aGUgbG9naWMgaW5zaWRlIGBob29rX2lzX3ByZWZpeGAsIHdoaWNoIGlzIGJhc2VkIG9uIGBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW5gLiBTbyBpZiBgaG9vay0mZ3Q7aWZuYW1lYCBpcyAmIzM0O2V0aComIzM0OywgYHN0cmxlbmAgaXMgNC4gQnV0IGBob29rLSZndDtpZm5hbWVsZW5gIG1pZ2h0IGJlIDMgKGxlbmd0aCBvZiAmIzM0O2V0aCYjMzQ7KS4gU28sIGBob29rX2lzX3ByZWZpeGAgd291bGQgZXZhbHVhdGUgdG8gdHJ1ZS4KCkFoLCBzbyBpZiB0aGUgaG9vayBpcyBhIHByZWZpeCBtYXRjaC4uLndhaXQsIGlzIHRoYXQgcmVhbGx5IHJpZ2h0PyBMZXQgbWUgdmVyaWZ5IGlmIGBob29rX2lzX3ByZWZpeGAgaXMgdXNpbmcgYSBjb3JyZWN0IGNvbmRpdGlvbi4KCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGlzLiBUaGUgbmV3IGNvZGUgZG9lcyB0aGlzOgoKYGBgYwoJCWlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSkKCQkJY29udGludWU7CgkJaWYgKGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCgkJCWNvbnRpbnVlOwoJCWlmICghc3RybmNtcChob29rLSZndDtpZm5hbWUsIHRoaXMtJmd0O2lmbmFtZSwgaG9vay0mZ3Q7aWZuYW1lbGVuKSkgewpgYGAKClNvIGZpcnN0LCBpZiBvbmUgaXMgcHJlZml4IGFuZCB0aGUgb3RoZXIgaXNuJiMzOTt0LCBgY29udGludWVgLiBJdCBjaGVja3MgdGhhdCBib3RoIGhhdmUgdGhlIHNhbWUgcHJlZml4IHN0YXR1cyAoZWl0aGVyIGJvdGggcHJlZml4ZXMgb3IgYm90aCBleGFjdCBtYXRjaGVzKS4gVGhlbiwgaXQgY2hlY2tzIHRoYXQgdGhlaXIgbGVuZ3RocyBhcmUgdGhlIHNhbWUuIEZpbmFsbHksIGl0IHVzZXMgYHN0cm5jbXBgLCBidXQgb25seSBpZiBldmVyeXRoaW5nIGVsc2UgbWF0Y2hlcy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4LgoKVGhpcyBwcmV2ZW50cyB0aGUgaW5jb3JyZWN0IG1hdGNoaW5nIG9mIGFuIGV4YWN0IG1hdGNoIChlLmcuICYjMzQ7ZXRoMCYjMzQ7KSB3aXRoIGEgcHJlZml4IG1hdGNoIChlLmcuICYjMzQ7ZXRoJiMzNDspLiBJdCBhbHNvIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSB0d28gZXhhY3QgbWF0Y2hlcyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBjb3VsZCBtYXRjaCBpZiBvbmUgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyIChlLmcuICYjMzQ7ZXRoJiMzNDsgYW5kICYjMzQ7ZXRoMCYjMzQ7KS4gTm93LCBhbiBleGFjdCBtYXRjaCB3b3VsZCByZXF1aXJlIGBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSA9PSBob29rLSZndDtpZm5hbWVsZW5gLCBtZWFuaW5nIGBob29rX2lzX3ByZWZpeGAgc2hvdWxkIGFsc28gYWx3YXlzIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuIGV4YWN0IG1hdGNoLgoKTGV0IG1lIGdvIGxvb2sgYXQgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBgaG9va19pc19wcmVmaXhgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hvb2tfaXNfcHJlZml4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTkzNz1zdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5NzUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTc2OnN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5Nzcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE5ODE9c3RhdGljIGludCBuZnRfbmxhX3B1dF9ob29rX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTgyLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE5ODM6XHRpbnQgYXR0ciA9IGhvb2tfaXNfcHJlZml4KGhvb2spID8gTkZUQV9ERVZJQ0VfUFJFRklYIDogTkZUQV9ERVZJQ0VfTkFNRTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5ODQtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjA0Mj1zdGF0aWMgaW50IG5mdF9kdW1wX2Jhc2VjaGFpbl9ob29rKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjA3OS1cdFx0aWYgKGR1bXBfaG9va19jdHgubiA9PSAxIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjA4MDpcdFx0ICAgICFob29rX2lzX3ByZWZpeChkdW1wX2hvb2tfY3R4LmZpcnN0KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwODEtXHRcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE5GVEFfSE9PS19ERVYsIGR1bXBfaG9va19jdHguZmlyc3QtXHUwMDNlaWZuYW1lKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDM3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0Mi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQzOlx0XHRpZiAoaG9va19pc19wcmVmaXgoaG9vaykgIT0gaG9va19pc19wcmVmaXgodGhpcykpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ0LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgUHJlZml4IENoZWNrKioKCk9rYXksIHNvIHRoaXMgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbi4uLiByaWdodCwgaXQmIzM5O3MgY2hlY2tpbmcgaWYgdGhlIGludGVyZmFjZSBuYW1lIChgaG9vay0mZ3Q7aWZuYW1lYCkgaGFzIGEgcHJlZml4IHRoYXQmIzM5O3MgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIHNwZWNpZmllZCBieSBgaG9vay0mZ3Q7aWZuYW1lbGVuYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgYGhvb2stJmd0O2lmbmFtZWAgaXMgJiMzNDtldGgwJiMzNDssIHRoZSBgc3RybGVuYCBvZiB0aGF0IHN0cmluZyBpcyBnb2luZyB0byBiZSA0LiBOb3csIGlmIGBob29rLSZndDtpZm5hbWVsZW5gIGlzICphbHNvKiA0LCB0aGUgY29uZGl0aW9uIGBzdHJsZW4gJmd0Oz0gaWZuYW1lbGVuYCBpcyBnb2luZyB0byBldmFsdWF0ZSB0byB0cnVlLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbi4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIGhvdyBgaWZuYW1lbGVuYCBpcyAqYWN0dWFsbHkqIHNldC4gSSYjMzk7bSBhc3N1bWluZyBpdCByZXByZXNlbnRzIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCBzdHJpbmcsIGFuZCBgaWZuYW1lYCBpcyB0aGUgcHJlZml4IHN0cmluZyBpdHNlbGYsIGJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhbmQgZW5zdXJlIG15IGFzc3VtcHRpb25zIGFyZSB2YWxpZC4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGJlaGF2aW9ycyBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgaG93IGBpZm5hbWVsZW5gIGlzIGdldHRpbmcgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZm5hbWVsZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTc2PXN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5Nzcte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk3ODpcdHJldHVybiBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW47XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc5LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxMS1cdC8qIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIE5VTC1jaGFyIHdoZW4gY29tcGFyaW5nIG5vbi1wcmVmaXhlcyAqL1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQxMjpcdGhvb2stXHUwMDNlaWZuYW1lbGVuID0gc3RybGVuKGhvb2stXHUwMDNlaWZuYW1lKSAmIzQzOyAhcHJlZml4O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxMy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDE4LVx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDE5Olx0XHRpZiAoc3RybmNtcChkZXYtXHUwMDNlbmFtZSwgaG9vay1cdTAwM2VpZm5hbWUsIGhvb2stXHUwMDNlaWZuYW1lbGVuKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MjAtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDQtXHRcdFx0Y29udGludWU7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQ1Olx0XHRpZiAoaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ2LVx0XHRcdGNvbnRpbnVlO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ0NzpcdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ4LVx0XHRcdGlmIChob29rLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTc2OD1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05Nzc2LVx0XHRvcHMgPSBuZnRfaG9va19maW5kX29wcyhob29rLCBkZXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTc3NzpcdFx0bWF0Y2ggPSAhc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgZGV2LVx1MDAzZW5hbWUsIGhvb2stXHUwMDNlaWZuYW1lbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdHJpbmcgQ29tcGFyaXNvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBob29rLSZndDtpZm5hbWVsZW4gPSBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmIzQzOyAhcHJlZml4O2AgbGluZS4uLiBSaWdodCwgaWYgaXQmIzM5O3MgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuIElmIGl0JiMzOTtzICpub3QqIGEgcHJlZml4LCB3ZSBhZGQgMS4gU28sIHRoZSBjcnVjaWFsIGNoZWNrLCBgc3RybGVuKGhvb2stJmd0O2lmbmFtZSkgJmd0Oz0gaG9vay0mZ3Q7aWZuYW1lbGVuYCwgYmVjb21lcyBhIG5lYXQgd2F5IHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIHByZWZpeC4gSWYgaXQgKmlzKiBhIHByZWZpeCwgaXQmIzM5O3MgYHN0cmxlbiAmZ3Q7PSBzdHJsZW5gIHdoaWNoIGlzIHRydWUsIGFuZCBpZiBpdCYjMzk7cyAqbm90KiBhIHByZWZpeCwgaXQmIzM5O3MgYHN0cmxlbiAmZ3Q7PSBzdHJsZW4gJiM0MzsgMWAgd2hpY2ggaXMgZmFsc2UuIFRoYXQgcGFydCBzZWVtcyBzb3VuZC4gR29vZC4gYGhvb2tfaXNfcHJlZml4YCB3b3JrcyBhcyBleHBlY3RlZC4KCk5vdywgdGhlIHByb2JsZW0uIEl0JiMzOTtzIGluIGBuZnRfaG9va19saXN0X2ZpbmRgOgoKYGBgYwoJCWlmICghc3RybmNtcChob29rLSZndDtpZm5hbWUsIHRoaXMtJmd0O2lmbmFtZSwKCQkJICAgICBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pKSkgewpgYGAKClRoZSBpc3N1ZSBpcyBjbGVhci4gTGV0JiMzOTtzIGltYWdpbmUgYSBzY2VuYXJpbzogYGhvb2tgIGlzICYjMzQ7ZXRoJiMzNDsgKGEgcHJlZml4LCBzbyBgaWZuYW1lbGVuYCBpcyAzKSBhbmQgYHRoaXNgIGlzICYjMzQ7ZXRoMCYjMzQ7IChub3QgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIDUpLiBUaGUgYG1pbigzLCA1KWAgZ2l2ZXMgdXMgMy4gU28sIHdlJiMzOTtyZSBkb2luZyBgc3RybmNtcCgmIzM0O2V0aCYjMzQ7LCAmIzM0O2V0aDAmIzM0OywgMylgLiBUaGF0IHJldHVybnMgMCBiZWNhdXNlIHRoZSBmaXJzdCB0aHJlZSBjaGFyYWN0ZXJzIG1hdGNoLiAqKkJ1dCB0aGV5IHNob3VsZG4mIzM5O3QgbWF0Y2ghKiogJiMzNDtldGgmIzM0OyBpcyBhIHByZWZpeDsgJiMzNDtldGgwJiMzNDsgaXMgbm90LiBUaGUgcHJlZml4ZXMgc2hvdWxkIGJlIGNoZWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBjb21wYXJpc29uIGRvZXNuJiMzOTt0IGlkZW50aWZ5ICYjMzQ7ZXRoJiMzNDsgYW5kICYjMzQ7ZXRoMCYjMzQ7IGFzIGEgbWF0Y2guIFRoaXMgaXMgYSBzdWJ0bGUgbG9naWMgYnVnLgoKRG9lcyB0aGlzIGJ1ZyBzdGVtIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBJdCYjMzk7cyBqdXN0IGEgZmxhd2VkIHN0cmluZyBjb21wYXJpc29uLiBDb3VsZCB0aGUgaW50ZXJmYWNlIG5hbWUgaXRzZWxmIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vLCBiZWNhdXNlIEkmIzM5O20gYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYG5mdF9uZXRkZXZfaG9va19hbGxvY2AuIEJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBhbGxvY2F0aW9uIGZ1bmN0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9uZXRkZXZfaG9va19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMzkxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM5MjpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM5My1cdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0ODE6XHRcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0bXAsIHByZWZpeCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDgyLVx0XHRpZiAoSVNfRVJSKGhvb2spKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MjYtXHRpZiAodGJbTkZUQV9IT09LX0RFVl0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1Mjc6XHRcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0YltORlRBX0hPT0tfREVWXSwgZmFsc2UpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUyOC1cdFx0aWYgKElTX0VSUihob29rKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzAzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5mdF9uZXRkZXZfaG9va19hbGxvY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgaXRzIGNvcmUgcHVycG9zZSB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgaG93IHRoZXNlIGhvb2tzIGFyZSBzdHJ1Y3R1cmVkIGlzIGNyaXRpY2FsOyB0aGV5IGFyZSBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciBwYWNrZXQgZmlsdGVyaW5nIGFuZCBtYW5pcHVsYXRpb24uIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFsbG9jYXRpbmcgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgTmV0ZmlsdGVyIGhvb2sgcmVsYXRlZCB0byBuZXR3b3JrIGRldmljZSBpbnRlcmFjdGlvbi4KCkkmIzM5O2QgYW50aWNpcGF0ZSBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGFsbG9jYXRpb24sIHBvdGVudGlhbGx5IGluaXRpYWxpemluZyBzb21lIGNydWNpYWwgaW50ZXJuYWwgZGF0YSwgYW5kIHBlcmhhcHMgbGlua2luZyB0aGlzIG5ldyBob29rIGludG8gdGhlIGFwcHJvcHJpYXRlIE5ldGZpbHRlciBjaGFpbiBmb3IgbmV0d29yayBkZXZpY2UgZXZlbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGxheWVyIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhpbmdzIGxpa2UgdGhlIGRldmljZSBkcml2ZXJzIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGNvbm5lY3RpbmcgTmV0ZmlsdGVyJiMzOTtzIGZpbHRlcmluZyBydWxlcyB0byB0aGUgcGh5c2ljYWwgZGV2aWNlcy4gSSBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBsb3ctbGV2ZWwgYWxsb2NhdGlvbiBhbmQgc2V0dXAgdGhhdCBzdWJzZXF1ZW50IGZ1bmN0aW9ucyB3aWxsIGRlcGVuZCBvbi4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1ldGFkYXRhIG9yIHN0YXRlIGl0IG1haW50YWlucyB0byB0cmFjayB0aGUgaG9vaywgd2hpY2ggaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBkZWJ1Z2dpbmcgYW5kIG9wdGltaXppbmcgbmV0d29yayB0cmFmZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzkyOlx0c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcbjIzOTM6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbjIzOTQ6XHRcdFx0XHRcdFx0ICAgICAgYm9vbCBwcmVmaXgpXG4yMzk1Olx0e1xuMjM5NjpcdFx0c3RydWN0IG5mX2hvb2tfb3BzICpvcHM7XG4yMzk3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMjM5ODpcdFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuMjM5OTpcdFx0aW50IGVycjtcbjI0MDA6XHRcbjI0MDE6XHRcdGhvb2sgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZ0X2hvb2ssIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yNDAyOlx0XHRpZiAoIWhvb2spXG4yNDAzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMjQwNDpcdFxuMjQwNTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aG9vay1cdTAwM2VvcHNfbGlzdCk7XG4yNDA2Olx0XG4yNDA3Olx0XHRlcnIgPSBubGFfc3Ryc2NweShob29rLVx1MDAzZWlmbmFtZSwgYXR0ciwgSUZOQU1TSVopO1xuMjQwODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI0MDk6XHRcdFx0Z290byBlcnJfaG9va19mcmVlO1xuMjQxMDpcdFxuMjQxMTpcdFx0LyogaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgTlVMLWNoYXIgd2hlbiBjb21wYXJpbmcgbm9uLXByZWZpeGVzICovXG4yNDEyOlx0XHRob29rLVx1MDAzZWlmbmFtZWxlbiA9IHN0cmxlbihob29rLVx1MDAzZWlmbmFtZSkgJiM0MzsgIXByZWZpeDtcbjI0MTM6XHRcbjI0MTQ6XHRcdC8qIG5mX3RhYmxlc19uZXRkZXZfZXZlbnQoKSBpcyBjYWxsZWQgdW5kZXIgcnRubF9tdXRleCwgdGhpcyBpc1xuMjQxNTpcdFx0ICogaW5kaXJlY3RseSBzZXJpYWxpemluZyBhbGwgdGhlIG90aGVyIGhvbGRlcnMgb2YgdGhlIGNvbW1pdF9tdXRleCB3aXRoXG4yNDE2Olx0XHQgKiB0aGUgcnRubF9tdXRleC5cbjI0MTc6XHRcdCAqL1xuMjQxODpcdFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG4yNDE5Olx0XHRcdGlmIChzdHJuY21wKGRldi1cdTAwM2VuYW1lLCBob29rLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKVxuMjQyMDpcdFx0XHRcdGNvbnRpbnVlO1xuMjQyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBjYW4gc2VlIHRoYXQgdGhlIG1lbW9yeSBmb3IgdGhlIGBob29rYCBzdHJ1Y3QgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIGBremFsbG9jX29iamAgdGFrZXMgY2FyZSBvZiB0aGUgemVyb2luZywgYW5kIHRoZW4gYG5sYV9zdHJzY3B5YCBoYW5kbGVzIHRoZSBzdHJpbmcgY29weSBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZS4gSSYjMzk7dmUgZ290IGBob29rLSZndDtpZm5hbWVsZW5gIHNldCBiYXNlZCBvbiBgc3RybGVuYC4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBjb2RlIGlzIHNhZmUgaW4gdGhhdCByZXNwZWN0LgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoaXMgbG9naWMgYnVnIHJlbGF0ZWQgdG8gYG5mdF9ob29rX2xpc3RfZmluZGAuIEl0JiMzOTtzIG1hdGNoaW5nIGhvb2tzIGluY29ycmVjdGx5IGR1ZSB0byBsZW5ndGggb3IgcHJlZml4IHN0YXR1cyBkaXNjcmVwYW5jaWVzLiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBmYWlsaW5nIGhvb2sgYWRkaXRpb25zIGJlY2F1c2UgYSAmIzM0O2R1cGxpY2F0ZSYjMzQ7IGlzIGZvdW5kIHdoZW4gaXQmIzM5O3Mgbm90LCBvciBkZWxldGluZyB0aGUgd3JvbmcgaG9vayBhbHRvZ2V0aGVyLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgbGlrZSBhbiB1bmluaXRpYWxpemVkIHJlYWQuCgpJIHRob3VnaHQgZm9yIGEgc2Vjb25kIHRoYXQgdGhpcyBtaWdodCBiZSBzb21ldGhpbmcgS01TQU4gY291bGQgZmxhZywgYnV0IG5vLiBFdmVuIGlmIEtNU0FOICp3ZXJlKiBydW5uaW5nLCBpdCB3b3VsZG4mIzM5O3QgZGV0ZWN0IGEgbG9naWMgYnVnIGxpa2UgdGhpcyBiZWNhdXNlIGl0JiMzOTtzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiByZWFkcywgd2hpY2ggYXJlbiYjMzk7dCBwcmVzZW50IGhlcmUuIGBob29rLSZndDtpZm5hbWVgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBubGFfc3Ryc2NweWAgYW5kIHplcm9lZCBvdXQgYnkgYGt6YWxsb2Nfb2JqYCwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoZSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4KCkkmIzM5O20gY29uZmlkZW50IHdlJiMzOTt2ZSBydWxlZCBvdXQgbWVtb3J5IGlzc3VlcyBoZXJlLiBUaGUgZml4IHNlZW1zIGZvY3VzZWQgb24gY29ycmVjdGluZyB0aGUgYG5mdF9ob29rX2xpc3RfZmluZGAgbG9naWMgdG8gZW5zdXJlIGNvcnJlY3QgaG9vayBtYXRjaGluZy4gSG93ZXZlciwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGluIHRoaXMgcGF0Y2ggdG8ga2VlcCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtob29rX2lzX3ByZWZpeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE5Mzc9c3RhdGljIGludCBuZnRfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N0YXRzIF9fcGVyY3B1ICpzdGF0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk3NjpzdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTgxPXN0YXRpYyBpbnQgbmZ0X25sYV9wdXRfaG9va19kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9ob29rICpob29rKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk4Mi17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTgzOlx0aW50IGF0dHIgPSBob29rX2lzX3ByZWZpeChob29rKSA/IE5GVEFfREVWSUNFX1BSRUZJWCA6IE5GVEFfREVWSUNFX05BTUU7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTg0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIwNDI9c3RhdGljIGludCBuZnRfZHVtcF9iYXNlY2hhaW5faG9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwNzktXHRcdGlmIChkdW1wX2hvb2tfY3R4Lm4gPT0gMSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjIwODA6XHRcdCAgICAhaG9va19pc19wcmVmaXgoZHVtcF9ob29rX2N0eC5maXJzdCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDgxLVx0XHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlRBX0hPT0tfREVWLCBkdW1wX2hvb2tfY3R4LmZpcnN0LVx1MDAzZWlmbmFtZSkpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDItXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ0MzpcdFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0NC1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDkKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gQmFzaWNhbGx5LCBhbGwgdGhpcyBkb2VzIGlzIHR3ZWFrIGBob29rX2lzX3ByZWZpeGAgdG8gYWNjZXB0IGEgYGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9va2AgYW5kIHVwZGF0ZXMgYG5mdF9ob29rX2xpc3RfZmluZGAgdG8gdXNlIHRoYXQuIE5vdGhpbmcgZmFuY3ksIGp1c3QgYSBiaXQgb2YgcmVmYWN0b3JpbmcsIGFuZCBpdCYjMzk7cyBmaXhpbmcgYSBsb2dpYyBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAuIFNwZWNpZmljYWxseSwgdGhhdCBgc3RybmNtcGAgY2FsbCwgdXNpbmcgYG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbilgLCBoYWQgdGhlIHBvdGVudGlhbCB0byBnaXZlIGluY29ycmVjdCBtYXRjaGVzIHdoZW4gaW50ZXJmYWNlIG5hbWVzIHdlcmUgZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4ZXMg4oCTIG5vdCBnb29kLgoKVGhlIGtleSB0aGluZyBpcywgdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5mdF9ob29rYCBzdHJ1Y3RzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoICpndWFyYW50ZWVzKiB6ZXJvZWQgbWVtb3J5LiBBbHNvLCB0aGUgaW50ZXJmYWNlIG5hbWUgaXRzZWxmIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIGBubGFfc3Ryc2NweWAuIEkmIzM5O3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBhbmQgY2FuIGNvbmZpZGVudGx5IHNheSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvZiBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEsIGFuZCBubyBjb250cm9sIGZsb3cgZGVjaXNpb25zIGJlaW5nIG1hZGUgYmFzZWQgb24gc29tZXRoaW5nIHRoYXQgaGFzbiYjMzk7dCBiZWVuIHNldC4KClNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdXNlZCwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBjYXNlLiBJJiMzOTttIHNldHRpbmcgaXQgdG8gZmFsc2UgYW5kIHdpbGwgaW5jbHVkZSB0aGlzIHJlYXNvbmluZyBpbiB0aGUgY29tbWl0LiBJdOKAmXMgYSBjbGVhbiBmaXggd2l0aCBubyBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGhvb2tzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4IHN0YXR1cyAoZS5nLiwgbWF0Y2hpbmcgXCYjMzQ7ZXRoXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMFwmIzM0OykuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cdTAwM2VpZm5hbWVsZW4pYCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBob29rcyB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIG9yIHByZWZpeCBzdGF0dXMgKGUuZy4sIG1hdGNoaW5nIFwmIzM0O2V0aFwmIzM0OyB3aXRoIFwmIzM0O2V0aDBcJiMzNDspLiBUaGUgYG5mdF9ob29rYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGFuZCBpdHMgYGlmbmFtZWAgZmllbGQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBubGFfc3Ryc2NweWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGlzc3VlIGlzIHB1cmVseSBhIHN0cmluZyBjb21wYXJpc29uIGxvZ2ljIGJ1Zywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuMDc1MDIzNzEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Mjg2MjcxMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX3VwZGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3Zmxvd3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsZmxvd3RhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3Mgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXggc3RhdHVzIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoXFxcIiB3aXRoIFxcXCJldGgwXFxcIikuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIG1hdGNoaW5nIGxvZ2ljIGZvciBuZXRkZXYgaG9va3MgaW4gbmZfdGFibGVzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBwYXJzaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgbmV0ZGV2IGhvb2tzIGZvciBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaG9vayBtYXRjaGluZyBhbmQgc3Vic2VxdWVudCBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuMDc1MDMxMzAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2MzQwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NTNkMjUwZDg2MTlkNTQ0NWUxZTQ5NmRhNWNhZWI5NjNiZmNiODEzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjQzOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCBhZjM1N2Y2YzUwNzBiLi5lMmIxOGM0NzIyZmNjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5AQCAtMTk3Myw3ICsxOTczLDcgQEAgc3RhdGljIGludCBuZnRfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N0YXRzIF9fcGVyY3B1ICpzdGF0cylcXG4gXFx0cmV0dXJuIC1FTk9TUEM7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KHN0cnVjdCBuZnRfaG9vayAqaG9vaylcXG4rc3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxcbiB7XFxuIFxcdHJldHVybiBzdHJsZW4oaG9vay1cXHUwMDNlaWZuYW1lKSBcXHUwMDNlPSBob29rLVxcdTAwM2VpZm5hbWVsZW47XFxuIH1cXG5AQCAtMjQ0MCw4ICsyNDQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuIFxcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmICghc3RybmNtcChob29rLVxcdTAwM2VpZm5hbWUsIHRoaXMtXFx1MDAzZWlmbmFtZSxcXG4tXFx0XFx0XFx0ICAgICBtaW4oaG9vay1cXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pKSkge1xcbitcXHRcXHRpZiAoaG9va19pc19wcmVmaXgoaG9vaykgIT0gaG9va19pc19wcmVmaXgodGhpcykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaG9vay1cXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXFx1MDAzZWlmbmFtZWxlbilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghc3RybmNtcChob29rLVxcdTAwM2VpZm5hbWUsIHRoaXMtXFx1MDAzZWlmbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lbGVuKSkge1xcbiBcXHRcXHRcXHRpZiAoaG9vay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuNjE2MjY2OTM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA0ODkwNDExNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX3VwZGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3Zmxvd3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsZmxvd3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgbWF0Y2hpbmcgbG9naWMgZm9yIG5ldGRldiBob29rcyBpbiBuZl90YWJsZXMuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHBhcnNpbmcsIHVwZGF0aW5nLCBvciBkZWxldGluZyBuZXRkZXYgaG9va3MgZm9yIGNoYWlucyBhbmQgZmxvd3RhYmxlcy4gVGhlIGJ1ZyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIG1hdGNoaW5nIGFuZCBzdWJzZXF1ZW50IGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXRmaWx0ZXIuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NTNkMjUwZDg2MTlkNTQ0NWUxZTQ5NmRhNWNhZWI5NjNiZmNiODEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTE6NDM6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBhZjM1N2Y2YzUwNzBiLi5lMmIxOGM0NzIyZmNjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtMTk3Myw3ICsxOTczLDcgQEAgc3RhdGljIGludCBuZnRfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N0YXRzIF9fcGVyY3B1ICpzdGF0cylcbiBcdHJldHVybiAtRU5PU1BDO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXG4rc3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxuIHtcbiBcdHJldHVybiBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW47XG4gfVxuQEAgLTI0NDAsOCArMjQ0MCwxMSBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuIFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSxcbi1cdFx0XHQgICAgIG1pbihob29rLVx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cdTAwM2VpZm5hbWVsZW4pKSkge1xuK1x0XHRpZiAoaG9va19pc19wcmVmaXgoaG9vaykgIT0gaG9va19pc19wcmVmaXgodGhpcykpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChob29rLVx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVx1MDAzZWlmbmFtZWxlbilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG4gXHRcdFx0aWYgKGhvb2stXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9IT09LX1JFTU9WRSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuNjE2MjY4NzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODE0MjE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GdGFibGVzIEFQSSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb2RpZmllZCB0aGUgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCBub3cgYWNjZXB0cyBhIGBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2tgIGFzIGFuIGFyZ3VtZW50LiBUaGF0J3MgYSBnb29kIGNoYW5nZSwgbWFrZXMgaXQgbW9yZSBmbGV4aWJsZSBhbmQgcG90ZW50aWFsbHkgcmV1c2FibGUuXG5cblRoZW4gSSBzZWUgdGhlIGNoYW5nZSB3aXRoaW4gYG5mdF9ob29rX2xpc3RfZmluZGAuIFRoZXkndmUgYWRkZWQgc29tZSBhZGRpdGlvbmFsIGNoZWNrcyBiZWZvcmUgdGhlIGBzdHJuY21wYCBjYWxsLiBTbWFydC4gVGhleSdyZSBub3cgY29tcGFyaW5nIHRoZSByZXN1bHRzIG9mIGBob29rX2lzX3ByZWZpeChob29rKWAgd2l0aCBgaG9va19pc19wcmVmaXgodGhpcylgLCAqYW5kKiB0aGV5J3JlIGNoZWNraW5nIGlmIGBob29rLVx1MDAzZWlmbmFtZWxlbmAgaXMgZGlmZmVyZW50IGZyb20gYHRoaXMtXHUwMDNlaWZuYW1lbGVuYC4gVGhpcyBpcyBhbGwgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBhbmQgcHJldmVudCB1bm5lY2Vzc2FyeSBjYWxscyB0byBgc3RybmNtcGAuIEJ5IHNob3J0LWNpcmN1aXRpbmcgd2hlbiB0aGVyZSdzIGEgcXVpY2sgZGlmZmVyZW5jZSAocHJlZml4IHN0YXR1cyBvciBsZW5ndGgpLCB0aGV5J3JlIGF2b2lkaW5nIHRoZSBtb3JlIGV4cGVuc2l2ZSBzdHJpbmcgY29tcGFyaXNvbiB3aGVuIGl0J3Mgbm90IG5lZWRlZC4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIGxhcmdlIHJ1bGUgc2V0cy4gSSdkIGxpa2UgdG8gZGlnIGludG8gKndoeSogdGhleSBjaG9zZSB0aGVzZSBwYXJ0aWN1bGFyIGNoZWNrcywgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzZW5zaWJsZSBvcHRpbWl6YXRpb24gdG8gbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDowMi4yNDQ0MTM4NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3MTE1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2hvb2tfbGlzdF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MDIuMzIwMTI5MTQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNzE2MjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBOZXRmaWx0ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgQVBJLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBhcmVhIHRvIGZvY3VzIG9uLiBOZXRmaWx0ZXIgaXMgYSBmdW5kYW1lbnRhbCBjb21wb25lbnQgb2YgdGhlIExpbnV4IGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBhbnkgdnVsbmVyYWJpbGl0aWVzIHRoZXJlIGFyZSBhIHNpZ25pZmljYW50IHJpc2suIFRoaXMgaXMgdGhlIHBlcmZlY3QgYXJlYSB0byBiZWdpbiBzb21lIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uIGZvciBmdXp6aW5nIHNob3VsZCBiZSBgbmZ0X2hvb2tfbGlzdF9maW5kYCAoc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBpdCwgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXR0YWNrIHN1cmZhY2UpLCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc2AsIGBuZnRfZmxvd3RhYmxlX3VwZGF0ZWAsIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvb2sgbWFuYWdlbWVudCBhbmQgY2hhaW4gdXBkYXRlcywgc28gdGhleSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHBvaW50cyBvZiBpbnRlcmFjdGlvbi5cblxuQmVmb3JlIGdldHRpbmcgdG9vIGZhciBkb3duIHRoYXQgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGVzZSBmZWF0dXJlcyBhbmQsIGNvbnNlcXVlbnRseSwgcHJvcGVybHkgc2V0dXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjA2Ljc0NzI5MzczNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgxNTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDowNi44MjMxMTI1ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU0MjEzNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGJhc2UgY29uZmlnIGlzIGRlZmluaXRlbHkgYE5GX1RBQkxFU2AsIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGFsc28gbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgZm9yIHRoaXMgcGF0Y2guIFRoZSBwYXRjaCB0b3VjaGVzIGBuZnRfaG9va19saXN0X2ZpbmRgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBzY3JlYW1zIFwibmV0ZGV2IGhvb2tzXCIuIFRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byBuZXRkZXYgaG9va3MgYnV0IEkndmUgZ290IHRvIGNoZWNrIHdoZXRoZXIgaXQncyBndWFyZGVkIGJ5IHRoZSBgTkZfVEFCTEVTX05FVERFVmAgb3B0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGUgZnVuY3Rpb24ncyBpbmNsdXNpb24gb3IgdXNlIGlzIGNvbmRpdGlvbmFsIG9uIHRoYXQgc3BlY2lmaWMgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG5mX3RhYmxlc19hcGkuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoxMS4zNzczMjkyMzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0OTM0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2hvb2tfbGlzdF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MTEuNDM0ODI2NjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2ODU5NDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYG5mdF9ob29rX2xpc3RfZmluZGAqKlxuXG5Pa2F5LCBzbyBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gR29vZC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBpdCdzIG5vdCBleHBvc2VkIGdsb2JhbGx5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBmdW5jdGlvbnMgdGhhdCAqZG8qIGNhbGwgaXQuIExldCdzIHNlZS4uLiB0aGUgY29kZSB0ZWxscyBtZSBpdCdzIHRoZXNlIG9uZXM6IGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc2AsIGBuZnRfZmxvd3RhYmxlX3VwZGF0ZWAsIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYC4gUmlnaHQsIHRob3NlIGFyZSBteSB0YXJnZXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aG9zZSBmdW5jdGlvbnMgaW4gZGV0YWlsIHRvIHNlZSAqdGhlaXIqIHN0YXRpYyBzdGF0dXMuIFRoYXQgd2lsbCBoZWxwIG1lIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgYW5kIHBpbnBvaW50IHRoZSB0cnVlIGNhbGwgZmxvdy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGV5IHRoZW1zZWx2ZXMgYXJlIHN0YXRpYywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTgsIk91dHB1dFRva2VucyI6ODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoxNi40MDM0MjM0NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTUxNjczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzfG5mX3RhYmxlc191cGRjaGFpbnxuZnRfZGVsY2hhaW5faG9va3xuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc3xuZnRfZmxvd3RhYmxlX3VwZGF0ZXxuZnRfZGVsZmxvd3RhYmxlX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ1Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDU4OnN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ1OS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzNC1cXHR9IGVsc2UgaWYgKHRiW05GVEFfSE9PS19ERVZTXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzU6XFx0XFx0ZXJyID0gbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhuZXQsIHRiW05GVEFfSE9PS19ERVZTXSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGhvb2tfbGlzdCwgZXh0YWNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDg9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yODkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI4OTQ6c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI4OTUtXFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzExMD1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIwMy1cXHRcXHRmbGFncyB8PSBjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fQkFTRTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjA0OlxcdFxcdHJldHVybiBuZl90YWJsZXNfdXBkY2hhaW4oXFx1MDAyNmN0eCwgZ2VubWFzaywgcG9saWN5LCBmbGFncywgYXR0cixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjA1LVxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMjc9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2RlbGhvb2tfYWJvcnQoc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMzc6c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyOTI9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNDUtXFx0XFx0XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzQ2OlxcdFxcdFxcdFxcdHJldHVybiBuZnRfZGVsY2hhaW5faG9vayhcXHUwMDI2Y3R4LCBiYXNlY2hhaW4sIGV4dGFjayk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0Ny1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODY5PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV9wYXJzZV9ob29rKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTIxLVxcdGlmICh0YltORlRBX0ZMT1dUQUJMRV9IT09LX0RFVlNdKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODkyMjpcXHRcXHRlcnIgPSBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKGN0eC1cXHUwMDNlbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5MjMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdGJbTkZUQV9GTE9XVEFCTEVfSE9PS19ERVZTXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMTI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX29wcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDMxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwMzI6c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTAzMy1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDg2PXN0YXRpYyB2b2lkIG5mdF9mbG93dGFibGVfdW5yZWdpc3Rlcl90cmFuc19ob29rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEwNDpzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMDUtXFx0XFx0XFx0XFx0c3RydWN0IG5mdF9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxNTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE1OTpcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhjdHgtXFx1MDAzZW5ldCwgY3R4LVxcdTAwM2V0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTYwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgZmxvd3RhYmxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxOTY9c3RhdGljIGludCBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MjM5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkyNDA6XFx0XFx0cmV0dXJuIG5mdF9mbG93dGFibGVfdXBkYXRlKFxcdTAwMjZjdHgsIGluZm8tXFx1MDAzZW5saCwgZmxvd3RhYmxlLCBleHRhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyNDEtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTMwMC1cXHQvKiBUaGlzIG11c3QgYmUgTEFTVCB0byBlbnN1cmUgbm8gcGFja2V0cyBhcmUgd2Fsa2luZyBvdmVyIHRoaXMgZmxvd3RhYmxlLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzMDE6XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3MoY3R4Lm5ldCwgdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTMwMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTMzMD1zdGF0aWMgdm9pZCBuZnRfZmxvd3RhYmxlX2hvb2tfcmVsZWFzZShzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZV9ob29rICpmbG93dGFibGVfaG9vaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzMzktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM0MDpzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNDEtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MzkyPXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQzNi1cXHRpZiAobmxhW05GVEFfRkxPV1RBQkxFX0hPT0tdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk0Mzc6XFx0XFx0cmV0dXJuIG5mdF9kZWxmbG93dGFibGVfaG9vayhcXHUwMDI2Y3R4LCBmbG93dGFibGUsIGV4dGFjayk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQzOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MTYuNTEyOTQ1Mzc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDE1ODg2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgVGFibGUgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGFsbCB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gd2hhdCBJICphbHJlYWR5KiBrbm93LCB0aGF0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgbW9kdWxlIGFyZSBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBkZWVwZXIsIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgKnRob3NlKiBlbnRyeSBwb2ludHMgYXJlIGFsc28sIGJ5IGRlc2lnbiwgZGVjbGFyZWQgYXMgc3RhdGljLiBMZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLCBpdCB3aWxsIHNhdmUgdGltZSBpbiB0aGUgbG9uZyBydW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjIsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoyMC4xNTQ1Mzc0MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTY2NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19uZXdjaGFpbnxuZl90YWJsZXNfZGVsY2hhaW58bmZfdGFibGVzX25ld2Zsb3d0YWJsZXxuZl90YWJsZXNfZGVsZmxvd3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMwOTI9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKm5mdF9jaGFpbl9sb29rdXBfYnlpZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTA5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMxMTA6c3RhdGljIGludCBuZl90YWJsZXNfbmV3Y2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTExLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMzc9c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjkyOnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI5My1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTk1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxOTY6c3RhdGljIGludCBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE5Ny1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MzQwPXN0YXRpYyBpbnQgbmZ0X2RlbGZsb3d0YWJsZV9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzkxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzOTI6c3RhdGljIGludCBuZl90YWJsZXNfZGVsZmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM5My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk1MS1cXHRbTkZUX01TR19ORVdDSEFJTl0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk1MjpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld2NoYWluLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NTMtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05OTYzLVxcdFtORlRfTVNHX0RFTENIQUlOXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTY0OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk2NS1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NjktXFx0W05GVF9NU0dfREVTVFJPWUNIQUlOXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTcwOlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk3MS1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDkzLVxcdFtORlRfTVNHX05FV0ZMT1dUQUJMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwOTQ6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19uZXdmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwOTUtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDEwNS1cXHRbTkZUX01TR19ERUxGTE9XVEFCTEVdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMTA2OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTA3LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX0JBVENILFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMTEtXFx0W05GVF9NU0dfREVTVFJPWUZMT1dUQUJMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAxMTI6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19kZWxmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMTMtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjIwLjIxODUwODM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODM1MDQ5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgVGFibGVzIEFQSSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTmV0ZmlsdGVyIFRhYmxlcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgY2FsbGJhY2tzIGluIGBuZl90YWJsZXNfY2JgIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydCwgYW5kIHRoYXQgdGhlIG1haW4gZW50cnkgcG9pbnQgbWlnaHQgYmUgc29tZXRoaW5nIGxpa2UgYG5mbmV0bGlua19yY3ZfbXNnYC4gQnV0IGFjdHVhbGx5LCB0aGlua2luZyBhYm91dCB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb25zLCBldmVuIHRob3VnaCBmdW5jdGlvbnMgbGlrZSBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYCBhcmUgKnN0YXRpYyosIHRoZXkncmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggbWVhbnMgdGhleSAqYXJlbid0KiBpbmxpbmVkLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1cywgYmVjYXVzZSB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdG9sZCBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBzaW5jZSB0aGUgY29tcGlsZXIncyBub3QgZ29pbmcgdG8gaW5saW5lIHRoZXNlIGR1ZSB0byBob3cgdGhleSBhcmUgdXNlZCwgdGhleSBmaXQgdGhlIGJpbGwuIE5vdywgaXMgdGhlcmUgYW55IGNoYW5jZSBmb3IgKm5vbiotc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9ucz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjI2LjUwMjAxNTk0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1ODQ1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY5PV9fcHJpbnRmKDIsIDMpIGludCBuZnRfcmVxdWVzdF9tb2R1bGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpmbXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZXF1ZXN0X21vZHVsZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNi0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE4MzI9dm9pZCBuZnRfcmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKmN0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0MS19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTg0MjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcmVnaXN0ZXJfY2hhaW5fdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xODQ0PXZvaWQgbmZ0X3VucmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKmN0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0OS19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTg1MDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9jaGFpbl90eXBlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xODUxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzM4Nz1pbnQgbmZ0X3JlZ2lzdGVyX2V4cHIoc3RydWN0IG5mdF9leHByX3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAxLX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozNDAyOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWdpc3Rlcl9leHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzQxMD12b2lkIG5mdF91bnJlZ2lzdGVyX2V4cHIoc3RydWN0IG5mdF9leHByX3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDE1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozNDE2OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX2V4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0MTctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04MDcwPWludCBuZnRfcmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA3OS19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODA4MDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcmVnaXN0ZXJfb2JqKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDgxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODA4OD12b2lkIG5mdF91bnJlZ2lzdGVyX29iaihzdHJ1Y3QgbmZ0X29iamVjdF90eXBlICpvYmpfdHlwZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwOTMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwOTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3VucmVnaXN0ZXJfb2JqKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDk1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODc1Mj12b2lkIG5mdF9vYmpfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzcwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NzcxOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9vYmpfbm90aWZ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzcyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODc4ND12b2lkIG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04Nzg5LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NzkwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04NzkyPXZvaWQgbmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlICp0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc5Ny19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODc5ODpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc5OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4MTA9c3RydWN0IG5mdF9mbG93dGFibGUgKm5mdF9mbG93dGFibGVfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MjMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg4MjQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3d0YWJsZV9sb29rdXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MjUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODgyNj12b2lkIG5mX3RhYmxlc19kZWFjdGl2YXRlX2Zsb3d0YWJsZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODg0MC19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODg0MTpFWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfZGVhY3RpdmF0ZV9mbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4NDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NzQyPXN0cnVjdCBuZl9ob29rX29wcyAqbmZ0X2hvb2tfZmluZF9vcHMoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc1Mi19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTc1MzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfaG9va19maW5kX29wcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc1NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NzU1PXN0cnVjdCBuZl9ob29rX29wcyAqbmZ0X2hvb2tfZmluZF9vcHNfcmN1KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vayxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NjUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk3NjY6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2hvb2tfZmluZF9vcHNfcmN1KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05NzY3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTAyODM9dm9pZCBuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjg4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDI4OTpFWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDI5MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNTM3PWludCBuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTQ4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU0OTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1NTAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1NTE9aW50IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTY2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU2NzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTY4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1ODE9aW50IG5mdF9wYXJzZV91MzJfY2hlY2soY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IG1heCwgdTMyICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1OTEtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV91MzJfY2hlY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTkzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE2MjQ9aW50IG5mdF9kdW1wX3JlZ2lzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhdHRyLCB1bnNpZ25lZCBpbnQgcmVnKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE2MzItfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjMzOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kdW1wX3JlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTYzNC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNjQ3PWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfbG9hZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE2NzgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjc5OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV9yZWdpc3Rlcl9sb2FkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTY4MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNzIzPWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNzQxLX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTc0MjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNzQzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE5MDg9aW50IG5mdF9kYXRhX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9kYXRhICpkYXRhLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE5MzktfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExOTQwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kYXRhX2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExOTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoyNi41NTk2MDgyODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3OTA4MzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRmaWx0ZXIgVGFibGUgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnV6emluZyB0aGUgbmV0ZmlsdGVyIHRhYmxlcyBjb2RlLiBUaGUgb2J2aW91cyBlbnRyeSBwb2ludHMgYXJlIHRob3NlIGBuZm5ldGxpbmtgIGNhbGxiYWNrcywgYnV0IGZvciB0aGlzIGZ1enppbmcgZXhlcmNpc2UsIEkgdGhpbmsgdGFyZ2V0aW5nIHRob3NlIGxhcmdlciwgbm9uLWlubGluZWQgZnVuY3Rpb25zIGxpa2UgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAgaXMgdGhlIHJpZ2h0IG1vdmUuIFRoZXkncmUgZ29pbmcgdG8gZ2l2ZSBtZSBtb3JlIHN1cmZhY2UgYXJlYSB0byB3b3JrIHdpdGguXG5cbldhaXQgYSBzZWNvbmQsIEkganVzdCBzYXcgdGhhdCBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMuIFRoYXQncyBmaW5lLCBidXQgc28gaXMgYG5mX3RhYmxlc19uZXdjaGFpbmAsIHNvIHRoYXQncyBub3QgYSBkaXNxdWFsaWZpZXIuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRob3NlIGNvcmUgZnVuY3Rpb25zIGFsb25nIHdpdGggYG5mX3RhYmxlc191cGRjaGFpbmAgbWFrZSBpdCBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuTm93LCBpcyBgTkZfVEFCTEVTYCB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIHdvcnJ5IGFib3V0PyBJIHN0cm9uZ2x5IHN1c3BlY3QgaXQgaXMsIGJ1dCBsZXQncyBkb3VibGUtY2hlY2suIEknbGwgcG9rZSBhcm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCB0byBsb29rIGZvciBhIGAjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDozMy45Mzg2OTQyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4NzMyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xNTQ3PXN0YXRpYyBib29sIG5mdF9zdXBwb3J0ZWRfZmFtaWx5KHU4IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NTgtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTU1OTojaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xNTYwLVxcdFxcdHx8IGZhbWlseSA9PSBORlBST1RPX05FVERFVlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDozNC4wMjI1NzE3NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzNjg4MDI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgTkZQUk9UT19ORVRERVZgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgTkZQUk9UT19ORVRERVZgIGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCB1cG9uIGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXZhaWxhYmlsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5JIHNlZSB0aGF0IGBuZnRfaG9va19saXN0X2ZpbmRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBuZXRkZXYgaG9va3MuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbmV0ZGV2IGludGVncmF0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayByZXZvbHZlcyBhcm91bmQgbGlzdCBtYW5pcHVsYXRpb24gZm9yIGhvb2sgbWFuYWdlbWVudC4gSSBzaG91bGQgbG9vayBpbnRvIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHRvIGNsYXJpZnkgdGhpcy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIG1vcmUgZ3JhbnVsYXIgYXNwZWN0cy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYG5mdF9jaGFpbl9wYXJzZV9uZXRkZXZgIHRvIHVuZGVyc3RhbmQgaG93IG5ldGRldi1zcGVjaWZpYyBjaGFpbnMgYXJlIHBhcnNlZCBhbmQgZGVmaW5lZC4gU2ltdWx0YW5lb3VzbHksIEkgd2FudCB0byBleHBsb3JlIGhvdyB0aGUgc3lzdGVtIHNldHMgdXAgYW5kIHJlZ2lzdGVycyB0aGUgbmVjZXNzYXJ5IG5ldGRldiBob29rcyB1c2luZyBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBsaWtlbHkgZ29pbmcgdG8gZXhwb3NlIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgYWxsIHRoaXMgbmV0ZGV2IGludGVncmF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzQ1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MzkuNjU5NDU0ODc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE3NjE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTI9c3RydWN0IG5mdF9jaGFpbl9ob29rIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUxOTpzdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTQ5PXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX2hvb2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMC1cXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGZhbWlseSwgaG9vay1cXHUwMDNlbnVtKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI2MzE6XFx0XFx0ZXJyID0gbmZ0X2NoYWluX3BhcnNlX25ldGRldihuZXQsIGhhLCBcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCwgZXh0YWNrLCBmbGFncyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDozOS43MjY2MzYxNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NzI5Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBOZXRmaWx0ZXIgYW5kIGVCUEYgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgKipcblxuQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgZ29pbmcgdG8gY2FsbCBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkLCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGlzOiBpcyB0aGlzIGNoYWluIGV2ZW4gYSBuZXRkZXYgY2hhaW4/IFRoYXQncyB0aGUgdmVyeSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwgaXMgY3J1Y2lhbC4gQW0gSSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCBmaWx0ZXIgY2hhaW4sIG9yIHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgdGllZCB0byBuZXR3b3JrIGRldmljZSBwcm9jZXNzaW5nPyAgVGhlIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgIGZ1bmN0aW9uIGlzIHRoZSBwb2ludCBvZiBpbnRlcmVzdC4gV2hhdCBkb2VzIHRoYXQgZnVuY3Rpb24gZG8/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTYzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6NDIuNzAzOTM1NjI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1OTA1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQyNT1zdGF0aWMgaW50IG5mX3RhYmxlc19yZWdpc3Rlcl9ob29rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDI6XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDMtXFx0XFx0cmV0dXJuIG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDQ4PXN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NjEtXFx0LyogbXVzdCBhbHNvIGJlIGNhbGxlZCBmb3IgZG9ybWFudCB0YWJsZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NjI6XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ2My1cXHRcXHRuZnRfbmV0ZGV2X3VucmVnaXN0ZXJfaG9va3MobmV0LCB0YWJsZSwgXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjA0Mj1zdGF0aWMgaW50IG5mdF9kdW1wX2Jhc2VjaGFpbl9ob29rKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjIwNjA6XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIG9wcy1cXHUwMDNlaG9va251bSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDYxLVxcdFxcdG5lc3RfZGV2cyA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIE5GVEFfSE9PS19ERVZTKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzNzEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM3MjpcXHRcXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KHRhYmxlLVxcdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cXHUwMDNlb3BzLmhvb2tudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM3My1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9vaywgbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1NDk9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjI5LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZob29rLVxcdTAwM2VsaXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNjMwOlxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYoZmFtaWx5LCBob29rLVxcdTAwM2VudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMS1cXHRcXHRlcnIgPSBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KG5ldCwgaGEsIFxcdTAwMjZob29rLVxcdTAwM2VsaXN0LCBleHRhY2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI2OTk9c3RhdGljIGludCBuZnRfYmFzZWNoYWluX2luaXQoc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sIHU4IGZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MDktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMDpcXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGZhbWlseSwgaG9vay1cXHUwMDNlbnVtKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTEtXFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCwgXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjkzMy1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTM0OlxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYoY3R4LVxcdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cXHUwMDNlb3BzLmhvb2tudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjkzNS1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaCwgbmV4dCwgXFx1MDAyNmhvb2subGlzdCwgbGlzdCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk5OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDAwOlxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXFx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9va251bSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMDAxLVxcdFxcdFxcdGVyciA9IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MoY3R4LVxcdTAwM2VuZXQsIFxcdTAwMjZob29rLmxpc3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI5Mj1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzQ1OlxcdFxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXFx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9va251bSkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0Ni1cXHRcXHRcXHRcXHRyZXR1cm4gbmZ0X2RlbGNoYWluX2hvb2soXFx1MDAyNmN0eCwgYmFzZWNoYWluLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDo0Mi44MTM1MzAwMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMDc4NjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGlzIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgIHRoaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBzdHJ1Y3R1cmUsIGl0cyBrZXkgbWVtYmVycywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgb3IgZmxhZ3MuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBnaXZlbiBpdHMgbmFtZSBzdWdnZXN0aW5nIGEgbmV0d29yayBkZXZpY2UgYXNzb2NpYXRpb24uIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IGhhbmRsaW5nIHNvbWUga2luZCBvZiBOZXRmaWx0ZXIgaG9vayBmb3IgdHJhZmZpYyB0cmF2ZXJzaW5nIG5ldHdvcmsgZGV2aWNlcywgYnV0IGEgcXVpY2sgaW5zcGVjdGlvbiBvZiB0aGUgZGVmaW5pdGlvbiB3aWxsIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGludGVyYWN0aW9ucyB3aXRoIGFueSBleGlzdGluZyBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZSBwcmVzZW5jZSBvZiBhbnkgbG9ja2luZyBtZWNoYW5pc21zLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgc3RydWN0dXJlICppcyogYmVmb3JlIEkgY2FuIGRldGVybWluZSB3aGF0IGl0ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDo0Ny4wMTQzMTkwOThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjYwMjY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfYmFzZV9jaGFpbl9uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD0xMzM2PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfdGFibGVfaXNfb3JwaGFuKGNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTEzNDEtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjEzNDI6c3RhdGljIGlubGluZSBib29sIG5mdF9iYXNlX2NoYWluX25ldGRldihpbnQgZmFtaWx5LCB1MzIgaG9va251bSlcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTM0My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjQ3LjEyMDkyOTExN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcxNzg2MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTkZUYWJsZXMgQ29yZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJhc2UgY2hhaW4gbmV0d29yayBkZXZpY2UgaW50ZWdyYXRpb24gd29ya3MgaW4gTkZUYWJsZXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYG5mdF9iYXNlX2NoYWluX25ldGRldmAgc3RydWN0dXJlIGRlZmluaXRpb24uIEknbGwgb3BlbiB1cCBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oYCDigJMgdGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgYnVpbGRpbmcgYmxvY2tzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZ3Jhc3BpbmcgdGhlIG5ldGRldi1yZWxhdGVkIGFzcGVjdHMgb2YgcnVsZSBwcm9jZXNzaW5nIGFuZCBob3cgdGhleSdyZSBjb25uZWN0ZWQgd2l0aGluIHRoZSBORlRhYmxlcyBmcmFtZXdvcmsuIEknbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhbmQgaG93IGl0J3MgbGlua2VkIHRvIHRoZSB0YWJsZXMgYW5kIGNoYWlucy4gS25vd2xlZGdlIG9mIHRoaXMgaXMgZXNzZW50aWFsIHRvIGRlYnVnZ2luZyBhbmQgdG8gd3JpdGluZyBvcHRpbWFsIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODgwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6NTAuNTkyNzE4MDY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGludCBmYW1pbHksIHUzMiBob29rbnVtKVxcbjEzNDM6XFx0e1xcbjEzNDQ6XFx0XFx0cmV0dXJuIGZhbWlseSA9PSBORlBST1RPX05FVERFViB8fFxcbjEzNDU6XFx0XFx0ICAgICAgIChmYW1pbHkgPT0gTkZQUk9UT19JTkVUIFxcdTAwMjZcXHUwMDI2IGhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKTtcXG4xMzQ2OlxcdH1cXG4xMzQ3OlxcdFxcbjEzNDg6XFx0dm9pZCBuZnRfcmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKik7XFxuMTM0OTpcXHR2b2lkIG5mdF91bnJlZ2lzdGVyX2NoYWluX3R5cGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbl90eXBlICopO1xcbjEzNTA6XFx0XFxuMTM1MTpcXHRpbnQgbmZ0X3JlZ2lzdGVyX2V4cHIoc3RydWN0IG5mdF9leHByX3R5cGUgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjUwLjU5Mjg3MzU1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODUzMDQzODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldGZpbHRlciBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbmV0d29yayBmaWx0ZXJpbmcsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSByZWxldmFudCBOZXRmaWx0ZXIgcHJvdG9jb2xzOiBgTkZQUk9UT19ORVRERVZgIGFuZCBgTkZQUk9UT19JTkVUYCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgTkZfSU5FVF9JTkdSRVNTYC4gR2l2ZW4gdGhhdCwgYE5GX1RBQkxFU19JTkVUYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgYmlnIHBpY3R1cmUuIFNpbmNlIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGF2YWlsYWJsZSwgSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIGBORl9UQUJMRVNfTkVUREVWYCBhcyB3ZWxsLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgYm90aC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcgYW5kIGNhbiBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhvc2UgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzA4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDo1NS40NDU5MjAzMThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjE5MDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTX05FVERFVnxjb25maWcgTkZfVEFCTEVTX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6NTUuOTI4MTE1OTU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Mjg1MjU0NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgbmZ0YWJsZXNgLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgYXJlIGJvdGggZGVzaXJhYmxlIHRvIGhhdmUgZW5hYmxlZCwgYW5kIG5hdHVyYWxseSwgd2UgbmVlZCBgTkZfVEFCTEVTYCBpdHNlbGYgYXMgYSBiYXNlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHNldHVwLiBBaCwgaGVyZSdzIGEgZGVwZW5kZW5jeTogYE5GX1RBQkxFU19JTkVUYCByZWxpZXMgb24gYElQVjZgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGEgcmVhc29uYWJsZSBkZXBlbmRlbmN5LiBDb25zZXF1ZW50bHksIGBJUFY2YCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHByb3Blcmx5IHV0aWxpemUgYE5GX1RBQkxFU19JTkVUYC4gQWxyaWdodCwgbm93IEkgd2lsbCBtb3ZlIG9uIHRvIGV4YW1pbmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9UQUJMRVNfTkVUREVWYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NToxMS4yMTMzNzMwMTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzI6XFx0Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuIDQ3MzpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gNDc0OlxcdFxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcbiA0NzU6XFx0XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XFxuIDQ3NjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDc3OlxcdFxcdGhlbHBcXG4gNDc4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG1peGVkIElQdjQvSVB2NiBcXFwiaW5ldFxcXCIgdGFibGUuXFxuIDQ3OTpcXHRcXG4gNDgwOlxcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxuIDQ4MTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXFxcIm5ldGRldlxcXCIgdGFibGUuXFxuIDQ4NDpcXHRcXG4gNDg1OlxcdGNvbmZpZyBORlRfTlVNR0VOXFxuIDQ4NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVxcXCJcXG4gNDg3OlxcdFxcdGhlbHBcXG4gNDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbnVtYmVyIGdlbmVyYXRvciBleHByZXNzaW9uIHVzZWQgdG8gcGVyZm9ybVxcbiA0ODk6XFx0XFx0ICBpbmNyZW1lbnRhbCBjb3VudGluZyBhbmQgcmFuZG9tIG51bWJlcnMgYm91bmQgdG8gYSB1cHBlciBsaW1pdC5cXG4gNDkwOlxcdFxcbiA0OTE6XFx0Y29uZmlnIE5GVF9DVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NToxMS4yMTM0OTYwMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1NzI3NzY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBOZXRmaWx0ZXIgVGFibGVzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBuZXRmaWx0ZXIgdGFibGVzIHN0dWZmLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZW5hYmxpbmcgYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfTkVUREVWYCwgYW5kIGBORl9UQUJMRVNfSU5FVGAsIHBsdXMgYElQVjZgLCBvZiBjb3Vyc2UuIE5vdywgYXJlIGBORl9UQUJMRVNfSVBWNGAgYW5kIGBORl9UQUJMRVNfSVBWNmAgbmVjZXNzYXJ5PyBBaCwgbm8sIGBORl9UQUJMRVNfSU5FVGAgc2VsZWN0cyB0aG9zZS4gUmlnaHQsIGtlZXAgaXQgY29uY2lzZTsgYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfTkVUREVWYCwgYE5GX1RBQkxFU19JTkVUYCwgYW5kIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGtleSB0byBtYW5hZ2luZyB0aGVzZSB0YWJsZXM/IEknZCBsaWtlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gVGhvc2Ugc2VlbSBjZW50cmFsIHRvIHRoZSBhY3R1YWwgdGFibGUgYW5kIGNoYWluIG1hbmlwdWxhdGlvbi5cblxuTGV0J3Mgc2Vl4oCmIEknbSBhbHNvIGxvb2tpbmcgYXQgYG5mdF9ob29rX2xpc3RfZmluZGAsIGJ1dCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIGNhbid0IHJlYWxseSBmb2N1cyBvbiBpdCBkaXJlY3RseSBpZiBpdCdzIGlubGluZWQuIEkgd29uZGVyIGlmIGl0ICppcyogaW5saW5lZD8gSXQncyBub3QgZXhwbGljaXRseSBtYXJrZWQgYXMgYGlubGluZWAsIGJ1dCB0aGF0IGRvZXNuJ3QgYWx3YXlzIHRlbGwgdGhlIHdob2xlIHN0b3J5LiBIbW0uLi5cblxuV2FpdCBhIG1pbnV0ZSwgYG5mX3RhYmxlc19uZXdjaGFpbmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQgd29ya3MuIExldCBtZSB0aGluayBtb3JlIGFib3V0IHRoYXQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhIGJpdCBhbmQgbG9vayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbWlnaHQgYmUgYSBiZXR0ZXIgc3RhcnRpbmcgcG9pbnQuIEFoLCBgbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rc2Agc2VlbXMgdG8gYmUgbm9uLXN0YXRpYy4gR29vZC4gSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMwMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjE3LjY3MDc3NjY5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODMwMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzExPXZvaWQgbmZfdGFibGVzX3VuYmluZF9jaGFpbihjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMxNS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMTY6c3RhdGljIGludCBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjU9c3RhdGljIGludCBuZl90YWJsZXNfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDItXFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDM6XFx0XFx0cmV0dXJuIG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzAwMC1cXHRcXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KHRhYmxlLVxcdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cXHUwMDNlb3BzLmhvb2tudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzAwMTpcXHRcXHRcXHRlcnIgPSBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKGN0eC1cXHUwMDNlbmV0LCBcXHUwMDI2aG9vay5saXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMDAyLVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NToxNy43NzI2MTU0NjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4OTI0NzE5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5ldGZpbHRlciBUYWJsZXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ29hbCBpcyB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZywgYW5kIEkgbmVlZCB0byBhdm9pZCBpbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgZm9jdXNpbmcgb24gc3RhdGljIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBuZXRsaW5rIGNhbGxiYWNrcywgYnV0IHRoZW4gSSByZWFsaXplZCB0aGF0IGBuZm5ldGxpbmtfcmN2X21zZ2AgaXMgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIGFsbCBuZXRmaWx0ZXIgbmV0bGluayBtZXNzYWdlcy4gSG93ZXZlciwgaXQgaXMgdG9vIGdlbmVyaWMuIEkgc3RhcnRlZCBjaGVja2luZyBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGlzIGFsbCBuZXRsaW5rLiBUaGVyZWZvcmUsIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYCBhcmUgcHJvbWlzaW5nLlxuXG5MZXQncyBjaGVjayBpZiBgbmZfdGFibGVzX3VwZGNoYWluYCBpcyBzdGF0aWMuLi4geWVzLCBpdCBpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSBvdGhlciBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgaGF2ZSBmb3VuZCBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AsIHdoaWNoIGlzIHN0YXRpYy4gSSB3aWxsIGxpc3QgdGhlIG5ldGxpbmsgY2FsbGJhY2tzLiBUaGV5IHdpbGwgZGVmaW5pdGVseSBub3QgYmUgaW5saW5lZCwgYmVjYXVzZSB0aGV5IGFyZSByZWZlcmVuY2VkIGluIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBkaWZmIHRvIHNlZSB3aHkgSSBzdGFydGVkIHRoaXMgaW52ZXN0aWdhdGlvbi4gQWgsIHJpZ2h0LCB0aGVyZSdzIGEgYnVnIGZpeCBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCByZWxhdGluZyB0byBtYXRjaGluZyBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSB0aGUgYnVnIGNhbiBjYXVzZSBpbmNvcnJlY3QgaG9vayBtYXRjaGluZy4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBiZWhhdmlvciB3aXRoIGNoYWluIG9yIGZsb3d0YWJsZSBhZGRpdGlvbiwgcmVtb3ZhbCwgb3IgdXBkYXRlLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGdvaW5nIHRvIGJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC5cblxuTm93LCBpcyBgbmZfdGFibGVzX3VwZGNoYWluYCBpbmxpbmVkPyBJdCdzIGNhbGxlZCBmcm9tIGBuZl90YWJsZXNfbmV3Y2hhaW5gIGFuZCBgbmZfdGFibGVzX2RlbGNoYWluYC4gR2l2ZW4gaXRzIHNpemUsIGl0J3MgKnByb2JhYmx5KiBub3QgaW5saW5lZC4gTGV0J3MgbWFrZSBzdXJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gIGlzIGluIGBuZl90YWJsZXNfYXBpLmNgLiBZZXAsIGl0IGlzLlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWdzIHRoYXQgYXJlIG5lZWRlZC4gSSBzZWUgYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfTkVUREVWYCwgYE5GX1RBQkxFU19JTkVUYCwgYW5kIGBJUFY2YC4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBgTkZfVEFCTEVTYCBkZXBlbmRzIG9uIGBORVRGSUxURVJgLCB3aGljaCBpcyBzdGFuZGFyZC4gYE5GX1RBQkxFU19ORVRERVZgIGRlcGVuZHMgb24gYE5GX1RBQkxFU2AsIGFuZCBgTkZfVEFCTEVTX0lORVRgIGRlcGVuZHMgb24gYElQVjZgIGFuZCBgTkZfVEFCTEVTYC4gU28sIGl0IGxvb2tzIGxpa2UgdGhlc2UgZm91ciBjb25maWdzIHNob3VsZCBiZSBlbm91Z2guXG5cbkZpbmFsbHksIEknbGwgcXVpY2tseSBjaGVjayBpZiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gbWFrZSBzdXJlLiBBbmQgdGhhdCBpcyB0aGUgc3VtbWFyeSBvZiB0aGUgcHJvY2VzcywgYW5kIHdoYXQgSSBiZWxpZXZlIGFyZSB0aGUgYmVzdCBjaG9pY2VzIGZvciBmdXp6IHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDUzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjMxLjY2NTA5MDQxNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3ODQzNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfaG9va19saXN0X2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDU6MzMuOTQzNTM3ODE3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MjAyMzA2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBuZl90YWJsZXNfYXBpLmNgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgY29kZWJhc2UuIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgdXNhZ2UgcmV2ZWFscyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSBlbXBsb3llZCB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoaXMgaXMgZ29vZCwgaXQgZ2l2ZXMgbWUgYSB2ZXJ5IGxpbWl0ZWQgc2NvcGUgdG8gZm9jdXMgb24uIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGlzIGxpbWl0ZWQgc2NvcGUgaXMgYSBnb29kIHRoaW5nOyBpdCBtZWFucyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgaXNzdWVzIGlzIHJlZHVjZWQuIEhvd2V2ZXIsIGEgbG9jYWxpemVkIGlzc3VlIGNvdWxkIGJlIGEgc2VyaW91cyBpc3N1ZSwgZ2l2ZW4gbmV0ZmlsdGVy4oCZcyBjb3JlIHJvbGUuXG5cbk5vdywgbXkgcGxhbiB0byBmb3JtYWxseSByZXBvcnQgdGhpcyBmaW5kaW5nIHRvIHRoZSB0ZWFtLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGdldCB0aGUgZnVsbCByZXBvcnQgZ2VuZXJhdGVkLiBJIHRoaW5rIGl04oCZcyBzbWFydCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhpcy4gSXTigJlsbCBhbGxvdyBtZSB0byBwcm9wZXJseSBhbmQgY29uc2lzdGVudGx5IGNvbW11bmljYXRlIHRoZXNlIGZpbmRpbmdzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlYW0uIFdlIHNob3VsZCBhbHNvIGxvb2sgaW50byBob3cgdG8gZ2V0IHRoaXMgYXV0b21hdGVkIHNvIHdlIGNhbiBwcmV2ZW50IHRoZXNlIHR5cGVzIG9mIHRoaW5ncyBpbiB0aGUgZnV0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIxNSwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NTo0Mi4zNjM3NzE0NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkwMzE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19uZXdjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX2RlbGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfdXBkY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19uZXdjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX2RlbGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfdXBkY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjQyLjUwNjY4MjI3NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NTQ2MDAzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NTo0Mi41MDcxNTI3ODVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTE4NTQxMjM3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGBzdHJuY21wYCB3aXRoIGBtaW4oaG9vay1cXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pYCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBob29rcyB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIG9yIHByZWZpeCBzdGF0dXMgKGUuZy4sIG1hdGNoaW5nIFxcXCJldGhcXFwiIHdpdGggXFxcImV0aDBcXFwiKS4gVGhlIGBuZnRfaG9va2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBhbmQgaXRzIGBpZm5hbWVgIGZpZWxkIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbmxhX3N0cnNjcHlgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBzdHJpbmcgY29tcGFyaXNvbiBsb2dpYyBidWcsIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTUzZDI1MGQ4NjE5ZDU0NDVlMWU0OTZkYTVjYWViOTYzYmZjYjgxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjQzOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTE5NzMsNyArMTk3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R1bXBfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9zdGF0cyBfX3BlcmNwdSAqc3RhdHMpXG4gXHRyZXR1cm4gLUVOT1NQQztcbiB9XG4gXG4tc3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoc3RydWN0IG5mdF9ob29rICpob29rKVxuK3N0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbiB7XG4gXHRyZXR1cm4gc3RybGVuKGhvb2stXHUwMDNlaWZuYW1lKSBcdTAwM2U9IGhvb2stXHUwMDNlaWZuYW1lbGVuO1xuIH1cbkBAIC0yNDQwLDggKzI0NDAsMTEgQEAgc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbiBcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4tXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbitcdFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsIGhvb2stXHUwMDNlaWZuYW1lbGVuKSkge1xuIFx0XHRcdGlmIChob29rLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjQyLjUwNzE1MzQ4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjUzMDA5MzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0J3MgY2hhbmdpbmcgYGhvb2tfaXNfcHJlZml4YCB0byB0YWtlIGEgYGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9va2AuIFRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgd2hlcmUgdGhleSdyZSBtb2RpZnlpbmcgdGhlIGNvbXBhcmlzb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSxcblx0XHRcdCAgICAgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbikpKSB7XG5gYGBcblxud2l0aCB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKGhvb2stXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXHUwMDNlaWZuYW1lbGVuKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG5gYGBcblxuQW5kIGl0J3MgYWxzbyBhZGRpbmcgYGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlgIGFzIGFuIGVhcmx5IGNoZWNrLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgcmlzayBoZXJlPyBgaG9vay1cdTAwM2VpZm5hbWVgIGFuZCBgdGhpcy1cdTAwM2VpZm5hbWVgIGFyZSBzdHJpbmdzLCBhbmQgYGhvb2stXHUwMDNlaWZuYW1lbGVuYCBhbmQgYHRoaXMtXHUwMDNlaWZuYW1lbGVuYCBhcmUgbGVuZ3Rocy4gVGhpcyBpcyBjbGVhcmx5IGZpeGluZyBhIGJ1ZyBiZWNhdXNlIHRoZSBwcmV2aW91cyBgbWluKClgIGNhbGwgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcHJlZml4IG1hdGNoaW5nIG9yIHNvbWV0aGluZywgYmFzZWQgb24gaG93IHRoZSBsZW5ndGhzIHdlcmUgYmVpbmcgY29tcGFyZWQuXG5cbkFoLCByaWdodCwgYGhvb2tfaXNfcHJlZml4YCBpcyB0aGUga2V5LiBJdCBjaGVja3MgaWYgYHN0cmxlbihob29rLVx1MDAzZWlmbmFtZSkgXHUwMDNlPSBob29rLVx1MDAzZWlmbmFtZWxlbmAuIFNvLCBgaG9vay1cdTAwM2VpZm5hbWVsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlICppbnRlcmZhY2UgbmFtZSogc3RyaW5nLCByaWdodD8gSWYgYGhvb2tfaXNfcHJlZml4KGhvb2spYCBpcyB0cnVlLCBpdCBtZWFucyB0aGUgYWN0dWFsIGludGVyZmFjZSBuYW1lIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGhvb2stXHUwMDNlaWZuYW1lbGVuYC4gSG1tLCBkb2VzIGBob29rLVx1MDAzZWlmbmFtZWxlbmAgcmVwcmVzZW50IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqd2l0aG91dCogYSB3aWxkY2FyZCBjaGFyYWN0ZXIgb3Igc29tZXRoaW5nP1xuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBob29rX2lzX3ByZWZpeGAgdG8gY29uZmlybS4uLiBZZXAsIGBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW5gLiBPa2F5LCBzbyBpZiBgaG9vay1cdTAwM2VpZm5hbWVgICp3ZXJlKiB1bmluaXRpYWxpemVkLCBgc3RybGVuYCBjb3VsZCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgd2FpdC4uLiBgaG9vay1cdTAwM2VpZm5hbWVgIGlzICphbHJlYWR5KiBiZWluZyByZWFkIGJ5IGJvdGggYHN0cm5jbXBgIGFuZCBgc3RybGVuYCAqd2l0aGluKiBgaG9va19pc19wcmVmaXhgIGl0c2VsZi4gU28sIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSwgd2UnZCBoYXZlIHNlZW4gaXQgZWFybGllci5cblxuU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBsb2dpYyBlcnJvciBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgbGlrZWx5IHJlbGF0aW5nIHRvIHByZWZpeCBtYXRjaGluZywgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSSBzaG91bGQgcHJvYmFibHkgc3RpbGwgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBhZmZlY3RlZCBsb2dpYyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpdHNlbGYsIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjU1LjAzNzI1MTE0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1ODU0OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2hvb2tfbGlzdF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDU6NTUuMTIyODQzNjA5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MDc3ODIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIb29rIE1hdGNoaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRpZ2h0ZW5pbmcgdXAgdGhlIGxvZ2ljIGZvciBob3cgd2UgZmluZCBob29rcyBpbiB0aGlzIGxpc3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gYHN0cm5jbXBgIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMsIGVzcGVjaWFsbHkgaW4gcHJlZml4IHNjZW5hcmlvcy5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLi4uIEkgc2VlIHRoZSBvcmlnaW5hbCBpc3N1ZTogVGhlIGBtaW5gIGZ1bmN0aW9uIGNhbGwgaW4gdGhlIGBzdHJuY21wYCBjb21wYXJpc29uIHdhcyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCBtYXRjaGVzLiBJZiBhIGhvb2sncyBpbnRlcmZhY2UgbmFtZSwgbGV0J3Mgc2F5IFwiZXRoLFwiIGhhZCBhIGxlbmd0aCBvZiAzIChgaG9vay1cdTAwM2VpZm5hbWVsZW5gKSwgYW5kIHRoZSBpbnRlcmZhY2Ugd2UncmUgY2hlY2tpbmcgYWdhaW5zdCwgXCJldGgwLFwiIGhhZCBhIGxlbmd0aCBvZiA0IChgdGhpcy1cdTAwM2VpZm5hbWVsZW5gKSwgdGhlbiBgbWluYCB3b3VsZCByZXN1bHQgaW4gMy4gVGhpcyBtZWFudCBgc3RybmNtcChcImV0aFwiLCBcImV0aDBcIiwgMylgIHdhcyByZXR1cm5pbmcgYSBtYXRjaCAoMCksIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRpZmZlcmVudC4gVGhpcyBtZWFudCBcImV0aDBcIiB3YXMgbWF0Y2hpbmcgXCJldGhcIiwgd2hpY2ggaXMgaW5jb3JyZWN0LCB1bmxlc3MgXCJldGhcIiB3YXMgaW50ZW5kZWQgYXMgYSBwcmVmaXguXG5cbk5vdywgaG9sZCBvbi4uLiB0aGUgY29kZSB0aGVuIGNoZWNrcyBgaG9va19pc19wcmVmaXhgLiBUaGF0IG1ha2VzIHNlbnNlLiBJZiBgaG9va19pc19wcmVmaXhgIGlzIHRydWUsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgcHJlZml4IG1hdGNoIChsaWtlIFwiZXRoKlwiKS4gVGhlbiBJIGxvb2sgYXQgdGhlIGxvZ2ljIGluc2lkZSBgaG9va19pc19wcmVmaXhgLCB3aGljaCBpcyBiYXNlZCBvbiBgc3RybGVuKGhvb2stXHUwMDNlaWZuYW1lKSBcdTAwM2U9IGhvb2stXHUwMDNlaWZuYW1lbGVuYC4gU28gaWYgYGhvb2stXHUwMDNlaWZuYW1lYCBpcyBcImV0aCpcIiwgYHN0cmxlbmAgaXMgNC4gQnV0IGBob29rLVx1MDAzZWlmbmFtZWxlbmAgbWlnaHQgYmUgMyAobGVuZ3RoIG9mIFwiZXRoXCIpLiBTbywgYGhvb2tfaXNfcHJlZml4YCB3b3VsZCBldmFsdWF0ZSB0byB0cnVlLlxuXG5BaCwgc28gaWYgdGhlIGhvb2sgaXMgYSBwcmVmaXggbWF0Y2guLi53YWl0LCBpcyB0aGF0IHJlYWxseSByaWdodD8gTGV0IG1lIHZlcmlmeSBpZiBgaG9va19pc19wcmVmaXhgIGlzIHVzaW5nIGEgY29ycmVjdCBjb25kaXRpb24uXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGlzLiBUaGUgbmV3IGNvZGUgZG9lcyB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKGhvb2stXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXHUwMDNlaWZuYW1lbGVuKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG5gYGBcblxuU28gZmlyc3QsIGlmIG9uZSBpcyBwcmVmaXggYW5kIHRoZSBvdGhlciBpc24ndCwgYGNvbnRpbnVlYC4gSXQgY2hlY2tzIHRoYXQgYm90aCBoYXZlIHRoZSBzYW1lIHByZWZpeCBzdGF0dXMgKGVpdGhlciBib3RoIHByZWZpeGVzIG9yIGJvdGggZXhhY3QgbWF0Y2hlcykuIFRoZW4sIGl0IGNoZWNrcyB0aGF0IHRoZWlyIGxlbmd0aHMgYXJlIHRoZSBzYW1lLiBGaW5hbGx5LCBpdCB1c2VzIGBzdHJuY21wYCwgYnV0IG9ubHkgaWYgZXZlcnl0aGluZyBlbHNlIG1hdGNoZXMuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeC5cblxuVGhpcyBwcmV2ZW50cyB0aGUgaW5jb3JyZWN0IG1hdGNoaW5nIG9mIGFuIGV4YWN0IG1hdGNoIChlLmcuIFwiZXRoMFwiKSB3aXRoIGEgcHJlZml4IG1hdGNoIChlLmcuIFwiZXRoXCIpLiBJdCBhbHNvIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSB0d28gZXhhY3QgbWF0Y2hlcyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBjb3VsZCBtYXRjaCBpZiBvbmUgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyIChlLmcuIFwiZXRoXCIgYW5kIFwiZXRoMFwiKS4gTm93LCBhbiBleGFjdCBtYXRjaCB3b3VsZCByZXF1aXJlIGBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpID09IGhvb2stXHUwMDNlaWZuYW1lbGVuYCwgbWVhbmluZyBgaG9va19pc19wcmVmaXhgIHNob3VsZCBhbHNvIGFsd2F5cyByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbiBleGFjdCBtYXRjaC5cblxuTGV0IG1lIGdvIGxvb2sgYXQgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBgaG9va19pc19wcmVmaXhgIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MDQuODMwNjI4MjA3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODIzNDg4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG9va19pc19wcmVmaXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTkzNz1zdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk3NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTc2OnN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE5ODE9c3RhdGljIGludCBuZnRfbmxhX3B1dF9ob29rX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk4Mi17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk4MzpcXHRpbnQgYXR0ciA9IGhvb2tfaXNfcHJlZml4KGhvb2spID8gTkZUQV9ERVZJQ0VfUFJFRklYIDogTkZUQV9ERVZJQ0VfTkFNRTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTg0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjA0Mj1zdGF0aWMgaW50IG5mdF9kdW1wX2Jhc2VjaGFpbl9ob29rKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDc5LVxcdFxcdGlmIChkdW1wX2hvb2tfY3R4Lm4gPT0gMSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjIwODA6XFx0XFx0ICAgICFob29rX2lzX3ByZWZpeChkdW1wX2hvb2tfY3R4LmZpcnN0KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwODEtXFx0XFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZUQV9IT09LX0RFViwgZHVtcF9ob29rX2N0eC5maXJzdC1cXHUwMDNlaWZuYW1lKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI0Mzc9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDItXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQzOlxcdFxcdGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ0LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NjowNS40MTI5ODU2OTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyODMwNDY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFByZWZpeCBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbi4uLiByaWdodCwgaXQncyBjaGVja2luZyBpZiB0aGUgaW50ZXJmYWNlIG5hbWUgKGBob29rLVx1MDAzZWlmbmFtZWApIGhhcyBhIHByZWZpeCB0aGF0J3MgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIHNwZWNpZmllZCBieSBgaG9vay1cdTAwM2VpZm5hbWVsZW5gLiBMZXQncyBicmVhayB0aGlzIGRvd24uIElmIGBob29rLVx1MDAzZWlmbmFtZWAgaXMgXCJldGgwXCIsIHRoZSBgc3RybGVuYCBvZiB0aGF0IHN0cmluZyBpcyBnb2luZyB0byBiZSA0LiBOb3csIGlmIGBob29rLVx1MDAzZWlmbmFtZWxlbmAgaXMgKmFsc28qIDQsIHRoZSBjb25kaXRpb24gYHN0cmxlbiBcdTAwM2U9IGlmbmFtZWxlbmAgaXMgZ29pbmcgdG8gZXZhbHVhdGUgdG8gdHJ1ZS4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgaG93IGBpZm5hbWVsZW5gIGlzICphY3R1YWxseSogc2V0LiBJJ20gYXNzdW1pbmcgaXQgcmVwcmVzZW50cyB0aGUgbGVuZ3RoIG9mIHRoZSBwcmVmaXggc3RyaW5nLCBhbmQgYGlmbmFtZWAgaXMgdGhlIHByZWZpeCBzdHJpbmcgaXRzZWxmLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYW5kIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGJlaGF2aW9ycyBpbiB0aGUgY29kZS4gTGV0J3MgdHJhY2UgYmFjayBob3cgYGlmbmFtZWxlbmAgaXMgZ2V0dGluZyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MDkuODQxMjkzNjk1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk1OTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZm5hbWVsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTk3Nj1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk3Ny17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk3ODpcXHRyZXR1cm4gc3RybGVuKGhvb2stXFx1MDAzZWlmbmFtZSkgXFx1MDAzZT0gaG9vay1cXHUwMDNlaWZuYW1lbGVuO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5NzktfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM5Mj1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxMS1cXHQvKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyBOVUwtY2hhciB3aGVuIGNvbXBhcmluZyBub24tcHJlZml4ZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDEyOlxcdGhvb2stXFx1MDAzZWlmbmFtZWxlbiA9IHN0cmxlbihob29rLVxcdTAwM2VpZm5hbWUpICsgIXByZWZpeDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDEzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxOC1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDE5OlxcdFxcdGlmIChzdHJuY21wKGRldi1cXHUwMDNlbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lLCBob29rLVxcdTAwM2VpZm5hbWVsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MjAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDM3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0NDU6XFx0XFx0aWYgKGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQ3OlxcdFxcdGlmICghc3RybmNtcChob29rLVxcdTAwM2VpZm5hbWUsIHRoaXMtXFx1MDAzZWlmbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDgtXFx0XFx0XFx0aWYgKGhvb2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTc2OD1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NzYtXFx0XFx0b3BzID0gbmZ0X2hvb2tfZmluZF9vcHMoaG9vaywgZGV2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5Nzc3OlxcdFxcdG1hdGNoID0gIXN0cm5jbXAoaG9vay1cXHUwMDNlaWZuYW1lLCBkZXYtXFx1MDAzZW5hbWUsIGhvb2stXFx1MDAzZWlmbmFtZWxlbik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MDkuOTIxMjU5MzM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NzgzNDY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdHJpbmcgQ29tcGFyaXNvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgaG9vay1cdTAwM2VpZm5hbWVsZW4gPSBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpICsgIXByZWZpeDtgIGxpbmUuLi4gUmlnaHQsIGlmIGl0J3MgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuIElmIGl0J3MgKm5vdCogYSBwcmVmaXgsIHdlIGFkZCAxLiBTbywgdGhlIGNydWNpYWwgY2hlY2ssIGBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW5gLCBiZWNvbWVzIGEgbmVhdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYSBwcmVmaXguIElmIGl0ICppcyogYSBwcmVmaXgsIGl0J3MgYHN0cmxlbiBcdTAwM2U9IHN0cmxlbmAgd2hpY2ggaXMgdHJ1ZSwgYW5kIGlmIGl0J3MgKm5vdCogYSBwcmVmaXgsIGl0J3MgYHN0cmxlbiBcdTAwM2U9IHN0cmxlbiArIDFgIHdoaWNoIGlzIGZhbHNlLiBUaGF0IHBhcnQgc2VlbXMgc291bmQuIEdvb2QuIGBob29rX2lzX3ByZWZpeGAgd29ya3MgYXMgZXhwZWN0ZWQuXG5cbk5vdywgdGhlIHByb2JsZW0uIEl0J3MgaW4gYG5mdF9ob29rX2xpc3RfZmluZGA6XG5cbmBgYGNcblx0XHRpZiAoIXN0cm5jbXAoaG9vay1cdTAwM2VpZm5hbWUsIHRoaXMtXHUwMDNlaWZuYW1lLFxuXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbmBgYFxuXG5UaGUgaXNzdWUgaXMgY2xlYXIuIExldCdzIGltYWdpbmUgYSBzY2VuYXJpbzogYGhvb2tgIGlzIFwiZXRoXCIgKGEgcHJlZml4LCBzbyBgaWZuYW1lbGVuYCBpcyAzKSBhbmQgYHRoaXNgIGlzIFwiZXRoMFwiIChub3QgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIDUpLiBUaGUgYG1pbigzLCA1KWAgZ2l2ZXMgdXMgMy4gU28sIHdlJ3JlIGRvaW5nIGBzdHJuY21wKFwiZXRoXCIsIFwiZXRoMFwiLCAzKWAuIFRoYXQgcmV0dXJucyAwIGJlY2F1c2UgdGhlIGZpcnN0IHRocmVlIGNoYXJhY3RlcnMgbWF0Y2guICoqQnV0IHRoZXkgc2hvdWxkbid0IG1hdGNoISoqIFwiZXRoXCIgaXMgYSBwcmVmaXg7IFwiZXRoMFwiIGlzIG5vdC4gVGhlIHByZWZpeGVzIHNob3VsZCBiZSBjaGVja2VkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29tcGFyaXNvbiBkb2Vzbid0IGlkZW50aWZ5IFwiZXRoXCIgYW5kIFwiZXRoMFwiIGFzIGEgbWF0Y2guIFRoaXMgaXMgYSBzdWJ0bGUgbG9naWMgYnVnLlxuXG5Eb2VzIHRoaXMgYnVnIHN0ZW0gZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEl0J3MganVzdCBhIGZsYXdlZCBzdHJpbmcgY29tcGFyaXNvbi4gQ291bGQgdGhlIGludGVyZmFjZSBuYW1lIGl0c2VsZiBiZSB1bmluaXRpYWxpemVkPyBObywgYmVjYXVzZSBJJ20gYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYG5mdF9uZXRkZXZfaG9va19hbGxvY2AuIEJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBhbGxvY2F0aW9uIGZ1bmN0aW9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MTcuNzk5NjA4OTI2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMDYzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X25ldGRldl9ob29rX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzOTEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM5MjpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzOTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI0NTg9c3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4MTpcXHRcXHRob29rID0gbmZ0X25ldGRldl9ob29rX2FsbG9jKG5ldCwgdG1wLCBwcmVmaXgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODItXFx0XFx0aWYgKElTX0VSUihob29rKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUyNi1cXHRpZiAodGJbTkZUQV9IT09LX0RFVl0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNTI3OlxcdFxcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0YltORlRBX0hPT0tfREVWXSwgZmFsc2UpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MjgtXFx0XFx0aWYgKElTX0VSUihob29rKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NjoxNy45MTg4MjIzMDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MTMwMTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG5mdF9uZXRkZXZfaG9va19hbGxvY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IGl0cyBjb3JlIHB1cnBvc2Ugd2l0aGluIHRoZSBOZXRmaWx0ZXIgZWNvc3lzdGVtLiBLbm93aW5nIGhvdyB0aGVzZSBob29rcyBhcmUgc3RydWN0dXJlZCBpcyBjcml0aWNhbDsgdGhleSBhcmUgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgcGFja2V0IGZpbHRlcmluZyBhbmQgbWFuaXB1bGF0aW9uLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbGxvY2F0aW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIE5ldGZpbHRlciBob29rIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24uXG5cbkknZCBhbnRpY2lwYXRlIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBpbml0aWFsaXppbmcgc29tZSBjcnVjaWFsIGludGVybmFsIGRhdGEsIGFuZCBwZXJoYXBzIGxpbmtpbmcgdGhpcyBuZXcgaG9vayBpbnRvIHRoZSBhcHByb3ByaWF0ZSBOZXRmaWx0ZXIgY2hhaW4gZm9yIG5ldHdvcmsgZGV2aWNlIGV2ZW50cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGxheWVyIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhpbmdzIGxpa2UgdGhlIGRldmljZSBkcml2ZXJzIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjaydzIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gY29ubmVjdGluZyBOZXRmaWx0ZXIncyBmaWx0ZXJpbmcgcnVsZXMgdG8gdGhlIHBoeXNpY2FsIGRldmljZXMuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG93LWxldmVsIGFsbG9jYXRpb24gYW5kIHNldHVwIHRoYXQgc3Vic2VxdWVudCBmdW5jdGlvbnMgd2lsbCBkZXBlbmQgb24uXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgbWV0YWRhdGEgb3Igc3RhdGUgaXQgbWFpbnRhaW5zIHRvIHRyYWNrIHRoZSBob29rLCB3aGljaCBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIGRlYnVnZ2luZyBhbmQgb3B0aW1pemluZyBuZXR3b3JrIHRyYWZmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NjoyMS44OTAxMjczN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM5MixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM5MjpcXHRzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbjIzOTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4yMzk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgcHJlZml4KVxcbjIzOTU6XFx0e1xcbjIzOTY6XFx0XFx0c3RydWN0IG5mX2hvb2tfb3BzICpvcHM7XFxuMjM5NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjIzOTg6XFx0XFx0c3RydWN0IG5mdF9ob29rICpob29rO1xcbjIzOTk6XFx0XFx0aW50IGVycjtcXG4yNDAwOlxcdFxcbjI0MDE6XFx0XFx0aG9vayA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZnRfaG9vaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4yNDAyOlxcdFxcdGlmICghaG9vaylcXG4yNDAzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjI0MDQ6XFx0XFxuMjQwNTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aG9vay1cXHUwMDNlb3BzX2xpc3QpO1xcbjI0MDY6XFx0XFxuMjQwNzpcXHRcXHRlcnIgPSBubGFfc3Ryc2NweShob29rLVxcdTAwM2VpZm5hbWUsIGF0dHIsIElGTkFNU0laKTtcXG4yNDA4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI0MDk6XFx0XFx0XFx0Z290byBlcnJfaG9va19mcmVlO1xcbjI0MTA6XFx0XFxuMjQxMTpcXHRcXHQvKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyBOVUwtY2hhciB3aGVuIGNvbXBhcmluZyBub24tcHJlZml4ZXMgKi9cXG4yNDEyOlxcdFxcdGhvb2stXFx1MDAzZWlmbmFtZWxlbiA9IHN0cmxlbihob29rLVxcdTAwM2VpZm5hbWUpICsgIXByZWZpeDtcXG4yNDEzOlxcdFxcbjI0MTQ6XFx0XFx0LyogbmZfdGFibGVzX25ldGRldl9ldmVudCgpIGlzIGNhbGxlZCB1bmRlciBydG5sX211dGV4LCB0aGlzIGlzXFxuMjQxNTpcXHRcXHQgKiBpbmRpcmVjdGx5IHNlcmlhbGl6aW5nIGFsbCB0aGUgb3RoZXIgaG9sZGVycyBvZiB0aGUgY29tbWl0X211dGV4IHdpdGhcXG4yNDE2OlxcdFxcdCAqIHRoZSBydG5sX211dGV4LlxcbjI0MTc6XFx0XFx0ICovXFxuMjQxODpcXHRcXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG4yNDE5OlxcdFxcdFxcdGlmIChzdHJuY21wKGRldi1cXHUwMDNlbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lLCBob29rLVxcdTAwM2VpZm5hbWVsZW4pKVxcbjI0MjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjQyMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MjEuODkwNTY4ODZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2MDk1OTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgdGhhdCB0aGUgbWVtb3J5IGZvciB0aGUgYGhvb2tgIHN0cnVjdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gYGt6YWxsb2Nfb2JqYCB0YWtlcyBjYXJlIG9mIHRoZSB6ZXJvaW5nLCBhbmQgdGhlbiBgbmxhX3N0cnNjcHlgIGhhbmRsZXMgdGhlIHN0cmluZyBjb3B5IGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlLiBJJ3ZlIGdvdCBgaG9vay1cdTAwM2VpZm5hbWVsZW5gIHNldCBiYXNlZCBvbiBgc3RybGVuYC4gVGhlcmUncyBubyB3YXkgdGhpcyBpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gVGhlIGNvZGUgaXMgc2FmZSBpbiB0aGF0IHJlc3BlY3QuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB0aGlzIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIGBuZnRfaG9va19saXN0X2ZpbmRgLiBJdCdzIG1hdGNoaW5nIGhvb2tzIGluY29ycmVjdGx5IGR1ZSB0byBsZW5ndGggb3IgcHJlZml4IHN0YXR1cyBkaXNjcmVwYW5jaWVzLiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBmYWlsaW5nIGhvb2sgYWRkaXRpb25zIGJlY2F1c2UgYSBcImR1cGxpY2F0ZVwiIGlzIGZvdW5kIHdoZW4gaXQncyBub3QsIG9yIGRlbGV0aW5nIHRoZSB3cm9uZyBob29rIGFsdG9nZXRoZXIuIEl0J3MgZGVmaW5pdGVseSBhIGxvZ2ljIGVycm9yLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIGxpa2UgYW4gdW5pbml0aWFsaXplZCByZWFkLlxuXG5JIHRob3VnaHQgZm9yIGEgc2Vjb25kIHRoYXQgdGhpcyBtaWdodCBiZSBzb21ldGhpbmcgS01TQU4gY291bGQgZmxhZywgYnV0IG5vLiBFdmVuIGlmIEtNU0FOICp3ZXJlKiBydW5uaW5nLCBpdCB3b3VsZG4ndCBkZXRlY3QgYSBsb2dpYyBidWcgbGlrZSB0aGlzIGJlY2F1c2UgaXQncyBsb29raW5nIGZvciAqdW5pbml0aWFsaXplZCogcmVhZHMsIHdoaWNoIGFyZW4ndCBwcmVzZW50IGhlcmUuIGBob29rLVx1MDAzZWlmbmFtZWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG5sYV9zdHJzY3B5YCBhbmQgemVyb2VkIG91dCBieSBga3phbGxvY19vYmpgLCBzbyB0aGVyZSdzIG5vIHdheSB0aGUgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4uXG5cbkknbSBjb25maWRlbnQgd2UndmUgcnVsZWQgb3V0IG1lbW9yeSBpc3N1ZXMgaGVyZS4gVGhlIGZpeCBzZWVtcyBmb2N1c2VkIG9uIGNvcnJlY3RpbmcgdGhlIGBuZnRfaG9va19saXN0X2ZpbmRgIGxvZ2ljIHRvIGVuc3VyZSBjb3JyZWN0IGhvb2sgbWF0Y2hpbmcuIEhvd2V2ZXIsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIHRoaXMgcGF0Y2ggdG8ga2VlcCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MjcuODUxNTMxNTk4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3MzM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJob29rX2lzX3ByZWZpeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTM3PXN0YXRpYyBpbnQgbmZ0X2R1bXBfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9zdGF0cyBfX3BlcmNwdSAqc3RhdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE5NzY6c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5Nzcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTk4MT1zdGF0aWMgaW50IG5mdF9ubGFfcHV0X2hvb2tfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfaG9vayAqaG9vaylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTgyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTgzOlxcdGludCBhdHRyID0gaG9va19pc19wcmVmaXgoaG9vaykgPyBORlRBX0RFVklDRV9QUkVGSVggOiBORlRBX0RFVklDRV9OQU1FO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5ODQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMDQyPXN0YXRpYyBpbnQgbmZ0X2R1bXBfYmFzZWNoYWluX2hvb2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwNzktXFx0XFx0aWYgKGR1bXBfaG9va19jdHgubiA9PSAxIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjA4MDpcXHRcXHQgICAgIWhvb2tfaXNfcHJlZml4KGR1bXBfaG9va19jdHguZmlyc3QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjA4MS1cXHRcXHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlRBX0hPT0tfREVWLCBkdW1wX2hvb2tfY3R4LmZpcnN0LVxcdTAwM2VpZm5hbWUpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0Mi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0NDM6XFx0XFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDQtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ2OjI3LjkyMjkxMDYxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MzgzMzY0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gQ29uY2VybnMgSGVyZSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlLiBCYXNpY2FsbHksIGFsbCB0aGlzIGRvZXMgaXMgdHdlYWsgYGhvb2tfaXNfcHJlZml4YCB0byBhY2NlcHQgYSBgY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rYCBhbmQgdXBkYXRlcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byB1c2UgdGhhdC4gTm90aGluZyBmYW5jeSwganVzdCBhIGJpdCBvZiByZWZhY3RvcmluZywgYW5kIGl0J3MgZml4aW5nIGEgbG9naWMgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgLiBTcGVjaWZpY2FsbHksIHRoYXQgYHN0cm5jbXBgIGNhbGwsIHVzaW5nIGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAsIGhhZCB0aGUgcG90ZW50aWFsIHRvIGdpdmUgaW5jb3JyZWN0IG1hdGNoZXMgd2hlbiBpbnRlcmZhY2UgbmFtZXMgd2VyZSBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXhlcyDigJMgbm90IGdvb2QuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHRoZXJlJ3MgYWJzb2x1dGVseSBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgbmZ0X2hvb2tgIHN0cnVjdHMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggKmd1YXJhbnRlZXMqIHplcm9lZCBtZW1vcnkuIEFsc28sIHRoZSBpbnRlcmZhY2UgbmFtZSBpdHNlbGYgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgYG5sYV9zdHJzY3B5YC4gSSd2ZSBnb25lIG92ZXIgdGhlIGNvZGUgYW5kIGNhbiBjb25maWRlbnRseSBzYXkgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBubyBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb2YgcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhLCBhbmQgbm8gY29udHJvbCBmbG93IGRlY2lzaW9ucyBiZWluZyBtYWRlIGJhc2VkIG9uIHNvbWV0aGluZyB0aGF0IGhhc24ndCBiZWVuIHNldC5cblxuU28sIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1c2VkLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuIEknbSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFuZCB3aWxsIGluY2x1ZGUgdGhpcyByZWFzb25pbmcgaW4gdGhlIGNvbW1pdC4gSXTigJlzIGEgY2xlYW4gZml4IHdpdGggbm8gS01TQU4tcmVsYXRlZCBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MDksIk91dHB1dFRva2VucyI6MTczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ2OjM0LjM2MTI1MDAwOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGhvb2tzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4IHN0YXR1cyAoZS5nLiwgbWF0Y2hpbmcgXFxcImV0aFxcXCIgd2l0aCBcXFwiZXRoMFxcXCIpLiBUaGUgYG5mdF9ob29rYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGFuZCBpdHMgYGlmbmFtZWAgZmllbGQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBubGFfc3Ryc2NweWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGlzc3VlIGlzIHB1cmVseSBhIHN0cmluZyBjb21wYXJpc29uIGxvZ2ljIGJ1Zywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3Mgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXggc3RhdHVzIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoXFxcIiB3aXRoIFxcXCJldGgwXFxcIikuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzddjx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 11:25:49 +0000 UTC FinishedAt: 2026-08-18 11:46:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e80456d79ec83b00a6bd44c377684b1632ccc3c7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV", "NF_TABLES_INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e80456d79ec83b00a6bd44c377684b1632ccc3c7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV", "NF_TABLES_INET", "IPV6" ], "series_id": "ae561d16-016a-45c0-bdaf-5dc647fd2df3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_newchain", "nf_tables_delchain", "nf_tables_updchain", "nf_tables_newflowtable", "nf_tables_delflowtable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3Y2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbGNoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc191cGRjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGhvb2tzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4IHN0YXR1cyAoZS5nLiwgbWF0Y2hpbmcgXCYjMzQ7ZXRoXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMFwmIzM0OykuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NTNkMjUwZDg2MTlkNTQ0NWUxZTQ5NmRhNWNhZWI5NjNiZmNiODEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTE6NDM6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTE5NzMsNyAmIzQzOzE5NzMsNyBAQCBzdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKVxuIFx0cmV0dXJuIC1FTk9TUEM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbiYjNDM7c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxuIHtcbiBcdHJldHVybiBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW47XG4gfVxuQEAgLTI0NDAsOCAmIzQzOzI0NDAsMTEgQEAgc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbiBcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4tXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbiYjNDM7XHRcdGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG4gXHRcdFx0aWYgKGhvb2stXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9IT09LX1JFTU9WRSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld2NoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfdXBkY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld2Zsb3d0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIG1hdGNoaW5nIGxvZ2ljIGZvciBuZXRkZXYgaG9va3MgaW4gbmZfdGFibGVzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBwYXJzaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgbmV0ZGV2IGhvb2tzIGZvciBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaG9vayBtYXRjaGluZyBhbmQgc3Vic2VxdWVudCBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1M2QyNTBkODYxOWQ1NDQ1ZTFlNDk2ZGE1Y2FlYjk2M2JmY2I4MTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxMTo0Mzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTE5NzMsNyAmIzQzOzE5NzMsNyBAQCBzdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKQogCXJldHVybiAtRU5PU1BDOwogfQogCi1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spCiYjNDM7c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKQogewogCXJldHVybiBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW47CiB9CkBAIC0yNDQwLDggJiM0MzsyNDQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsCiAJc3RydWN0IG5mdF9ob29rICpob29rOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJuY21wKGhvb2stJmd0O2lmbmFtZSwgdGhpcy0mZ3Q7aWZuYW1lLAotCQkJICAgICBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pKSkgewomIzQzOwkJaWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsIGhvb2stJmd0O2lmbmFtZWxlbikpIHsKIAkJCWlmIChob29rLSZndDtmbGFncyAmYW1wOyBORlRfSE9PS19SRU1PVkUpCiAJCQkJY29udGludWU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GdGFibGVzIEFQSSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCBub3cgYWNjZXB0cyBhIGBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2tgIGFzIGFuIGFyZ3VtZW50LiBUaGF0JiMzOTtzIGEgZ29vZCBjaGFuZ2UsIG1ha2VzIGl0IG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IHJldXNhYmxlLgoKVGhlbiBJIHNlZSB0aGUgY2hhbmdlIHdpdGhpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYC4gVGhleSYjMzk7dmUgYWRkZWQgc29tZSBhZGRpdGlvbmFsIGNoZWNrcyBiZWZvcmUgdGhlIGBzdHJuY21wYCBjYWxsLiBTbWFydC4gVGhleSYjMzk7cmUgbm93IGNvbXBhcmluZyB0aGUgcmVzdWx0cyBvZiBgaG9va19pc19wcmVmaXgoaG9vaylgIHdpdGggYGhvb2tfaXNfcHJlZml4KHRoaXMpYCwgKmFuZCogdGhleSYjMzk7cmUgY2hlY2tpbmcgaWYgYGhvb2stJmd0O2lmbmFtZWxlbmAgaXMgZGlmZmVyZW50IGZyb20gYHRoaXMtJmd0O2lmbmFtZWxlbmAuIFRoaXMgaXMgYWxsIHRvIG9wdGltaXplIHRoZSBzZWFyY2ggYW5kIHByZXZlbnQgdW5uZWNlc3NhcnkgY2FsbHMgdG8gYHN0cm5jbXBgLiBCeSBzaG9ydC1jaXJjdWl0aW5nIHdoZW4gdGhlcmUmIzM5O3MgYSBxdWljayBkaWZmZXJlbmNlIChwcmVmaXggc3RhdHVzIG9yIGxlbmd0aCksIHRoZXkmIzM5O3JlIGF2b2lkaW5nIHRoZSBtb3JlIGV4cGVuc2l2ZSBzdHJpbmcgY29tcGFyaXNvbiB3aGVuIGl0JiMzOTtzIG5vdCBuZWVkZWQuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBydWxlIHNldHMuIEkmIzM5O2QgbGlrZSB0byBkaWcgaW50byAqd2h5KiB0aGV5IGNob3NlIHRoZXNlIHBhcnRpY3VsYXIgY2hlY2tzLCBidXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgbGlrZSBhIHNlbnNpYmxlIG9wdGltaXphdGlvbiB0byBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfaG9va19saXN0X2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0Mzc6c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVx0XHRcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5ND1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI5NDQ6XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTU3Olx0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU4LVx0XHRcdFx0XHRcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXHUwMDI2aG9vayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjU4Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cdFx0aWYgKCFob29rKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAzMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTA0NzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwNDgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMjUtXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEzNzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNTYtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNTc6XHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU4LVx0XHRpZiAoIWhvb2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIE5ldGZpbHRlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgLCB3aGljaCBpcyBhIGNvcmUgZnVuY3Rpb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgYXJlYSB0byBmb2N1cyBvbi4gTmV0ZmlsdGVyIGlzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IG9mIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgYW5kIGFueSB2dWxuZXJhYmlsaXRpZXMgdGhlcmUgYXJlIGEgc2lnbmlmaWNhbnQgcmlzay4gVGhpcyBpcyB0aGUgcGVyZmVjdCBhcmVhIHRvIGJlZ2luIHNvbWUgZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uIGZvciBmdXp6aW5nIHNob3VsZCBiZSBgbmZ0X2hvb2tfbGlzdF9maW5kYCAoc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBpdCwgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXR0YWNrIHN1cmZhY2UpLCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc2AsIGBuZnRfZmxvd3RhYmxlX3VwZGF0ZWAsIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvb2sgbWFuYWdlbWVudCBhbmQgY2hhaW4gdXBkYXRlcywgc28gdGhleSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHBvaW50cyBvZiBpbnRlcmFjdGlvbi4KCkJlZm9yZSBnZXR0aW5nIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0byBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYW5kLCBjb25zZXF1ZW50bHksIHByb3Blcmx5IHNldHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGJhc2UgY29uZmlnIGlzIGRlZmluaXRlbHkgYE5GX1RBQkxFU2AsIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGFsc28gbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgZm9yIHRoaXMgcGF0Y2guIFRoZSBwYXRjaCB0b3VjaGVzIGBuZnRfaG9va19saXN0X2ZpbmRgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBzY3JlYW1zICYjMzQ7bmV0ZGV2IGhvb2tzJiMzNDsuIFRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byBuZXRkZXYgaG9va3MgYnV0IEkmIzM5O3ZlIGdvdCB0byBjaGVjayB3aGV0aGVyIGl0JiMzOTtzIGd1YXJkZWQgYnkgdGhlIGBORl9UQUJMRVNfTkVUREVWYCBvcHRpb24uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZSBmdW5jdGlvbiYjMzk7cyBpbmNsdXNpb24gb3IgdXNlIGlzIGNvbmRpdGlvbmFsIG9uIHRoYXQgc3BlY2lmaWMgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG5mX3RhYmxlc19hcGkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2hvb2tfbGlzdF9maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM5Mj1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDM3OnN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDM4LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODYtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0ODc6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4OC1cdFx0XHROTF9TRVRfQkFEX0FUVFIoZXh0YWNrLCB0bXApO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTQ0Olx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0NS1cdFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2aC1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk1OC1cdFx0XHRcdFx0XHRuZnRfY2hhaW5fcmVsZWFzZV9ob29rKFx1MDAyNmhvb2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMzc9c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmNoYWluX2hvb2subGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCB0aGlzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTktXHRcdGlmICghaG9vaykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTA0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmdC1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVx0XHRcdFx0ZXJyID0gLUVFWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyMy1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTI0Olx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTI1LVx0XHRcdGxpc3RfZGVsKFx1MDAyNmhvb2stXHUwMDNlbGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMzgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkzNDA9c3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU2LVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MzU3Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cdFx0aWYgKCFob29rKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5OAoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgbmZ0X2hvb2tfbGlzdF9maW5kYCoqCgpPa2F5LCBzbyBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gR29vZC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gU2luY2UgaXQmIzM5O3Mgbm90IGV4cG9zZWQgZ2xvYmFsbHksIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0ICpkbyogY2FsbCBpdC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSB0ZWxscyBtZSBpdCYjMzk7cyB0aGVzZSBvbmVzOiBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AsIGBuZl90YWJsZXNfdXBkY2hhaW5gLCBgbmZ0X2RlbGNoYWluX2hvb2tgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2AuIFJpZ2h0LCB0aG9zZSBhcmUgbXkgdGFyZ2V0cy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhvc2UgZnVuY3Rpb25zIGluIGRldGFpbCB0byBzZWUgKnRoZWlyKiBzdGF0aWMgc3RhdHVzLiBUaGF0IHdpbGwgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0IGFuZCBwaW5wb2ludCB0aGUgdHJ1ZSBjYWxsIGZsb3cuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhleSB0aGVtc2VsdmVzIGFyZSBzdGF0aWMsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzfG5mX3RhYmxlc191cGRjaGFpbnxuZnRfZGVsY2hhaW5faG9va3xuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc3xuZnRfZmxvd3RhYmxlX3VwZGF0ZXxuZnRfZGVsZmxvd3RhYmxlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDM3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ1Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0NTg6c3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NTktXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzQtXHR9IGVsc2UgaWYgKHRiW05GVEFfSE9PS19ERVZTXSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNTpcdFx0ZXJyID0gbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhuZXQsIHRiW05GVEFfSE9PS19ERVZTXSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzYtXHRcdFx0XHRcdFx0ICAgaG9va19saXN0LCBleHRhY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDg9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjg5My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI4OTQ6c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjg5NS1cdFx0XHQgICAgICB1MzIgZmxhZ3MsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzExMD1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMDMtXHRcdGZsYWdzIHw9IGNoYWluLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fQkFTRTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMDQ6XHRcdHJldHVybiBuZl90YWJsZXNfdXBkY2hhaW4oXHUwMDI2Y3R4LCBnZW5tYXNrLCBwb2xpY3ksIGZsYWdzLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIwNS1cdFx0XHRcdFx0ICBleHRhY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMjc9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2RlbGhvb2tfYWJvcnQoc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMzc6c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIzOC1cdFx0XHQgICAgIHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyOTI9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzQ1LVx0XHRcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzM0NjpcdFx0XHRcdHJldHVybiBuZnRfZGVsY2hhaW5faG9vayhcdTAwMjZjdHgsIGJhc2VjaGFpbiwgZXh0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNDctXHRcdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODY5PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV9wYXJzZV9ob29rKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkyMS1cdGlmICh0YltORlRBX0ZMT1dUQUJMRV9IT09LX0RFVlNdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4OTIyOlx0XHRlcnIgPSBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKGN0eC1cdTAwM2VuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTIzLVx0XHRcdFx0XHRcdCAgIHRiW05GVEFfRkxPV1RBQkxFX0hPT0tfREVWU10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAxMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfb3BzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDMxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTAzMjpzdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwMzMtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDg2PXN0YXRpYyB2b2lkIG5mdF9mbG93dGFibGVfdW5yZWdpc3Rlcl90cmFuc19ob29rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTAzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEwNDpzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEwNS1cdFx0XHRcdHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE1OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNTk6XHRlcnIgPSBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNldGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTYwLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgZmxvd3RhYmxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTk2PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyMzktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MjQwOlx0XHRyZXR1cm4gbmZ0X2Zsb3d0YWJsZV91cGRhdGUoXHUwMDI2Y3R4LCBpbmZvLVx1MDAzZW5saCwgZmxvd3RhYmxlLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTI0MS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzAwLVx0LyogVGhpcyBtdXN0IGJlIExBU1QgdG8gZW5zdXJlIG5vIHBhY2tldHMgYXJlIHdhbGtpbmcgb3ZlciB0aGlzIGZsb3d0YWJsZS4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzMDE6XHRlcnIgPSBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhjdHgubmV0LCB0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzMDItXHRcdFx0XHRcdCAgICAgICBcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkzMzA9c3RhdGljIHZvaWQgbmZ0X2Zsb3d0YWJsZV9ob29rX3JlbGVhc2Uoc3RydWN0IG5mdF9mbG93dGFibGVfaG9vayAqZmxvd3RhYmxlX2hvb2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTMzOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNDA6c3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNDEtXHRcdFx0XHQgc3RydWN0IG5mdF9mbG93dGFibGUgKmZsb3d0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MzkyPXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk0MzYtXHRpZiAobmxhW05GVEFfRkxPV1RBQkxFX0hPT0tdKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTQzNzpcdFx0cmV0dXJuIG5mdF9kZWxmbG93dGFibGVfaG9vayhcdTAwMjZjdHgsIGZsb3d0YWJsZSwgZXh0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk0MzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjIKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBUYWJsZSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBhbGwgdGhlc2UgY29yZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB3aGF0IEkgKmFscmVhZHkqIGtub3csIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGludG8gdGhpcyBtb2R1bGUgYXJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIGRlZXBlciwgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCAqdGhvc2UqIGVudHJ5IHBvaW50cyBhcmUgYWxzbywgYnkgZGVzaWduLCBkZWNsYXJlZCBhcyBzdGF0aWMuIExldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLCBpdCB3aWxsIHNhdmUgdGltZSBpbiB0aGUgbG9uZyBydW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19uZXdjaGFpbnxuZl90YWJsZXNfZGVsY2hhaW58bmZfdGFibGVzX25ld2Zsb3d0YWJsZXxuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzA5Mj1zdGF0aWMgc3RydWN0IG5mdF9jaGFpbiAqbmZ0X2NoYWluX2xvb2t1cF9ieWlkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTA5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzExMDpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzExMS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI5MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyOTI6c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyOTMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTk1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE5NjpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdmbG93dGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxOTctXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzOTEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MzkyOnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM5My1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NTEtXHRbTkZUX01TR19ORVdDSEFJTl0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTUyOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19uZXdjaGFpbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NTMtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05OTYzLVx0W05GVF9NU0dfREVMQ0hBSU5dID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk2NDpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfZGVsY2hhaW4sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05OTY1LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk2OS1cdFtORlRfTVNHX0RFU1RST1lDSEFJTl0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTcwOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxjaGFpbixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NzEtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA5My1cdFtORlRfTVNHX05FV0ZMT1dUQUJMRV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA5NDpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwOTUtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDEwNS1cdFtORlRfTVNHX0RFTEZMT1dUQUJMRV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDEwNjpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfZGVsZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMDctXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDExMS1cdFtORlRfTVNHX0RFU1RST1lGTE9XVEFCTEVdID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAxMTI6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbGZsb3d0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTEzLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgVGFibGVzIEFQSSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBOZXRmaWx0ZXIgVGFibGVzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjYWxsYmFja3MgaW4gYG5mX3RhYmxlc19jYmAgd291bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0LCBhbmQgdGhhdCB0aGUgbWFpbiBlbnRyeSBwb2ludCBtaWdodCBiZSBzb21ldGhpbmcgbGlrZSBgbmZuZXRsaW5rX3Jjdl9tc2dgLiBCdXQgYWN0dWFsbHksIHRoaW5raW5nIGFib3V0IHRoZSBwcm9tcHQmIzM5O3MgaW5zdHJ1Y3Rpb25zLCBldmVuIHRob3VnaCBmdW5jdGlvbnMgbGlrZSBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYCBhcmUgKnN0YXRpYyosIHRoZXkmIzM5O3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIG1lYW5zIHRoZXkgKmFyZW4mIzM5O3QqIGlubGluZWQuIFRoaXMgbWFrZXMgdGhlbSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZvY3VzLCBiZWNhdXNlIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0b2xkIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucywgYW5kIHNpbmNlIHRoZSBjb21waWxlciYjMzk7cyBub3QgZ29pbmcgdG8gaW5saW5lIHRoZXNlIGR1ZSB0byBob3cgdGhleSBhcmUgdXNlZCwgdGhleSBmaXQgdGhlIGJpbGwuIE5vdywgaXMgdGhlcmUgYW55IGNoYW5jZSBmb3IgKm5vbiotc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9ucz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2OT1fX3ByaW50ZigyLCAzKSBpbnQgbmZ0X3JlcXVlc3RfbW9kdWxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZm10LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQtfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcmVxdWVzdF9tb2R1bGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNi0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xODMyPXZvaWQgbmZ0X3JlZ2lzdGVyX2NoYWluX3R5cGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbl90eXBlICpjdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xODQxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE4NDI6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZ2lzdGVyX2NoYWluX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE4NDQ9dm9pZCBuZnRfdW5yZWdpc3Rlcl9jaGFpbl90eXBlKGNvbnN0IHN0cnVjdCBuZnRfY2hhaW5fdHlwZSAqY3R5cGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0OS19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxODUwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX2NoYWluX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg1MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMzg3PWludCBuZnRfcmVnaXN0ZXJfZXhwcihzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM0MDI6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZ2lzdGVyX2V4cHIpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzQwMy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNDEwPXZvaWQgbmZ0X3VucmVnaXN0ZXJfZXhwcihzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDE1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM0MTY6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3VucmVnaXN0ZXJfZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDE3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTgwNzA9aW50IG5mdF9yZWdpc3Rlcl9vYmooc3RydWN0IG5mdF9vYmplY3RfdHlwZSAqb2JqX3R5cGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA3OS19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4MDgwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWdpc3Rlcl9vYmopO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA4MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04MDg4PXZvaWQgbmZ0X3VucmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwOTMtfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODA5NDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9vYmopO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA5NS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04NzUyPXZvaWQgbmZ0X29ial9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzcwLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg3NzE6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X29ial9ub3RpZnkpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc3Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04Nzg0PXZvaWQgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSAqdHlwZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04Nzg5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg3OTA6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3OTEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04NzkyPXZvaWQgbmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlICp0eXBlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3OTctfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODc5ODpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04Nzk5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4MTA9c3RydWN0IG5mdF9mbG93dGFibGUgKm5mdF9mbG93dGFibGVfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04ODIzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg4MjQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3d0YWJsZV9sb29rdXApO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODgyNS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4MjY9dm9pZCBuZl90YWJsZXNfZGVhY3RpdmF0ZV9mbG93dGFibGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04ODQwLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg4NDE6RVhQT1JUX1NZTUJPTF9HUEwobmZfdGFibGVzX2RlYWN0aXZhdGVfZmxvd3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4NDItXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTc0Mj1zdHJ1Y3QgbmZfaG9va19vcHMgKm5mdF9ob29rX2ZpbmRfb3BzKGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vayxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05NzUyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk3NTM6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2hvb2tfZmluZF9vcHMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc1NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk3NTU9c3RydWN0IG5mX2hvb2tfb3BzICpuZnRfaG9va19maW5kX29wc19yY3UoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NjUtfVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTc2NjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfaG9va19maW5kX29wc19yY3UpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc2Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDI4Mz12b2lkIG5mX3RhYmxlc190cmFuc19kZXN0cm95X2ZsdXNoX3dvcmsoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjg4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMjg5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX3RhYmxlc190cmFuc19kZXN0cm95X2ZsdXNoX3dvcmspO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAyOTAtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1Mzc9aW50IG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KGNvbnN0IHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTQ4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTQ5OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTUwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1NTE9aW50IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTU2Ni19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU2NzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1NjgtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1ODE9aW50IG5mdF9wYXJzZV91MzJfY2hlY2soY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IG1heCwgdTMyICpkZXN0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTkxLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV91MzJfY2hlY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1OTMtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE2MjQ9aW50IG5mdF9kdW1wX3JlZ2lzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhdHRyLCB1bnNpZ25lZCBpbnQgcmVnKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjMyLX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjMzOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kdW1wX3JlZ2lzdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjM0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNjQ3PWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfbG9hZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjc4LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjc5OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV9yZWdpc3Rlcl9sb2FkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNjgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNzIzPWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTc0MS19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTc0MjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE3NDMtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE5MDg9aW50IG5mdF9kYXRhX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9kYXRhICpkYXRhLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExOTM5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExOTQwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kYXRhX2luaXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE5NDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5ldGZpbHRlciBUYWJsZSBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIG5ldGZpbHRlciB0YWJsZXMgY29kZS4gVGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIGFyZSB0aG9zZSBgbmZuZXRsaW5rYCBjYWxsYmFja3MsIGJ1dCBmb3IgdGhpcyBmdXp6aW5nIGV4ZXJjaXNlLCBJIHRoaW5rIHRhcmdldGluZyB0aG9zZSBsYXJnZXIsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucyBsaWtlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgIGlzIHRoZSByaWdodCBtb3ZlLiBUaGV5JiMzOTtyZSBnb2luZyB0byBnaXZlIG1lIG1vcmUgc3VyZmFjZSBhcmVhIHRvIHdvcmsgd2l0aC4KCldhaXQgYSBzZWNvbmQsIEkganVzdCBzYXcgdGhhdCBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgZmluZSwgYnV0IHNvIGlzIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBzbyB0aGF0JiMzOTtzIG5vdCBhIGRpc3F1YWxpZmllci4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRob3NlIGNvcmUgZnVuY3Rpb25zIGFsb25nIHdpdGggYG5mX3RhYmxlc191cGRjaGFpbmAgbWFrZSBpdCBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYC4KCk5vdywgaXMgYE5GX1RBQkxFU2AgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gSSBzdHJvbmdseSBzdXNwZWN0IGl0IGlzLCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gSSYjMzk7bGwgcG9rZSBhcm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCB0byBsb29rIGZvciBhIGAjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NDc9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NTgtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTU5OiNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2MC1cdFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQ1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYE5GUFJPVE9fTkVUREVWYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBORlBST1RPX05FVERFVmAgZnVuY3Rpb25hbGl0eSBpcyBjb250aW5nZW50IHVwb24gYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBiZWluZyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXZhaWxhYmlsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLgoKSSBzZWUgdGhhdCBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgbmV0ZGV2IGhvb2tzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIG5ldGRldiBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgcmV2b2x2ZXMgYXJvdW5kIGxpc3QgbWFuaXB1bGF0aW9uIGZvciBob29rIG1hbmFnZW1lbnQuIEkgc2hvdWxkIGxvb2sgaW50byBob3cgdGhhdCBmdW5jdGlvbiB3b3JrcyB0byBjbGFyaWZ5IHRoaXMuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIG1vcmUgZ3JhbnVsYXIgYXNwZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2YCB0byB1bmRlcnN0YW5kIGhvdyBuZXRkZXYtc3BlY2lmaWMgY2hhaW5zIGFyZSBwYXJzZWQgYW5kIGRlZmluZWQuIFNpbXVsdGFuZW91c2x5LCBJIHdhbnQgdG8gZXhwbG9yZSBob3cgdGhlIHN5c3RlbSBzZXRzIHVwIGFuZCByZWdpc3RlcnMgdGhlIG5lY2Vzc2FyeSBuZXRkZXYgaG9va3MgdXNpbmcgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYC4gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGdvaW5nIHRvIGV4cG9zZSB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IGFsbCB0aGlzIG5ldGRldiBpbnRlZ3JhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxMj1zdHJ1Y3QgbmZ0X2NoYWluX2hvb2sge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MTgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNTE5OnN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTIwLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjU0OT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9ob29rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjMwLVx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIGhvb2stXHUwMDNlbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjYzMTpcdFx0ZXJyID0gbmZ0X2NoYWluX3BhcnNlX25ldGRldihuZXQsIGhhLCBcdTAwMjZob29rLVx1MDAzZWxpc3QsIGV4dGFjaywgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMi1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk2MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgTmV0ZmlsdGVyIGFuZCBlQlBGIGludGVybmFsczoKCioqRGl2aW5nIGludG8gYG5mdF9iYXNlX2NoYWluX25ldGRldmAqKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgZ29pbmcgdG8gY2FsbCBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkLCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGlzOiBpcyB0aGlzIGNoYWluIGV2ZW4gYSBuZXRkZXYgY2hhaW4/IFRoYXQmIzM5O3MgdGhlIHZlcnkgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIGlzIGNydWNpYWwuIEFtIEkgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgZmlsdGVyIGNoYWluLCBvciBzb21ldGhpbmcgc3BlY2lmaWNhbGx5IHRpZWQgdG8gbmV0d29yayBkZXZpY2UgcHJvY2Vzc2luZz8gIFRoZSBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YCBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QuIFdoYXQgZG9lcyB0aGF0IGZ1bmN0aW9uIGRvPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfYmFzZV9jaGFpbl9uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjU9c3RhdGljIGludCBuZl90YWJsZXNfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQyOlx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDMtXHRcdHJldHVybiBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKG5ldCwgXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDQ4PXN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDYxLVx0LyogbXVzdCBhbHNvIGJlIGNhbGxlZCBmb3IgZG9ybWFudCB0YWJsZXMgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ2MjpcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NjMtXHRcdG5mdF9uZXRkZXZfdW5yZWdpc3Rlcl9ob29rcyhuZXQsIHRhYmxlLCBcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIwNDI9c3RhdGljIGludCBuZnRfZHVtcF9iYXNlY2hhaW5faG9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwNTktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyMDYwOlx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIG9wcy1cdTAwM2Vob29rbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjA2MS1cdFx0bmVzdF9kZXZzID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgTkZUQV9IT09LX0RFVlMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMzcxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM3MjpcdFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzNzMtXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjU0OT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9ob29rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjI5LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI2MzA6XHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGZhbWlseSwgaG9vay1cdTAwM2VudW0pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjMxLVx0XHRlcnIgPSBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KG5ldCwgaGEsIFx1MDAyNmhvb2stXHUwMDNlbGlzdCwgZXh0YWNrLCBmbGFncyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5OT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MDktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzEwOlx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIGhvb2stXHUwMDNlbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMS1cdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZob29rLVx1MDAzZWxpc3QsIFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5MzMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTM0Olx0XHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGN0eC1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5MzUtXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGgsIG5leHQsIFx1MDAyNmhvb2subGlzdCwgbGlzdCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5OTktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDAwOlx0XHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KHRhYmxlLVx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVx1MDAzZW9wcy5ob29rbnVtKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzAwMS1cdFx0XHRlcnIgPSBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKGN0eC1cdTAwM2VuZXQsIFx1MDAyNmhvb2subGlzdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI5Mj1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNDQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzQ1Olx0XHRcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0Ni1cdFx0XHRcdHJldHVybiBuZnRfZGVsY2hhaW5faG9vayhcdTAwMjZjdHgsIGJhc2VjaGFpbiwgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGlzIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgIHRoaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBzdHJ1Y3R1cmUsIGl0cyBrZXkgbWVtYmVycywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgb3IgZmxhZ3MuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBnaXZlbiBpdHMgbmFtZSBzdWdnZXN0aW5nIGEgbmV0d29yayBkZXZpY2UgYXNzb2NpYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgaGFuZGxpbmcgc29tZSBraW5kIG9mIE5ldGZpbHRlciBob29rIGZvciB0cmFmZmljIHRyYXZlcnNpbmcgbmV0d29yayBkZXZpY2VzLCBidXQgYSBxdWljayBpbnNwZWN0aW9uIG9mIHRoZSBkZWZpbml0aW9uIHdpbGwgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYW55IGV4aXN0aW5nIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZSBwcmVzZW5jZSBvZiBhbnkgbG9ja2luZyBtZWNoYW5pc21zLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgc3RydWN0dXJlICppcyogYmVmb3JlIEkgY2FuIGRldGVybWluZSB3aGF0IGl0ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD0xMzM2PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfdGFibGVfaXNfb3JwaGFuKGNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xMzQxLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjEzNDI6c3RhdGljIGlubGluZSBib29sIG5mdF9iYXNlX2NoYWluX25ldGRldihpbnQgZmFtaWx5LCB1MzIgaG9va251bSlcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xMzQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4ODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTkZUYWJsZXMgQ29yZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBiYXNlIGNoYWluIG5ldHdvcmsgZGV2aWNlIGludGVncmF0aW9uIHdvcmtzIGluIE5GVGFibGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gSSYjMzk7bGwgb3BlbiB1cCBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGJ1aWxkaW5nIGJsb2Nrcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGdyYXNwaW5nIHRoZSBuZXRkZXYtcmVsYXRlZCBhc3BlY3RzIG9mIHJ1bGUgcHJvY2Vzc2luZyBhbmQgaG93IHRoZXkmIzM5O3JlIGNvbm5lY3RlZCB3aXRoaW4gdGhlIE5GVGFibGVzIGZyYW1ld29yay4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhbmQgaG93IGl0JiMzOTtzIGxpbmtlZCB0byB0aGUgdGFibGVzIGFuZCBjaGFpbnMuIEtub3dsZWRnZSBvZiB0aGlzIGlzIGVzc2VudGlhbCB0byBkZWJ1Z2dpbmcgYW5kIHRvIHdyaXRpbmcgb3B0aW1hbCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfYmFzZV9jaGFpbl9uZXRkZXYoaW50IGZhbWlseSwgdTMyIGhvb2tudW0pXG4xMzQzOlx0e1xuMTM0NDpcdFx0cmV0dXJuIGZhbWlseSA9PSBORlBST1RPX05FVERFViB8fFxuMTM0NTpcdFx0ICAgICAgIChmYW1pbHkgPT0gTkZQUk9UT19JTkVUIFx1MDAyNlx1MDAyNiBob29rbnVtID09IE5GX0lORVRfSU5HUkVTUyk7XG4xMzQ2Olx0fVxuMTM0NzpcdFxuMTM0ODpcdHZvaWQgbmZ0X3JlZ2lzdGVyX2NoYWluX3R5cGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbl90eXBlICopO1xuMTM0OTpcdHZvaWQgbmZ0X3VucmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKik7XG4xMzUwOlx0XG4xMzUxOlx0aW50IG5mdF9yZWdpc3Rlcl9leHByKHN0cnVjdCBuZnRfZXhwcl90eXBlICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldGZpbHRlciBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBuZXR3b3JrIGZpbHRlcmluZywgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIHJlbGV2YW50IE5ldGZpbHRlciBwcm90b2NvbHM6IGBORlBST1RPX05FVERFVmAgYW5kIGBORlBST1RPX0lORVRgLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBORl9JTkVUX0lOR1JFU1NgLiBHaXZlbiB0aGF0LCBgTkZfVEFCTEVTX0lORVRgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRoZSBiaWcgcGljdHVyZS4gU2luY2UgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGF2YWlsYWJsZSwgSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIGBORl9UQUJMRVNfTkVUREVWYCBhcyB3ZWxsLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgYm90aC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcgYW5kIGNhbiBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhvc2UgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9UQUJMRVNfTkVUREVWfGNvbmZpZyBORl9UQUJMRVNfSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgbmZ0YWJsZXNgLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgYXJlIGJvdGggZGVzaXJhYmxlIHRvIGhhdmUgZW5hYmxlZCwgYW5kIG5hdHVyYWxseSwgd2UgbmVlZCBgTkZfVEFCTEVTYCBpdHNlbGYgYXMgYSBiYXNlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHNldHVwLiBBaCwgaGVyZSYjMzk7cyBhIGRlcGVuZGVuY3k6IGBORl9UQUJMRVNfSU5FVGAgcmVsaWVzIG9uIGBJUFY2YC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhIHJlYXNvbmFibGUgZGVwZW5kZW5jeS4gQ29uc2VxdWVudGx5LCBgSVBWNmAgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBwcm9wZXJseSB1dGlsaXplIGBORl9UQUJMRVNfSU5FVGAuIEFscmlnaHQsIG5vdyBJIHdpbGwgbW92ZSBvbiB0byBleGFtaW5pbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfVEFCTEVTX05FVERFVmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzI6XHRjb25maWcgTkZfVEFCTEVTX0lORVRcbiA0NzM6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDQ3NDpcdFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XG4gNDc1Olx0XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjZcbiA0NzY6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBtaXhlZCBJUHY0L0lQdjYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0Nzc6XHRcdGhlbHBcbiA0Nzg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG1peGVkIElQdjQvSVB2NiBcJiMzNDtpbmV0XCYjMzQ7IHRhYmxlLlxuIDQ3OTpcdFxuIDQ4MDpcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG4gNDgxOlx0XHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNDgyOlx0XHRoZWxwXG4gNDgzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFwmIzM0O25ldGRldlwmIzM0OyB0YWJsZS5cbiA0ODQ6XHRcbiA0ODU6XHRjb25maWcgTkZUX05VTUdFTlxuIDQ4NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVwmIzM0O1xuIDQ4NzpcdFx0aGVscFxuIDQ4ODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBudW1iZXIgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdXNlZCB0byBwZXJmb3JtXG4gNDg5Olx0XHQgIGluY3JlbWVudGFsIGNvdW50aW5nIGFuZCByYW5kb20gbnVtYmVycyBib3VuZCB0byBhIHVwcGVyIGxpbWl0LlxuIDQ5MDpcdFxuIDQ5MTpcdGNvbmZpZyBORlRfQ1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBGb2N1czogTmV0ZmlsdGVyIFRhYmxlcyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBuZXRmaWx0ZXIgdGFibGVzIHN0dWZmLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGVuYWJsaW5nIGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX05FVERFVmAsIGFuZCBgTkZfVEFCTEVTX0lORVRgLCBwbHVzIGBJUFY2YCwgb2YgY291cnNlLiBOb3csIGFyZSBgTkZfVEFCTEVTX0lQVjRgIGFuZCBgTkZfVEFCTEVTX0lQVjZgIG5lY2Vzc2FyeT8gQWgsIG5vLCBgTkZfVEFCTEVTX0lORVRgIHNlbGVjdHMgdGhvc2UuIFJpZ2h0LCBrZWVwIGl0IGNvbmNpc2U7IGBORl9UQUJMRVNgLCBgTkZfVEFCTEVTX05FVERFVmAsIGBORl9UQUJMRVNfSU5FVGAsIGFuZCBgSVBWNmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUga2V5IHRvIG1hbmFnaW5nIHRoZXNlIHRhYmxlcz8gSSYjMzk7ZCBsaWtlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gVGhvc2Ugc2VlbSBjZW50cmFsIHRvIHRoZSBhY3R1YWwgdGFibGUgYW5kIGNoYWluIG1hbmlwdWxhdGlvbi4KCkxldCYjMzk7cyBzZWXigKYgSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYG5mdF9ob29rX2xpc3RfZmluZGAsIGJ1dCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSSBjYW4mIzM5O3QgcmVhbGx5IGZvY3VzIG9uIGl0IGRpcmVjdGx5IGlmIGl0JiMzOTtzIGlubGluZWQuIEkgd29uZGVyIGlmIGl0ICppcyogaW5saW5lZD8gSXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgbWFya2VkIGFzIGBpbmxpbmVgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBhbHdheXMgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIEhtbS4uLgoKV2FpdCBhIG1pbnV0ZSwgYG5mX3RhYmxlc19uZXdjaGFpbmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhhdCB3b3Jrcy4gTGV0IG1lIHRoaW5rIG1vcmUgYWJvdXQgdGhhdC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQgYW5kIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1pZ2h0IGJlIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LiBBaCwgYG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3NgIHNlZW1zIHRvIGJlIG5vbi1zdGF0aWMuIEdvb2QuIEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMTE9dm9pZCBuZl90YWJsZXNfdW5iaW5kX2NoYWluKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMxNS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMxNjpzdGF0aWMgaW50IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzE3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDI1PXN0YXRpYyBpbnQgbmZfdGFibGVzX3JlZ2lzdGVyX2hvb2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0Mi1cdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQzOlx0XHRyZXR1cm4gbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rcyhuZXQsIFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMwMDAtXHRcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXHUwMDNlb3BzLmhvb2tudW0pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDAxOlx0XHRcdGVyciA9IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MoY3R4LVx1MDAzZW5ldCwgXHUwMDI2aG9vay5saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMwMDItXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5ldGZpbHRlciBUYWJsZXMqKgoKT2theSwgc28gdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgZ29vZCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gYXZvaWQgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuCgpJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBmb2N1c2luZyBvbiBzdGF0aWMgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG5ldGxpbmsgY2FsbGJhY2tzLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgYG5mbmV0bGlua19yY3ZfbXNnYCBpcyB0aGUgY2VudHJhbCBlbnRyeSBwb2ludCBmb3IgYWxsIG5ldGZpbHRlciBuZXRsaW5rIG1lc3NhZ2VzLiBIb3dldmVyLCBpdCBpcyB0b28gZ2VuZXJpYy4gSSBzdGFydGVkIGNoZWNraW5nIGZvciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWxsIG5ldGxpbmsuIFRoZXJlZm9yZSwgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgIGFyZSBwcm9taXNpbmcuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYG5mX3RhYmxlc191cGRjaGFpbmAgaXMgc3RhdGljLi4uIHllcywgaXQgaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IG90aGVyIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBoYXZlIGZvdW5kIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgd2hpY2ggaXMgc3RhdGljLiBJIHdpbGwgbGlzdCB0aGUgbmV0bGluayBjYWxsYmFja3MuIFRoZXkgd2lsbCBkZWZpbml0ZWx5IG5vdCBiZSBpbmxpbmVkLCBiZWNhdXNlIHRoZXkgYXJlIHJlZmVyZW5jZWQgaW4gYW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBkaWZmIHRvIHNlZSB3aHkgSSBzdGFydGVkIHRoaXMgaW52ZXN0aWdhdGlvbi4gQWgsIHJpZ2h0LCB0aGVyZSYjMzk7cyBhIGJ1ZyBmaXggaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgcmVsYXRpbmcgdG8gbWF0Y2hpbmcgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgdGhlIGJ1ZyBjYW4gY2F1c2UgaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgYmVoYXZpb3Igd2l0aCBjaGFpbiBvciBmbG93dGFibGUgYWRkaXRpb24sIHJlbW92YWwsIG9yIHVwZGF0ZS4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZ29pbmcgdG8gYmUgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgLCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgLgoKTm93LCBpcyBgbmZfdGFibGVzX3VwZGNoYWluYCBpbmxpbmVkPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbmZfdGFibGVzX25ld2NoYWluYCBhbmQgYG5mX3RhYmxlc19kZWxjaGFpbmAuIEdpdmVuIGl0cyBzaXplLCBpdCYjMzk7cyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gIGlzIGluIGBuZl90YWJsZXNfYXBpLmNgLiBZZXAsIGl0IGlzLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkLiBJIHNlZSBgTkZfVEFCTEVTYCwgYE5GX1RBQkxFU19ORVRERVZgLCBgTkZfVEFCTEVTX0lORVRgLCBhbmQgYElQVjZgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gYE5GX1RBQkxFU2AgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgd2hpY2ggaXMgc3RhbmRhcmQuIGBORl9UQUJMRVNfTkVUREVWYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNgLCBhbmQgYE5GX1RBQkxFU19JTkVUYCBkZXBlbmRzIG9uIGBJUFY2YCBhbmQgYE5GX1RBQkxFU2AuIFNvLCBpdCBsb29rcyBsaWtlIHRoZXNlIGZvdXIgY29uZmlncyBzaG91bGQgYmUgZW5vdWdoLgoKRmluYWxseSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gbWFrZSBzdXJlLiBBbmQgdGhhdCBpcyB0aGUgc3VtbWFyeSBvZiB0aGUgcHJvY2VzcywgYW5kIHdoYXQgSSBiZWxpZXZlIGFyZSB0aGUgYmVzdCBjaG9pY2VzIGZvciBmdXp6IHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9ob29rX2xpc3RfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0Mzc6c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVx0XHRcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5ND1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI5NDQ6XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTU3Olx0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU4LVx0XHRcdFx0XHRcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXHUwMDI2aG9vayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjU4Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cdFx0aWYgKCFob29rKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAzMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTA0NzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwNDgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMjUtXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEzNzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNTYtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNTc6XHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU4LVx0XHRpZiAoIWhvb2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMTUKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBuZl90YWJsZXNfYXBpLmNgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBjb2RlYmFzZS4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSB1c2FnZSByZXZlYWxzIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBpcyBvbmx5IGVtcGxveWVkIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gVGhpcyBpcyBnb29kLCBpdCBnaXZlcyBtZSBhIHZlcnkgbGltaXRlZCBzY29wZSB0byBmb2N1cyBvbi4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGF0IHNwZWNpZmljIGZpbGUuIFRoaXMgbGltaXRlZCBzY29wZSBpcyBhIGdvb2QgdGhpbmc7IGl0IG1lYW5zIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBpc3N1ZXMgaXMgcmVkdWNlZC4gSG93ZXZlciwgYSBsb2NhbGl6ZWQgaXNzdWUgY291bGQgYmUgYSBzZXJpb3VzIGlzc3VlLCBnaXZlbiBuZXRmaWx0ZXLigJlzIGNvcmUgcm9sZS4KCk5vdywgbXkgcGxhbiB0byBmb3JtYWxseSByZXBvcnQgdGhpcyBmaW5kaW5nIHRvIHRoZSB0ZWFtLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGdldCB0aGUgZnVsbCByZXBvcnQgZ2VuZXJhdGVkLiBJIHRoaW5rIGl04oCZcyBzbWFydCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhpcy4gSXTigJlsbCBhbGxvdyBtZSB0byBwcm9wZXJseSBhbmQgY29uc2lzdGVudGx5IGNvbW11bmljYXRlIHRoZXNlIGZpbmRpbmdzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlYW0uIFdlIHNob3VsZCBhbHNvIGxvb2sgaW50byBob3cgdG8gZ2V0IHRoaXMgYXV0b21hdGVkIHNvIHdlIGNhbiBwcmV2ZW50IHRoZXNlIHR5cGVzIG9mIHRoaW5ncyBpbiB0aGUgZnV0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX3VwZGNoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdmbG93dGFibGUmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbGZsb3d0YWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3Y2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbGNoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc191cGRjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgbWF0Y2hpbmcgbG9naWMgZm9yIG5ldGRldiBob29rcyBpbiBuZl90YWJsZXMuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHBhcnNpbmcsIHVwZGF0aW5nLCBvciBkZWxldGluZyBuZXRkZXYgaG9va3MgZm9yIGNoYWlucyBhbmQgZmxvd3RhYmxlcy4gVGhlIGJ1ZyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIG1hdGNoaW5nIGFuZCBzdWJzZXF1ZW50IGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXRmaWx0ZXIuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGBzdHJuY21wYCB3aXRoIGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3Mgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXggc3RhdHVzIChlLmcuLCBtYXRjaGluZyBcJiMzNDtldGhcJiMzNDsgd2l0aCBcJiMzNDtldGgwXCYjMzQ7KS4gVGhlIGBuZnRfaG9va2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBhbmQgaXRzIGBpZm5hbWVgIGZpZWxkIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbmxhX3N0cnNjcHlgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBzdHJpbmcgY29tcGFyaXNvbiBsb2dpYyBidWcsIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1M2QyNTBkODYxOWQ1NDQ1ZTFlNDk2ZGE1Y2FlYjk2M2JmY2I4MTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxMTo0Mzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTE5NzMsNyAmIzQzOzE5NzMsNyBAQCBzdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKQogCXJldHVybiAtRU5PU1BDOwogfQogCi1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spCiYjNDM7c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKQogewogCXJldHVybiBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW47CiB9CkBAIC0yNDQwLDggJiM0MzsyNDQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsCiAJc3RydWN0IG5mdF9ob29rICpob29rOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJuY21wKGhvb2stJmd0O2lmbmFtZSwgdGhpcy0mZ3Q7aWZuYW1lLAotCQkJICAgICBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pKSkgewomIzQzOwkJaWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsIGhvb2stJmd0O2lmbmFtZWxlbikpIHsKIAkJCWlmIChob29rLSZndDtmbGFncyAmYW1wOyBORlRfSE9PS19SRU1PVkUpCiAJCQkJY29udGludWU7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSXQmIzM5O3MgY2hhbmdpbmcgYGhvb2tfaXNfcHJlZml4YCB0byB0YWtlIGEgYGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9va2AuIFRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgd2hlcmUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjb21wYXJpc29uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHN3YXBwaW5nIHRoaXM6CgpgYGBjCgkJaWYgKCFzdHJuY21wKGhvb2stJmd0O2lmbmFtZSwgdGhpcy0mZ3Q7aWZuYW1lLAoJCQkgICAgIG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbikpKSB7CmBgYAoKd2l0aCB0aGlzOgoKYGBgYwoJCWlmIChob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuKQoJCQljb250aW51ZTsKCQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsIGhvb2stJmd0O2lmbmFtZWxlbikpIHsKYGBgCgpBbmQgaXQmIzM5O3MgYWxzbyBhZGRpbmcgYGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlgIGFzIGFuIGVhcmx5IGNoZWNrLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgcmlzayBoZXJlPyBgaG9vay0mZ3Q7aWZuYW1lYCBhbmQgYHRoaXMtJmd0O2lmbmFtZWAgYXJlIHN0cmluZ3MsIGFuZCBgaG9vay0mZ3Q7aWZuYW1lbGVuYCBhbmQgYHRoaXMtJmd0O2lmbmFtZWxlbmAgYXJlIGxlbmd0aHMuIFRoaXMgaXMgY2xlYXJseSBmaXhpbmcgYSBidWcgYmVjYXVzZSB0aGUgcHJldmlvdXMgYG1pbigpYCBjYWxsIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHByZWZpeCBtYXRjaGluZyBvciBzb21ldGhpbmcsIGJhc2VkIG9uIGhvdyB0aGUgbGVuZ3RocyB3ZXJlIGJlaW5nIGNvbXBhcmVkLgoKQWgsIHJpZ2h0LCBgaG9va19pc19wcmVmaXhgIGlzIHRoZSBrZXkuIEl0IGNoZWNrcyBpZiBgc3RybGVuKGhvb2stJmd0O2lmbmFtZSkgJmd0Oz0gaG9vay0mZ3Q7aWZuYW1lbGVuYC4gU28sIGBob29rLSZndDtpZm5hbWVsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlICppbnRlcmZhY2UgbmFtZSogc3RyaW5nLCByaWdodD8gSWYgYGhvb2tfaXNfcHJlZml4KGhvb2spYCBpcyB0cnVlLCBpdCBtZWFucyB0aGUgYWN0dWFsIGludGVyZmFjZSBuYW1lIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGhvb2stJmd0O2lmbmFtZWxlbmAuIEhtbSwgZG9lcyBgaG9vay0mZ3Q7aWZuYW1lbGVuYCByZXByZXNlbnQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICp3aXRob3V0KiBhIHdpbGRjYXJkIGNoYXJhY3RlciBvciBzb21ldGhpbmc/CgpMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBob29rX2lzX3ByZWZpeGAgdG8gY29uZmlybS4uLiBZZXAsIGBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW5gLiBPa2F5LCBzbyBpZiBgaG9vay0mZ3Q7aWZuYW1lYCAqd2VyZSogdW5pbml0aWFsaXplZCwgYHN0cmxlbmAgY291bGQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHdhaXQuLi4gYGhvb2stJmd0O2lmbmFtZWAgaXMgKmFscmVhZHkqIGJlaW5nIHJlYWQgYnkgYm90aCBgc3RybmNtcGAgYW5kIGBzdHJsZW5gICp3aXRoaW4qIGBob29rX2lzX3ByZWZpeGAgaXRzZWxmLiBTbywgaWYgdGhlcmUgd2FzIGFuIGlzc3VlLCB3ZSYjMzk7ZCBoYXZlIHNlZW4gaXQgZWFybGllci4KClNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgbG9naWMgZXJyb3IgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAsIGxpa2VseSByZWxhdGluZyB0byBwcmVmaXggbWF0Y2hpbmcsIGJ1dCB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBJIHNob3VsZCBwcm9iYWJseSBzdGlsbCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlIGFmZmVjdGVkIGxvZ2ljIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIGl0c2VsZiwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfaG9va19saXN0X2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0Mzc6c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVx0XHRcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjg5ND1zdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk0My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI5NDQ6XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTU3Olx0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTU4LVx0XHRcdFx0XHRcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXHUwMDI2aG9vayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzNz1zdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjU4Olx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cdFx0aWYgKCFob29rKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTAzMj1zdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTA0NzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkwNDgtXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxMDQ9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMjUtXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEzNzpcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNTYtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzNTc6XHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzU4LVx0XHRpZiAoIWhvb2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhvb2sgTWF0Y2hpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0aWdodGVuaW5nIHVwIHRoZSBsb2dpYyBmb3IgaG93IHdlIGZpbmQgaG9va3MgaW4gdGhpcyBsaXN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBgc3RybmNtcGAgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtaXNtYXRjaGVzIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcywgZXNwZWNpYWxseSBpbiBwcmVmaXggc2NlbmFyaW9zLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4uLiBJIHNlZSB0aGUgb3JpZ2luYWwgaXNzdWU6IFRoZSBgbWluYCBmdW5jdGlvbiBjYWxsIGluIHRoZSBgc3RybmNtcGAgY29tcGFyaXNvbiB3YXMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgbWF0Y2hlcy4gSWYgYSBob29rJiMzOTtzIGludGVyZmFjZSBuYW1lLCBsZXQmIzM5O3Mgc2F5ICYjMzQ7ZXRoLCYjMzQ7IGhhZCBhIGxlbmd0aCBvZiAzIChgaG9vay0mZ3Q7aWZuYW1lbGVuYCksIGFuZCB0aGUgaW50ZXJmYWNlIHdlJiMzOTtyZSBjaGVja2luZyBhZ2FpbnN0LCAmIzM0O2V0aDAsJiMzNDsgaGFkIGEgbGVuZ3RoIG9mIDQgKGB0aGlzLSZndDtpZm5hbWVsZW5gKSwgdGhlbiBgbWluYCB3b3VsZCByZXN1bHQgaW4gMy4gVGhpcyBtZWFudCBgc3RybmNtcCgmIzM0O2V0aCYjMzQ7LCAmIzM0O2V0aDAmIzM0OywgMylgIHdhcyByZXR1cm5pbmcgYSBtYXRjaCAoMCksIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRpZmZlcmVudC4gVGhpcyBtZWFudCAmIzM0O2V0aDAmIzM0OyB3YXMgbWF0Y2hpbmcgJiMzNDtldGgmIzM0Oywgd2hpY2ggaXMgaW5jb3JyZWN0LCB1bmxlc3MgJiMzNDtldGgmIzM0OyB3YXMgaW50ZW5kZWQgYXMgYSBwcmVmaXguCgpOb3csIGhvbGQgb24uLi4gdGhlIGNvZGUgdGhlbiBjaGVja3MgYGhvb2tfaXNfcHJlZml4YC4gVGhhdCBtYWtlcyBzZW5zZS4gSWYgYGhvb2tfaXNfcHJlZml4YCBpcyB0cnVlLCB0aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwcmVmaXggbWF0Y2ggKGxpa2UgJiMzNDtldGgqJiMzNDspLiBUaGVuIEkgbG9vayBhdCB0aGUgbG9naWMgaW5zaWRlIGBob29rX2lzX3ByZWZpeGAsIHdoaWNoIGlzIGJhc2VkIG9uIGBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmZ3Q7PSBob29rLSZndDtpZm5hbWVsZW5gLiBTbyBpZiBgaG9vay0mZ3Q7aWZuYW1lYCBpcyAmIzM0O2V0aComIzM0OywgYHN0cmxlbmAgaXMgNC4gQnV0IGBob29rLSZndDtpZm5hbWVsZW5gIG1pZ2h0IGJlIDMgKGxlbmd0aCBvZiAmIzM0O2V0aCYjMzQ7KS4gU28sIGBob29rX2lzX3ByZWZpeGAgd291bGQgZXZhbHVhdGUgdG8gdHJ1ZS4KCkFoLCBzbyBpZiB0aGUgaG9vayBpcyBhIHByZWZpeCBtYXRjaC4uLndhaXQsIGlzIHRoYXQgcmVhbGx5IHJpZ2h0PyBMZXQgbWUgdmVyaWZ5IGlmIGBob29rX2lzX3ByZWZpeGAgaXMgdXNpbmcgYSBjb3JyZWN0IGNvbmRpdGlvbi4KCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGlzLiBUaGUgbmV3IGNvZGUgZG9lcyB0aGlzOgoKYGBgYwoJCWlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSkKCQkJY29udGludWU7CgkJaWYgKGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCgkJCWNvbnRpbnVlOwoJCWlmICghc3RybmNtcChob29rLSZndDtpZm5hbWUsIHRoaXMtJmd0O2lmbmFtZSwgaG9vay0mZ3Q7aWZuYW1lbGVuKSkgewpgYGAKClNvIGZpcnN0LCBpZiBvbmUgaXMgcHJlZml4IGFuZCB0aGUgb3RoZXIgaXNuJiMzOTt0LCBgY29udGludWVgLiBJdCBjaGVja3MgdGhhdCBib3RoIGhhdmUgdGhlIHNhbWUgcHJlZml4IHN0YXR1cyAoZWl0aGVyIGJvdGggcHJlZml4ZXMgb3IgYm90aCBleGFjdCBtYXRjaGVzKS4gVGhlbiwgaXQgY2hlY2tzIHRoYXQgdGhlaXIgbGVuZ3RocyBhcmUgdGhlIHNhbWUuIEZpbmFsbHksIGl0IHVzZXMgYHN0cm5jbXBgLCBidXQgb25seSBpZiBldmVyeXRoaW5nIGVsc2UgbWF0Y2hlcy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4LgoKVGhpcyBwcmV2ZW50cyB0aGUgaW5jb3JyZWN0IG1hdGNoaW5nIG9mIGFuIGV4YWN0IG1hdGNoIChlLmcuICYjMzQ7ZXRoMCYjMzQ7KSB3aXRoIGEgcHJlZml4IG1hdGNoIChlLmcuICYjMzQ7ZXRoJiMzNDspLiBJdCBhbHNvIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSB0d28gZXhhY3QgbWF0Y2hlcyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBjb3VsZCBtYXRjaCBpZiBvbmUgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyIChlLmcuICYjMzQ7ZXRoJiMzNDsgYW5kICYjMzQ7ZXRoMCYjMzQ7KS4gTm93LCBhbiBleGFjdCBtYXRjaCB3b3VsZCByZXF1aXJlIGBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSA9PSBob29rLSZndDtpZm5hbWVsZW5gLCBtZWFuaW5nIGBob29rX2lzX3ByZWZpeGAgc2hvdWxkIGFsc28gYWx3YXlzIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuIGV4YWN0IG1hdGNoLgoKTGV0IG1lIGdvIGxvb2sgYXQgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBgaG9va19pc19wcmVmaXhgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hvb2tfaXNfcHJlZml4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTkzNz1zdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5NzUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTc2OnN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5Nzcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE5ODE9c3RhdGljIGludCBuZnRfbmxhX3B1dF9ob29rX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTgyLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE5ODM6XHRpbnQgYXR0ciA9IGhvb2tfaXNfcHJlZml4KGhvb2spID8gTkZUQV9ERVZJQ0VfUFJFRklYIDogTkZUQV9ERVZJQ0VfTkFNRTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5ODQtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjA0Mj1zdGF0aWMgaW50IG5mdF9kdW1wX2Jhc2VjaGFpbl9ob29rKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjA3OS1cdFx0aWYgKGR1bXBfaG9va19jdHgubiA9PSAxIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjA4MDpcdFx0ICAgICFob29rX2lzX3ByZWZpeChkdW1wX2hvb2tfY3R4LmZpcnN0KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwODEtXHRcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE5GVEFfSE9PS19ERVYsIGR1bXBfaG9va19jdHguZmlyc3QtXHUwMDNlaWZuYW1lKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDM3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0Mi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQzOlx0XHRpZiAoaG9va19pc19wcmVmaXgoaG9vaykgIT0gaG9va19pc19wcmVmaXgodGhpcykpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ0LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgUHJlZml4IENoZWNrKioKCk9rYXksIHNvIHRoaXMgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbi4uLiByaWdodCwgaXQmIzM5O3MgY2hlY2tpbmcgaWYgdGhlIGludGVyZmFjZSBuYW1lIChgaG9vay0mZ3Q7aWZuYW1lYCkgaGFzIGEgcHJlZml4IHRoYXQmIzM5O3MgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIHNwZWNpZmllZCBieSBgaG9vay0mZ3Q7aWZuYW1lbGVuYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgYGhvb2stJmd0O2lmbmFtZWAgaXMgJiMzNDtldGgwJiMzNDssIHRoZSBgc3RybGVuYCBvZiB0aGF0IHN0cmluZyBpcyBnb2luZyB0byBiZSA0LiBOb3csIGlmIGBob29rLSZndDtpZm5hbWVsZW5gIGlzICphbHNvKiA0LCB0aGUgY29uZGl0aW9uIGBzdHJsZW4gJmd0Oz0gaWZuYW1lbGVuYCBpcyBnb2luZyB0byBldmFsdWF0ZSB0byB0cnVlLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbi4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIGhvdyBgaWZuYW1lbGVuYCBpcyAqYWN0dWFsbHkqIHNldC4gSSYjMzk7bSBhc3N1bWluZyBpdCByZXByZXNlbnRzIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeCBzdHJpbmcsIGFuZCBgaWZuYW1lYCBpcyB0aGUgcHJlZml4IHN0cmluZyBpdHNlbGYsIGJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhbmQgZW5zdXJlIG15IGFzc3VtcHRpb25zIGFyZSB2YWxpZC4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGJlaGF2aW9ycyBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgaG93IGBpZm5hbWVsZW5gIGlzIGdldHRpbmcgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZm5hbWVsZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTc2PXN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5Nzcte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk3ODpcdHJldHVybiBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW47XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc5LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxMS1cdC8qIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIE5VTC1jaGFyIHdoZW4gY29tcGFyaW5nIG5vbi1wcmVmaXhlcyAqL1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQxMjpcdGhvb2stXHUwMDNlaWZuYW1lbGVuID0gc3RybGVuKGhvb2stXHUwMDNlaWZuYW1lKSAmIzQzOyAhcHJlZml4O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxMy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDE4LVx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDE5Olx0XHRpZiAoc3RybmNtcChkZXYtXHUwMDNlbmFtZSwgaG9vay1cdTAwM2VpZm5hbWUsIGhvb2stXHUwMDNlaWZuYW1lbGVuKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MjAtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDQtXHRcdFx0Y29udGludWU7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQ1Olx0XHRpZiAoaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ2LVx0XHRcdGNvbnRpbnVlO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ0NzpcdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ4LVx0XHRcdGlmIChob29rLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTc2OD1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05Nzc2LVx0XHRvcHMgPSBuZnRfaG9va19maW5kX29wcyhob29rLCBkZXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTc3NzpcdFx0bWF0Y2ggPSAhc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgZGV2LVx1MDAzZW5hbWUsIGhvb2stXHUwMDNlaWZuYW1lbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdHJpbmcgQ29tcGFyaXNvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBob29rLSZndDtpZm5hbWVsZW4gPSBzdHJsZW4oaG9vay0mZ3Q7aWZuYW1lKSAmIzQzOyAhcHJlZml4O2AgbGluZS4uLiBSaWdodCwgaWYgaXQmIzM5O3MgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuIElmIGl0JiMzOTtzICpub3QqIGEgcHJlZml4LCB3ZSBhZGQgMS4gU28sIHRoZSBjcnVjaWFsIGNoZWNrLCBgc3RybGVuKGhvb2stJmd0O2lmbmFtZSkgJmd0Oz0gaG9vay0mZ3Q7aWZuYW1lbGVuYCwgYmVjb21lcyBhIG5lYXQgd2F5IHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIHByZWZpeC4gSWYgaXQgKmlzKiBhIHByZWZpeCwgaXQmIzM5O3MgYHN0cmxlbiAmZ3Q7PSBzdHJsZW5gIHdoaWNoIGlzIHRydWUsIGFuZCBpZiBpdCYjMzk7cyAqbm90KiBhIHByZWZpeCwgaXQmIzM5O3MgYHN0cmxlbiAmZ3Q7PSBzdHJsZW4gJiM0MzsgMWAgd2hpY2ggaXMgZmFsc2UuIFRoYXQgcGFydCBzZWVtcyBzb3VuZC4gR29vZC4gYGhvb2tfaXNfcHJlZml4YCB3b3JrcyBhcyBleHBlY3RlZC4KCk5vdywgdGhlIHByb2JsZW0uIEl0JiMzOTtzIGluIGBuZnRfaG9va19saXN0X2ZpbmRgOgoKYGBgYwoJCWlmICghc3RybmNtcChob29rLSZndDtpZm5hbWUsIHRoaXMtJmd0O2lmbmFtZSwKCQkJICAgICBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pKSkgewpgYGAKClRoZSBpc3N1ZSBpcyBjbGVhci4gTGV0JiMzOTtzIGltYWdpbmUgYSBzY2VuYXJpbzogYGhvb2tgIGlzICYjMzQ7ZXRoJiMzNDsgKGEgcHJlZml4LCBzbyBgaWZuYW1lbGVuYCBpcyAzKSBhbmQgYHRoaXNgIGlzICYjMzQ7ZXRoMCYjMzQ7IChub3QgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIDUpLiBUaGUgYG1pbigzLCA1KWAgZ2l2ZXMgdXMgMy4gU28sIHdlJiMzOTtyZSBkb2luZyBgc3RybmNtcCgmIzM0O2V0aCYjMzQ7LCAmIzM0O2V0aDAmIzM0OywgMylgLiBUaGF0IHJldHVybnMgMCBiZWNhdXNlIHRoZSBmaXJzdCB0aHJlZSBjaGFyYWN0ZXJzIG1hdGNoLiAqKkJ1dCB0aGV5IHNob3VsZG4mIzM5O3QgbWF0Y2ghKiogJiMzNDtldGgmIzM0OyBpcyBhIHByZWZpeDsgJiMzNDtldGgwJiMzNDsgaXMgbm90LiBUaGUgcHJlZml4ZXMgc2hvdWxkIGJlIGNoZWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBjb21wYXJpc29uIGRvZXNuJiMzOTt0IGlkZW50aWZ5ICYjMzQ7ZXRoJiMzNDsgYW5kICYjMzQ7ZXRoMCYjMzQ7IGFzIGEgbWF0Y2guIFRoaXMgaXMgYSBzdWJ0bGUgbG9naWMgYnVnLgoKRG9lcyB0aGlzIGJ1ZyBzdGVtIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBJdCYjMzk7cyBqdXN0IGEgZmxhd2VkIHN0cmluZyBjb21wYXJpc29uLiBDb3VsZCB0aGUgaW50ZXJmYWNlIG5hbWUgaXRzZWxmIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vLCBiZWNhdXNlIEkmIzM5O20gYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYG5mdF9uZXRkZXZfaG9va19hbGxvY2AuIEJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBhbGxvY2F0aW9uIGZ1bmN0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDExOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9uZXRkZXZfaG9va19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMzkxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM5MjpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM5My1cdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDU4PXN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0ODE6XHRcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0bXAsIHByZWZpeCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDgyLVx0XHRpZiAoSVNfRVJSKGhvb2spKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MjYtXHRpZiAodGJbTkZUQV9IT09LX0RFVl0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1Mjc6XHRcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0YltORlRBX0hPT0tfREVWXSwgZmFsc2UpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUyOC1cdFx0aWYgKElTX0VSUihob29rKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzAzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5mdF9uZXRkZXZfaG9va19hbGxvY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgaXRzIGNvcmUgcHVycG9zZSB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEtub3dpbmcgaG93IHRoZXNlIGhvb2tzIGFyZSBzdHJ1Y3R1cmVkIGlzIGNyaXRpY2FsOyB0aGV5IGFyZSBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciBwYWNrZXQgZmlsdGVyaW5nIGFuZCBtYW5pcHVsYXRpb24uIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGFsbG9jYXRpbmcgdGhlIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgTmV0ZmlsdGVyIGhvb2sgcmVsYXRlZCB0byBuZXR3b3JrIGRldmljZSBpbnRlcmFjdGlvbi4KCkkmIzM5O2QgYW50aWNpcGF0ZSBpdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGFsbG9jYXRpb24sIHBvdGVudGlhbGx5IGluaXRpYWxpemluZyBzb21lIGNydWNpYWwgaW50ZXJuYWwgZGF0YSwgYW5kIHBlcmhhcHMgbGlua2luZyB0aGlzIG5ldyBob29rIGludG8gdGhlIGFwcHJvcHJpYXRlIE5ldGZpbHRlciBjaGFpbiBmb3IgbmV0d29yayBkZXZpY2UgZXZlbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGxheWVyIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhpbmdzIGxpa2UgdGhlIGRldmljZSBkcml2ZXJzIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjayYjMzk7cyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRoLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGNvbm5lY3RpbmcgTmV0ZmlsdGVyJiMzOTtzIGZpbHRlcmluZyBydWxlcyB0byB0aGUgcGh5c2ljYWwgZGV2aWNlcy4gSSBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBsb3ctbGV2ZWwgYWxsb2NhdGlvbiBhbmQgc2V0dXAgdGhhdCBzdWJzZXF1ZW50IGZ1bmN0aW9ucyB3aWxsIGRlcGVuZCBvbi4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG1ldGFkYXRhIG9yIHN0YXRlIGl0IG1haW50YWlucyB0byB0cmFjayB0aGUgaG9vaywgd2hpY2ggaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBkZWJ1Z2dpbmcgYW5kIG9wdGltaXppbmcgbmV0d29yayB0cmFmZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM5MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzkyOlx0c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcbjIzOTM6XHRcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbjIzOTQ6XHRcdFx0XHRcdFx0ICAgICAgYm9vbCBwcmVmaXgpXG4yMzk1Olx0e1xuMjM5NjpcdFx0c3RydWN0IG5mX2hvb2tfb3BzICpvcHM7XG4yMzk3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMjM5ODpcdFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuMjM5OTpcdFx0aW50IGVycjtcbjI0MDA6XHRcbjI0MDE6XHRcdGhvb2sgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZ0X2hvb2ssIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yNDAyOlx0XHRpZiAoIWhvb2spXG4yNDAzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMjQwNDpcdFxuMjQwNTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aG9vay1cdTAwM2VvcHNfbGlzdCk7XG4yNDA2Olx0XG4yNDA3Olx0XHRlcnIgPSBubGFfc3Ryc2NweShob29rLVx1MDAzZWlmbmFtZSwgYXR0ciwgSUZOQU1TSVopO1xuMjQwODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI0MDk6XHRcdFx0Z290byBlcnJfaG9va19mcmVlO1xuMjQxMDpcdFxuMjQxMTpcdFx0LyogaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgTlVMLWNoYXIgd2hlbiBjb21wYXJpbmcgbm9uLXByZWZpeGVzICovXG4yNDEyOlx0XHRob29rLVx1MDAzZWlmbmFtZWxlbiA9IHN0cmxlbihob29rLVx1MDAzZWlmbmFtZSkgJiM0MzsgIXByZWZpeDtcbjI0MTM6XHRcbjI0MTQ6XHRcdC8qIG5mX3RhYmxlc19uZXRkZXZfZXZlbnQoKSBpcyBjYWxsZWQgdW5kZXIgcnRubF9tdXRleCwgdGhpcyBpc1xuMjQxNTpcdFx0ICogaW5kaXJlY3RseSBzZXJpYWxpemluZyBhbGwgdGhlIG90aGVyIGhvbGRlcnMgb2YgdGhlIGNvbW1pdF9tdXRleCB3aXRoXG4yNDE2Olx0XHQgKiB0aGUgcnRubF9tdXRleC5cbjI0MTc6XHRcdCAqL1xuMjQxODpcdFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG4yNDE5Olx0XHRcdGlmIChzdHJuY21wKGRldi1cdTAwM2VuYW1lLCBob29rLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKVxuMjQyMDpcdFx0XHRcdGNvbnRpbnVlO1xuMjQyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBjYW4gc2VlIHRoYXQgdGhlIG1lbW9yeSBmb3IgdGhlIGBob29rYCBzdHJ1Y3QgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIGBremFsbG9jX29iamAgdGFrZXMgY2FyZSBvZiB0aGUgemVyb2luZywgYW5kIHRoZW4gYG5sYV9zdHJzY3B5YCBoYW5kbGVzIHRoZSBzdHJpbmcgY29weSBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZS4gSSYjMzk7dmUgZ290IGBob29rLSZndDtpZm5hbWVsZW5gIHNldCBiYXNlZCBvbiBgc3RybGVuYC4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBjb2RlIGlzIHNhZmUgaW4gdGhhdCByZXNwZWN0LgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoaXMgbG9naWMgYnVnIHJlbGF0ZWQgdG8gYG5mdF9ob29rX2xpc3RfZmluZGAuIEl0JiMzOTtzIG1hdGNoaW5nIGhvb2tzIGluY29ycmVjdGx5IGR1ZSB0byBsZW5ndGggb3IgcHJlZml4IHN0YXR1cyBkaXNjcmVwYW5jaWVzLiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBmYWlsaW5nIGhvb2sgYWRkaXRpb25zIGJlY2F1c2UgYSAmIzM0O2R1cGxpY2F0ZSYjMzQ7IGlzIGZvdW5kIHdoZW4gaXQmIzM5O3Mgbm90LCBvciBkZWxldGluZyB0aGUgd3JvbmcgaG9vayBhbHRvZ2V0aGVyLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgbGlrZSBhbiB1bmluaXRpYWxpemVkIHJlYWQuCgpJIHRob3VnaHQgZm9yIGEgc2Vjb25kIHRoYXQgdGhpcyBtaWdodCBiZSBzb21ldGhpbmcgS01TQU4gY291bGQgZmxhZywgYnV0IG5vLiBFdmVuIGlmIEtNU0FOICp3ZXJlKiBydW5uaW5nLCBpdCB3b3VsZG4mIzM5O3QgZGV0ZWN0IGEgbG9naWMgYnVnIGxpa2UgdGhpcyBiZWNhdXNlIGl0JiMzOTtzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiByZWFkcywgd2hpY2ggYXJlbiYjMzk7dCBwcmVzZW50IGhlcmUuIGBob29rLSZndDtpZm5hbWVgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBubGFfc3Ryc2NweWAgYW5kIHplcm9lZCBvdXQgYnkgYGt6YWxsb2Nfb2JqYCwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoZSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4KCkkmIzM5O20gY29uZmlkZW50IHdlJiMzOTt2ZSBydWxlZCBvdXQgbWVtb3J5IGlzc3VlcyBoZXJlLiBUaGUgZml4IHNlZW1zIGZvY3VzZWQgb24gY29ycmVjdGluZyB0aGUgYG5mdF9ob29rX2xpc3RfZmluZGAgbG9naWMgdG8gZW5zdXJlIGNvcnJlY3QgaG9vayBtYXRjaGluZy4gSG93ZXZlciwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGluIHRoaXMgcGF0Y2ggdG8ga2VlcCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtob29rX2lzX3ByZWZpeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE5Mzc9c3RhdGljIGludCBuZnRfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N0YXRzIF9fcGVyY3B1ICpzdGF0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk3NjpzdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTgxPXN0YXRpYyBpbnQgbmZ0X25sYV9wdXRfaG9va19kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9ob29rICpob29rKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk4Mi17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTgzOlx0aW50IGF0dHIgPSBob29rX2lzX3ByZWZpeChob29rKSA/IE5GVEFfREVWSUNFX1BSRUZJWCA6IE5GVEFfREVWSUNFX05BTUU7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTg0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIwNDI9c3RhdGljIGludCBuZnRfZHVtcF9iYXNlY2hhaW5faG9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwNzktXHRcdGlmIChkdW1wX2hvb2tfY3R4Lm4gPT0gMSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjIwODA6XHRcdCAgICAhaG9va19pc19wcmVmaXgoZHVtcF9ob29rX2N0eC5maXJzdCkgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDgxLVx0XHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlRBX0hPT0tfREVWLCBkdW1wX2hvb2tfY3R4LmZpcnN0LVx1MDAzZWlmbmFtZSkpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDItXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ0MzpcdFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0NC1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDkKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gQmFzaWNhbGx5LCBhbGwgdGhpcyBkb2VzIGlzIHR3ZWFrIGBob29rX2lzX3ByZWZpeGAgdG8gYWNjZXB0IGEgYGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9va2AgYW5kIHVwZGF0ZXMgYG5mdF9ob29rX2xpc3RfZmluZGAgdG8gdXNlIHRoYXQuIE5vdGhpbmcgZmFuY3ksIGp1c3QgYSBiaXQgb2YgcmVmYWN0b3JpbmcsIGFuZCBpdCYjMzk7cyBmaXhpbmcgYSBsb2dpYyBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAuIFNwZWNpZmljYWxseSwgdGhhdCBgc3RybmNtcGAgY2FsbCwgdXNpbmcgYG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbilgLCBoYWQgdGhlIHBvdGVudGlhbCB0byBnaXZlIGluY29ycmVjdCBtYXRjaGVzIHdoZW4gaW50ZXJmYWNlIG5hbWVzIHdlcmUgZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4ZXMg4oCTIG5vdCBnb29kLgoKVGhlIGtleSB0aGluZyBpcywgdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5mdF9ob29rYCBzdHJ1Y3RzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoICpndWFyYW50ZWVzKiB6ZXJvZWQgbWVtb3J5LiBBbHNvLCB0aGUgaW50ZXJmYWNlIG5hbWUgaXRzZWxmIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIGBubGFfc3Ryc2NweWAuIEkmIzM5O3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBhbmQgY2FuIGNvbmZpZGVudGx5IHNheSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvZiBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEsIGFuZCBubyBjb250cm9sIGZsb3cgZGVjaXNpb25zIGJlaW5nIG1hZGUgYmFzZWQgb24gc29tZXRoaW5nIHRoYXQgaGFzbiYjMzk7dCBiZWVuIHNldC4KClNvLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdXNlZCwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgZmFsc2UgaW4gdGhpcyBjYXNlLiBJJiMzOTttIHNldHRpbmcgaXQgdG8gZmFsc2UgYW5kIHdpbGwgaW5jbHVkZSB0aGlzIHJlYXNvbmluZyBpbiB0aGUgY29tbWl0LiBJdOKAmXMgYSBjbGVhbiBmaXggd2l0aCBubyBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGhvb2tzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4IHN0YXR1cyAoZS5nLiwgbWF0Y2hpbmcgXCYjMzQ7ZXRoXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMFwmIzM0OykuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cdTAwM2VpZm5hbWVsZW4pYCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBob29rcyB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIG9yIHByZWZpeCBzdGF0dXMgKGUuZy4sIG1hdGNoaW5nIFwmIzM0O2V0aFwmIzM0OyB3aXRoIFwmIzM0O2V0aDBcJiMzNDspLiBUaGUgYG5mdF9ob29rYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGFuZCBpdHMgYGlmbmFtZWAgZmllbGQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBubGFfc3Ryc2NweWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGlzc3VlIGlzIHB1cmVseSBhIHN0cmluZyBjb21wYXJpc29uIGxvZ2ljIGJ1Zywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuMDc1MDIzNzEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Mjg2MjcxMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX3VwZGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3Zmxvd3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsZmxvd3RhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3Mgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXggc3RhdHVzIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoXFxcIiB3aXRoIFxcXCJldGgwXFxcIikuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIG1hdGNoaW5nIGxvZ2ljIGZvciBuZXRkZXYgaG9va3MgaW4gbmZfdGFibGVzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBwYXJzaW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgbmV0ZGV2IGhvb2tzIGZvciBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaG9vayBtYXRjaGluZyBhbmQgc3Vic2VxdWVudCBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuMDc1MDMxMzAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2MzQwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NTNkMjUwZDg2MTlkNTQ0NWUxZTQ5NmRhNWNhZWI5NjNiZmNiODEzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjQzOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCBhZjM1N2Y2YzUwNzBiLi5lMmIxOGM0NzIyZmNjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5AQCAtMTk3Myw3ICsxOTczLDcgQEAgc3RhdGljIGludCBuZnRfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N0YXRzIF9fcGVyY3B1ICpzdGF0cylcXG4gXFx0cmV0dXJuIC1FTk9TUEM7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KHN0cnVjdCBuZnRfaG9vayAqaG9vaylcXG4rc3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxcbiB7XFxuIFxcdHJldHVybiBzdHJsZW4oaG9vay1cXHUwMDNlaWZuYW1lKSBcXHUwMDNlPSBob29rLVxcdTAwM2VpZm5hbWVsZW47XFxuIH1cXG5AQCAtMjQ0MCw4ICsyNDQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuIFxcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmICghc3RybmNtcChob29rLVxcdTAwM2VpZm5hbWUsIHRoaXMtXFx1MDAzZWlmbmFtZSxcXG4tXFx0XFx0XFx0ICAgICBtaW4oaG9vay1cXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pKSkge1xcbitcXHRcXHRpZiAoaG9va19pc19wcmVmaXgoaG9vaykgIT0gaG9va19pc19wcmVmaXgodGhpcykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaG9vay1cXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXFx1MDAzZWlmbmFtZWxlbilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICghc3RybmNtcChob29rLVxcdTAwM2VpZm5hbWUsIHRoaXMtXFx1MDAzZWlmbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lbGVuKSkge1xcbiBcXHRcXHRcXHRpZiAoaG9vay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuNjE2MjY2OTM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA0ODkwNDExNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX3VwZGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3Zmxvd3RhYmxlXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsZmxvd3RhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgbWF0Y2hpbmcgbG9naWMgZm9yIG5ldGRldiBob29rcyBpbiBuZl90YWJsZXMuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHBhcnNpbmcsIHVwZGF0aW5nLCBvciBkZWxldGluZyBuZXRkZXYgaG9va3MgZm9yIGNoYWlucyBhbmQgZmxvd3RhYmxlcy4gVGhlIGJ1ZyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIG1hdGNoaW5nIGFuZCBzdWJzZXF1ZW50IGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXRmaWx0ZXIuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NTNkMjUwZDg2MTlkNTQ0NWUxZTQ5NmRhNWNhZWI5NjNiZmNiODEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTE6NDM6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBhZjM1N2Y2YzUwNzBiLi5lMmIxOGM0NzIyZmNjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtMTk3Myw3ICsxOTczLDcgQEAgc3RhdGljIGludCBuZnRfZHVtcF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N0YXRzIF9fcGVyY3B1ICpzdGF0cylcbiBcdHJldHVybiAtRU5PU1BDO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXG4rc3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxuIHtcbiBcdHJldHVybiBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW47XG4gfVxuQEAgLTI0NDAsOCArMjQ0MCwxMSBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuIFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSxcbi1cdFx0XHQgICAgIG1pbihob29rLVx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cdTAwM2VpZm5hbWVsZW4pKSkge1xuK1x0XHRpZiAoaG9va19pc19wcmVmaXgoaG9vaykgIT0gaG9va19pc19wcmVmaXgodGhpcykpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChob29rLVx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVx1MDAzZWlmbmFtZWxlbilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG4gXHRcdFx0aWYgKGhvb2stXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9IT09LX1JFTU9WRSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDM6NTcuNjE2MjY4NzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODE0MjE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GdGFibGVzIEFQSSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb2RpZmllZCB0aGUgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCBub3cgYWNjZXB0cyBhIGBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2tgIGFzIGFuIGFyZ3VtZW50LiBUaGF0J3MgYSBnb29kIGNoYW5nZSwgbWFrZXMgaXQgbW9yZSBmbGV4aWJsZSBhbmQgcG90ZW50aWFsbHkgcmV1c2FibGUuXG5cblRoZW4gSSBzZWUgdGhlIGNoYW5nZSB3aXRoaW4gYG5mdF9ob29rX2xpc3RfZmluZGAuIFRoZXkndmUgYWRkZWQgc29tZSBhZGRpdGlvbmFsIGNoZWNrcyBiZWZvcmUgdGhlIGBzdHJuY21wYCBjYWxsLiBTbWFydC4gVGhleSdyZSBub3cgY29tcGFyaW5nIHRoZSByZXN1bHRzIG9mIGBob29rX2lzX3ByZWZpeChob29rKWAgd2l0aCBgaG9va19pc19wcmVmaXgodGhpcylgLCAqYW5kKiB0aGV5J3JlIGNoZWNraW5nIGlmIGBob29rLVx1MDAzZWlmbmFtZWxlbmAgaXMgZGlmZmVyZW50IGZyb20gYHRoaXMtXHUwMDNlaWZuYW1lbGVuYC4gVGhpcyBpcyBhbGwgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBhbmQgcHJldmVudCB1bm5lY2Vzc2FyeSBjYWxscyB0byBgc3RybmNtcGAuIEJ5IHNob3J0LWNpcmN1aXRpbmcgd2hlbiB0aGVyZSdzIGEgcXVpY2sgZGlmZmVyZW5jZSAocHJlZml4IHN0YXR1cyBvciBsZW5ndGgpLCB0aGV5J3JlIGF2b2lkaW5nIHRoZSBtb3JlIGV4cGVuc2l2ZSBzdHJpbmcgY29tcGFyaXNvbiB3aGVuIGl0J3Mgbm90IG5lZWRlZC4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIGxhcmdlIHJ1bGUgc2V0cy4gSSdkIGxpa2UgdG8gZGlnIGludG8gKndoeSogdGhleSBjaG9zZSB0aGVzZSBwYXJ0aWN1bGFyIGNoZWNrcywgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzZW5zaWJsZSBvcHRpbWl6YXRpb24gdG8gbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDowMi4yNDQ0MTM4NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3MTE1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2hvb2tfbGlzdF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MDIuMzIwMTI5MTQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNzE2MjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBOZXRmaWx0ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgQVBJLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjcml0aWNhbCBhcmVhIHRvIGZvY3VzIG9uLiBOZXRmaWx0ZXIgaXMgYSBmdW5kYW1lbnRhbCBjb21wb25lbnQgb2YgdGhlIExpbnV4IGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBhbnkgdnVsbmVyYWJpbGl0aWVzIHRoZXJlIGFyZSBhIHNpZ25pZmljYW50IHJpc2suIFRoaXMgaXMgdGhlIHBlcmZlY3QgYXJlYSB0byBiZWdpbiBzb21lIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uIGZvciBmdXp6aW5nIHNob3VsZCBiZSBgbmZ0X2hvb2tfbGlzdF9maW5kYCAoc2luY2UgdGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBpdCwgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXR0YWNrIHN1cmZhY2UpLCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc2AsIGBuZnRfZmxvd3RhYmxlX3VwZGF0ZWAsIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvb2sgbWFuYWdlbWVudCBhbmQgY2hhaW4gdXBkYXRlcywgc28gdGhleSByZXByZXNlbnQgdGhlIG1vc3QgbGlrZWx5IHBvaW50cyBvZiBpbnRlcmFjdGlvbi5cblxuQmVmb3JlIGdldHRpbmcgdG9vIGZhciBkb3duIHRoYXQgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGVzZSBmZWF0dXJlcyBhbmQsIGNvbnNlcXVlbnRseSwgcHJvcGVybHkgc2V0dXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjA2Ljc0NzI5MzczNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgxNTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDowNi44MjMxMTI1ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU0MjEzNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGJhc2UgY29uZmlnIGlzIGRlZmluaXRlbHkgYE5GX1RBQkxFU2AsIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGFsc28gbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgZm9yIHRoaXMgcGF0Y2guIFRoZSBwYXRjaCB0b3VjaGVzIGBuZnRfaG9va19saXN0X2ZpbmRgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBzY3JlYW1zIFwibmV0ZGV2IGhvb2tzXCIuIFRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byBuZXRkZXYgaG9va3MgYnV0IEkndmUgZ290IHRvIGNoZWNrIHdoZXRoZXIgaXQncyBndWFyZGVkIGJ5IHRoZSBgTkZfVEFCTEVTX05FVERFVmAgb3B0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBpZiB0aGUgZnVuY3Rpb24ncyBpbmNsdXNpb24gb3IgdXNlIGlzIGNvbmRpdGlvbmFsIG9uIHRoYXQgc3BlY2lmaWMgY29uZmlnIG9wdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgaW4gYG5mX3RhYmxlc19hcGkuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoxMS4zNzczMjkyMzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0OTM0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2hvb2tfbGlzdF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MTEuNDM0ODI2NjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2ODU5NDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYG5mdF9ob29rX2xpc3RfZmluZGAqKlxuXG5Pa2F5LCBzbyBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gR29vZC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBpdCdzIG5vdCBleHBvc2VkIGdsb2JhbGx5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBmdW5jdGlvbnMgdGhhdCAqZG8qIGNhbGwgaXQuIExldCdzIHNlZS4uLiB0aGUgY29kZSB0ZWxscyBtZSBpdCdzIHRoZXNlIG9uZXM6IGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc2AsIGBuZnRfZmxvd3RhYmxlX3VwZGF0ZWAsIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYC4gUmlnaHQsIHRob3NlIGFyZSBteSB0YXJnZXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aG9zZSBmdW5jdGlvbnMgaW4gZGV0YWlsIHRvIHNlZSAqdGhlaXIqIHN0YXRpYyBzdGF0dXMuIFRoYXQgd2lsbCBoZWxwIG1lIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgYW5kIHBpbnBvaW50IHRoZSB0cnVlIGNhbGwgZmxvdy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGV5IHRoZW1zZWx2ZXMgYXJlIHN0YXRpYywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTgsIk91dHB1dFRva2VucyI6ODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoxNi40MDM0MjM0NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTUxNjczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzfG5mX3RhYmxlc191cGRjaGFpbnxuZnRfZGVsY2hhaW5faG9va3xuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rc3xuZnRfZmxvd3RhYmxlX3VwZGF0ZXxuZnRfZGVsZmxvd3RhYmxlX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ1Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDU4OnN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ1OS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzNC1cXHR9IGVsc2UgaWYgKHRiW05GVEFfSE9PS19ERVZTXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzU6XFx0XFx0ZXJyID0gbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhuZXQsIHRiW05GVEFfSE9PS19ERVZTXSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGhvb2tfbGlzdCwgZXh0YWNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDg9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yODkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI4OTQ6c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI4OTUtXFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzExMD1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIwMy1cXHRcXHRmbGFncyB8PSBjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fQkFTRTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjA0OlxcdFxcdHJldHVybiBuZl90YWJsZXNfdXBkY2hhaW4oXFx1MDAyNmN0eCwgZ2VubWFzaywgcG9saWN5LCBmbGFncywgYXR0cixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjA1LVxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMjc9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2RlbGhvb2tfYWJvcnQoc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMzc6c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyOTI9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNDUtXFx0XFx0XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzQ2OlxcdFxcdFxcdFxcdHJldHVybiBuZnRfZGVsY2hhaW5faG9vayhcXHUwMDI2Y3R4LCBiYXNlY2hhaW4sIGV4dGFjayk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0Ny1cXHRcXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODY5PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV9wYXJzZV9ob29rKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTIxLVxcdGlmICh0YltORlRBX0ZMT1dUQUJMRV9IT09LX0RFVlNdKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODkyMjpcXHRcXHRlcnIgPSBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKGN0eC1cXHUwMDNlbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5MjMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdGJbTkZUQV9GTE9XVEFCTEVfSE9PS19ERVZTXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMTI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX29wcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDMxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwMzI6c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTAzMy1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDg2PXN0YXRpYyB2b2lkIG5mdF9mbG93dGFibGVfdW5yZWdpc3Rlcl90cmFuc19ob29rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTEwNDpzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxMDUtXFx0XFx0XFx0XFx0c3RydWN0IG5mdF9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxNTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE1OTpcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhjdHgtXFx1MDAzZW5ldCwgY3R4LVxcdTAwM2V0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTYwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgZmxvd3RhYmxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkxOTY9c3RhdGljIGludCBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MjM5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkyNDA6XFx0XFx0cmV0dXJuIG5mdF9mbG93dGFibGVfdXBkYXRlKFxcdTAwMjZjdHgsIGluZm8tXFx1MDAzZW5saCwgZmxvd3RhYmxlLCBleHRhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyNDEtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTMwMC1cXHQvKiBUaGlzIG11c3QgYmUgTEFTVCB0byBlbnN1cmUgbm8gcGFja2V0cyBhcmUgd2Fsa2luZyBvdmVyIHRoaXMgZmxvd3RhYmxlLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzMDE6XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3MoY3R4Lm5ldCwgdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTMwMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTMzMD1zdGF0aWMgdm9pZCBuZnRfZmxvd3RhYmxlX2hvb2tfcmVsZWFzZShzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZV9ob29rICpmbG93dGFibGVfaG9vaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzMzktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM0MDpzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNDEtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MzkyPXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQzNi1cXHRpZiAobmxhW05GVEFfRkxPV1RBQkxFX0hPT0tdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk0Mzc6XFx0XFx0cmV0dXJuIG5mdF9kZWxmbG93dGFibGVfaG9vayhcXHUwMDI2Y3R4LCBmbG93dGFibGUsIGV4dGFjayk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQzOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MTYuNTEyOTQ1Mzc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDE1ODg2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgVGFibGUgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGFsbCB0aGVzZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gd2hhdCBJICphbHJlYWR5KiBrbm93LCB0aGF0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgbW9kdWxlIGFyZSBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBkZWVwZXIsIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgKnRob3NlKiBlbnRyeSBwb2ludHMgYXJlIGFsc28sIGJ5IGRlc2lnbiwgZGVjbGFyZWQgYXMgc3RhdGljLiBMZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLCBpdCB3aWxsIHNhdmUgdGltZSBpbiB0aGUgbG9uZyBydW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjIsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoyMC4xNTQ1Mzc0MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTY2NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19uZXdjaGFpbnxuZl90YWJsZXNfZGVsY2hhaW58bmZfdGFibGVzX25ld2Zsb3d0YWJsZXxuZl90YWJsZXNfZGVsZmxvd3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMwOTI9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKm5mdF9jaGFpbl9sb29rdXBfYnlpZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTA5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMxMTA6c3RhdGljIGludCBuZl90YWJsZXNfbmV3Y2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTExLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyMzc9c3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjkyOnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI5My1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTk1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxOTY6c3RhdGljIGludCBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE5Ny1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MzQwPXN0YXRpYyBpbnQgbmZ0X2RlbGZsb3d0YWJsZV9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzkxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkzOTI6c3RhdGljIGludCBuZl90YWJsZXNfZGVsZmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM5My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk1MS1cXHRbTkZUX01TR19ORVdDSEFJTl0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk1MjpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld2NoYWluLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NTMtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05OTYzLVxcdFtORlRfTVNHX0RFTENIQUlOXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTY0OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk2NS1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5NjktXFx0W05GVF9NU0dfREVTVFJPWUNIQUlOXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5OTcwOlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsY2hhaW4sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk3MS1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDkzLVxcdFtORlRfTVNHX05FV0ZMT1dUQUJMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwOTQ6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19uZXdmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwOTUtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDEwNS1cXHRbTkZUX01TR19ERUxGTE9XVEFCTEVdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMTA2OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTA3LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX0JBVENILFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMTEtXFx0W05GVF9NU0dfREVTVFJPWUZMT1dUQUJMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAxMTI6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19kZWxmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMTMtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjIwLjIxODUwODM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODM1MDQ5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgVGFibGVzIEFQSSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTmV0ZmlsdGVyIFRhYmxlcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgY2FsbGJhY2tzIGluIGBuZl90YWJsZXNfY2JgIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydCwgYW5kIHRoYXQgdGhlIG1haW4gZW50cnkgcG9pbnQgbWlnaHQgYmUgc29tZXRoaW5nIGxpa2UgYG5mbmV0bGlua19yY3ZfbXNnYC4gQnV0IGFjdHVhbGx5LCB0aGlua2luZyBhYm91dCB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb25zLCBldmVuIHRob3VnaCBmdW5jdGlvbnMgbGlrZSBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYCBhcmUgKnN0YXRpYyosIHRoZXkncmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggbWVhbnMgdGhleSAqYXJlbid0KiBpbmxpbmVkLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1cywgYmVjYXVzZSB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdG9sZCBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBzaW5jZSB0aGUgY29tcGlsZXIncyBub3QgZ29pbmcgdG8gaW5saW5lIHRoZXNlIGR1ZSB0byBob3cgdGhleSBhcmUgdXNlZCwgdGhleSBmaXQgdGhlIGJpbGwuIE5vdywgaXMgdGhlcmUgYW55IGNoYW5jZSBmb3IgKm5vbiotc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9ucz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjI2LjUwMjAxNTk0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1ODQ1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY5PV9fcHJpbnRmKDIsIDMpIGludCBuZnRfcmVxdWVzdF9tb2R1bGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpmbXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZXF1ZXN0X21vZHVsZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNi0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE4MzI9dm9pZCBuZnRfcmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKmN0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0MS19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTg0MjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcmVnaXN0ZXJfY2hhaW5fdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xODQ0PXZvaWQgbmZ0X3VucmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKmN0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTg0OS19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTg1MDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9jaGFpbl90eXBlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xODUxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzM4Nz1pbnQgbmZ0X3JlZ2lzdGVyX2V4cHIoc3RydWN0IG5mdF9leHByX3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAxLX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozNDAyOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWdpc3Rlcl9leHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDAzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzQxMD12b2lkIG5mdF91bnJlZ2lzdGVyX2V4cHIoc3RydWN0IG5mdF9leHByX3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNDE1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozNDE2OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF91bnJlZ2lzdGVyX2V4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM0MTctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04MDcwPWludCBuZnRfcmVnaXN0ZXJfb2JqKHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgKm9ial90eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODA3OS19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODA4MDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcmVnaXN0ZXJfb2JqKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDgxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODA4OD12b2lkIG5mdF91bnJlZ2lzdGVyX29iaihzdHJ1Y3QgbmZ0X29iamVjdF90eXBlICpvYmpfdHlwZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwOTMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwOTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X3VucmVnaXN0ZXJfb2JqKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDk1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODc1Mj12b2lkIG5mdF9vYmpfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzcwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NzcxOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9vYmpfbm90aWZ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzcyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODc4ND12b2lkIG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZShzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgKnR5cGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04Nzg5LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NzkwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04NzkyPXZvaWQgbmZ0X3VucmVnaXN0ZXJfZmxvd3RhYmxlX3R5cGUoc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlICp0eXBlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc5Ny19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODc5ODpFWFBPUlRfU1lNQk9MX0dQTChuZnRfdW5yZWdpc3Rlcl9mbG93dGFibGVfdHlwZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODc5OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4MTA9c3RydWN0IG5mdF9mbG93dGFibGUgKm5mdF9mbG93dGFibGVfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MjMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg4MjQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3d0YWJsZV9sb29rdXApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MjUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODgyNj12b2lkIG5mX3RhYmxlc19kZWFjdGl2YXRlX2Zsb3d0YWJsZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODg0MC19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODg0MTpFWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfZGVhY3RpdmF0ZV9mbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4NDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NzQyPXN0cnVjdCBuZl9ob29rX29wcyAqbmZ0X2hvb2tfZmluZF9vcHMoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc1Mi19XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTc1MzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfaG9va19maW5kX29wcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc1NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NzU1PXN0cnVjdCBuZl9ob29rX29wcyAqbmZ0X2hvb2tfZmluZF9vcHNfcmN1KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vayxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NjUtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk3NjY6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2hvb2tfZmluZF9vcHNfcmN1KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05NzY3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTAyODM9dm9pZCBuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjg4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDI4OTpFWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDI5MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNTM3PWludCBuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTQ4LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU0OTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1NTAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1NTE9aW50IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTY2LX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU2NzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTY4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1ODE9aW50IG5mdF9wYXJzZV91MzJfY2hlY2soY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IG1heCwgdTMyICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1OTEtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTkyOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV91MzJfY2hlY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTkzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE2MjQ9aW50IG5mdF9kdW1wX3JlZ2lzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhdHRyLCB1bnNpZ25lZCBpbnQgcmVnKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE2MzItfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjMzOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kdW1wX3JlZ2lzdGVyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTYzNC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNjQ3PWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfbG9hZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE2NzgtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNjc5OkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9wYXJzZV9yZWdpc3Rlcl9sb2FkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTY4MC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNzIzPWludCBuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNzQxLX1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTc0MjpFWFBPUlRfU1lNQk9MX0dQTChuZnRfcGFyc2VfcmVnaXN0ZXJfc3RvcmUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNzQzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE5MDg9aW50IG5mdF9kYXRhX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9kYXRhICpkYXRhLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE5MzktfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExOTQwOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9kYXRhX2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExOTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDoyNi41NTk2MDgyODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3OTA4MzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOZXRmaWx0ZXIgVGFibGUgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnV6emluZyB0aGUgbmV0ZmlsdGVyIHRhYmxlcyBjb2RlLiBUaGUgb2J2aW91cyBlbnRyeSBwb2ludHMgYXJlIHRob3NlIGBuZm5ldGxpbmtgIGNhbGxiYWNrcywgYnV0IGZvciB0aGlzIGZ1enppbmcgZXhlcmNpc2UsIEkgdGhpbmsgdGFyZ2V0aW5nIHRob3NlIGxhcmdlciwgbm9uLWlubGluZWQgZnVuY3Rpb25zIGxpa2UgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAgaXMgdGhlIHJpZ2h0IG1vdmUuIFRoZXkncmUgZ29pbmcgdG8gZ2l2ZSBtZSBtb3JlIHN1cmZhY2UgYXJlYSB0byB3b3JrIHdpdGguXG5cbldhaXQgYSBzZWNvbmQsIEkganVzdCBzYXcgdGhhdCBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBzdGF0aWMuIFRoYXQncyBmaW5lLCBidXQgc28gaXMgYG5mX3RhYmxlc19uZXdjaGFpbmAsIHNvIHRoYXQncyBub3QgYSBkaXNxdWFsaWZpZXIuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRob3NlIGNvcmUgZnVuY3Rpb25zIGFsb25nIHdpdGggYG5mX3RhYmxlc191cGRjaGFpbmAgbWFrZSBpdCBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuTm93LCBpcyBgTkZfVEFCTEVTYCB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIHdvcnJ5IGFib3V0PyBJIHN0cm9uZ2x5IHN1c3BlY3QgaXQgaXMsIGJ1dCBsZXQncyBkb3VibGUtY2hlY2suIEknbGwgcG9rZSBhcm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCB0byBsb29rIGZvciBhIGAjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW1wYWN0IHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDozMy45Mzg2OTQyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4NzMyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xNTQ3PXN0YXRpYyBib29sIG5mdF9zdXBwb3J0ZWRfZmFtaWx5KHU4IGZhbWlseSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NTgtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTU1OTojaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xNTYwLVxcdFxcdHx8IGZhbWlseSA9PSBORlBST1RPX05FVERFVlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDozNC4wMjI1NzE3NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzNjg4MDI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgTkZQUk9UT19ORVRERVZgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgTkZQUk9UT19ORVRERVZgIGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCB1cG9uIGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXZhaWxhYmlsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5JIHNlZSB0aGF0IGBuZnRfaG9va19saXN0X2ZpbmRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBuZXRkZXYgaG9va3MuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbmV0ZGV2IGludGVncmF0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayByZXZvbHZlcyBhcm91bmQgbGlzdCBtYW5pcHVsYXRpb24gZm9yIGhvb2sgbWFuYWdlbWVudC4gSSBzaG91bGQgbG9vayBpbnRvIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHRvIGNsYXJpZnkgdGhpcy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIG1vcmUgZ3JhbnVsYXIgYXNwZWN0cy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYG5mdF9jaGFpbl9wYXJzZV9uZXRkZXZgIHRvIHVuZGVyc3RhbmQgaG93IG5ldGRldi1zcGVjaWZpYyBjaGFpbnMgYXJlIHBhcnNlZCBhbmQgZGVmaW5lZC4gU2ltdWx0YW5lb3VzbHksIEkgd2FudCB0byBleHBsb3JlIGhvdyB0aGUgc3lzdGVtIHNldHMgdXAgYW5kIHJlZ2lzdGVycyB0aGUgbmVjZXNzYXJ5IG5ldGRldiBob29rcyB1c2luZyBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBsaWtlbHkgZ29pbmcgdG8gZXhwb3NlIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgYWxsIHRoaXMgbmV0ZGV2IGludGVncmF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzQ1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6MzkuNjU5NDU0ODc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE3NjE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTI9c3RydWN0IG5mdF9jaGFpbl9ob29rIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUxOTpzdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTQ5PXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX2hvb2soc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMC1cXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGZhbWlseSwgaG9vay1cXHUwMDNlbnVtKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI2MzE6XFx0XFx0ZXJyID0gbmZ0X2NoYWluX3BhcnNlX25ldGRldihuZXQsIGhhLCBcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCwgZXh0YWNrLCBmbGFncyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDozOS43MjY2MzYxNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NzI5Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBOZXRmaWx0ZXIgYW5kIGVCUEYgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgKipcblxuQWxyaWdodCwgc28gdGhlIGNvZGUgaXMgZ29pbmcgdG8gY2FsbCBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkLCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBhcmNoaXRlY3R1cmUsIGlzOiBpcyB0aGlzIGNoYWluIGV2ZW4gYSBuZXRkZXYgY2hhaW4/IFRoYXQncyB0aGUgdmVyeSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwgaXMgY3J1Y2lhbC4gQW0gSSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCBmaWx0ZXIgY2hhaW4sIG9yIHNvbWV0aGluZyBzcGVjaWZpY2FsbHkgdGllZCB0byBuZXR3b3JrIGRldmljZSBwcm9jZXNzaW5nPyAgVGhlIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgIGZ1bmN0aW9uIGlzIHRoZSBwb2ludCBvZiBpbnRlcmVzdC4gV2hhdCBkb2VzIHRoYXQgZnVuY3Rpb24gZG8/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTYzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6NDIuNzAzOTM1NjI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1OTA1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQyNT1zdGF0aWMgaW50IG5mX3RhYmxlc19yZWdpc3Rlcl9ob29rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDI6XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDMtXFx0XFx0cmV0dXJuIG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDQ4PXN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NjEtXFx0LyogbXVzdCBhbHNvIGJlIGNhbGxlZCBmb3IgZG9ybWFudCB0YWJsZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NjI6XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ2My1cXHRcXHRuZnRfbmV0ZGV2X3VucmVnaXN0ZXJfaG9va3MobmV0LCB0YWJsZSwgXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjA0Mj1zdGF0aWMgaW50IG5mdF9kdW1wX2Jhc2VjaGFpbl9ob29rKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjIwNjA6XFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldihmYW1pbHksIG9wcy1cXHUwMDNlaG9va251bSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDYxLVxcdFxcdG5lc3RfZGV2cyA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIE5GVEFfSE9PS19ERVZTKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzNzEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM3MjpcXHRcXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KHRhYmxlLVxcdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cXHUwMDNlb3BzLmhvb2tudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM3My1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9vaywgbmV4dCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1NDk9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNjI5LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZob29rLVxcdTAwM2VsaXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNjMwOlxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYoZmFtaWx5LCBob29rLVxcdTAwM2VudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjYzMS1cXHRcXHRlcnIgPSBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KG5ldCwgaGEsIFxcdTAwMjZob29rLVxcdTAwM2VsaXN0LCBleHRhY2ssIGZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI2OTk9c3RhdGljIGludCBuZnRfYmFzZWNoYWluX2luaXQoc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sIHU4IGZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MDktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMDpcXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGZhbWlseSwgaG9vay1cXHUwMDNlbnVtKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTEtXFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCwgXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjkzMy1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyOTM0OlxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYoY3R4LVxcdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cXHUwMDNlb3BzLmhvb2tudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjkzNS1cXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaCwgbmV4dCwgXFx1MDAyNmhvb2subGlzdCwgbGlzdCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjk5OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMDAwOlxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXFx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9va251bSkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMDAxLVxcdFxcdFxcdGVyciA9IG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MoY3R4LVxcdTAwM2VuZXQsIFxcdTAwMjZob29rLmxpc3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI5Mj1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzQ1OlxcdFxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXFx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9va251bSkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM0Ni1cXHRcXHRcXHRcXHRyZXR1cm4gbmZ0X2RlbGNoYWluX2hvb2soXFx1MDAyNmN0eCwgYmFzZWNoYWluLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDo0Mi44MTM1MzAwMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMDc4NjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGlzIGBuZnRfYmFzZV9jaGFpbl9uZXRkZXZgIHRoaW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBzdHJ1Y3R1cmUsIGl0cyBrZXkgbWVtYmVycywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgb3IgZmxhZ3MuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBnaXZlbiBpdHMgbmFtZSBzdWdnZXN0aW5nIGEgbmV0d29yayBkZXZpY2UgYXNzb2NpYXRpb24uIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IGhhbmRsaW5nIHNvbWUga2luZCBvZiBOZXRmaWx0ZXIgaG9vayBmb3IgdHJhZmZpYyB0cmF2ZXJzaW5nIG5ldHdvcmsgZGV2aWNlcywgYnV0IGEgcXVpY2sgaW5zcGVjdGlvbiBvZiB0aGUgZGVmaW5pdGlvbiB3aWxsIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGludGVyYWN0aW9ucyB3aXRoIGFueSBleGlzdGluZyBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZSBwcmVzZW5jZSBvZiBhbnkgbG9ja2luZyBtZWNoYW5pc21zLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgc3RydWN0dXJlICppcyogYmVmb3JlIEkgY2FuIGRldGVybWluZSB3aGF0IGl0ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDo0Ny4wMTQzMTkwOThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjYwMjY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfYmFzZV9jaGFpbl9uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD0xMzM2PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfdGFibGVfaXNfb3JwaGFuKGNvbnN0IHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTEzNDEtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjEzNDI6c3RhdGljIGlubGluZSBib29sIG5mdF9iYXNlX2NoYWluX25ldGRldihpbnQgZmFtaWx5LCB1MzIgaG9va251bSlcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTM0My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjQ3LjEyMDkyOTExN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcxNzg2MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTkZUYWJsZXMgQ29yZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJhc2UgY2hhaW4gbmV0d29yayBkZXZpY2UgaW50ZWdyYXRpb24gd29ya3MgaW4gTkZUYWJsZXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYG5mdF9iYXNlX2NoYWluX25ldGRldmAgc3RydWN0dXJlIGRlZmluaXRpb24uIEknbGwgb3BlbiB1cCBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oYCDigJMgdGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgYnVpbGRpbmcgYmxvY2tzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZ3Jhc3BpbmcgdGhlIG5ldGRldi1yZWxhdGVkIGFzcGVjdHMgb2YgcnVsZSBwcm9jZXNzaW5nIGFuZCBob3cgdGhleSdyZSBjb25uZWN0ZWQgd2l0aGluIHRoZSBORlRhYmxlcyBmcmFtZXdvcmsuIEknbSBob3BpbmcgdG8gc2VlIGhvdyB0aGUgbmV0d29yayBkZXZpY2UgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhbmQgaG93IGl0J3MgbGlua2VkIHRvIHRoZSB0YWJsZXMgYW5kIGNoYWlucy4gS25vd2xlZGdlIG9mIHRoaXMgaXMgZXNzZW50aWFsIHRvIGRlYnVnZ2luZyBhbmQgdG8gd3JpdGluZyBvcHRpbWFsIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODgwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6NTAuNTkyNzE4MDY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KGludCBmYW1pbHksIHUzMiBob29rbnVtKVxcbjEzNDM6XFx0e1xcbjEzNDQ6XFx0XFx0cmV0dXJuIGZhbWlseSA9PSBORlBST1RPX05FVERFViB8fFxcbjEzNDU6XFx0XFx0ICAgICAgIChmYW1pbHkgPT0gTkZQUk9UT19JTkVUIFxcdTAwMjZcXHUwMDI2IGhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKTtcXG4xMzQ2OlxcdH1cXG4xMzQ3OlxcdFxcbjEzNDg6XFx0dm9pZCBuZnRfcmVnaXN0ZXJfY2hhaW5fdHlwZShjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluX3R5cGUgKik7XFxuMTM0OTpcXHR2b2lkIG5mdF91bnJlZ2lzdGVyX2NoYWluX3R5cGUoY29uc3Qgc3RydWN0IG5mdF9jaGFpbl90eXBlICopO1xcbjEzNTA6XFx0XFxuMTM1MTpcXHRpbnQgbmZ0X3JlZ2lzdGVyX2V4cHIoc3RydWN0IG5mdF9leHByX3R5cGUgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ0OjUwLjU5Mjg3MzU1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODUzMDQzODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldGZpbHRlciBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbmV0d29yayBmaWx0ZXJpbmcsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSByZWxldmFudCBOZXRmaWx0ZXIgcHJvdG9jb2xzOiBgTkZQUk9UT19ORVRERVZgIGFuZCBgTkZQUk9UT19JTkVUYCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgTkZfSU5FVF9JTkdSRVNTYC4gR2l2ZW4gdGhhdCwgYE5GX1RBQkxFU19JTkVUYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB0aGUgYmlnIHBpY3R1cmUuIFNpbmNlIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgZ29vZCBoYW5kbGUgb24gd2hhdCdzIGF2YWlsYWJsZSwgSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIGBORl9UQUJMRVNfTkVUREVWYCBhcyB3ZWxsLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgYm90aC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIGV2ZXJ5dGhpbmcgYW5kIGNhbiBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhvc2UgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzA4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NDo1NS40NDU5MjAzMThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjE5MDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTX05FVERFVnxjb25maWcgTkZfVEFCTEVTX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDQ6NTUuOTI4MTE1OTU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Mjg1MjU0NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgbmZ0YWJsZXNgLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgYXJlIGJvdGggZGVzaXJhYmxlIHRvIGhhdmUgZW5hYmxlZCwgYW5kIG5hdHVyYWxseSwgd2UgbmVlZCBgTkZfVEFCTEVTYCBpdHNlbGYgYXMgYSBiYXNlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHNldHVwLiBBaCwgaGVyZSdzIGEgZGVwZW5kZW5jeTogYE5GX1RBQkxFU19JTkVUYCByZWxpZXMgb24gYElQVjZgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGEgcmVhc29uYWJsZSBkZXBlbmRlbmN5LiBDb25zZXF1ZW50bHksIGBJUFY2YCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHByb3Blcmx5IHV0aWxpemUgYE5GX1RBQkxFU19JTkVUYC4gQWxyaWdodCwgbm93IEkgd2lsbCBtb3ZlIG9uIHRvIGV4YW1pbmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9UQUJMRVNfTkVUREVWYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NToxMS4yMTMzNzMwMTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzI6XFx0Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuIDQ3MzpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gNDc0OlxcdFxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcbiA0NzU6XFx0XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XFxuIDQ3NjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDc3OlxcdFxcdGhlbHBcXG4gNDc4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG1peGVkIElQdjQvSVB2NiBcXFwiaW5ldFxcXCIgdGFibGUuXFxuIDQ3OTpcXHRcXG4gNDgwOlxcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxuIDQ4MTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXFxcIm5ldGRldlxcXCIgdGFibGUuXFxuIDQ4NDpcXHRcXG4gNDg1OlxcdGNvbmZpZyBORlRfTlVNR0VOXFxuIDQ4NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVxcXCJcXG4gNDg3OlxcdFxcdGhlbHBcXG4gNDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbnVtYmVyIGdlbmVyYXRvciBleHByZXNzaW9uIHVzZWQgdG8gcGVyZm9ybVxcbiA0ODk6XFx0XFx0ICBpbmNyZW1lbnRhbCBjb3VudGluZyBhbmQgcmFuZG9tIG51bWJlcnMgYm91bmQgdG8gYSB1cHBlciBsaW1pdC5cXG4gNDkwOlxcdFxcbiA0OTE6XFx0Y29uZmlnIE5GVF9DVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NToxMS4yMTM0OTYwMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1NzI3NzY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBOZXRmaWx0ZXIgVGFibGVzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBuZXRmaWx0ZXIgdGFibGVzIHN0dWZmLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZW5hYmxpbmcgYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfTkVUREVWYCwgYW5kIGBORl9UQUJMRVNfSU5FVGAsIHBsdXMgYElQVjZgLCBvZiBjb3Vyc2UuIE5vdywgYXJlIGBORl9UQUJMRVNfSVBWNGAgYW5kIGBORl9UQUJMRVNfSVBWNmAgbmVjZXNzYXJ5PyBBaCwgbm8sIGBORl9UQUJMRVNfSU5FVGAgc2VsZWN0cyB0aG9zZS4gUmlnaHQsIGtlZXAgaXQgY29uY2lzZTsgYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfTkVUREVWYCwgYE5GX1RBQkxFU19JTkVUYCwgYW5kIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIGtleSB0byBtYW5hZ2luZyB0aGVzZSB0YWJsZXM/IEknZCBsaWtlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gVGhvc2Ugc2VlbSBjZW50cmFsIHRvIHRoZSBhY3R1YWwgdGFibGUgYW5kIGNoYWluIG1hbmlwdWxhdGlvbi5cblxuTGV0J3Mgc2Vl4oCmIEknbSBhbHNvIGxvb2tpbmcgYXQgYG5mdF9ob29rX2xpc3RfZmluZGAsIGJ1dCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIGNhbid0IHJlYWxseSBmb2N1cyBvbiBpdCBkaXJlY3RseSBpZiBpdCdzIGlubGluZWQuIEkgd29uZGVyIGlmIGl0ICppcyogaW5saW5lZD8gSXQncyBub3QgZXhwbGljaXRseSBtYXJrZWQgYXMgYGlubGluZWAsIGJ1dCB0aGF0IGRvZXNuJ3QgYWx3YXlzIHRlbGwgdGhlIHdob2xlIHN0b3J5LiBIbW0uLi5cblxuV2FpdCBhIG1pbnV0ZSwgYG5mX3RhYmxlc19uZXdjaGFpbmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQgd29ya3MuIExldCBtZSB0aGluayBtb3JlIGFib3V0IHRoYXQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhIGJpdCBhbmQgbG9vayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgbWlnaHQgYmUgYSBiZXR0ZXIgc3RhcnRpbmcgcG9pbnQuIEFoLCBgbmZ0X25ldGRldl9yZWdpc3Rlcl9ob29rc2Agc2VlbXMgdG8gYmUgbm9uLXN0YXRpYy4gR29vZC4gSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMwMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjE3LjY3MDc3NjY5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODMwMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzExPXZvaWQgbmZfdGFibGVzX3VuYmluZF9jaGFpbihjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMxNS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMTY6c3RhdGljIGludCBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMTctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjU9c3RhdGljIGludCBuZl90YWJsZXNfcmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDItXFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cXHUwMDNlZmFtaWx5LCBiYXNlY2hhaW4tXFx1MDAzZW9wcy5ob29rbnVtKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDM6XFx0XFx0cmV0dXJuIG5mdF9uZXRkZXZfcmVnaXN0ZXJfaG9va3MobmV0LCBcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI4OTQ9c3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzAwMC1cXHRcXHRpZiAobmZ0X2Jhc2VfY2hhaW5fbmV0ZGV2KHRhYmxlLVxcdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cXHUwMDNlb3BzLmhvb2tudW0pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzAwMTpcXHRcXHRcXHRlcnIgPSBuZnRfbmV0ZGV2X3JlZ2lzdGVyX2hvb2tzKGN0eC1cXHUwMDNlbmV0LCBcXHUwMDI2aG9vay5saXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMDAyLVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NToxNy43NzI2MTU0NjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4OTI0NzE5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5ldGZpbHRlciBUYWJsZXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ29hbCBpcyB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZywgYW5kIEkgbmVlZCB0byBhdm9pZCBpbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgZm9jdXNpbmcgb24gc3RhdGljIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBuZXRsaW5rIGNhbGxiYWNrcywgYnV0IHRoZW4gSSByZWFsaXplZCB0aGF0IGBuZm5ldGxpbmtfcmN2X21zZ2AgaXMgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIGFsbCBuZXRmaWx0ZXIgbmV0bGluayBtZXNzYWdlcy4gSG93ZXZlciwgaXQgaXMgdG9vIGdlbmVyaWMuIEkgc3RhcnRlZCBjaGVja2luZyBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGlzIGFsbCBuZXRsaW5rLiBUaGVyZWZvcmUsIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYCBhcmUgcHJvbWlzaW5nLlxuXG5MZXQncyBjaGVjayBpZiBgbmZfdGFibGVzX3VwZGNoYWluYCBpcyBzdGF0aWMuLi4geWVzLCBpdCBpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSBvdGhlciBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgaGF2ZSBmb3VuZCBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AsIHdoaWNoIGlzIHN0YXRpYy4gSSB3aWxsIGxpc3QgdGhlIG5ldGxpbmsgY2FsbGJhY2tzLiBUaGV5IHdpbGwgZGVmaW5pdGVseSBub3QgYmUgaW5saW5lZCwgYmVjYXVzZSB0aGV5IGFyZSByZWZlcmVuY2VkIGluIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBkaWZmIHRvIHNlZSB3aHkgSSBzdGFydGVkIHRoaXMgaW52ZXN0aWdhdGlvbi4gQWgsIHJpZ2h0LCB0aGVyZSdzIGEgYnVnIGZpeCBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCByZWxhdGluZyB0byBtYXRjaGluZyBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSB0aGUgYnVnIGNhbiBjYXVzZSBpbmNvcnJlY3QgaG9vayBtYXRjaGluZy4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBiZWhhdmlvciB3aXRoIGNoYWluIG9yIGZsb3d0YWJsZSBhZGRpdGlvbiwgcmVtb3ZhbCwgb3IgdXBkYXRlLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGdvaW5nIHRvIGJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCBgbmZfdGFibGVzX2RlbGNoYWluYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC5cblxuTm93LCBpcyBgbmZfdGFibGVzX3VwZGNoYWluYCBpbmxpbmVkPyBJdCdzIGNhbGxlZCBmcm9tIGBuZl90YWJsZXNfbmV3Y2hhaW5gIGFuZCBgbmZfdGFibGVzX2RlbGNoYWluYC4gR2l2ZW4gaXRzIHNpemUsIGl0J3MgKnByb2JhYmx5KiBub3QgaW5saW5lZC4gTGV0J3MgbWFrZSBzdXJlIGBuZl90YWJsZXNfbmV3Y2hhaW5gIGlzIGluIGBuZl90YWJsZXNfYXBpLmNgLiBZZXAsIGl0IGlzLlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWdzIHRoYXQgYXJlIG5lZWRlZC4gSSBzZWUgYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfTkVUREVWYCwgYE5GX1RBQkxFU19JTkVUYCwgYW5kIGBJUFY2YC4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBgTkZfVEFCTEVTYCBkZXBlbmRzIG9uIGBORVRGSUxURVJgLCB3aGljaCBpcyBzdGFuZGFyZC4gYE5GX1RBQkxFU19ORVRERVZgIGRlcGVuZHMgb24gYE5GX1RBQkxFU2AsIGFuZCBgTkZfVEFCTEVTX0lORVRgIGRlcGVuZHMgb24gYElQVjZgIGFuZCBgTkZfVEFCTEVTYC4gU28sIGl0IGxvb2tzIGxpa2UgdGhlc2UgZm91ciBjb25maWdzIHNob3VsZCBiZSBlbm91Z2guXG5cbkZpbmFsbHksIEknbGwgcXVpY2tseSBjaGVjayBpZiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgdG8gbWFrZSBzdXJlLiBBbmQgdGhhdCBpcyB0aGUgc3VtbWFyeSBvZiB0aGUgcHJvY2VzcywgYW5kIHdoYXQgSSBiZWxpZXZlIGFyZSB0aGUgYmVzdCBjaG9pY2VzIGZvciBmdXp6IHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDUzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjMxLjY2NTA5MDQxNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3ODQzNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfaG9va19saXN0X2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDU6MzMuOTQzNTM3ODE3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MjAyMzA2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBuZl90YWJsZXNfYXBpLmNgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgY29kZWJhc2UuIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgdXNhZ2UgcmV2ZWFscyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSBlbXBsb3llZCB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoaXMgaXMgZ29vZCwgaXQgZ2l2ZXMgbWUgYSB2ZXJ5IGxpbWl0ZWQgc2NvcGUgdG8gZm9jdXMgb24uIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgdGhhdCBzcGVjaWZpYyBmaWxlLiBUaGlzIGxpbWl0ZWQgc2NvcGUgaXMgYSBnb29kIHRoaW5nOyBpdCBtZWFucyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgaXNzdWVzIGlzIHJlZHVjZWQuIEhvd2V2ZXIsIGEgbG9jYWxpemVkIGlzc3VlIGNvdWxkIGJlIGEgc2VyaW91cyBpc3N1ZSwgZ2l2ZW4gbmV0ZmlsdGVy4oCZcyBjb3JlIHJvbGUuXG5cbk5vdywgbXkgcGxhbiB0byBmb3JtYWxseSByZXBvcnQgdGhpcyBmaW5kaW5nIHRvIHRoZSB0ZWFtLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGdldCB0aGUgZnVsbCByZXBvcnQgZ2VuZXJhdGVkLiBJIHRoaW5rIGl04oCZcyBzbWFydCB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhpcy4gSXTigJlsbCBhbGxvdyBtZSB0byBwcm9wZXJseSBhbmQgY29uc2lzdGVudGx5IGNvbW11bmljYXRlIHRoZXNlIGZpbmRpbmdzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlYW0uIFdlIHNob3VsZCBhbHNvIGxvb2sgaW50byBob3cgdG8gZ2V0IHRoaXMgYXV0b21hdGVkIHNvIHdlIGNhbiBwcmV2ZW50IHRoZXNlIHR5cGVzIG9mIHRoaW5ncyBpbiB0aGUgZnV0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIxNSwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NTo0Mi4zNjM3NzE0NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkwMzE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19uZXdjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX2RlbGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfdXBkY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19uZXdjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX2RlbGNoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfdXBkY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBtYXRjaGluZyBsb2dpYyBmb3IgbmV0ZGV2IGhvb2tzIGluIG5mX3RhYmxlcy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gcGFyc2luZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgbWF0Y2hpbmcgYW5kIHN1YnNlcXVlbnQgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5ldGZpbHRlci4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjQyLjUwNjY4MjI3NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NTQ2MDAzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NTo0Mi41MDcxNTI3ODVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTE4NTQxMjM3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGBzdHJuY21wYCB3aXRoIGBtaW4oaG9vay1cXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pYCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBob29rcyB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIG9yIHByZWZpeCBzdGF0dXMgKGUuZy4sIG1hdGNoaW5nIFxcXCJldGhcXFwiIHdpdGggXFxcImV0aDBcXFwiKS4gVGhlIGBuZnRfaG9va2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBhbmQgaXRzIGBpZm5hbWVgIGZpZWxkIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbmxhX3N0cnNjcHlgLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBzdHJpbmcgY29tcGFyaXNvbiBsb2dpYyBidWcsIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTUzZDI1MGQ4NjE5ZDU0NDVlMWU0OTZkYTVjYWViOTYzYmZjYjgxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDExOjQzOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggYWYzNTdmNmM1MDcwYi4uZTJiMThjNDcyMmZjYyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTE5NzMsNyArMTk3Myw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R1bXBfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9zdGF0cyBfX3BlcmNwdSAqc3RhdHMpXG4gXHRyZXR1cm4gLUVOT1NQQztcbiB9XG4gXG4tc3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoc3RydWN0IG5mdF9ob29rICpob29rKVxuK3N0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcbiB7XG4gXHRyZXR1cm4gc3RybGVuKGhvb2stXHUwMDNlaWZuYW1lKSBcdTAwM2U9IGhvb2stXHUwMDNlaWZuYW1lbGVuO1xuIH1cbkBAIC0yNDQwLDggKzI0NDAsMTEgQEAgc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcbiBcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG4tXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4tXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbitcdFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsIGhvb2stXHUwMDNlaWZuYW1lbGVuKSkge1xuIFx0XHRcdGlmIChob29rLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjQyLjUwNzE1MzQ4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjUzMDA5MzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0J3MgY2hhbmdpbmcgYGhvb2tfaXNfcHJlZml4YCB0byB0YWtlIGEgYGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9va2AuIFRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgd2hlcmUgdGhleSdyZSBtb2RpZnlpbmcgdGhlIGNvbXBhcmlzb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSxcblx0XHRcdCAgICAgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbikpKSB7XG5gYGBcblxud2l0aCB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKGhvb2stXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXHUwMDNlaWZuYW1lbGVuKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG5gYGBcblxuQW5kIGl0J3MgYWxzbyBhZGRpbmcgYGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlgIGFzIGFuIGVhcmx5IGNoZWNrLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgcmlzayBoZXJlPyBgaG9vay1cdTAwM2VpZm5hbWVgIGFuZCBgdGhpcy1cdTAwM2VpZm5hbWVgIGFyZSBzdHJpbmdzLCBhbmQgYGhvb2stXHUwMDNlaWZuYW1lbGVuYCBhbmQgYHRoaXMtXHUwMDNlaWZuYW1lbGVuYCBhcmUgbGVuZ3Rocy4gVGhpcyBpcyBjbGVhcmx5IGZpeGluZyBhIGJ1ZyBiZWNhdXNlIHRoZSBwcmV2aW91cyBgbWluKClgIGNhbGwgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcHJlZml4IG1hdGNoaW5nIG9yIHNvbWV0aGluZywgYmFzZWQgb24gaG93IHRoZSBsZW5ndGhzIHdlcmUgYmVpbmcgY29tcGFyZWQuXG5cbkFoLCByaWdodCwgYGhvb2tfaXNfcHJlZml4YCBpcyB0aGUga2V5LiBJdCBjaGVja3MgaWYgYHN0cmxlbihob29rLVx1MDAzZWlmbmFtZSkgXHUwMDNlPSBob29rLVx1MDAzZWlmbmFtZWxlbmAuIFNvLCBgaG9vay1cdTAwM2VpZm5hbWVsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlICppbnRlcmZhY2UgbmFtZSogc3RyaW5nLCByaWdodD8gSWYgYGhvb2tfaXNfcHJlZml4KGhvb2spYCBpcyB0cnVlLCBpdCBtZWFucyB0aGUgYWN0dWFsIGludGVyZmFjZSBuYW1lIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGhvb2stXHUwMDNlaWZuYW1lbGVuYC4gSG1tLCBkb2VzIGBob29rLVx1MDAzZWlmbmFtZWxlbmAgcmVwcmVzZW50IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqd2l0aG91dCogYSB3aWxkY2FyZCBjaGFyYWN0ZXIgb3Igc29tZXRoaW5nP1xuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBob29rX2lzX3ByZWZpeGAgdG8gY29uZmlybS4uLiBZZXAsIGBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW5gLiBPa2F5LCBzbyBpZiBgaG9vay1cdTAwM2VpZm5hbWVgICp3ZXJlKiB1bmluaXRpYWxpemVkLCBgc3RybGVuYCBjb3VsZCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgd2FpdC4uLiBgaG9vay1cdTAwM2VpZm5hbWVgIGlzICphbHJlYWR5KiBiZWluZyByZWFkIGJ5IGJvdGggYHN0cm5jbXBgIGFuZCBgc3RybGVuYCAqd2l0aGluKiBgaG9va19pc19wcmVmaXhgIGl0c2VsZi4gU28sIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSwgd2UnZCBoYXZlIHNlZW4gaXQgZWFybGllci5cblxuU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBsb2dpYyBlcnJvciBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgbGlrZWx5IHJlbGF0aW5nIHRvIHByZWZpeCBtYXRjaGluZywgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSSBzaG91bGQgcHJvYmFibHkgc3RpbGwgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBhZmZlY3RlZCBsb2dpYyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpdHNlbGYsIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ1OjU1LjAzNzI1MTE0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1ODU0OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2hvb2tfbGlzdF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzOTI9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQzNzpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MzgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ1OD1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ni1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NzpcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg4LVxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yODk0PXN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NDMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk0NDpcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yOTQ1LVxcdFxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZoLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjk1NzpcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5NTgtXFx0XFx0XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjM3PXN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyNTctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCBcXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI1ODpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI1OS1cXHRcXHRpZiAoIWhvb2spIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwMzI9c3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkwNDc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2ZnQtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MDQ4LVxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MTA0PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTIzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCBcXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMjQ6XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEyNS1cXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxMzc6XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTEzOC1cXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM0MD1zdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1Ni1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM1NzpcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM1OC1cXHRcXHRpZiAoIWhvb2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDU6NTUuMTIyODQzNjA5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3MDc3ODIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIb29rIE1hdGNoaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRpZ2h0ZW5pbmcgdXAgdGhlIGxvZ2ljIGZvciBob3cgd2UgZmluZCBob29rcyBpbiB0aGlzIGxpc3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gYHN0cm5jbXBgIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbWlzbWF0Y2hlcyB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMsIGVzcGVjaWFsbHkgaW4gcHJlZml4IHNjZW5hcmlvcy5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLi4uIEkgc2VlIHRoZSBvcmlnaW5hbCBpc3N1ZTogVGhlIGBtaW5gIGZ1bmN0aW9uIGNhbGwgaW4gdGhlIGBzdHJuY21wYCBjb21wYXJpc29uIHdhcyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCBtYXRjaGVzLiBJZiBhIGhvb2sncyBpbnRlcmZhY2UgbmFtZSwgbGV0J3Mgc2F5IFwiZXRoLFwiIGhhZCBhIGxlbmd0aCBvZiAzIChgaG9vay1cdTAwM2VpZm5hbWVsZW5gKSwgYW5kIHRoZSBpbnRlcmZhY2Ugd2UncmUgY2hlY2tpbmcgYWdhaW5zdCwgXCJldGgwLFwiIGhhZCBhIGxlbmd0aCBvZiA0IChgdGhpcy1cdTAwM2VpZm5hbWVsZW5gKSwgdGhlbiBgbWluYCB3b3VsZCByZXN1bHQgaW4gMy4gVGhpcyBtZWFudCBgc3RybmNtcChcImV0aFwiLCBcImV0aDBcIiwgMylgIHdhcyByZXR1cm5pbmcgYSBtYXRjaCAoMCksIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRpZmZlcmVudC4gVGhpcyBtZWFudCBcImV0aDBcIiB3YXMgbWF0Y2hpbmcgXCJldGhcIiwgd2hpY2ggaXMgaW5jb3JyZWN0LCB1bmxlc3MgXCJldGhcIiB3YXMgaW50ZW5kZWQgYXMgYSBwcmVmaXguXG5cbk5vdywgaG9sZCBvbi4uLiB0aGUgY29kZSB0aGVuIGNoZWNrcyBgaG9va19pc19wcmVmaXhgLiBUaGF0IG1ha2VzIHNlbnNlLiBJZiBgaG9va19pc19wcmVmaXhgIGlzIHRydWUsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgcHJlZml4IG1hdGNoIChsaWtlIFwiZXRoKlwiKS4gVGhlbiBJIGxvb2sgYXQgdGhlIGxvZ2ljIGluc2lkZSBgaG9va19pc19wcmVmaXhgLCB3aGljaCBpcyBiYXNlZCBvbiBgc3RybGVuKGhvb2stXHUwMDNlaWZuYW1lKSBcdTAwM2U9IGhvb2stXHUwMDNlaWZuYW1lbGVuYC4gU28gaWYgYGhvb2stXHUwMDNlaWZuYW1lYCBpcyBcImV0aCpcIiwgYHN0cmxlbmAgaXMgNC4gQnV0IGBob29rLVx1MDAzZWlmbmFtZWxlbmAgbWlnaHQgYmUgMyAobGVuZ3RoIG9mIFwiZXRoXCIpLiBTbywgYGhvb2tfaXNfcHJlZml4YCB3b3VsZCBldmFsdWF0ZSB0byB0cnVlLlxuXG5BaCwgc28gaWYgdGhlIGhvb2sgaXMgYSBwcmVmaXggbWF0Y2guLi53YWl0LCBpcyB0aGF0IHJlYWxseSByaWdodD8gTGV0IG1lIHZlcmlmeSBpZiBgaG9va19pc19wcmVmaXhgIGlzIHVzaW5nIGEgY29ycmVjdCBjb25kaXRpb24uXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGlzLiBUaGUgbmV3IGNvZGUgZG9lcyB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKGhvb2stXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXHUwMDNlaWZuYW1lbGVuKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKCFzdHJuY21wKGhvb2stXHUwMDNlaWZuYW1lLCB0aGlzLVx1MDAzZWlmbmFtZSwgaG9vay1cdTAwM2VpZm5hbWVsZW4pKSB7XG5gYGBcblxuU28gZmlyc3QsIGlmIG9uZSBpcyBwcmVmaXggYW5kIHRoZSBvdGhlciBpc24ndCwgYGNvbnRpbnVlYC4gSXQgY2hlY2tzIHRoYXQgYm90aCBoYXZlIHRoZSBzYW1lIHByZWZpeCBzdGF0dXMgKGVpdGhlciBib3RoIHByZWZpeGVzIG9yIGJvdGggZXhhY3QgbWF0Y2hlcykuIFRoZW4sIGl0IGNoZWNrcyB0aGF0IHRoZWlyIGxlbmd0aHMgYXJlIHRoZSBzYW1lLiBGaW5hbGx5LCBpdCB1c2VzIGBzdHJuY21wYCwgYnV0IG9ubHkgaWYgZXZlcnl0aGluZyBlbHNlIG1hdGNoZXMuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeC5cblxuVGhpcyBwcmV2ZW50cyB0aGUgaW5jb3JyZWN0IG1hdGNoaW5nIG9mIGFuIGV4YWN0IG1hdGNoIChlLmcuIFwiZXRoMFwiKSB3aXRoIGEgcHJlZml4IG1hdGNoIChlLmcuIFwiZXRoXCIpLiBJdCBhbHNvIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSB0d28gZXhhY3QgbWF0Y2hlcyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBjb3VsZCBtYXRjaCBpZiBvbmUgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyIChlLmcuIFwiZXRoXCIgYW5kIFwiZXRoMFwiKS4gTm93LCBhbiBleGFjdCBtYXRjaCB3b3VsZCByZXF1aXJlIGBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpID09IGhvb2stXHUwMDNlaWZuYW1lbGVuYCwgbWVhbmluZyBgaG9va19pc19wcmVmaXhgIHNob3VsZCBhbHNvIGFsd2F5cyByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbiBleGFjdCBtYXRjaC5cblxuTGV0IG1lIGdvIGxvb2sgYXQgYG5mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBgaG9va19pc19wcmVmaXhgIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MDQuODMwNjI4MjA3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODIzNDg4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG9va19pc19wcmVmaXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTkzNz1zdGF0aWMgaW50IG5mdF9kdW1wX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfc3RhdHMgX19wZXJjcHUgKnN0YXRzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk3NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTc2OnN0YXRpYyBib29sIGhvb2tfaXNfcHJlZml4KGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqaG9vaylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE5ODE9c3RhdGljIGludCBuZnRfbmxhX3B1dF9ob29rX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk4Mi17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk4MzpcXHRpbnQgYXR0ciA9IGhvb2tfaXNfcHJlZml4KGhvb2spID8gTkZUQV9ERVZJQ0VfUFJFRklYIDogTkZUQV9ERVZJQ0VfTkFNRTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTg0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjA0Mj1zdGF0aWMgaW50IG5mdF9kdW1wX2Jhc2VjaGFpbl9ob29rKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMDc5LVxcdFxcdGlmIChkdW1wX2hvb2tfY3R4Lm4gPT0gMSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjIwODA6XFx0XFx0ICAgICFob29rX2lzX3ByZWZpeChkdW1wX2hvb2tfY3R4LmZpcnN0KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwODEtXFx0XFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgTkZUQV9IT09LX0RFViwgZHVtcF9ob29rX2N0eC5maXJzdC1cXHUwMDNlaWZuYW1lKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI0Mzc9c3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDItXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQzOlxcdFxcdGlmIChob29rX2lzX3ByZWZpeChob29rKSAhPSBob29rX2lzX3ByZWZpeCh0aGlzKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ0LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NjowNS40MTI5ODU2OTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyODMwNDY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFByZWZpeCBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgYGhvb2tfaXNfcHJlZml4YCBmdW5jdGlvbi4uLiByaWdodCwgaXQncyBjaGVja2luZyBpZiB0aGUgaW50ZXJmYWNlIG5hbWUgKGBob29rLVx1MDAzZWlmbmFtZWApIGhhcyBhIHByZWZpeCB0aGF0J3MgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIHNwZWNpZmllZCBieSBgaG9vay1cdTAwM2VpZm5hbWVsZW5gLiBMZXQncyBicmVhayB0aGlzIGRvd24uIElmIGBob29rLVx1MDAzZWlmbmFtZWAgaXMgXCJldGgwXCIsIHRoZSBgc3RybGVuYCBvZiB0aGF0IHN0cmluZyBpcyBnb2luZyB0byBiZSA0LiBOb3csIGlmIGBob29rLVx1MDAzZWlmbmFtZWxlbmAgaXMgKmFsc28qIDQsIHRoZSBjb25kaXRpb24gYHN0cmxlbiBcdTAwM2U9IGlmbmFtZWxlbmAgaXMgZ29pbmcgdG8gZXZhbHVhdGUgdG8gdHJ1ZS4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgaG93IGBpZm5hbWVsZW5gIGlzICphY3R1YWxseSogc2V0LiBJJ20gYXNzdW1pbmcgaXQgcmVwcmVzZW50cyB0aGUgbGVuZ3RoIG9mIHRoZSBwcmVmaXggc3RyaW5nLCBhbmQgYGlmbmFtZWAgaXMgdGhlIHByZWZpeCBzdHJpbmcgaXRzZWxmLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYW5kIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGJlaGF2aW9ycyBpbiB0aGUgY29kZS4gTGV0J3MgdHJhY2UgYmFjayBob3cgYGlmbmFtZWxlbmAgaXMgZ2V0dGluZyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MDkuODQxMjkzNjk1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk1OTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZm5hbWVsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTk3Nj1zdGF0aWMgYm9vbCBob29rX2lzX3ByZWZpeChjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2spXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTk3Ny17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTk3ODpcXHRyZXR1cm4gc3RybGVuKGhvb2stXFx1MDAzZWlmbmFtZSkgXFx1MDAzZT0gaG9vay1cXHUwMDNlaWZuYW1lbGVuO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5NzktfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM5Mj1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxMS1cXHQvKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyBOVUwtY2hhciB3aGVuIGNvbXBhcmluZyBub24tcHJlZml4ZXMgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDEyOlxcdGhvb2stXFx1MDAzZWlmbmFtZWxlbiA9IHN0cmxlbihob29rLVxcdTAwM2VpZm5hbWUpICsgIXByZWZpeDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDEzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQxOC1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDE5OlxcdFxcdGlmIChzdHJuY21wKGRldi1cXHUwMDNlbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lLCBob29rLVxcdTAwM2VpZm5hbWVsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0MjAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNDM3PXN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDQ0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0NDU6XFx0XFx0aWYgKGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDQ3OlxcdFxcdGlmICghc3RybmNtcChob29rLVxcdTAwM2VpZm5hbWUsIHRoaXMtXFx1MDAzZWlmbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDgtXFx0XFx0XFx0aWYgKGhvb2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTc2OD1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3NzYtXFx0XFx0b3BzID0gbmZ0X2hvb2tfZmluZF9vcHMoaG9vaywgZGV2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5Nzc3OlxcdFxcdG1hdGNoID0gIXN0cm5jbXAoaG9vay1cXHUwMDNlaWZuYW1lLCBkZXYtXFx1MDAzZW5hbWUsIGhvb2stXFx1MDAzZWlmbmFtZWxlbik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MDkuOTIxMjU5MzM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NzgzNDY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdHJpbmcgQ29tcGFyaXNvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgaG9vay1cdTAwM2VpZm5hbWVsZW4gPSBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpICsgIXByZWZpeDtgIGxpbmUuLi4gUmlnaHQsIGlmIGl0J3MgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuIElmIGl0J3MgKm5vdCogYSBwcmVmaXgsIHdlIGFkZCAxLiBTbywgdGhlIGNydWNpYWwgY2hlY2ssIGBzdHJsZW4oaG9vay1cdTAwM2VpZm5hbWUpIFx1MDAzZT0gaG9vay1cdTAwM2VpZm5hbWVsZW5gLCBiZWNvbWVzIGEgbmVhdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYSBwcmVmaXguIElmIGl0ICppcyogYSBwcmVmaXgsIGl0J3MgYHN0cmxlbiBcdTAwM2U9IHN0cmxlbmAgd2hpY2ggaXMgdHJ1ZSwgYW5kIGlmIGl0J3MgKm5vdCogYSBwcmVmaXgsIGl0J3MgYHN0cmxlbiBcdTAwM2U9IHN0cmxlbiArIDFgIHdoaWNoIGlzIGZhbHNlLiBUaGF0IHBhcnQgc2VlbXMgc291bmQuIEdvb2QuIGBob29rX2lzX3ByZWZpeGAgd29ya3MgYXMgZXhwZWN0ZWQuXG5cbk5vdywgdGhlIHByb2JsZW0uIEl0J3MgaW4gYG5mdF9ob29rX2xpc3RfZmluZGA6XG5cbmBgYGNcblx0XHRpZiAoIXN0cm5jbXAoaG9vay1cdTAwM2VpZm5hbWUsIHRoaXMtXHUwMDNlaWZuYW1lLFxuXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbmBgYFxuXG5UaGUgaXNzdWUgaXMgY2xlYXIuIExldCdzIGltYWdpbmUgYSBzY2VuYXJpbzogYGhvb2tgIGlzIFwiZXRoXCIgKGEgcHJlZml4LCBzbyBgaWZuYW1lbGVuYCBpcyAzKSBhbmQgYHRoaXNgIGlzIFwiZXRoMFwiIChub3QgYSBwcmVmaXgsIGBpZm5hbWVsZW5gIGlzIDUpLiBUaGUgYG1pbigzLCA1KWAgZ2l2ZXMgdXMgMy4gU28sIHdlJ3JlIGRvaW5nIGBzdHJuY21wKFwiZXRoXCIsIFwiZXRoMFwiLCAzKWAuIFRoYXQgcmV0dXJucyAwIGJlY2F1c2UgdGhlIGZpcnN0IHRocmVlIGNoYXJhY3RlcnMgbWF0Y2guICoqQnV0IHRoZXkgc2hvdWxkbid0IG1hdGNoISoqIFwiZXRoXCIgaXMgYSBwcmVmaXg7IFwiZXRoMFwiIGlzIG5vdC4gVGhlIHByZWZpeGVzIHNob3VsZCBiZSBjaGVja2VkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgY29tcGFyaXNvbiBkb2Vzbid0IGlkZW50aWZ5IFwiZXRoXCIgYW5kIFwiZXRoMFwiIGFzIGEgbWF0Y2guIFRoaXMgaXMgYSBzdWJ0bGUgbG9naWMgYnVnLlxuXG5Eb2VzIHRoaXMgYnVnIHN0ZW0gZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEl0J3MganVzdCBhIGZsYXdlZCBzdHJpbmcgY29tcGFyaXNvbi4gQ291bGQgdGhlIGludGVyZmFjZSBuYW1lIGl0c2VsZiBiZSB1bmluaXRpYWxpemVkPyBObywgYmVjYXVzZSBJJ20gYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IHdpdGggYG5mdF9uZXRkZXZfaG9va19hbGxvY2AuIEJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBhbGxvY2F0aW9uIGZ1bmN0aW9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MTcuNzk5NjA4OTI2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMDYzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X25ldGRldl9ob29rX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTIzNTg9dm9pZCBuZl90YWJsZXNfY2hhaW5fZGVzdHJveShzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzOTEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjM5MjpzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzOTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI0NTg9c3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4MTpcXHRcXHRob29rID0gbmZ0X25ldGRldl9ob29rX2FsbG9jKG5ldCwgdG1wLCBwcmVmaXgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODItXFx0XFx0aWYgKElTX0VSUihob29rKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjUxOT1zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUyNi1cXHRpZiAodGJbTkZUQV9IT09LX0RFVl0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNTI3OlxcdFxcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0YltORlRBX0hPT0tfREVWXSwgZmFsc2UpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MjgtXFx0XFx0aWYgKElTX0VSUihob29rKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NjoxNy45MTg4MjIzMDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MTMwMTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG5mdF9uZXRkZXZfaG9va19hbGxvY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IGl0cyBjb3JlIHB1cnBvc2Ugd2l0aGluIHRoZSBOZXRmaWx0ZXIgZWNvc3lzdGVtLiBLbm93aW5nIGhvdyB0aGVzZSBob29rcyBhcmUgc3RydWN0dXJlZCBpcyBjcml0aWNhbDsgdGhleSBhcmUgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgcGFja2V0IGZpbHRlcmluZyBhbmQgbWFuaXB1bGF0aW9uLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbGxvY2F0aW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIE5ldGZpbHRlciBob29rIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24uXG5cbkknZCBhbnRpY2lwYXRlIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBpbml0aWFsaXppbmcgc29tZSBjcnVjaWFsIGludGVybmFsIGRhdGEsIGFuZCBwZXJoYXBzIGxpbmtpbmcgdGhpcyBuZXcgaG9vayBpbnRvIHRoZSBhcHByb3ByaWF0ZSBOZXRmaWx0ZXIgY2hhaW4gZm9yIG5ldHdvcmsgZGV2aWNlIGV2ZW50cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGxheWVyIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhpbmdzIGxpa2UgdGhlIGRldmljZSBkcml2ZXJzIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjaydzIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gY29ubmVjdGluZyBOZXRmaWx0ZXIncyBmaWx0ZXJpbmcgcnVsZXMgdG8gdGhlIHBoeXNpY2FsIGRldmljZXMuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG93LWxldmVsIGFsbG9jYXRpb24gYW5kIHNldHVwIHRoYXQgc3Vic2VxdWVudCBmdW5jdGlvbnMgd2lsbCBkZXBlbmQgb24uXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgbWV0YWRhdGEgb3Igc3RhdGUgaXQgbWFpbnRhaW5zIHRvIHRyYWNrIHRoZSBob29rLCB3aGljaCBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIGRlYnVnZ2luZyBhbmQgb3B0aW1pemluZyBuZXR3b3JrIHRyYWZmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMTo0NjoyMS44OTAxMjczN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM5MixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM5MjpcXHRzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbjIzOTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4yMzk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgcHJlZml4KVxcbjIzOTU6XFx0e1xcbjIzOTY6XFx0XFx0c3RydWN0IG5mX2hvb2tfb3BzICpvcHM7XFxuMjM5NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjIzOTg6XFx0XFx0c3RydWN0IG5mdF9ob29rICpob29rO1xcbjIzOTk6XFx0XFx0aW50IGVycjtcXG4yNDAwOlxcdFxcbjI0MDE6XFx0XFx0aG9vayA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZnRfaG9vaywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4yNDAyOlxcdFxcdGlmICghaG9vaylcXG4yNDAzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjI0MDQ6XFx0XFxuMjQwNTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aG9vay1cXHUwMDNlb3BzX2xpc3QpO1xcbjI0MDY6XFx0XFxuMjQwNzpcXHRcXHRlcnIgPSBubGFfc3Ryc2NweShob29rLVxcdTAwM2VpZm5hbWUsIGF0dHIsIElGTkFNU0laKTtcXG4yNDA4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI0MDk6XFx0XFx0XFx0Z290byBlcnJfaG9va19mcmVlO1xcbjI0MTA6XFx0XFxuMjQxMTpcXHRcXHQvKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyBOVUwtY2hhciB3aGVuIGNvbXBhcmluZyBub24tcHJlZml4ZXMgKi9cXG4yNDEyOlxcdFxcdGhvb2stXFx1MDAzZWlmbmFtZWxlbiA9IHN0cmxlbihob29rLVxcdTAwM2VpZm5hbWUpICsgIXByZWZpeDtcXG4yNDEzOlxcdFxcbjI0MTQ6XFx0XFx0LyogbmZfdGFibGVzX25ldGRldl9ldmVudCgpIGlzIGNhbGxlZCB1bmRlciBydG5sX211dGV4LCB0aGlzIGlzXFxuMjQxNTpcXHRcXHQgKiBpbmRpcmVjdGx5IHNlcmlhbGl6aW5nIGFsbCB0aGUgb3RoZXIgaG9sZGVycyBvZiB0aGUgY29tbWl0X211dGV4IHdpdGhcXG4yNDE2OlxcdFxcdCAqIHRoZSBydG5sX211dGV4LlxcbjI0MTc6XFx0XFx0ICovXFxuMjQxODpcXHRcXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG4yNDE5OlxcdFxcdFxcdGlmIChzdHJuY21wKGRldi1cXHUwMDNlbmFtZSwgaG9vay1cXHUwMDNlaWZuYW1lLCBob29rLVxcdTAwM2VpZm5hbWVsZW4pKVxcbjI0MjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjQyMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MjEuODkwNTY4ODZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2MDk1OTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIGNhbiBzZWUgdGhhdCB0aGUgbWVtb3J5IGZvciB0aGUgYGhvb2tgIHN0cnVjdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gYGt6YWxsb2Nfb2JqYCB0YWtlcyBjYXJlIG9mIHRoZSB6ZXJvaW5nLCBhbmQgdGhlbiBgbmxhX3N0cnNjcHlgIGhhbmRsZXMgdGhlIHN0cmluZyBjb3B5IGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlLiBJJ3ZlIGdvdCBgaG9vay1cdTAwM2VpZm5hbWVsZW5gIHNldCBiYXNlZCBvbiBgc3RybGVuYC4gVGhlcmUncyBubyB3YXkgdGhpcyBpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gVGhlIGNvZGUgaXMgc2FmZSBpbiB0aGF0IHJlc3BlY3QuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB0aGlzIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIGBuZnRfaG9va19saXN0X2ZpbmRgLiBJdCdzIG1hdGNoaW5nIGhvb2tzIGluY29ycmVjdGx5IGR1ZSB0byBsZW5ndGggb3IgcHJlZml4IHN0YXR1cyBkaXNjcmVwYW5jaWVzLiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIOKAkyBmYWlsaW5nIGhvb2sgYWRkaXRpb25zIGJlY2F1c2UgYSBcImR1cGxpY2F0ZVwiIGlzIGZvdW5kIHdoZW4gaXQncyBub3QsIG9yIGRlbGV0aW5nIHRoZSB3cm9uZyBob29rIGFsdG9nZXRoZXIuIEl0J3MgZGVmaW5pdGVseSBhIGxvZ2ljIGVycm9yLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIGxpa2UgYW4gdW5pbml0aWFsaXplZCByZWFkLlxuXG5JIHRob3VnaHQgZm9yIGEgc2Vjb25kIHRoYXQgdGhpcyBtaWdodCBiZSBzb21ldGhpbmcgS01TQU4gY291bGQgZmxhZywgYnV0IG5vLiBFdmVuIGlmIEtNU0FOICp3ZXJlKiBydW5uaW5nLCBpdCB3b3VsZG4ndCBkZXRlY3QgYSBsb2dpYyBidWcgbGlrZSB0aGlzIGJlY2F1c2UgaXQncyBsb29raW5nIGZvciAqdW5pbml0aWFsaXplZCogcmVhZHMsIHdoaWNoIGFyZW4ndCBwcmVzZW50IGhlcmUuIGBob29rLVx1MDAzZWlmbmFtZWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYG5sYV9zdHJzY3B5YCBhbmQgemVyb2VkIG91dCBieSBga3phbGxvY19vYmpgLCBzbyB0aGVyZSdzIG5vIHdheSB0aGUgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4uXG5cbkknbSBjb25maWRlbnQgd2UndmUgcnVsZWQgb3V0IG1lbW9yeSBpc3N1ZXMgaGVyZS4gVGhlIGZpeCBzZWVtcyBmb2N1c2VkIG9uIGNvcnJlY3RpbmcgdGhlIGBuZnRfaG9va19saXN0X2ZpbmRgIGxvZ2ljIHRvIGVuc3VyZSBjb3JyZWN0IGhvb2sgbWF0Y2hpbmcuIEhvd2V2ZXIsIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIHRoaXMgcGF0Y2ggdG8ga2VlcCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTE6NDY6MjcuODUxNTMxNTk4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3MzM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJob29rX2lzX3ByZWZpeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTM3PXN0YXRpYyBpbnQgbmZ0X2R1bXBfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9zdGF0cyBfX3BlcmNwdSAqc3RhdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE5NzY6c3RhdGljIGJvb2wgaG9va19pc19wcmVmaXgoY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5Nzcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTk4MT1zdGF0aWMgaW50IG5mdF9ubGFfcHV0X2hvb2tfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZnRfaG9vayAqaG9vaylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTgyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTgzOlxcdGludCBhdHRyID0gaG9va19pc19wcmVmaXgoaG9vaykgPyBORlRBX0RFVklDRV9QUkVGSVggOiBORlRBX0RFVklDRV9OQU1FO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5ODQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yMDQyPXN0YXRpYyBpbnQgbmZ0X2R1bXBfYmFzZWNoYWluX2hvb2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIwNzktXFx0XFx0aWYgKGR1bXBfaG9va19jdHgubiA9PSAxIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjA4MDpcXHRcXHQgICAgIWhvb2tfaXNfcHJlZml4KGR1bXBfaG9va19jdHguZmlyc3QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjA4MS1cXHRcXHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlRBX0hPT0tfREVWLCBkdW1wX2hvb2tfY3R4LmZpcnN0LVxcdTAwM2VpZm5hbWUpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQzNz1zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ0Mi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI0NDM6XFx0XFx0aWYgKGhvb2tfaXNfcHJlZml4KGhvb2spICE9IGhvb2tfaXNfcHJlZml4KHRoaXMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0NDQtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ2OjI3LjkyMjkxMDYxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MzgzMzY0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gQ29uY2VybnMgSGVyZSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlLiBCYXNpY2FsbHksIGFsbCB0aGlzIGRvZXMgaXMgdHdlYWsgYGhvb2tfaXNfcHJlZml4YCB0byBhY2NlcHQgYSBgY29uc3Qgc3RydWN0IG5mdF9ob29rICpob29rYCBhbmQgdXBkYXRlcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byB1c2UgdGhhdC4gTm90aGluZyBmYW5jeSwganVzdCBhIGJpdCBvZiByZWZhY3RvcmluZywgYW5kIGl0J3MgZml4aW5nIGEgbG9naWMgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgLiBTcGVjaWZpY2FsbHksIHRoYXQgYHN0cm5jbXBgIGNhbGwsIHVzaW5nIGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAsIGhhZCB0aGUgcG90ZW50aWFsIHRvIGdpdmUgaW5jb3JyZWN0IG1hdGNoZXMgd2hlbiBpbnRlcmZhY2UgbmFtZXMgd2VyZSBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXhlcyDigJMgbm90IGdvb2QuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHRoZXJlJ3MgYWJzb2x1dGVseSBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgbmZ0X2hvb2tgIHN0cnVjdHMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggKmd1YXJhbnRlZXMqIHplcm9lZCBtZW1vcnkuIEFsc28sIHRoZSBpbnRlcmZhY2UgbmFtZSBpdHNlbGYgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgYG5sYV9zdHJzY3B5YC4gSSd2ZSBnb25lIG92ZXIgdGhlIGNvZGUgYW5kIGNhbiBjb25maWRlbnRseSBzYXkgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBubyBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb2YgcG90ZW50aWFsbHkgZ2FyYmFnZSBkYXRhLCBhbmQgbm8gY29udHJvbCBmbG93IGRlY2lzaW9ucyBiZWluZyBtYWRlIGJhc2VkIG9uIHNvbWV0aGluZyB0aGF0IGhhc24ndCBiZWVuIHNldC5cblxuU28sIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1c2VkLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZSBpbiB0aGlzIGNhc2UuIEknbSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFuZCB3aWxsIGluY2x1ZGUgdGhpcyByZWFzb25pbmcgaW4gdGhlIGNvbW1pdC4gSXTigJlzIGEgY2xlYW4gZml4IHdpdGggbm8gS01TQU4tcmVsYXRlZCBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MDksIk91dHB1dFRva2VucyI6MTczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDExOjQ2OjM0LjM2MTI1MDAwOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGhvb2tzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgb3IgcHJlZml4IHN0YXR1cyAoZS5nLiwgbWF0Y2hpbmcgXFxcImV0aFxcXCIgd2l0aCBcXFwiZXRoMFxcXCIpLiBUaGUgYG5mdF9ob29rYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGFuZCBpdHMgYGlmbmFtZWAgZmllbGQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBubGFfc3Ryc2NweWAuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGlzc3VlIGlzIHB1cmVseSBhIHN0cmluZyBjb21wYXJpc29uIGxvZ2ljIGJ1Zywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3Mgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBvciBwcmVmaXggc3RhdHVzIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoXFxcIiB3aXRoIFxcXCJldGgwXFxcIikuIFRoZSBgbmZ0X2hvb2tgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgYW5kIGl0cyBgaWZuYW1lYCBmaWVsZCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYG5sYV9zdHJzY3B5YC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgc3RyaW5nIGNvbXBhcmlzb24gbG9naWMgYnVnLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzddjx[1] Phase: Succeeded StartedAt: 2026-08-18 11:46:46 +0000 UTC FinishedAt: 2026-08-18 11:46:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 11:46:46 +0000 UTC FinishedAt: 2026-08-18 11:46:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2] Phase: Succeeded StartedAt: 2026-08-18 11:46:46 +0000 UTC FinishedAt: 2026-08-18 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 11:46:46 +0000 UTC FinishedAt: 2026-08-18 15:51:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 11:46:46 +0000 UTC FinishedAt: 2026-08-18 11:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 11:46:46 +0000 UTC FinishedAt: 2026-08-18 11:46:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowzddjx/series-workflowzddjx-convert-artifact-968778008/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 11:46:56 +0000 UTC FinishedAt: 2026-08-18 12:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 11:46:56 +0000 UTC FinishedAt: 2026-08-18 12:04:05 +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:*100f28cb-f9bd-4fb0-b2e2-5004d56b2923,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-workflowzddjx/series-workflowzddjx-convert-artifact-968778008/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": "0edcbb4a-7dbf-4050-84e6-c5010d8a1f60", "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-workflowzddjx/series-workflowzddjx-build-action-2548932174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 11:46:56 +0000 UTC FinishedAt: 2026-08-18 12:03:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*100f28cb-f9bd-4fb0-b2e2-5004d56b2923,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-workflowzddjx/series-workflowzddjx-convert-artifact-968778008/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": "0edcbb4a-7dbf-4050-84e6-c5010d8a1f60", "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-workflowzddjx/series-workflowzddjx-build-action-2548932174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 12:04:05 +0000 UTC FinishedAt: 2026-08-18 12:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 12:04:05 +0000 UTC FinishedAt: 2026-08-18 12:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 12:04:05 +0000 UTC FinishedAt: 2026-08-18 12:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 12:04:05 +0000 UTC FinishedAt: 2026-08-18 12:04:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowzddjx/series-workflowzddjx-convert-artifact-398647935/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 12:04:15 +0000 UTC FinishedAt: 2026-08-18 12:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 12:04:15 +0000 UTC FinishedAt: 2026-08-18 12:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0edcbb4a-7dbf-4050-84e6-c5010d8a1f60,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-workflowzddjx/series-workflowzddjx-build-action-2548932174/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-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 12:06:16 +0000 UTC FinishedAt: 2026-08-18 12:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 12:06:16 +0000 UTC FinishedAt: 2026-08-18 12:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 12:06:16 +0000 UTC FinishedAt: 2026-08-18 12:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 12:06:16 +0000 UTC FinishedAt: 2026-08-18 12:23:11 +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:*100f28cb-f9bd-4fb0-b2e2-5004d56b2923,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-workflowzddjx/series-workflowzddjx-convert-artifact-398647935/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": "5b88dc86-20cc-4674-a049-d5736f934311", "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-workflowzddjx/series-workflowzddjx-build-action-1943382163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 12:06:16 +0000 UTC FinishedAt: 2026-08-18 12:23:01 +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:*100f28cb-f9bd-4fb0-b2e2-5004d56b2923,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-workflowzddjx/series-workflowzddjx-convert-artifact-398647935/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": "5b88dc86-20cc-4674-a049-d5736f934311", "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-workflowzddjx/series-workflowzddjx-build-action-1943382163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 12:23:11 +0000 UTC FinishedAt: 2026-08-18 12:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 12:23:11 +0000 UTC FinishedAt: 2026-08-18 12:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 12:23:11 +0000 UTC FinishedAt: 2026-08-18 12:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 12:23:11 +0000 UTC FinishedAt: 2026-08-18 12:25:14 +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:*5b88dc86-20cc-4674-a049-d5736f934311,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-workflowzddjx/series-workflowzddjx-build-action-1943382163/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-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 15:51:24 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},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:*0edcbb4a-7dbf-4050-84e6-c5010d8a1f60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b88dc86-20cc-4674-a049-d5736f934311,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-workflowzddjx/series-workflowzddjx-build-action-2548932174/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-workflowzddjx/series-workflowzddjx-build-action-1943382163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 12:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 12:25:29 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},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-workflowzddjx/series-workflowzddjx-convert-artifact-3317331992/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 12:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 12:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 12:25:24 +0000 UTC FinishedAt: 2026-08-18 12:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 12:25:34 +0000 UTC FinishedAt: 2026-08-18 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzddjx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_updchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e80456d79ec83b00a6bd44c377684b1632ccc3c7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV","NF_TABLES_INET","IPV6"],"series_id":"ae561d16-016a-45c0-bdaf-5dc647fd2df3","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 12:25:34 +0000 UTC FinishedAt: 2026-08-18 15:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0edcbb4a-7dbf-4050-84e6-c5010d8a1f60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b88dc86-20cc-4674-a049-d5736f934311,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-workflowzddjx/series-workflowzddjx-build-action-2548932174/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-workflowzddjx/series-workflowzddjx-build-action-1943382163/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-workflowzddjx/series-workflowzddjx-convert-artifact-3317331992/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,}