Name: series-workflow45jhw Phase: Succeeded StartedAt: 2026-08-19 03:13:06 +0000 UTC FinishedAt: 2026-08-19 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[0] Phase: Succeeded StartedAt: 2026-08-19 03:13:06 +0000 UTC FinishedAt: 2026-08-19 04:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 03:13:06 +0000 UTC FinishedAt: 2026-08-19 04:00:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED", "TRANSPARENT_HUGEPAGE" ], "series_id": "0d08f0e6-5fec-4ff1-851b-82bbd926a574" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__page_table_check_pte_clear_range", "collapse_pte_mapped_thp", "madvise_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0smIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgcG1kX25vbmUocG1kKWAgY2hlY2sgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuIFRoaXMgcHJldmVudHMgbWFwcGluZyBhbmQgYWNjZXNzaW5nIFBURXMgZnJvbSBhbiBlbXB0eSBQTUQsIHdoaWNoIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBhIGNyYXNoLCBvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIGJ5IG5vcm1hbCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCB3aGVyZSBgcHRlX29mZnNldF9tYXBgIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGBwbWRfbm9uZWAgcG1kLCB3aGljaCBtaWdodCBsZWFkIHRvIGEgY3Jhc2ggb3Igd2FybmluZy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIFRIUCBjb2xsYXBzZSBvcGVyYXRpb25zIChlLmcuLCB2aWEgYGtodWdlcGFnZWRgIG9yIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyYzRjNDk2NjgyM2ExYWZiNDQ1NmU4MmZlNjQxODhmZjkzMTIwZDk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV90YWJsZV9jaGVjay5jIGIvbW0vcGFnZV90YWJsZV9jaGVjay5jXG5pbmRleCA2ZmZjNTM2MzU5Y2QwLi5lZDNlMWE3NmYyNjY0IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV90YWJsZV9jaGVjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3RhYmxlX2NoZWNrLmNcbkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdGlmIChcdTAwMjZpbml0X21tID09IG1tKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXBtZF9iYWQocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcbiYjNDM7XHRpZiAoIXBtZF9ub25lKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4gXHRcdHB0ZV90ICpwdGVwID0gcHRlX29mZnNldF9tYXAoXHUwMDI2cG1kLCBhZGRyKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLJiMzNDssCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRUQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIHdoZXJlIGBwdGVfb2Zmc2V0X21hcGAgY291bGQgYmUgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQsIHdoaWNoIG1pZ2h0IGxlYWQgdG8gYSBjcmFzaCBvciB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMgKGUuZy4sIHZpYSBga2h1Z2VwYWdlZGAgb3IgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjNGM0OTY2ODIzYTFhZmI0NDU2ZTgyZmU2NDE4OGZmOTMxMjBkOTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suYwppbmRleCA2ZmZjNTM2MzU5Y2QwLi5lZDNlMWE3NmYyNjY0IDEwMDY0NAotLS0gYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV90YWJsZV9jaGVjay5jCkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlpZiAoJmFtcDtpbml0X21tID09IG1tKQogCQlyZXR1cm47CiAKLQlpZiAoIXBtZF9iYWQocG1kKSAmYW1wOyZhbXA7ICFwbWRfbGVhZihwbWQpKSB7CiYjNDM7CWlmICghcG1kX25vbmUocG1kKSAmYW1wOyZhbXA7ICFwbWRfYmFkKHBtZCkgJmFtcDsmYW1wOyAhcG1kX2xlYWYocG1kKSkgewogCQlwdGVfdCAqcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKCZhbXA7cG1kLCBhZGRyKTsKIAkJdW5zaWduZWQgbG9uZyBpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBmb2N1c2VkIG9uIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBTcGVjaWZpY2FsbHksIGl0IHRhcmdldHMgdGhlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIGNydWNpYWwgY2hlY2s6IGAhcG1kX25vbmUocG1kKWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwKCZhbXA7cG1kLCBhZGRyKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgbnVsbCBwb2ludGVyIGNoZWNrIG9yIGd1YXJkLiBJdCYjMzk7cyBwcm90ZWN0aW5nIGFnYWluc3QgcG90ZW50aWFsIGRlcmVmZXJlbmNpbmcgb2YgYW4gaW52YWxpZCBwbWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gdGhpbmtpbmcgdGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBhIGNyYXNoIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHBhZ2UgbWFwIGRpcmVjdG9yeSAocG1kKSBpcyBzb21laG93IHVuaW5pdGlhbGl6ZWQgb3IgZG9lc24mIzM5O3QgYWN0dWFsbHkgZXhpc3QgZm9yIGEgZ2l2ZW4gYWRkcmVzcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBsZWFkIHRvIGBwbWRgIGJlaW5nIGluIHRoaXMgc3RhdGUsIGFuZCB3aGF0IHRoZSBvcmlnaW5hbCBhc3N1bXB0aW9uIHdhcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgdGhlIHBtZCBjYW4gYmUgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZSB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgaGVyZSwgYnV0IHRoaXMgaXMgaW1tZWRpYXRlbHkgbWFraW5nIG1lIHRoaW5rIHRoYXQgaXQmIzM5O3MgYSBnb29kIHNhZmV0eSBjaGVjaywgZXNwZWNpYWxseSBpbiB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfdGFibGVfY2hlY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCBmb3IgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI3NC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBpcy4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGVidWcgYSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBnb2luZyBvbiBhdCBsaW5lIDI3NC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3RhYmxlX2NoZWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0XHRwYWdlX3RhYmxlX2NoZWNrX3NldChwdWRfcGZuKHB1ZCksIHN0cmlkZSAqIG5yLCBwdWRfd3JpdGUocHVkKSk7XG4gMjcxOlx0fVxuIDI3MjpcdEVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbiAyNzM6XHRcbiAyNzQ6XHR2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gMjc1Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiAyNzY6XHRcdFx0XHRcdFx0cG1kX3QgcG1kKVxuIDI3NzpcdHtcbiAyNzg6XHRcdGlmIChcdTAwMjZpbml0X21tID09IG1tKVxuIDI3OTpcdFx0XHRyZXR1cm47XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAoIXBtZF9ub25lKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4gMjgyOlx0XHRcdHB0ZV90ICpwdGVwID0gcHRlX29mZnNldF9tYXAoXHUwMDI2cG1kLCBhZGRyKTtcbiAyODM6XHRcdFx0dW5zaWduZWQgbG9uZyBpO1xuIDI4NDpcdFxuIDI4NTpcdFx0XHRpZiAoV0FSTl9PTighcHRlcCkpXG4gMjg2Olx0XHRcdFx0cmV0dXJuO1xuIDI4NzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7XG4gMjg4Olx0XHRcdFx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcHRlcF9nZXQocHRlcCkpO1xuIDI4OTpcdFx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbiAyOTA6XHRcdFx0XHRwdGVwJiM0MzsmIzQzOztcbiAyOTE6XHRcdFx0fVxuIDI5MjpcdFx0XHRwdGVfdW5tYXAocHRlcCAtIFBUUlNfUEVSX1BURSk7XG4gMjkzOlx0XHR9XG4gMjk0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBQYWdlIFRhYmxlIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IOKAkyBzb21lb25lIHdhcyBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAgb24gYSBgcG1kX25vbmVgIFBNRCwgd2hpY2ggaXMgb2J2aW91c2x5IG5vdCBpZGVhbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaWdnaW5nIGludG8gdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgbG9naWMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSBpdCYjMzk7cyByb2J1c3QuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHdlIG5lZWQgdG8gZnV6eiB0aGlzIGNoYW5nZSBhZ2dyZXNzaXZlbHkuIFdlIHNob3VsZCB0aHJvdyBldmVyeSBjb25jZWl2YWJsZSBzY2VuYXJpbyBhdCBpdCB0byBmbHVzaCBvdXQgYW55IGVkZ2UgY2FzZXMuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIGBLY29uZmlnYCBmb3IgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpZiB3ZSBuZWVkIHRvIGFjdGl2ZWx5IGNvbmZpZ3VyZSB0aGUga2VybmVsIHRvIHRyaWdnZXIgdGhpcyBuZXcsIGltcHJvdmVkIGNoZWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBpdHMgaW1wYWN0IGlzIGtleSBiZWZvcmUgSSBkaXZlIGluIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9UQUJMRV9DSEVDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTEwNT1jb25maWcgUEFHRV9PV05FUlxuLS1cbm1tL0tjb25maWcuZGVidWctMTIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoxMjI6Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcbm1tL0tjb25maWcuZGVidWctMTIzLVx0Ym9vbCBcJiMzNDtDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMzUtXG5tbS9LY29uZmlnLmRlYnVnOjEzNjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzctXHRib29sIFwmIzM0O0VuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkZWJ1Z2dpbmcsIHNvIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9LY29uZmlnLmRlYnVnYC4gSSBrbm93IHRoYXQgZmlsZSB1c3VhbGx5IGhvdXNlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG9wdGlvbnMsIGFuZCBnaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdG8gYmUgcHJlc2VudC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyMiwgYXMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyByZWxhdGVkIG9wdGlvbnMuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgcGFydGljdWxhciBhcmVhIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGZpbmVyIHBvaW50cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGRlYnVnZ2luZyBvcHRpb25zLiBQZXJoYXBzIHNwZWNpZmljIGZsYWdzIG9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBpbiB0aGF0IHJlZ2lvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIxOlx0XG4gMTIyOlx0Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcbiAxMjM6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1wmIzM0O1xuIDEyNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbiAxMjU6XHRcdGRlcGVuZHMgb24gRVhDTFVTSVZFX1NZU1RFTV9SQU1cbiAxMjY6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuIDEyNzpcdFx0aGVscFxuIDEyODpcdFx0ICBDaGVjayB0aGF0IGFub255bW91cyBwYWdlIGlzIG5vdCBiZWluZyBtYXBwZWQgdHdpY2Ugd2l0aCByZWFkIHdyaXRlXG4gMTI5Olx0XHQgIHBlcm1pc3Npb25zLiBDaGVjayB0aGF0IGFub255bW91cyBhbmQgZmlsZSBwYWdlcyBhcmUgbm90IGJlaW5nXG4gMTMwOlx0XHQgIGVycm9uZW91c2x5IHNoYXJlZC4gU2luY2UgdGhlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgdGltZVxuIDEzMTpcdFx0ICBlbnRyaWVzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB1c2VyIHBhZ2UgdGFibGVzLCBsZWFraW5nLCBjb3JydXB0aW9uXG4gMTMyOlx0XHQgIGFuZCBkb3VibGUgbWFwcGluZyBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgc3luY2hyb25vdXNseS5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgSWYgdW5zdXJlIHNheSBcJiMzNDtuXCYjMzQ7LlxuIDEzNTpcdFxuIDEzNjpcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG4gMTM3Olx0XHRib29sIFwmIzM0O0VuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFwmIzM0O1xuIDEzODpcdFx0ZGVwZW5kcyBvbiBQQUdFX1RBQkxFX0NIRUNLXG4gMTM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGFnZSBUYWJsZSBDaGVjayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgc29tZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHBhZ2UgdGFibGUgY2hlY2tzLiBMZXQmIzM5O3Mgc2VlLCBJIG5lZWQgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gQWgsIGhhbmcgb27igKYgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgIHByZXR0eSBtdWNoIGhhbmRsZXMgdGhlIGVuZm9yY2VtZW50IGFzcGVjdCBhdXRvbWF0aWNhbGx5LCBzbyBpdCBzZWVtcyBJJiMzOTttIGNvdmVyZWQuIEkgdGhpbmsgaW4gdGhpcyBzaXR1YXRpb24gSSB3aWxsIGVuYWJsZSBib3RoIG9mIHRob3NlIGNvbmZpZ3MuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSBzaG91bGQgZG91YmxlLWNoZWNrIGFib3V0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvcnRlZCBvciB1dGlsaXplZCBhbnl3aGVyZTsgSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCwganVzdCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xMDQ9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMC1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjExMTpcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTItfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNzI9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3My1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3NS1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipUaGUgQ29udGV4dCBvZiBDbGVhcmluZyBQVEUgUmFuZ2VzKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSW1tZWRpYXRlbHksIEkga25vdyB0aGlzIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHRvIGNoZWNrIGFuZCBwb3RlbnRpYWxseSBjbGVhciBhIHJhbmdlIG9mIFBhZ2UgVGFibGUgRW50cmllcyAoUFRFcykuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBpbiB0aGUgd2VlZHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb25zLCBhbmQgcHJvYmFibHkgZW5jb3VudGVyaW5nIHNpdHVhdGlvbnMgd2hlcmUgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBvciBmcmVlZC4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdDogd2UmIzM5O3JlIHZlcmlmeWluZyBpZiBjbGVhcmluZyBhIFBURSByYW5nZSBpcyBhcHByb3ByaWF0ZSwgYW5kIGRvaW5nIGl0IGlmIGl0IGlzLiBUaGUgJiMzOTtjaGVjayYjMzk7IGltcGxpZXMgd2UgYXJlIGRvaW5nIG1vcmUgdGhhbiBqdXN0IGNsZWFyaW5nIGJsaW5kbHkuIFRoZXJlJiMzOTtzIHNvbWUgc2FmZXR5IG5ldCBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IG5lY2Vzc2l0YXRlcyB0aGlzICYjMzk7Y2hlY2smIzM5OyBhbmQgY2xlYXIgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD05NT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDMtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDQ6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTA1LVx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEwLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgYWRkciwgcG1kKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMi19XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTUwPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE1NC1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE1NTpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTYtXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTg2Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjA2MC1cdG1tX2RlY19ucl9wdGVzKG1tKTtcbm1tL2todWdlcGFnZWQuYzoyMDYxOlx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGhhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMDYyLVx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjE0NT1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjIxLVx0XHRcdG1tX2RlY19ucl9wdGVzKG1tKTtcbm1tL2todWdlcGFnZWQuYzoyMjIyOlx0XHRcdHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMjIzLVx0XHRcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTI3Mj1FWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI3NDp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjc1LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRIUCBDb2xsYXBzZSBhbmQgUmV0cmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgVEhQIGNvbGxhcHNlIGFuZCByZXRyYWN0aW9uIG1lY2hhbmlzbXMsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aGUgZnVuY3Rpb25zIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIG1lY2hhbmlzbXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiB3aGVyZSB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbS4gV2FpdCBhIG1pbnV0ZSwgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhvc2UsIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIGV4YW1pbmUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBUaGF0IGxvb2tzIGxpa2UgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZnVuY3Rpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AsIGFuZCB0aGF0IG90aGVyIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODYyLVxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMTg2NC1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjEwMT12b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDMte1xubW0va2h1Z2VwYWdlZC5jOjIxMDQ6XHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMTA1LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI2MzMtXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cbm1tL2todWdlcGFnZWQuYzoyNjM0Olx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXHQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjg0MC1cdFx0ZWxzZVxubW0va2h1Z2VwYWdlZC5jOjI4NDE6XHRcdFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTI4NDItXHRcdFx0XHRcdFx0XHQgICAgICFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUGFnZSBUYWJsZSBDb2xsYXBzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYWdlIHRhYmxlIGNvbGxhcHNpbmcgbG9naWMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgY29sbGFwc2VfZmlsZWAsIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIFRoYXQgaW1tZWRpYXRlbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHdoZXJlIHRoaXMgZmVhdHVyZSBpcyB1c2VkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYSBmdW5jdGlvbiBsaWtlIGBtYWR2aXNlYCB3aXRoIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmxhZyBpcyBhIGxpa2VseSB0cmlnZ2VyLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIHByaW1hcnkgdXNlIGNhc2UuIFRvIGRlbHZlIGZ1cnRoZXIsIEkgdGhpbmsgY2hlY2tpbmcgb3V0IHRoZSBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgZnVuY3Rpb24gaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJdCBzZWVtcyBsaWtlIGl0IHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgYmVoYXZpb3Igb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEnigJlsbCBzdGFydCBkaWdnaW5nIGludG8gdGhhdCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXRyYWN0X3BhZ2VfdGFibGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NTYyPWFyZSBleHRyYSByZXF1aXJlbWVudHMgZm9yIGFjY2Vzc2luZyB0aGVtOlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTY3LSAgcm1hcCBsb2NrIGZvciByZWFkaW5nIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIFBURSBhbmQgUE1EIHBhZ2UgdGFibGUgbG9ja3MuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU2ODogIEluIHBhcnRpY3VsYXIsIHRoaXMgaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2hlbiBoYW5kbGluZ1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NjktICA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTc4LSAgY2FuIHRha2UgdGhlIFBNRCBsb2NrIGFuZCByZXZhbGlkYXRlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHBtZCBlbnRyeSBzdGlsbCBtZWV0XG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU3OTogIHRoZSByZXF1aXJlbWVudHMuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01ODAtICB3aGVuIGhhbmRsaW5nIDpjOm1hY3JvOmAhTUFEVl9DT0xMQVBTRWAuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03MjY9Y2xlYXJlZCB3aXRob3V0IHBhZ2UgdGFibGUgbG9ja3MgKGluIHRoZSA6YzpmdW5jOmAhcGdkX2NsZWFyYCwgOmM6ZnVuYzpgIXA0ZF9jbGVhcmAsXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC03MzAtICAgICAgICAgIHRoZSBwYWdlIHRhYmxlcyBhYm92ZSBpdCBhcyBpcyBkb25lIGJ5XG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjczMTogICAgICAgICAgOmM6ZnVuYzpgIXJldHJhY3RfcGFnZV90YWJsZXNgLCB3aGljaCBpcyBwZXJmb3JtZWQgdW5kZXIgdGhlIGlfbW1hcFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC03MzItICAgICAgICAgIHJlYWQgbG9jaywgUE1ELCBhbmQgUFRFIHBhZ2UgdGFibGUgbG9ja3MsIHdpdGhvdXQgdGhpcyBsZXZlbCBvZiBjYXJlLlxuLS1cbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xOTAzLVx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxubW0va2h1Z2VwYWdlZC5jOjE5MDQ6XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXG5tbS9raHVnZXBhZ2VkLmMtMTkwNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yMTA4PXN0YXRpYyBib29sIGZpbGVfYmFja2VkX3ZtYV9pc19yZXRyYWN0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjE0NC1cbm1tL2todWdlcGFnZWQuYzoyMTQ1OnN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG5tbS9raHVnZXBhZ2VkLmMtMjE0Ni17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjM1LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MjYzNjpcdHJldHJhY3RfcGFnZV90YWJsZXMobWFwcGluZywgc3RhcnQpO1xubW0va2h1Z2VwYWdlZC5jLTI2MzctXHRpZiAoY2MgXHUwMDI2XHUwMDI2ICFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKVxuLS1cbm1tL21lbW9yeS5jPTEzMDY9Y29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vbWVtb3J5LmMtMTM0Mi1cdCAqIFdlIGFscmVhZHkgaG9sZCB0aGUgZXhjbHVzaXZlIG1tYXBfbG9jaywgdGhlIGNvcHlfcHRlX3JhbmdlKCkgYW5kXG5tbS9tZW1vcnkuYzoxMzQzOlx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpIGFyZSB1c2luZyB2bWEtXHUwMDNlYW5vbl92bWEgdG8gYmUgZXhjbHVzaXZlLCBzb1xubW0vbWVtb3J5LmMtMTM0NC1cdCAqIHRoZSBQVEUgcGFnZSBpcyBzdGFibGUsIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGdldCBwbWR2YWwgYW5kIGRvXG4tLVxubW0vbXJlbWFwLmM9MTk3PXN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4tLVxubW0vbXJlbWFwLmMtMjQ4LVx0ICogdGhpcyBieSB0cmF2ZXJzaW5nIGZpbGUtXHUwMDNlZl9tYXBwaW5nLCBzbyB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSB3aXRoXG5tbS9tcmVtYXAuYzoyNDk6XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuIEluIGFkZGl0aW9uLCB3ZSBhbHJlYWR5IGhvbGQgdGhlIGV4Y2x1c2l2ZVxubW0vbXJlbWFwLmMtMjUwLVx0ICogbW1hcF9sb2NrLCBzbyB0aGlzIG5ld19wdGUgcGFnZSBpcyBzdGFibGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgQ2xlYXJpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgcGFnZSB0YWJsZXMgZ2V0IGNsZWFyZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGByZXRyYWN0X3BhZ2VfdGFibGVzYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGNhbGxpbmcgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgICphbHNvKiBjYWxsZWQgZnJvbSB3aXRoaW4gaXRzZWxmPyBObywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEFmdGVyIGEgcXVpY2sgbG9vaywgSSBzZWUgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyBhY3R1YWxseSBhbiBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmhgLCBhbmQgaXQmIzM5O3MgdGhlIGlubGluZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGltZSB0byBleGFtaW5lIHRoYXQgaGVhZGVyIGZpbGUgbW9yZSBjbG9zZWx5IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoYXQgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFxuIDEwMTpcdFx0X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIG5yKTtcbiAxMDI6XHR9XG4gMTAzOlx0XG4gMTA0Olx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDEwNTpcdFx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4gMTA2Olx0XHRcdFx0XHRcdFx0ICAgIHBtZF90IHBtZClcbiAxMDc6XHR7XG4gMTA4Olx0XHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2cGFnZV90YWJsZV9jaGVja19kaXNhYmxlZCkpXG4gMTA5Olx0XHRcdHJldHVybjtcbiAxMTA6XHRcbiAxMTE6XHRcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XG4gMTEyOlx0fVxuIDExMzpcdFxuIDExNDpcdCNlbHNlXG4gMTE1Olx0XG4gMTE2Olx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAxMTc6XHR7XG4gMTE4Olx0fVxuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBQYWdlIFRhYmxlIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYCFwbWRfbm9uZShwbWQpYCBjaGVjayByZWFsbHkgc3RhbmRzIG91dC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIGVpdGhlciBhIHN5c3RlbSBjcmFzaCBvciBhIHdhcm5pbmcgY29uZGl0aW9uIHdoZW4gYHBtZF9ub25lKHBtZClgIGlzIGVuY291bnRlcmVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgZ3VhcmQsIEkmIzM5O2Qgc2F5LgoKVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggYG1tL2todWdlcGFnZWQuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGludmVzdGlnYXRlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AuIEFyZSB0aGV5IHN0YXRpY2FsbHkgZGVmaW5lZCwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQ/IEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgbGlua2FnZSB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4KCkhtbW0sIGl0IGxvb2tzIGxpa2UgYm90aCBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgIGFyZSBzdGF0aWMsIHdoaWNoIG1ha2VzIHRoaXMgYSBiaXQgc2ltcGxlciB0byBmb2xsb3cuIEhvd2V2ZXIsIHdhaXQsIGlzbiYjMzk7dCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGV4cG9ydGVkLCBvciBhbSBJIG1pc3Rha2VuPyBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE5PWV4dGVybiBib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIwOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTIxLVx0XHRib29sIGluc3RhbGxfcG1kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDQtfVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDU6c3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDYtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpbnN0YWxsX3BtZClcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU5OS1cdGlmIChyZXQgXHUwMDNlIDApXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo2MDA6XHRcdGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCB2YWRkciwgZmFsc2UpO1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNjAxLVxuLS1cbm1tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODYyLVxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMTg2NC1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjA4OS0vKipcbm1tL2todWdlcGFnZWQuYzoyMDkwOiAqIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwIC0gVHJ5IHRvIGNvbGxhcHNlIGEgcHRlLW1hcHBlZCBUSFAgZm9yIG1tIGF0XG5tbS9raHVnZXBhZ2VkLmMtMjA5MS0gKiBhZGRyZXNzIGhhZGRyLlxuLS1cbm1tL2todWdlcGFnZWQuYy0yMTAwLSAqL1xubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTIxMDItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG5tbS9raHVnZXBhZ2VkLmMtMjEwMy17XG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jLTIxMDUtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNzk2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODQwLVx0XHRlbHNlXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MTpcdFx0XHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjg0Mi1cdFx0XHRcdFx0XHRcdCAgICAgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRIUCBDb2xsYXBzZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFyZSBoYW5kbGVkIGR1cmluZyBtZW1vcnkgY29sbGFwc2Ugb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzbiYjMzk7dCBkZWNsYXJlZCBzdGF0aWMsIG1lYW5pbmcgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIE9uIHRoZSBvdGhlciBoYW5kLCBgY29sbGFwc2VfZmlsZWAgKmlzKiBzdGF0aWMsIGltcGx5aW5nIGl0cyB1c2UgaXMgcmVzdHJpY3RlZCB0byB0aGUgZmlsZS1iYWNrZWQgbWVtb3J5IGNvbGxhcHNlIHByb2NlZHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGBtYWR2aXNlX2NvbGxhcHNlYCBhY3R1YWxseSBjYWxscy4gSSBrbm93IGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBkZWZpbmVkIGluIGBtbS9tYWR2aXNlLmNgLCBzbyBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHRvIHNlZSBpZiBpdCBjYWxscyBlaXRoZXIgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBvciBgY29sbGFwc2VfZmlsZWAsIG9yIGJvdGgsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGNoYWluIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0zNDY9QSBoaWdoZXIgdmFsdWUgbWF5IGluY3JlYXNlIG1lbW9yeSBmb290cHJpbnQgZm9yIHNvbWUgd29ya2xvYWRzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MzU0OiAgIEN1cnJlbnRseSwgbWFkdmlzZV9jb2xsYXBzZSBvbmx5IHN1cHBvcnRzIGNvbGxhcHNpbmcgdG8gUE1ELXNpemVkIFRIUHNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTUtICAgYW5kIGRvZXMgbm90IGF0dGVtcHQgbVRIUCBjb2xsYXBzZXMuXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNTc9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE2MS1cbm1tL2todWdlcGFnZWQuYzozMTYyOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXG5tbS9raHVnZXBhZ2VkLmMtMzE2My17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTMxOTMtXG5tbS9raHVnZXBhZ2VkLmM6MzE5NDppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2todWdlcGFnZWQuYy0zMTk1LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyODEtXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFx1MDAzZVx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxubW0va2h1Z2VwYWdlZC5jOjMyODI6XHRcdFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XG5tbS9raHVnZXBhZ2VkLmMtMzI4My19XG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM2My1cdGNhc2UgTUFEVl9DT0xMQVBTRTpcbm1tL21hZHZpc2UuYzoxMzY0Olx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG5tbS9tYWR2aXNlLmMtMTM2NS1cdFx0XHRcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZWxvY2tfZHJvcHBlZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTIzND1zdGF0aWMgdm9pZCBmaWxsX21lbW9yeShpbnQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDctICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjQ4OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9yZXRyeSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjY2PXN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzktXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI4MDpcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODEtXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTEwPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNTpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxNi1cdFx0XHQgICAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOC1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUzOTpcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU0MC1cdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU0OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTA6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUxLVx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1NS1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTY6XHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTctfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz02Nzk9c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjY4MDpcdC5jb2xsYXBzZSA9IFx1MDAyNm1hZHZpc2VfY29sbGFwc2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjgxLVx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEwNzU9c3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTMyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExMzM6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzQtXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExNDMtXHQvKiBjLVx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxMTQ0Olx0X19tYWR2aXNlX2NvbGxhcHNlKFwmIzM0O1JlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcJiMzNDssIHAsIDEsIG9wcywgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0NS1cdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEzMTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xNDMxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzI6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzMzpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNDpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHBlcnRpbmVudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAgc2VlbXMgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUuIEkgYWxzbyB0aGluayBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIGltcG9ydGFudCB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQuIEhtbSwgYnV0IGhhbmcgb24uLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGByZXRyYWN0X3BhZ2VfdGFibGVzYCBpcyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyByZWxldmFudC4gTm93LCBpcyBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFsc28gc3RhdGljPyBObywgbm8gaXQmIzM5O3Mgbm90LiBJIHJlbWVtYmVyIG5vdyB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGAuIEludGVyZXN0aW5nLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGV4cG9ydGVkIGFuZCBpc24mIzM5O3QgYSBzdGF0aWMgZnVuY3Rpb24uIE5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBub24tc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKl9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIEkgKnN3ZWFyKiBJIGp1c3QgZ2xhbmNlZCBhdCBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCBhbmQgc2F3IHNvbWV0aGluZyBpbnRlcmVzdGluZyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYEVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KWAgbWFjcm8uIFRoYXQmIzM5O3MgZ290IG1lIHRoaW5raW5nLiBJdCYjMzk7cyB0aW1lIHRvIHJldmlzaXQgdGhhdCBmaWxlLCBkaXZlIGRlZXBlciwgYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhhdCBzeW1ib2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIExldCYjMzk7cyBnZXQgYmFjayB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3RhYmxlX2NoZWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0XHRcdHB0ZXAmIzQzOyYjNDM7O1xuIDI5MTpcdFx0XHR9XG4gMjkyOlx0XHRcdHB0ZV91bm1hcChwdGVwIC0gUFRSU19QRVJfUFRFKTtcbiAyOTM6XHRcdH1cbiAyOTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTg1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhbiBleHBvcnRlZCBzeW1ib2wsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBSaWdodCwgcmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gYSB1c2VmdWwgZm9jdXMgcG9pbnQgaGVyZSBjb3VsZCBiZSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYWxzbywgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG9uIGBtYWR2aXNlX2NvbGxhcHNlYC4gVGhhdCBjb3VsZCBiZSByZWxldmFudCBhcyB3ZWxsLgoKSSBzaG91bGQgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBmb3IgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBMZXQmIzM5O3Mgc2VlLi4uIGl0ICpkZXBlbmRzIG9uKiBgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBFWENMVVNJVkVfU1lTVEVNX1JBTWAuIEFsc28sIGl0ICpzZWxlY3RzKiBgUEFHRV9FWFRFTlNJT05gLiBSaWdodCwgcmlnaHQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsYXRlZD8gQWgsIHllcywgdGhlcmUmIzM5O3MgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLgoKT2theSwgbmV4dCBzdG9wOiBsZXQmIzM5O3MgZ28gY2hlY2sgb3V0IHdoYXQgYEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS2AgaXMgYWxsIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xNzQ5PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQ1xuLS1cbmFyY2gvS2NvbmZpZy0xNzUxLVxuYXJjaC9LY29uZmlnOjE3NTI6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xuYXJjaC9LY29uZmlnLTE3NTMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDM0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBhZ2UgVGFibGUgQ2hlY2tpbmcqKgoKT2theSwgc28gdGhpcyBpcyBhYm91dCBlbmFibGluZyBzb21lIHBhZ2UgdGFibGUgY2hlY2tzLCBzcGVjaWZpY2FsbHkgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgc2VlbXMgbGlrZSBhbiBhcmNoaXRlY3R1cmFsIGNob2ljZS4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvciBga2h1Z2VwYWdlZGAsIGFuZCBpdCBsb29rcyBsaWtlIEkmIzM5O20gcmlnaHQuIFRoZW4gSSByZW1lbWJlciB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyBhbHNvIGNhbGxlZCB0aHJvdWdoIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgZnJvbSB3aXRoaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGByZXRyYWN0X3BhZ2VfdGFibGVzYC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYXJlIHRoZXJlICphbnkqIG90aGVyIGNhbGxlcnMgb2YgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYD8gTm9wZSwgbG9va3MgbGlrZSBJJiMzOTt2ZSBhbHJlYWR5IHNjYW5uZWQgYG1tL2todWdlcGFnZWQuY2AgdGhvcm91Z2hseSwgd2hpY2ggZ2l2ZXMgbWUgY29uZmlkZW5jZSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiB0aGUgdHdvIGNhbGxlcnMgYXJlIGluZGVlZCB0aGUgb25lcyBJIGtub3cuCgpTbywgYmFzZWQgb24gdGhpcywgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYW5kIGBtYWR2aXNlX2NvbGxhcHNlYC4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIG1ha2Ugc3VyZSB0aGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBub24tc3RhdGljIHRvIGVuc3VyZSBwcm9wZXIgbGlua2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG1hZHZpc2VfY29sbGFwc2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNjI9c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE5My1cbm1tL2todWdlcGFnZWQuYzozMTk0OmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMxOTUtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIFN0YXRpYy1uZXNzIG9mIFN5c3RlbSBDYWxscyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgYG1hZHZpc2VfY29sbGFwc2VgLiBUaGUgY29kZSYjMzk7cyBtYWtpbmcgbWUgZG91YmxlLWNoZWNrIGl0cyBkZWNsYXJhdGlvbi4gWWVwLCBjb25maXJtZWQsIGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB3aGF0IEkgZXhwZWN0IHRoZW0gdG8gYmUgdG9vLiBJJiMzOTtsbCB2ZXJpZnkgdGhhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzbiYjMzk7dCBkZWNsYXJlZCBzdGF0aWMgZWl0aGVyLiBJIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIHNvcnRzIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0xOT1leHRlcm4gYm9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMDp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0yMS1cdFx0Ym9vbCBpbnN0YWxsX3BtZCk7XG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9NDE9c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ0LX1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ2LVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE4NjM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXMgZGVmaW5pdGVseSBub3Qgc3RhdGljLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCBtYWtlIHN1cmUgd2UmIzM5O3ZlIGFjY291bnRlZCBmb3IgKmFsbCogdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBga2h1Z2VwYWdlZGAgYW5kIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmVhdHVyZS4gVGhpcyBpcyB0aGUga2luZCBvZiBkZXRhaWwgdGhhdCBjYW4gbWFrZSBvciBicmVhayBhIHN5c3RlbS4gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGhpZ2hseSBwcm9iYWJsZSB0byBiZSByZXF1aXJlZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBub3RoaW5nIGlzIG92ZXJsb29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzNC1cbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM2LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTgtXG5tbS9LY29uZmlnOjg1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODYwLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY1LVxubW0vS2NvbmZpZzo4NjY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjctXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODc0LVxubW0vS2NvbmZpZzo4NzU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc2LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTEtXG5tbS9LY29uZmlnOjg5MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5My1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAxLVxubW0vS2NvbmZpZzo5MDI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAzLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA5LVxubW0vS2NvbmZpZzo5MTA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTEtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNy1cbm1tL0tjb25maWc6OTE4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxOS1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyNz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzNi1cbm1tL0tjb25maWc6OTM3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDUtXG5tbS9LY29uZmlnOjk0NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTMtXG5tbS9LY29uZmlnOjk1NDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1NS1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTYxLVxubW0vS2NvbmZpZzo5NjI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYzLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkxOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEtlcm5lbCBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgd2Ugc3RpbGwgbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyB0aGF0IG11Y2ggaGFzbiYjMzk7dCBjaGFuZ2VkLiBOb3csIGxldCYjMzk7cyByZXZpc2l0IHRoYXQgYFBBR0VfVEFCTEVfQ0hFQ0tgIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLiBIbW0sIHJlYWRpbmcgdGhlIGNvbmZpZywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0JiMzOTtzIHJpZ2h0LCBpdCYjMzk7cyB0aGF0ICYjMzQ7Q2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlcyYjMzQ7IGJvb2xlYW4uIFNvLCB0byBnZXQgdGhlIGRlc2lyZWQgYmVoYXZpb3IsIGl0IGxvb2tzIGxpa2UgSSBuZWVkICpib3RoKiBgUEFHRV9UQUJMRV9DSEVDS2AgYW5kIGl0cyBlbmZvcmNlbWVudCBjb21wYW5pb24sIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gR290dGEgZW5hYmxlIHRob3NlIHRvIGdldCBmdWxsIGNvdmVyYWdlLiBBbmQgc2luY2UgSeKAmW0gdGhpbmtpbmcgYWJvdXQgdGhlIGNoZWNrcywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBsaXZlcyDigJMgeWVwLCBpdCYjMzk7cyByaWdodCB3aGVyZSBJIHRob3VnaHQ6IGluIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBHb29kLCBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgQ2xlYXJpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBhbHJlYWR5IGNoZWNrZWQgYW5kIGZvdW5kIHRoYXQgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCAtIHRoYXQmIzM5O3MgKndpdGhvdXQqIHRoZSBkb3VibGUgdW5kZXJzY29yZSAtIGlzIGNhbGxlZCBmcm9tIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AuIEludGVyZXN0aW5nLgoKV2FpdCwgZGlkIEkganVzdCBzZWUgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXRzZWxmPyBObywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBjYWxscyBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcmAsIG5vdCB0aGUgZnVuY3Rpb24gd2l0aG91dCB0aGUgbGVhZGluZyB1bmRlcnNjb3Jlcy4KCkFscmlnaHQsIHRoYXQgY2xhcmlmaWVzIHRoZSBpbW1lZGlhdGUgY2FsbCBncmFwaC4gTm93LCB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbiBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJgIGlzIGRvaW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTE2PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxNzp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE4LVx0XHRcdFx0ICBwdGVfdCBwdGUpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTI3PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cdFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9NDk9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTU0LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6NTU6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGUpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtNTYtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEwLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgYWRkciwgcG1kKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMi19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE0Ny1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxNDg6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTQ5LVx0XHRcdFx0ICBwdGVfdCBwdGUpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE1Ni19XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTU3OkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcik7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTU4LVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yMTA9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjIwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkmIzQzOyYjNDM7KVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIyMTpcdFx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciAmIzQzOyBQQUdFX1NJWkUgKiBpLCBwdGVwX2dldChwdGVwICYjNDM7IGkpKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMjItXHRpZiAocHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwdGUpIFx1MDAyNlx1MDAyNiAhcHRlX3NwZWNpYWwocHRlKSlcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjg3LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjg4Olx0XHRcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXBfZ2V0KHB0ZXApKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yODktXHRcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gY2hhbmdlZC4gTm93LCBsZXQgbWUgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQQUdFX1RBQkxFX0NIRUNLYCwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bGwgd2FudCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Ugc3ltYm9sczogYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLgoKVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoYXQgZnVuY3Rpb24uIFByaW1hcmlseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYG1hZHZpc2VfY29sbGFwc2VgIGlzIHRoZSAqb25seSogcGF0aC4gTm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBga2h1Z2VwYWdlZGAgY2FuIGFsc28gdHJpZ2dlciBpdCB0aHJvdWdoIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgb3IgYHJldHJhY3RfcGFnZV90YWJsZXNgLiBSaWdodCwgYGtodWdlcGFnZWRgIGlzIGEga2VybmVsIHRocmVhZCwgc28gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IHN5c2NhbGwsIGJ1dCBpdCAqZG9lcyogc2NhbiBtZW1vcnkuIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBpcyBhIG1vcmUgZGlyZWN0IHRyaWdnZXIsIG9idmlvdXNseS4KCk5vdywgSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBFWENMVVNJVkVfU1lTVEVNX1JBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYEVYQ0xVU0lWRV9TWVNURU1fUkFNYCBzZXR0aW5nIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWENMVVNJVkVfU1lTVEVNX1JBTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUwMD1jb25maWcgTUVNT1JZX0lTT0xBVElPTlxuLS1cbm1tL0tjb25maWctNTA1LSMgL2Rldi9tZW0uXG5tbS9LY29uZmlnOjUwNjpjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbm1tL0tjb25maWctNTA3LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQYWdlIFRhYmxlIENoZWNrIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZGVmX2Jvb2wgeWAsIHdoaWNoIG1lYW5zIHdlIGhhdmUgYSBib29sZWFuIGRlZmluaXRpb24gc2V0LiBTcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoIGFyZSBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE15IHRhc2sgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGNhbiBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHBvdGVudGlhbCBjYWxsIHBhdGhzLiBJIGtub3cgdGhhdCBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgIGFyZSBrZXkgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCBhbmQgdGhhdCB0aGV5IHJlc2lkZSB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIEEga2V5IGZhY3RvciwgdGhvdWdoLCBpcyB0aGF0IGBtbS9raHVnZXBhZ2VkLmNgIGl0c2VsZiBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gVGhlcmVmb3JlLCBhIGRpcmVjdCBwYXRoIHRocm91Z2ggdGhvc2UgZnVuY3Rpb25zIHdpdGhvdXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcHBlYXJzIHVubGlrZWx5LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBleHBsb3JlIGFsdGVybmF0ZSBwYXRocywgY29uc2lkZXJpbmcgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBjb21lcyBpbnRvIHBsYXkgYXMgSSBwcm9jZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgYW5kIGhvdyBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWQubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MTktXHRcdFx0Lypcbm1tL2todWdlcGFnZWQuYzoyNDIwOlx0XHRcdCAqIGtodWdlcGFnZWQgb25seSB3b3JrcyBvbiBjbGVhbiBmaWxlLWJhY2tlZCBmb2xpb3MsXG5tbS9raHVnZXBhZ2VkLmMtMjQyMS1cdFx0XHQgKiBzbyB0aGlzIGZvbGlvIGlzIGRpcnR5IGJlY2F1c2UgaXQgaGFzbiYjMzk7dCBiZWVuIGZsdXNoZWRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjY2PXN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzUtXHQgKiB3aGlsZSB0aGUgZm9ybWVyIG1pZ2h0IGNhdXNlIE1BRFZfQ09MTEFQU0UgdG8gcmFjZSB3aXRoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc2Olx0ICoga2h1Z2VwYWdlZCBvbiBsb3ctbG9hZCBzeXN0ZW0gKGxpa2UgYSB0ZXN0IG1hY2hpbmUpLCB3aGljaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTI3Ny1cdCAqIHdvdWxkIGNhdXNlIE1BRFZfQ09MTEFQU0UgdG8gZmFpbCB3aXRoIEVBR0FJTi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTg5PXN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02MDktXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjYxMDpcdCAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTYxMS1cdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjIzPXN0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTY1MC1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjUxOlx0ICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjUyLVx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0xMTc4PXN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExODgtXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdG1vdW50ZWQgd2l0aCBodWdlPWFkdmlzZSBvcHRpb24gZm9yIGtodWdlcGFnZWQgdGVzdHMgdG8gd29ya1xcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE4OTpcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExOTAtXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcblxcdFN1cHBvcnRlZCBPcHRpb25zOlxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTM1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEh1Z2VwYWdlIENvbXBpbGF0aW9uIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBraHVnZXBhZ2VkLm9gIG1vZHVsZSBpcyBvbmx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlnLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgdHJhbnNwYXJlbnQgaHVnZXBhZ2UgaW1wbGVtZW50YXRpb24uCgpTbywgaW4gdGVybXMgb2YgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIHdlJiMzOTtyZSBsb29raW5nIGF0OiBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIG9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIHJlbGF0aW9uc2hpcHMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHNvbWUga2V5IHN5bWJvbHMuIEkmIzM5O20gZm9jdXNpbmcgb24gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBUaGVzZSBzb3VuZCBsaWtlIHRoZXkmIzM5O3JlIGNyaXRpY2FsIGZvciB0aGUgcGFnZSB0YWJsZSBpbnRlZ3JpdHkgY2hlY2tzLCBodWdlcGFnZSBjb2xsYXBzaW5nLCBhbmQgbWFkdmlzZS1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudCwgcmVzcGVjdGl2ZWx5LiBVbmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IGlzIGltcG9ydGFudC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGJlaW5nIHVzZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGZ1cnRoZXIgY29udGV4dCBmb3IgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTI3PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cdFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMTE6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwbWQpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MjEKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGEgQ3JpdGljYWwgUGF0Y2gqKgoKT2theSwgbm8gb3RoZXIgaW5jb21pbmcgY2FsbHMgZm9yIG5vdywgZ29vZC4gVGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHN1bW1hcnkgY2xlYXJseSBpbmRpY2F0ZXMgYSBjcml0aWNhbCBidWcgZml4IGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGhlIGNvcmUgaXNzdWUgaXMgYHB0ZV9vZmZzZXRfbWFwYCBiZWluZyBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBlYXNpbHkgbGVhZCB0byBhIGtlcm5lbCBjcmFzaCBvciBhIGhhcmQtdG8tZGVidWcgd2FybmluZywgYW5kIHRoYXQgc29ydCBvZiBidWcgaXMgYWJzb2x1dGVseSB0aGUga2luZCB3ZSBuZWVkIHRvIGNhdGNoIGVhcmx5LiBUaGUgY29kZSBtZW50aW9ucyB0aGlzIGhhcHBlbmluZyBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmcm9tIGBraHVnZXBhZ2VkYCBhbmQgd2hlbiBzb21lb25lIHVzZXMgYG1hZHZpc2VfY29sbGFwc2VgLgoKUmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHN0cmF0ZWd5LgoKYFdvcnRoRnV6emluZzogdHJ1ZWAgLSBPYnZpb3VzbHkuIE5vIHF1ZXN0aW9uIHRoZXJlLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIHRoZSBmdXp6ZXIgb246CgoqICAgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgOiBUaGUgZml4IGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIGl0IGhhbmRsZXMgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4KKiAgIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGA6IFRIUCBjb2xsYXBzZSBpcyB3aGF0IHRyaWdnZXJzIHRoZSBpc3N1ZSwgc28gd2UgbmVlZCB0byBoaXQgdGhvc2UgY2FsbCBzaXRlcy4KKiAgIGBtYWR2aXNlX2NvbGxhcHNlYDogQXMgd2l0aCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIHRoaXMgaXMgYSBwb3RlbnRpYWwgdHJpZ2dlciBmb3IgdGhlIGJ1Zy4KCkFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBmb3IgdGhlIGZ1enppbmcgcnVuOgoKKiAgIGBQQUdFX1RBQkxFX0NIRUNLYCwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgOiBUaGlzIHdpbGwgZW5hYmxlIHRoZSBjaGVja3MgdGhlIHBhdGNoIGlzIGludGVuZGVkIHRvIGZpeC4KKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWA6IFRIUCBpcyB0aGUgY29udGV4dCwgc28gd2UgbmVlZCB0byBlbmFibGUgVEhQLgoKVGhlIHJlYXNvbmluZyBpcyBzb3VuZDogdGhlIHBhdGNoIHByZXZlbnRzIGBwdGVfb2Zmc2V0X21hcGAgZnJvbSBiZWluZyBjYWxsZWQgb24gYSBiYWQgYHBtZGAuIEl0JiMzOTtzIGNydWNpYWwgd2UgZnV6eiBib3RoIHRoZSBmaXggKmFuZCogdGhlIGNhbGxlcnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBvdXQgaWYgdGhlIGZpeCBoYXMgaG9sZXMgb3IgaW50cm9kdWNlIG5ldyBvbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCB3aGVyZSBgcHRlX29mZnNldF9tYXBgIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGBwbWRfbm9uZWAgcG1kLCB3aGljaCBtaWdodCBsZWFkIHRvIGEgY3Jhc2ggb3Igd2FybmluZy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIFRIUCBjb2xsYXBzZSBvcGVyYXRpb25zIChlLmcuLCB2aWEgYGtodWdlcGFnZWRgIG9yIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0smIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgd2hlcmUgYHB0ZV9vZmZzZXRfbWFwYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZCwgd2hpY2ggbWlnaHQgbGVhZCB0byBhIGNyYXNoIG9yIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBUSFAgY29sbGFwc2Ugb3BlcmF0aW9ucyAoZS5nLiwgdmlhIGBraHVnZXBhZ2VkYCBvciBgbWFkdmlzZShNQURWX0NPTExBUFNFKWApLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgcG1kX25vbmUocG1kKWAgY2hlY2sgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuIFRoaXMgcHJldmVudHMgbWFwcGluZyBhbmQgYWNjZXNzaW5nIFBURXMgZnJvbSBhbiBlbXB0eSBQTUQsIHdoaWNoIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBhIGNyYXNoLCBvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIGJ5IG5vcm1hbCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjNGM0OTY2ODIzYTFhZmI0NDU2ZTgyZmU2NDE4OGZmOTMxMjBkOTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suYwppbmRleCA2ZmZjNTM2MzU5Y2QwLi5lZDNlMWE3NmYyNjY0IDEwMDY0NAotLS0gYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV90YWJsZV9jaGVjay5jCkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlpZiAoJmFtcDtpbml0X21tID09IG1tKQogCQlyZXR1cm47CiAKLQlpZiAoIXBtZF9iYWQocG1kKSAmYW1wOyZhbXA7ICFwbWRfbGVhZihwbWQpKSB7CiYjNDM7CWlmICghcG1kX25vbmUocG1kKSAmYW1wOyZhbXA7ICFwbWRfYmFkKHBtZCkgJmFtcDsmYW1wOyAhcG1kX2xlYWYocG1kKSkgewogCQlwdGVfdCAqcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKCZhbXA7cG1kLCBhZGRyKTsKIAkJdW5zaWduZWQgbG9uZyBpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA3CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBDaGVjayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgYWRkaW5nIGEgYCFwbWRfbm9uZShwbWQpYCBjaGVjayBiZWZvcmUgY2FsbGluZyBgcHRlX29mZnNldF9tYXBgLiAgQ3VycmVudGx5LCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIFBNRCBpcyAqbm90KiBiYWQgYW5kICpub3QqIGEgbGVhZi4gTm93IGl0IGFkZHMgYSBjaGVjayB0aGF0IGl0JiMzOTtzICpub3QqIG5vbmUuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrPyBCdXQsIGFmdGVyIGEgbW9tZW50LCBJIHJlYWxpemUgdGhhdCBgcG1kX25vbmUocG1kKWAgbWVhbnMgdGhlIFBNRCBlbnRyeSBpcyBlbXB0eSDigJMgaXQgaGFzbiYjMzk7dCBiZWVuIHBvcHVsYXRlZCB3aXRoIGFueSBQVEVzIHlldC4gQ2FsbGluZyBgcHRlX29mZnNldF9tYXBgIG9uIGFuIGVtcHR5IFBNRCBpcyBqdXN0IHBsYWluIHdyb25nLCBhbmQgYSB0ZXh0Ym9vayBjYXVzZSBmb3IgYSBjcmFzaCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIG9yIHVubWFwcGVkIG1lbW9yeSBsb2NhdGlvbi4gSeKAmW0gdGhpbmtpbmcgcGFnZSBmYXVsdHMsIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggaXQuLi4gc3RhbmRhcmQga2VybmVsIGNoZWNrcyB3b3VsZCBwcm9iYWJseSB0cmlwLiBJdCYjMzk7cyBhIHByb3RlY3Rpb24gYWdhaW5zdCBtZW1vcnkgYWNjZXNzIGlzc3VlcyByYXRoZXIgdGhhbiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqY29udGVudHMqLiBJdOKAmXMgYSBjbGFzc2ljIGxvZ2ljYWwgYnVnLgoKVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBoZXJlLiAgVGhpcyBpcyBhYm91dCAqcHJldmVudGluZyogaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBub3QgYWJvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU28sIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGlzIGNvcnJlY3QuICBUaGlzIGlzbuKAmXQgc29tZXRoaW5nIEtNU0FOIHdvdWxkIHNwZWNpZmljYWxseSBmbGFnLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYnkgcmVyZWFkaW5nIHRoZSBjb250ZXh0LiAgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHVzZWQgd2hlbiBjbGVhcmluZyBQVEVzLiBJZiBhIFBNRCBpcyBlbXB0eSwgdGhlcmXigJlzIG5vdGhpbmcgdG8gY2xlYXIuIFNraXBwaW5nIHRoZSBgcG1kX25vbmUocG1kKWAgY2hlY2sgd291bGQgbGV0IHVzIGVuZCB1cCB3aXRoIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLgpTbywgeWVhaCwgaXTigJlzIG5vdCBhbiBpc3N1ZSBvZiByZWFkaW5nIGdhcmJhZ2UuIFRoZSBwcm9ibGVtIGlzIGEgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIG9yIGFuIGFjY2VzcyBvZiBhbiB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uLiBLTVNBTiBpcyBtZWFudCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIEtBU0FOIGNhbiBjYXRjaCBpbGxlZ2FsIG1lbW9yeSB1c2FnZS4gSSYjMzk7bGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGFuZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYHBtZF9ub25lKHBtZClgIGNoZWNrIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBiZWZvcmUgY2FsbGluZyBgcHRlX29mZnNldF9tYXBgLiBUaGlzIHByZXZlbnRzIG1hcHBpbmcgYW5kIGFjY2Vzc2luZyBQVEVzIGZyb20gYW4gZW1wdHkgUE1ELCB3aGljaCB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcywgYSBjcmFzaCwgb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBvciBieSBub3JtYWwga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBwbWRfbm9uZShwbWQpYCBjaGVjayBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYC4gVGhpcyBwcmV2ZW50cyBtYXBwaW5nIGFuZCBhY2Nlc3NpbmcgUFRFcyBmcm9tIGFuIGVtcHR5IFBNRCwgd2hpY2ggd291bGQgbGlrZWx5IHJlc3VsdCBpbiBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIGEgY3Jhc2gsIG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3IgYnkgbm9ybWFsIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDMuMzg2MTQ1ODIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MzAzMjcyMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgcG1kX25vbmUocG1kKWAgY2hlY2sgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuIFRoaXMgcHJldmVudHMgbWFwcGluZyBhbmQgYWNjZXNzaW5nIFBURXMgZnJvbSBhbiBlbXB0eSBQTUQsIHdoaWNoIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBhIGNyYXNoLCBvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIGJ5IG5vcm1hbCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIHdoZXJlIGBwdGVfb2Zmc2V0X21hcGAgY291bGQgYmUgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQsIHdoaWNoIG1pZ2h0IGxlYWQgdG8gYSBjcmFzaCBvciB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMgKGUuZy4sIHZpYSBga2h1Z2VwYWdlZGAgb3IgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowMy4zODYxNTI0NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzY5NDE0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyYzRjNDk2NjgyM2ExYWZiNDQ1NmU4MmZlNjQxODhmZjkzMTIwZDk4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjU3OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suY1xcbmluZGV4IDZmZmM1MzYzNTljZDAuLmVkM2UxYTc2ZjI2NjQgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV90YWJsZV9jaGVjay5jXFxuKysrIGIvbW0vcGFnZV90YWJsZV9jaGVjay5jXFxuQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdGlmIChcXHUwMDI2aW5pdF9tbSA9PSBtbSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFwbWRfYmFkKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcXG4rXFx0aWYgKCFwbWRfbm9uZShwbWQpIFxcdTAwMjZcXHUwMDI2ICFwbWRfYmFkKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcXG4gXFx0XFx0cHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X21hcChcXHUwMDI2cG1kLCBhZGRyKTtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDQuODYzOTUyMzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg5MTMwNzgyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgd2hlcmUgYHB0ZV9vZmZzZXRfbWFwYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZCwgd2hpY2ggbWlnaHQgbGVhZCB0byBhIGNyYXNoIG9yIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBUSFAgY29sbGFwc2Ugb3BlcmF0aW9ucyAoZS5nLiwgdmlhIGBraHVnZXBhZ2VkYCBvciBgbWFkdmlzZShNQURWX0NPTExBUFNFKWApLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjNGM0OTY2ODIzYTFhZmI0NDU2ZTgyZmU2NDE4OGZmOTMxMjBkOThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suY1xuaW5kZXggNmZmYzUzNjM1OWNkMC4uZWQzZTFhNzZmMjY2NCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfdGFibGVfY2hlY2suY1xuKysrIGIvbW0vcGFnZV90YWJsZV9jaGVjay5jXG5AQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdGlmIChcdTAwMjZpbml0X21tID09IG1tKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXBtZF9iYWQocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcbitcdGlmICghcG1kX25vbmUocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9iYWQocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcbiBcdFx0cHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X21hcChcdTAwMjZwbWQsIGFkZHIpO1xuIFx0XHR1bnNpZ25lZCBsb25nIGk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowNC44NjM5NTQxNTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM1OTY5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZvY3VzZWQgb24gYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AuIFNwZWNpZmljYWxseSwgaXQgdGFyZ2V0cyB0aGUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrOiBgIXBtZF9ub25lKHBtZClgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcChcdTAwMjZwbWQsIGFkZHIpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBudWxsIHBvaW50ZXIgY2hlY2sgb3IgZ3VhcmQuIEl0J3MgcHJvdGVjdGluZyBhZ2FpbnN0IHBvdGVudGlhbCBkZXJlZmVyZW5jaW5nIG9mIGFuIGludmFsaWQgcG1kLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gdGhpbmtpbmcgdGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBhIGNyYXNoIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHBhZ2UgbWFwIGRpcmVjdG9yeSAocG1kKSBpcyBzb21laG93IHVuaW5pdGlhbGl6ZWQgb3IgZG9lc24ndCBhY3R1YWxseSBleGlzdCBmb3IgYSBnaXZlbiBhZGRyZXNzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gYHBtZGAgYmVpbmcgaW4gdGhpcyBzdGF0ZSwgYW5kIHdoYXQgdGhlIG9yaWdpbmFsIGFzc3VtcHRpb24gd2FzLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZSBwbWQgY2FuIGJlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGhlcmUsIGJ1dCB0aGlzIGlzIGltbWVkaWF0ZWx5IG1ha2luZyBtZSB0aGluayB0aGF0IGl0J3MgYSBnb29kIHNhZmV0eSBjaGVjaywgZXNwZWNpYWxseSBpbiB0aGF0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjA4LjY5OTkyOTA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY4MTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowOC43NDg2MTcyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc5MzQ3MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjc0LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMuIFRoaXMgY291bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRlYnVnIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGdvaW5nIG9uIGF0IGxpbmUgMjc0LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoxMS41Mjc5NjczNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX3RhYmxlX2NoZWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfc2V0KHB1ZF9wZm4ocHVkKSwgc3RyaWRlICogbnIsIHB1ZF93cml0ZShwdWQpKTtcXG4gMjcxOlxcdH1cXG4gMjcyOlxcdEVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcbiAyNzY6XFx0XFx0XFx0XFx0XFx0XFx0cG1kX3QgcG1kKVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0aWYgKFxcdTAwMjZpbml0X21tID09IG1tKVxcbiAyNzk6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRpZiAoIXBtZF9ub25lKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9iYWQocG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2xlYWYocG1kKSkge1xcbiAyODI6XFx0XFx0XFx0cHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X21hcChcXHUwMDI2cG1kLCBhZGRyKTtcXG4gMjgzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0aWYgKFdBUk5fT04oIXB0ZXApKVxcbiAyODY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyODc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBUUlNfUEVSX1BURTsgaSsrKSB7XFxuIDI4ODpcXHRcXHRcXHRcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwX2dldChwdGVwKSk7XFxuIDI4OTpcXHRcXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4gMjkwOlxcdFxcdFxcdFxcdHB0ZXArKztcXG4gMjkxOlxcdFxcdFxcdH1cXG4gMjkyOlxcdFxcdFxcdHB0ZV91bm1hcChwdGVwIC0gUFRSU19QRVJfUFRFKTtcXG4gMjkzOlxcdFxcdH1cXG4gMjk0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTEuNTI4MDQ0MTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2ODAxNTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBQYWdlIFRhYmxlIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkg4oCTIHNvbWVvbmUgd2FzIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYCBvbiBhIGBwbWRfbm9uZWAgUE1ELCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IGlkZWFsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpZ2dpbmcgaW50byB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBsb2dpYywgc28gaXQncyBjcml0aWNhbCB0byBlbnN1cmUgaXQncyByb2J1c3QuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHdlIG5lZWQgdG8gZnV6eiB0aGlzIGNoYW5nZSBhZ2dyZXNzaXZlbHkuIFdlIHNob3VsZCB0aHJvdyBldmVyeSBjb25jZWl2YWJsZSBzY2VuYXJpbyBhdCBpdCB0byBmbHVzaCBvdXQgYW55IGVkZ2UgY2FzZXMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIGBQQUdFX1RBQkxFX0NIRUNLYC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpZiB3ZSBuZWVkIHRvIGFjdGl2ZWx5IGNvbmZpZ3VyZSB0aGUga2VybmVsIHRvIHRyaWdnZXIgdGhpcyBuZXcsIGltcHJvdmVkIGNoZWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBpdHMgaW1wYWN0IGlzIGtleSBiZWZvcmUgSSBkaXZlIGluIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTQuNTk2MDYzMTc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzUzMTEwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTIxLVxcbm1tL0tjb25maWcuZGVidWc6MTIyOmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTM1LVxcbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzctXFx0Ym9vbCBcXFwiRW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoxNy41MzEzODE5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQxNjA4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZGVidWdnaW5nLCBzbyBsZXQncyB6ZXJvIGluIG9uIGBtbS9LY29uZmlnLmRlYnVnYC4gSSBrbm93IHRoYXQgZmlsZSB1c3VhbGx5IGhvdXNlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG9wdGlvbnMsIGFuZCBnaXZlbiBteSBleHBlcnRpc2UsIEknbSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0byBiZSBwcmVzZW50LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgdmljaW5pdHkgb2YgbGluZSAxMjIsIGFzIHRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyByZWxhdGVkIG9wdGlvbnMuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgcGFydGljdWxhciBhcmVhIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZmluZXIgcG9pbnRzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG9wdGlvbnMuIFBlcmhhcHMgc3BlY2lmaWMgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGluIHRoYXQgcmVnaW9uLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MjAuNzQ1NTQ1OTg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxuIDEyMzpcXHRcXHRib29sIFxcXCJDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gMTI2OlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAxMjc6XFx0XFx0aGVscFxcbiAxMjg6XFx0XFx0ICBDaGVjayB0aGF0IGFub255bW91cyBwYWdlIGlzIG5vdCBiZWluZyBtYXBwZWQgdHdpY2Ugd2l0aCByZWFkIHdyaXRlXFxuIDEyOTpcXHRcXHQgIHBlcm1pc3Npb25zLiBDaGVjayB0aGF0IGFub255bW91cyBhbmQgZmlsZSBwYWdlcyBhcmUgbm90IGJlaW5nXFxuIDEzMDpcXHRcXHQgIGVycm9uZW91c2x5IHNoYXJlZC4gU2luY2UgdGhlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgdGltZVxcbiAxMzE6XFx0XFx0ICBlbnRyaWVzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB1c2VyIHBhZ2UgdGFibGVzLCBsZWFraW5nLCBjb3JydXB0aW9uXFxuIDEzMjpcXHRcXHQgIGFuZCBkb3VibGUgbWFwcGluZyBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgc3luY2hyb25vdXNseS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBJZiB1bnN1cmUgc2F5IFxcXCJuXFxcIi5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcXG4gMTM3OlxcdFxcdGJvb2wgXFxcIkVuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMTM4OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xcbiAxMzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyMC43NDU2NTE0NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MDI2OTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYWdlIFRhYmxlIENoZWNrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZW5hYmxlIHNvbWUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIGNoZWNrcy4gTGV0J3Mgc2VlLCBJIG5lZWQgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gQWgsIGhhbmcgb27igKYgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgIHByZXR0eSBtdWNoIGhhbmRsZXMgdGhlIGVuZm9yY2VtZW50IGFzcGVjdCBhdXRvbWF0aWNhbGx5LCBzbyBpdCBzZWVtcyBJJ20gY292ZXJlZC4gSSB0aGluayBpbiB0aGlzIHNpdHVhdGlvbiBJIHdpbGwgZW5hYmxlIGJvdGggb2YgdGhvc2UgY29uZmlncy5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgb3IgdXRpbGl6ZWQgYW55d2hlcmU7IEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQsIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMzksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyNC4yMDU5MjQ1MThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTUwNjgyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNz12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNzI9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI3NDp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3NS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjI1Ljk2MTAwMDMyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA0Njg4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKlRoZSBDb250ZXh0IG9mIENsZWFyaW5nIFBURSBSYW5nZXMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSW1tZWRpYXRlbHksIEkga25vdyB0aGlzIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHRvIGNoZWNrIGFuZCBwb3RlbnRpYWxseSBjbGVhciBhIHJhbmdlIG9mIFBhZ2UgVGFibGUgRW50cmllcyAoUFRFcykuIFRoaXMgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGluIHRoZSB3ZWVkcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgZGVhbGluZyB3aXRoIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMsIGFuZCBwcm9iYWJseSBlbmNvdW50ZXJpbmcgc2l0dWF0aW9ucyB3aGVyZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBuZWVkIHRvIGJlIGludmFsaWRhdGVkIG9yIGZyZWVkLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0OiB3ZSdyZSB2ZXJpZnlpbmcgaWYgY2xlYXJpbmcgYSBQVEUgcmFuZ2UgaXMgYXBwcm9wcmlhdGUsIGFuZCBkb2luZyBpdCBpZiBpdCBpcy4gVGhlICdjaGVjaycgaW1wbGllcyB3ZSBhcmUgZG9pbmcgbW9yZSB0aGFuIGp1c3QgY2xlYXJpbmcgYmxpbmRseS4gVGhlcmUncyBzb21lIHNhZmV0eSBuZXQgaW52b2x2ZWQuIExldCdzIHNlZSB3aGF0IG5lY2Vzc2l0YXRlcyB0aGlzICdjaGVjaycgYW5kIGNsZWFyIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyOC44NjU2OTI1ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjM5MzU1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0zMC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD05NT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMy1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDQ6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEwLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjExMTpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwbWQpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNTA9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTQtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwNjAtXFx0bW1fZGVjX25yX3B0ZXMobW0pO1xcbm1tL2todWdlcGFnZWQuYzoyMDYxOlxcdHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBoYWRkciwgcGd0X3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIwNjItXFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTQ1PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyMS1cXHRcXHRcXHRtbV9kZWNfbnJfcHRlcyhtbSk7XFxubW0va2h1Z2VwYWdlZC5jOjIyMjI6XFx0XFx0XFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMjIzLVxcdFxcdFxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzozMC40ODk2MzM3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjMwNDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVEhQIENvbGxhcHNlIGFuZCBSZXRyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgVEhQIGNvbGxhcHNlIGFuZCByZXRyYWN0aW9uIG1lY2hhbmlzbXMsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aGUgZnVuY3Rpb25zIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIG1lY2hhbmlzbXMgSSdtIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHdoZXJlIHRoZXkncmUgY2FsbGVkIGZyb20uIFdhaXQgYSBtaW51dGUsIGJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIHRob3NlLCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBleGFtaW5lIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGhhdCBsb29rcyBsaWtlIGEgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZ1bmN0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AsIGFuZCB0aGF0IG90aGVyIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzozNC4wNzE5NDEyOTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjM3Njk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NjItXFxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NjQtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTAxPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODQwLVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MTpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4NDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzozNS43MzU3MTc5MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzODA3MzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFBhZ2UgVGFibGUgQ29sbGFwc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhZ2UgdGFibGUgY29sbGFwc2luZyBsb2dpYywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBlbnRyeSBwb2ludHMgYXJlIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9maWxlYCwgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gVGhhdCBpbW1lZGlhdGVseSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgd2hlcmUgdGhpcyBmZWF0dXJlIGlzIHVzZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBhIGZ1bmN0aW9uIGxpa2UgYG1hZHZpc2VgIHdpdGggdGhlIGBNQURWX0NPTExBUFNFYCBmbGFnIGlzIGEgbGlrZWx5IHRyaWdnZXIsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQgYXMgYSBwcmltYXJ5IHVzZSBjYXNlLiBUbyBkZWx2ZSBmdXJ0aGVyLCBJIHRoaW5rIGNoZWNraW5nIG91dCB0aGUgYHJldHJhY3RfcGFnZV90YWJsZXNgIGZ1bmN0aW9uIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSXQgc2VlbXMgbGlrZSBpdCB3aWxsIGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGJlaGF2aW9yIG9mIHdoYXQncyBoYXBwZW5pbmcuIEnigJlsbCBzdGFydCBkaWdnaW5nIGludG8gdGhhdCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MzkuMTczNzk0NjE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA2Mjc3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJldHJhY3RfcGFnZV90YWJsZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD01NjI9YXJlIGV4dHJhIHJlcXVpcmVtZW50cyBmb3IgYWNjZXNzaW5nIHRoZW06XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU2Ny0gIHJtYXAgbG9jayBmb3IgcmVhZGluZyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBQVEUgYW5kIFBNRCBwYWdlIHRhYmxlIGxvY2tzLlxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTY4OiAgSW4gcGFydGljdWxhciwgdGhpcyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYCB3aGVuIGhhbmRsaW5nXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NjktICA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NzgtICBjYW4gdGFrZSB0aGUgUE1EIGxvY2sgYW5kIHJldmFsaWRhdGUgdGhhdCB0aGUgY29udGVudHMgb2YgcG1kIGVudHJ5IHN0aWxsIG1lZXRcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU3OTogIHRoZSByZXF1aXJlbWVudHMuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTgwLSAgd2hlbiBoYW5kbGluZyA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03MjY9Y2xlYXJlZCB3aXRob3V0IHBhZ2UgdGFibGUgbG9ja3MgKGluIHRoZSA6YzpmdW5jOmAhcGdkX2NsZWFyYCwgOmM6ZnVuYzpgIXA0ZF9jbGVhcmAsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTczMC0gICAgICAgICAgdGhlIHBhZ2UgdGFibGVzIGFib3ZlIGl0IGFzIGlzIGRvbmUgYnlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjczMTogICAgICAgICAgOmM6ZnVuYzpgIXJldHJhY3RfcGFnZV90YWJsZXNgLCB3aGljaCBpcyBwZXJmb3JtZWQgdW5kZXIgdGhlIGlfbW1hcFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzMyLSAgICAgICAgICByZWFkIGxvY2ssIFBNRCwgYW5kIFBURSBwYWdlIHRhYmxlIGxvY2tzLCB3aXRob3V0IHRoaXMgbGV2ZWwgb2YgY2FyZS5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE5MDMtXFx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxcbm1tL2todWdlcGFnZWQuYzoxOTA0OlxcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cXG5tbS9raHVnZXBhZ2VkLmMtMTkwNS1cXHQgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTA4PXN0YXRpYyBib29sIGZpbGVfYmFja2VkX3ZtYV9pc19yZXRyYWN0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTQ0LVxcbm1tL2todWdlcGFnZWQuYzoyMTQ1OnN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxubW0va2h1Z2VwYWdlZC5jLTIxNDYte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjI2MzY6XFx0cmV0cmFjdF9wYWdlX3RhYmxlcyhtYXBwaW5nLCBzdGFydCk7XFxubW0va2h1Z2VwYWdlZC5jLTI2MzctXFx0aWYgKGNjIFxcdTAwMjZcXHUwMDI2ICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG4tLVxcbm1tL21lbW9yeS5jPTEzMDY9Y29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0xMzQyLVxcdCAqIFdlIGFscmVhZHkgaG9sZCB0aGUgZXhjbHVzaXZlIG1tYXBfbG9jaywgdGhlIGNvcHlfcHRlX3JhbmdlKCkgYW5kXFxubW0vbWVtb3J5LmM6MTM0MzpcXHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkgYXJlIHVzaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEgdG8gYmUgZXhjbHVzaXZlLCBzb1xcbm1tL21lbW9yeS5jLTEzNDQtXFx0ICogdGhlIFBURSBwYWdlIGlzIHN0YWJsZSwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ2V0IHBtZHZhbCBhbmQgZG9cXG4tLVxcbm1tL21yZW1hcC5jPTE5Nz1zdGF0aWMgaW50IG1vdmVfcHRlcyhzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbi0tXFxubW0vbXJlbWFwLmMtMjQ4LVxcdCAqIHRoaXMgYnkgdHJhdmVyc2luZyBmaWxlLVxcdTAwM2VmX21hcHBpbmcsIHNvIHRoZXJlIGlzIG5vIGNvbmN1cnJlbmN5IHdpdGhcXG5tbS9tcmVtYXAuYzoyNDk6XFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpLiBJbiBhZGRpdGlvbiwgd2UgYWxyZWFkeSBob2xkIHRoZSBleGNsdXNpdmVcXG5tbS9tcmVtYXAuYy0yNTAtXFx0ICogbW1hcF9sb2NrLCBzbyB0aGlzIG5ld19wdGUgcGFnZSBpcyBzdGFibGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjQwLjg4MDA4MTcxMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU3NTcwNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIFRhYmxlIENsZWFyaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBwYWdlIHRhYmxlcyBnZXQgY2xlYXJlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgY2FsbGluZyBgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgKmFsc28qIGNhbGxlZCBmcm9tIHdpdGhpbiBpdHNlbGY/IE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBBZnRlciBhIHF1aWNrIGxvb2ssIEkgc2VlIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgYWN0dWFsbHkgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oYCwgYW5kIGl0J3MgdGhlIGlubGluZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGltZSB0byBleGFtaW5lIHRoYXQgaGVhZGVyIGZpbGUgbW9yZSBjbG9zZWx5IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gYXQgdGhhdCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo0NS4wMzc2NTY3OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcbiAxMDE6XFx0XFx0X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIG5yKTtcXG4gMTAyOlxcdH1cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiAxMDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwbWRfdCBwbWQpXFxuIDEwNzpcXHR7XFxuIDEwODpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnBhZ2VfdGFibGVfY2hlY2tfZGlzYWJsZWQpKVxcbiAxMDk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwbWQpO1xcbiAxMTI6XFx0fVxcbiAxMTM6XFx0XFxuIDExNDpcXHQjZWxzZVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiAxMTc6XFx0e1xcbiAxMTg6XFx0fVxcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjQ1LjAzNzc0MTM3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkyNjAzOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBQYWdlIFRhYmxlIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBUaGUgYWRkaXRpb24gb2YgdGhlIGAhcG1kX25vbmUocG1kKWAgY2hlY2sgcmVhbGx5IHN0YW5kcyBvdXQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcHJldmVudGluZyBlaXRoZXIgYSBzeXN0ZW0gY3Jhc2ggb3IgYSB3YXJuaW5nIGNvbmRpdGlvbiB3aGVuIGBwbWRfbm9uZShwbWQpYCBpcyBlbmNvdW50ZXJlZC4gVGhhdCdzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgZ3VhcmQsIEknZCBzYXkuXG5cblRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBtbS9raHVnZXBhZ2VkLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgLiBBcmUgdGhleSBzdGF0aWNhbGx5IGRlZmluZWQsIG9yIGFyZSB0aGV5IGV4cG9ydGVkPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgbGlua2FnZSB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cy5cblxuSG1tbSwgaXQgbG9va3MgbGlrZSBib3RoIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIHN0YXRpYywgd2hpY2ggbWFrZXMgdGhpcyBhIGJpdCBzaW1wbGVyIHRvIGZvbGxvdy4gSG93ZXZlciwgd2FpdCwgaXNuJ3QgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBleHBvcnRlZCwgb3IgYW0gSSBtaXN0YWtlbj8gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NDkuMzMwMzQ3Njg1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY1MDEzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE5PWV4dGVybiBib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMDp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDU6c3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ2LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQ5OT1pbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy01OTktXFx0aWYgKHJldCBcXHUwMDNlIDApXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NjAwOlxcdFxcdGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCB2YWRkciwgZmFsc2UpO1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTYwMS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NjItXFxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NjQtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDg5LS8qKlxcbm1tL2todWdlcGFnZWQuYzoyMDkwOiAqIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwIC0gVHJ5IHRvIGNvbGxhcHNlIGEgcHRlLW1hcHBlZCBUSFAgZm9yIG1tIGF0XFxubW0va2h1Z2VwYWdlZC5jLTIwOTEtICogYWRkcmVzcyBoYWRkci5cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTAwLSAqL1xcbm1tL2todWdlcGFnZWQuYzoyMTAxOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cXHRcXHRib29sIGluc3RhbGxfcG1kKVxcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODQwLVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MTpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4NDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo1MC45OTUzNjk2OTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MjYzMzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVEhQIENvbGxhcHNlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFyZSBoYW5kbGVkIGR1cmluZyBtZW1vcnkgY29sbGFwc2Ugb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzbid0IGRlY2xhcmVkIHN0YXRpYywgbWVhbmluZyBpdCBjYW4gcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gT24gdGhlIG90aGVyIGhhbmQsIGBjb2xsYXBzZV9maWxlYCAqaXMqIHN0YXRpYywgaW1wbHlpbmcgaXRzIHVzZSBpcyByZXN0cmljdGVkIHRvIHRoZSBmaWxlLWJhY2tlZCBtZW1vcnkgY29sbGFwc2UgcHJvY2VkdXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBgbWFkdmlzZV9jb2xsYXBzZWAgYWN0dWFsbHkgY2FsbHMuIEkga25vdyBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgZGVmaW5lZCBpbiBgbW0vbWFkdmlzZS5jYCwgc28gSSdsbCBnbyBhaGVhZCBhbmQgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHRvIHNlZSBpZiBpdCBjYWxscyBlaXRoZXIgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBvciBgY29sbGFwc2VfZmlsZWAsIG9yIGJvdGgsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGNoYWluIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODYxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTQuNDU4MDA2NTc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NTgxMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sbGFwc2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTM0Nj1BIGhpZ2hlciB2YWx1ZSBtYXkgaW5jcmVhc2UgbWVtb3J5IGZvb3RwcmludCBmb3Igc29tZSB3b3JrbG9hZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMzUzLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDozNTQ6ICAgQ3VycmVudGx5LCBtYWR2aXNlX2NvbGxhcHNlIG9ubHkgc3VwcG9ydHMgY29sbGFwc2luZyB0byBQTUQtc2l6ZWQgVEhQc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTUtICAgYW5kIGRvZXMgbm90IGF0dGVtcHQgbVRIUCBjb2xsYXBzZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01MTE9aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cXHRcXHQgICAgIGludCBhZHZpY2UpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTQtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcxMj1zdGF0aWMgaW5saW5lIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE3LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxODpzdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMxNTc9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMTYxLVxcbm1tL2todWdlcGFnZWQuYzozMTYyOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxubW0va2h1Z2VwYWdlZC5jLTMxNjMte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxOTMtXFxubW0va2h1Z2VwYWdlZC5jOjMxOTQ6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0va2h1Z2VwYWdlZC5jLTMxOTUtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyODEtXFx0cmV0dXJuIHRocHMgPT0gKChoZW5kIC0gaHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxcbm1tL2todWdlcGFnZWQuYzozMjgyOlxcdFxcdFxcdDogbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhsYXN0X2ZhaWwpO1xcbm1tL2todWdlcGFnZWQuYy0zMjgzLX1cXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2My1cXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxubW0vbWFkdmlzZS5jOjEzNjQ6XFx0XFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxubW0vbWFkdmlzZS5jLTEzNjUtXFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjM0PXN0YXRpYyB2b2lkIGZpbGxfbWVtb3J5KGludCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ3LSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNDg6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ5LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNjY9c3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc5LVxcdGtzZnRfcHJpbnRfbXNnKFxcXCJBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjgwOlxcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgxLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTUxMD1zdGF0aWMgYm9vbCBpc19hbm9uKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1MTU6c3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MzgtXFx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUzOTpcXHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTQwLVxcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTQ5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTA6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1MS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1NS1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTU2OlxcdF9fbWFkdmlzZV9jb2xsYXBzZShtc2csIHAsIG5yX2hwYWdlcywgb3BzLCBleHBlY3QpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTY3OT1zdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjY4MDpcXHQuY29sbGFwc2UgPSBcXHUwMDI2bWFkdmlzZV9jb2xsYXBzZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjgxLVxcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEwNzU9c3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExMzM6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTM0LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0My1cXHQvKiBjLVxcdTAwM2Vjb2xsYXBzZSgpIHdpbGwgZmluZCBhIGh1Z2VwYWdlIGFuZCBjb21wbGFpbiAtIGNhbGwgZGlyZWN0bHkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExNDQ6XFx0X19tYWR2aXNlX2NvbGxhcHNlKFxcXCJSZS1jb2xsYXBzZSBQTUQtbWFwcGVkIGh1Z2VwYWdlXFxcIiwgcCwgMSwgb3BzLCB0cnVlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0NS1cXHR2YWxpZGF0ZV9tZW1vcnkocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEzMTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzI6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDMzOlxcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xNDM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo1Ni4xMzM1OTUyNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMzE1OTE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHBlcnRpbmVudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAgc2VlbXMgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUuIEkgYWxzbyB0aGluayBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIGltcG9ydGFudCB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQuIEhtbSwgYnV0IGhhbmcgb24uLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGByZXRyYWN0X3BhZ2VfdGFibGVzYCBpcyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCdzIHJlbGV2YW50LiBOb3csIGlzIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYWxzbyBzdGF0aWM/IE5vLCBubyBpdCdzIG5vdC4gSSByZW1lbWJlciBub3cgdGhhdCBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGAuIEludGVyZXN0aW5nLiBBbmQsIHdoaWxlIEknbSBhdCBpdCwgSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgZXhwb3J0ZWQgYW5kIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLiBOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTkuNjM2NzU3NTQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk1NjMxNjMyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1ODowMi40MzI0MDAwMDFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MTU2NTQzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJICpzd2VhciogSSBqdXN0IGdsYW5jZWQgYXQgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AgYW5kIHNhdyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldClgIG1hY3JvLiBUaGF0J3MgZ290IG1lIHRoaW5raW5nLiBJdCdzIHRpbWUgdG8gcmV2aXNpdCB0aGF0IGZpbGUsIGRpdmUgZGVlcGVyLCBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgc3ltYm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBMZXQncyBnZXQgYmFjayB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowNi4xNDgwNTkyNDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0XFx0XFx0XFx0cHRlcCsrO1xcbiAyOTE6XFx0XFx0XFx0fVxcbiAyOTI6XFx0XFx0XFx0cHRlX3VubWFwKHB0ZXAgLSBQVFJTX1BFUl9QVEUpO1xcbiAyOTM6XFx0XFx0fVxcbiAyOTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowNi4xNDgxODg1MjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMTM1MzE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGFuIGV4cG9ydGVkIHN5bWJvbCwgYnV0IGl0ICppcyogbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFJpZ2h0LCByaWdodCwgbGV0J3Mgc2VlLi4uIGEgdXNlZnVsIGZvY3VzIHBvaW50IGhlcmUgY291bGQgYmUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBUaGF0IGxvb2tzIHByb21pc2luZy4gQW5kIGFsc28sIGxldCdzIGtlZXAgYW4gZXllIG9uIGBtYWR2aXNlX2NvbGxhcHNlYC4gVGhhdCBjb3VsZCBiZSByZWxldmFudCBhcyB3ZWxsLlxuXG5JIHNob3VsZCBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGZvciBgUEFHRV9UQUJMRV9DSEVDS2AuIExldCdzIHNlZS4uLiBpdCAqZGVwZW5kcyBvbiogYEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS2AsIGFuZCBgRVhDTFVTSVZFX1NZU1RFTV9SQU1gLiBBbHNvLCBpdCAqc2VsZWN0cyogYFBBR0VfRVhURU5TSU9OYC4gUmlnaHQsIHJpZ2h0LiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGF0ZWQ/IEFoLCB5ZXMsIHRoZXJlJ3MgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLlxuXG5Pa2F5LCBuZXh0IHN0b3A6IGxldCdzIGdvIGNoZWNrIG91dCB3aGF0IGBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tgIGlzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowOS43Nzk1NDQ1MTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTA3NDY2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTc0OT1jb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG4tLVxcbmFyY2gvS2NvbmZpZy0xNzUxLVxcbmFyY2gvS2NvbmZpZzoxNzUyOmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcXG5hcmNoL0tjb25maWctMTc1My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjEyLjA5MDI5ODA0NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU3NDI2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBhZ2UgVGFibGUgQ2hlY2tpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFib3V0IGVuYWJsaW5nIHNvbWUgcGFnZSB0YWJsZSBjaGVja3MsIHNwZWNpZmljYWxseSBgUEFHRV9UQUJMRV9DSEVDS2AgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHNlZW1zIGxpa2UgYW4gYXJjaGl0ZWN0dXJhbCBjaG9pY2UuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvciBga2h1Z2VwYWdlZGAsIGFuZCBpdCBsb29rcyBsaWtlIEknbSByaWdodC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGFsc28gY2FsbGVkIHRocm91Z2ggYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBmcm9tIHdpdGhpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGFyZSB0aGVyZSAqYW55KiBvdGhlciBjYWxsZXJzIG9mIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWA/IE5vcGUsIGxvb2tzIGxpa2UgSSd2ZSBhbHJlYWR5IHNjYW5uZWQgYG1tL2todWdlcGFnZWQuY2AgdGhvcm91Z2hseSwgd2hpY2ggZ2l2ZXMgbWUgY29uZmlkZW5jZSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmc6IHRoZSB0d28gY2FsbGVycyBhcmUgaW5kZWVkIHRoZSBvbmVzIEkga25vdy5cblxuU28sIGJhc2VkIG9uIHRoaXMsIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAuIEknbGwgZ28gYWhlYWQgYW5kIG1ha2Ugc3VyZSB0aGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBub24tc3RhdGljIHRvIGVuc3VyZSBwcm9wZXIgbGlua2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MTcuODQ3NzI4MzQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE2ODg4MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtYWR2aXNlX2NvbGxhcHNlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTItXFx0XFx0ICAgICBpbnQgYWR2aWNlKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MTM6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTE0LVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxNy1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTktXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTYyPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE5My1cXG5tbS9raHVnZXBhZ2VkLmM6MzE5NDppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5NS1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjIwLjc2NDYyMzE5N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMzNzI5NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFN0YXRpYy1uZXNzIG9mIFN5c3RlbSBDYWxscyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKipcblxuUmlnaHQsIHNvIEknbSByZXZpc2l0aW5nIGBtYWR2aXNlX2NvbGxhcHNlYC4gVGhlIGNvZGUncyBtYWtpbmcgbWUgZG91YmxlLWNoZWNrIGl0cyBkZWNsYXJhdGlvbi4gWWVwLCBjb25maXJtZWQsIGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB3aGF0IEkgZXhwZWN0IHRoZW0gdG8gYmUgdG9vLiBJJ2xsIHZlcmlmeSB0aGF0IGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljIGVpdGhlci4gSSBjYW4ndCBiZSB0b28gY2FyZWZ1bCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIHNvcnRzIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyMy42OTgzNTUyNDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDc2MTY3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE5PWV4dGVybiBib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMDp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDU6c3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ2LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXFxubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMTAyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjI2LjMwNTk4MTQyNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcwNzgyNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCBsZXQncyBwaXZvdCBhbmQgbWFrZSBzdXJlIHdlJ3ZlIGFjY291bnRlZCBmb3IgKmFsbCogdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBga2h1Z2VwYWdlZGAgYW5kIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmVhdHVyZS4gVGhpcyBpcyB0aGUga2luZCBvZiBkZXRhaWwgdGhhdCBjYW4gbWFrZSBvciBicmVhayBhIHN5c3RlbS4gSSdtIHRoaW5raW5nLCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaGlnaGx5IHByb2JhYmxlIHRvIGJlIHJlcXVpcmVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIG5vdGhpbmcgaXMgb3Zlcmxvb2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NjgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyOS4zNzY3NjY4MTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjEyNDg1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzQtXFxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM2LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU4LVxcbm1tL0tjb25maWc6ODU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NS1cXG5tbS9LY29uZmlnOjg2NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY3LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3NC1cXG5tbS9LY29uZmlnOjg3NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTEtXFxubW0vS2NvbmZpZzo4OTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAxLVxcbm1tL0tjb25maWc6OTAyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAzLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA5LVxcbm1tL0tjb25maWc6OTEwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTEtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNy1cXG5tbS9LY29uZmlnOjkxODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOS1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM2LVxcbm1tL0tjb25maWc6OTM3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXG5tbS9LY29uZmlnOjk0NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1My1cXG5tbS9LY29uZmlnOjk1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU1LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjEtXFxubW0vS2NvbmZpZzo5NjI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjMtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTozMi4yMzgwMjY3MzFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDU1OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEtlcm5lbCBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIHdlIHN0aWxsIG5lZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgdGhhdCBtdWNoIGhhc24ndCBjaGFuZ2VkLiBOb3csIGxldCdzIHJldmlzaXQgdGhhdCBgUEFHRV9UQUJMRV9DSEVDS2Agb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQncyBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSG1tLCByZWFkaW5nIHRoZSBjb25maWcsIGl0IGxvb2tzIGxpa2UgaXQncyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0J3MgcmlnaHQsIGl0J3MgdGhhdCBcIkNoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcIiBib29sZWFuLiBTbywgdG8gZ2V0IHRoZSBkZXNpcmVkIGJlaGF2aW9yLCBpdCBsb29rcyBsaWtlIEkgbmVlZCAqYm90aCogYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBpdHMgZW5mb3JjZW1lbnQgY29tcGFuaW9uLCBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAuIEdvdHRhIGVuYWJsZSB0aG9zZSB0byBnZXQgZnVsbCBjb3ZlcmFnZS4gQW5kIHNpbmNlIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBjaGVja3MsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgbGl2ZXMg4oCTIHllcCwgaXQncyByaWdodCB3aGVyZSBJIHRob3VnaHQ6IGluIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBHb29kLCBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTozNi40NDg1ODk2NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNTU3OTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0zMC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTozOC44NzQxNzcxNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwMTAxOTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBUYWJsZSBDbGVhcmluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gSSd2ZSBhbHJlYWR5IGNoZWNrZWQgYW5kIGZvdW5kIHRoYXQgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCAtIHRoYXQncyAqd2l0aG91dCogdGhlIGRvdWJsZSB1bmRlcnNjb3JlIC0gaXMgY2FsbGVkIGZyb20gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGByZXRyYWN0X3BhZ2VfdGFibGVzYC4gSW50ZXJlc3RpbmcuXG5cbldhaXQsIGRpZCBJIGp1c3Qgc2VlIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXRzZWxmPyBObywgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGNhbGxzIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgbm90IHRoZSBmdW5jdGlvbiB3aXRob3V0IHRoZSBsZWFkaW5nIHVuZGVyc2NvcmVzLlxuXG5BbHJpZ2h0LCB0aGF0IGNsYXJpZmllcyB0aGUgaW1tZWRpYXRlIGNhbGwgZ3JhcGguIE5vdywgdGhlIG5hdHVyYWwgcHJvZ3Jlc3Npb24gaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCBpcyBkb2luZy4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo0My42NzUyMDAxM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NDgxMzczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTE2PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTc6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTgtXFx0XFx0XFx0XFx0ICBwdGVfdCBwdGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0zMC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD00OT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC01NC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo1NTpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGUpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTU2LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xMzE9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE0Ny1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTQ4OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNDktXFx0XFx0XFx0XFx0ICBwdGVfdCBwdGUpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTU2LX1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTU3OkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcik7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE1OC1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yMTA9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMjAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yOyBpKyspXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIyMTpcXHRcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyICsgUEFHRV9TSVpFICogaSwgcHRlcF9nZXQocHRlcCArIGkpKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjIyLVxcdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkgXFx1MDAyNlxcdTAwMjYgIXB0ZV9zcGVjaWFsKHB0ZSkpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI4Ny1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUFRSU19QRVJfUFRFOyBpKyspIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjg4OlxcdFxcdFxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXBfZ2V0KHB0ZXApKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjg5LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo0Ni4xNzAwMjg0MjVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMTcxOTAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gY2hhbmdlZC4gTm93LCBsZXQgbWUgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQQUdFX1RBQkxFX0NIRUNLYCwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdsbCB3YW50IHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBzeW1ib2xzOiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAuXG5cblRoZSBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGF0IGZ1bmN0aW9uLiBQcmltYXJpbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBtYWR2aXNlX2NvbGxhcHNlYCBpcyB0aGUgKm9ubHkqIHBhdGguIE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBga2h1Z2VwYWdlZGAgY2FuIGFsc28gdHJpZ2dlciBpdCB0aHJvdWdoIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgb3IgYHJldHJhY3RfcGFnZV90YWJsZXNgLiBSaWdodCwgYGtodWdlcGFnZWRgIGlzIGEga2VybmVsIHRocmVhZCwgc28gaXQncyBub3QgYSBkaXJlY3Qgc3lzY2FsbCwgYnV0IGl0ICpkb2VzKiBzY2FuIG1lbW9yeS4gYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgIGlzIGEgbW9yZSBkaXJlY3QgdHJpZ2dlciwgb2J2aW91c2x5LlxuXG5Ob3csIEknbGwgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBFWENMVVNJVkVfU1lTVEVNX1JBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYEVYQ0xVU0lWRV9TWVNURU1fUkFNYCBzZXR0aW5nIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTU4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjUwLjk5MTc1MDU1OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzQ1MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MDA9Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cXG4tLVxcbm1tL0tjb25maWctNTA1LSMgL2Rldi9tZW0uXFxubW0vS2NvbmZpZzo1MDY6Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxubW0vS2NvbmZpZy01MDctXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo1My40MDUyMTM0NzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNzIyNjgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQYWdlIFRhYmxlIENoZWNrIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGRlZl9ib29sIHlgLCB3aGljaCBtZWFucyB3ZSBoYXZlIGEgYm9vbGVhbiBkZWZpbml0aW9uIHNldC4gU3BlY2lmaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlJ3JlIGNvbmNlcm5lZCB3aXRoIGFyZSBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE15IHRhc2sgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGNhbiBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEkga25vdyB0aGF0IGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIGtleSBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFuZCB0aGF0IHRoZXkgcmVzaWRlIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gQSBrZXkgZmFjdG9yLCB0aG91Z2gsIGlzIHRoYXQgYG1tL2todWdlcGFnZWQuY2AgaXRzZWxmIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGEgZGlyZWN0IHBhdGggdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMgd2l0aG91dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFwcGVhcnMgdW5saWtlbHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgZ3JhcGggYW5kIGV4cGxvcmUgYWx0ZXJuYXRlIHBhdGhzLCBjb25zaWRlcmluZyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBNeSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgY29tZXMgaW50byBwbGF5IGFzIEkgcHJvY2VlZCB0byBleGFtaW5lIHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo1Ny42MzI0NDU0MzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTk1MzU0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQxOS1cXHRcXHRcXHQvKlxcbm1tL2todWdlcGFnZWQuYzoyNDIwOlxcdFxcdFxcdCAqIGtodWdlcGFnZWQgb25seSB3b3JrcyBvbiBjbGVhbiBmaWxlLWJhY2tlZCBmb2xpb3MsXFxubW0va2h1Z2VwYWdlZC5jLTI0MjEtXFx0XFx0XFx0ICogc28gdGhpcyBmb2xpbyBpcyBkaXJ0eSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIGZsdXNoZWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNjY9c3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc1LVxcdCAqIHdoaWxlIHRoZSBmb3JtZXIgbWlnaHQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byByYWNlIHdpdGhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc2OlxcdCAqIGtodWdlcGFnZWQgb24gbG93LWxvYWQgc3lzdGVtIChsaWtlIGEgdGVzdCBtYWNoaW5lKSwgd2hpY2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc3LVxcdCAqIHdvdWxkIGNhdXNlIE1BRFZfQ09MTEFQU0UgdG8gZmFpbCB3aXRoIEVBR0FJTi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz01ODk9c3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjA5LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjYxMDpcXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjExLVxcdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz02MjM9c3RhdGljIHZvaWQgbXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02NTAtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjUxOlxcdCAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02NTItXFx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTExNzg9c3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTg4LVxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdG1vdW50ZWQgd2l0aCBodWdlPWFkdmlzZSBvcHRpb24gZm9yIGtodWdlcGFnZWQgdGVzdHMgdG8gd29ya1xcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExODk6XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXFx0bXRocF9raHVnZXBhZ2VkIG9ubHkgc3VwcG9ydHMgYW5vbiBtZW1fdHlwZSBub3cuXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE5MC1cXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXG5cXFxcdFN1cHBvcnRlZCBPcHRpb25zOlxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjAwLjIzMTk4Njk4MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE5MjM3MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEh1Z2VwYWdlIENvbXBpbGF0aW9uIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBga2h1Z2VwYWdlZC5vYCBtb2R1bGUgaXMgb25seSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlnLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBjb3JlIG9mIHRoZSB0cmFuc3BhcmVudCBodWdlcGFnZSBpbXBsZW1lbnRhdGlvbi5cblxuU28sIGluIHRlcm1zIG9mIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCB3ZSdyZSBsb29raW5nIGF0OiBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIG9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIHJlbGF0aW9uc2hpcHMuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiBzb21lIGtleSBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb24gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBUaGVzZSBzb3VuZCBsaWtlIHRoZXkncmUgY3JpdGljYWwgZm9yIHRoZSBwYWdlIHRhYmxlIGludGVncml0eSBjaGVja3MsIGh1Z2VwYWdlIGNvbGxhcHNpbmcsIGFuZCBtYWR2aXNlLWJhc2VkIG1lbW9yeSBtYW5hZ2VtZW50LCByZXNwZWN0aXZlbHkuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXkgaW50ZXJhY3QgaXMgaW1wb3J0YW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbCBncmFwaC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGJlaW5nIHVzZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGZ1cnRoZXIgY29udGV4dCBmb3IgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkzNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDowNC4yNTEyMjg3MzRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTg1ODc4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNz12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNzI9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI3NDp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3NS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA2LjY0OTgyMzc4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTUxMjYxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBDcml0aWNhbCBQYXRjaCoqXG5cbk9rYXksIG5vIG90aGVyIGluY29taW5nIGNhbGxzIGZvciBub3csIGdvb2QuIFRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBzdW1tYXJ5IGNsZWFybHkgaW5kaWNhdGVzIGEgY3JpdGljYWwgYnVnIGZpeCBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIFRoZSBjb3JlIGlzc3VlIGlzIGBwdGVfb2Zmc2V0X21hcGAgYmVpbmcgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgZWFzaWx5IGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgYSBoYXJkLXRvLWRlYnVnIHdhcm5pbmcsIGFuZCB0aGF0IHNvcnQgb2YgYnVnIGlzIGFic29sdXRlbHkgdGhlIGtpbmQgd2UgbmVlZCB0byBjYXRjaCBlYXJseS4gVGhlIGNvZGUgbWVudGlvbnMgdGhpcyBoYXBwZW5pbmcgZHVyaW5nIFRIUCBjb2xsYXBzZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBga2h1Z2VwYWdlZGAgYW5kIHdoZW4gc29tZW9uZSB1c2VzIGBtYWR2aXNlX2NvbGxhcHNlYC5cblxuUmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgc3RyYXRlZ3kuXG5cbmBXb3J0aEZ1enppbmc6IHRydWVgIC0gT2J2aW91c2x5LiBObyBxdWVzdGlvbiB0aGVyZS5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uLiBJJ2xsIG5lZWQgdG8gZm9jdXMgdGhlIGZ1enplciBvbjpcblxuKiAgIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYDogVGhlIGZpeCBpdHNlbGYuIEdvdHRhIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXG4qICAgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYDogVEhQIGNvbGxhcHNlIGlzIHdoYXQgdHJpZ2dlcnMgdGhlIGlzc3VlLCBzbyB3ZSBuZWVkIHRvIGhpdCB0aG9zZSBjYWxsIHNpdGVzLlxuKiAgIGBtYWR2aXNlX2NvbGxhcHNlYDogQXMgd2l0aCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIHRoaXMgaXMgYSBwb3RlbnRpYWwgdHJpZ2dlciBmb3IgdGhlIGJ1Zy5cblxuQW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgc2V0IGZvciB0aGUgZnV6emluZyBydW46XG5cbiogICBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYDogVGhpcyB3aWxsIGVuYWJsZSB0aGUgY2hlY2tzIHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBmaXguXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYDogVEhQIGlzIHRoZSBjb250ZXh0LCBzbyB3ZSBuZWVkIHRvIGVuYWJsZSBUSFAuXG5cblRoZSByZWFzb25pbmcgaXMgc291bmQ6IHRoZSBwYXRjaCBwcmV2ZW50cyBgcHRlX29mZnNldF9tYXBgIGZyb20gYmVpbmcgY2FsbGVkIG9uIGEgYmFkIGBwbWRgLiBJdCdzIGNydWNpYWwgd2UgZnV6eiBib3RoIHRoZSBmaXggKmFuZCogdGhlIGNhbGxlcnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBvdXQgaWYgdGhlIGZpeCBoYXMgaG9sZXMgb3IgaW50cm9kdWNlIG5ldyBvbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcyMSwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MTMuODQ0OTU0NTI2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzc0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLXCIsXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VcIixcbiAgICBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIHdoZXJlIGBwdGVfb2Zmc2V0X21hcGAgY291bGQgYmUgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQsIHdoaWNoIG1pZ2h0IGxlYWQgdG8gYSBjcmFzaCBvciB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMgKGUuZy4sIHZpYSBga2h1Z2VwYWdlZGAgb3IgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgd2hlcmUgYHB0ZV9vZmZzZXRfbWFwYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZCwgd2hpY2ggbWlnaHQgbGVhZCB0byBhIGNyYXNoIG9yIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBUSFAgY29sbGFwc2Ugb3BlcmF0aW9ucyAoZS5nLiwgdmlhIGBraHVnZXBhZ2VkYCBvciBgbWFkdmlzZShNQURWX0NPTExBUFNFKWApLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjEzLjk5NDc0MDA0WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk0NjY1MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MTMuOTk1NDI4MzhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzY5Mzk3MjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwbWRfbm9uZShwbWQpYCBjaGVjayBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYC4gVGhpcyBwcmV2ZW50cyBtYXBwaW5nIGFuZCBhY2Nlc3NpbmcgUFRFcyBmcm9tIGFuIGVtcHR5IFBNRCwgd2hpY2ggd291bGQgbGlrZWx5IHJlc3VsdCBpbiBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIGEgY3Jhc2gsIG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3IgYnkgbm9ybWFsIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYzRjNDk2NjgyM2ExYWZiNDQ1NmU4MmZlNjQxODhmZjkzMTIwZDk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmMgYi9tbS9wYWdlX3RhYmxlX2NoZWNrLmNcbmluZGV4IDZmZmM1MzYzNTljZDAuLmVkM2UxYTc2ZjI2NjQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmNcbisrKyBiL21tL3BhZ2VfdGFibGVfY2hlY2suY1xuQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRpZiAoXHUwMDI2aW5pdF9tbSA9PSBtbSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4rXHRpZiAoIXBtZF9ub25lKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4gXHRcdHB0ZV90ICpwdGVwID0gcHRlX29mZnNldF9tYXAoXHUwMDI2cG1kLCBhZGRyKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MTMuOTk1NDI5NzRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5Mzk0OTEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBDaGVjayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYSBgIXBtZF9ub25lKHBtZClgIGNoZWNrIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuICBDdXJyZW50bHksIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgUE1EIGlzICpub3QqIGJhZCBhbmQgKm5vdCogYSBsZWFmLiBOb3cgaXQgYWRkcyBhIGNoZWNrIHRoYXQgaXQncyAqbm90KiBub25lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrPyBCdXQsIGFmdGVyIGEgbW9tZW50LCBJIHJlYWxpemUgdGhhdCBgcG1kX25vbmUocG1kKWAgbWVhbnMgdGhlIFBNRCBlbnRyeSBpcyBlbXB0eSDigJMgaXQgaGFzbid0IGJlZW4gcG9wdWxhdGVkIHdpdGggYW55IFBURXMgeWV0LiBDYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAgb24gYW4gZW1wdHkgUE1EIGlzIGp1c3QgcGxhaW4gd3JvbmcsIGFuZCBhIHRleHRib29rIGNhdXNlIGZvciBhIGNyYXNoIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBJdCdzIGxpa2VseSB0cnlpbmcgdG8gZGVyZWZlcmVuY2UgYW4gaW52YWxpZCBvciB1bm1hcHBlZCBtZW1vcnkgbG9jYXRpb24uIEnigJltIHRoaW5raW5nIHBhZ2UgZmF1bHRzLCBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIGl0Li4uIHN0YW5kYXJkIGtlcm5lbCBjaGVja3Mgd291bGQgcHJvYmFibHkgdHJpcC4gSXQncyBhIHByb3RlY3Rpb24gYWdhaW5zdCBtZW1vcnkgYWNjZXNzIGlzc3VlcyByYXRoZXIgdGhhbiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqY29udGVudHMqLiBJdOKAmXMgYSBjbGFzc2ljIGxvZ2ljYWwgYnVnLlxuXG5UaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UgaGVyZS4gIFRoaXMgaXMgYWJvdXQgKnByZXZlbnRpbmcqIGludmFsaWQgbWVtb3J5IGFjY2Vzcywgbm90IGFib3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFNvLCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyBjb3JyZWN0LiAgVGhpcyBpc27igJl0IHNvbWV0aGluZyBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgZmxhZy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYnkgcmVyZWFkaW5nIHRoZSBjb250ZXh0LiAgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHVzZWQgd2hlbiBjbGVhcmluZyBQVEVzLiBJZiBhIFBNRCBpcyBlbXB0eSwgdGhlcmXigJlzIG5vdGhpbmcgdG8gY2xlYXIuIFNraXBwaW5nIHRoZSBgcG1kX25vbmUocG1kKWAgY2hlY2sgd291bGQgbGV0IHVzIGVuZCB1cCB3aXRoIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuU28sIHllYWgsIGl04oCZcyBub3QgYW4gaXNzdWUgb2YgcmVhZGluZyBnYXJiYWdlLiBUaGUgcHJvYmxlbSBpcyBhIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhbiBhY2Nlc3Mgb2YgYW4gdW5tYXBwZWQgbWVtb3J5IHJlZ2lvbi4gS01TQU4gaXMgbWVhbnQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBLQVNBTiBjYW4gY2F0Y2ggaWxsZWdhbCBtZW1vcnkgdXNhZ2UuIEknbGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGFuZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjIxLjY4OTM4MTk0MloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwbWRfbm9uZShwbWQpYCBjaGVjayBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYC4gVGhpcyBwcmV2ZW50cyBtYXBwaW5nIGFuZCBhY2Nlc3NpbmcgUFRFcyBmcm9tIGFuIGVtcHR5IFBNRCwgd2hpY2ggd291bGQgbGlrZWx5IHJlc3VsdCBpbiBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIGEgY3Jhc2gsIG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3IgYnkgbm9ybWFsIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYHBtZF9ub25lKHBtZClgIGNoZWNrIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBiZWZvcmUgY2FsbGluZyBgcHRlX29mZnNldF9tYXBgLiBUaGlzIHByZXZlbnRzIG1hcHBpbmcgYW5kIGFjY2Vzc2luZyBQVEVzIGZyb20gYW4gZW1wdHkgUE1ELCB3aGljaCB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcywgYSBjcmFzaCwgb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBvciBieSBub3JtYWwga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow45jhw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 03:13:06 +0000 UTC FinishedAt: 2026-08-19 04:00:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_TABLE_CHECK", "PAGE_TABLE_CHECK_ENFORCED", "TRANSPARENT_HUGEPAGE" ], "series_id": "0d08f0e6-5fec-4ff1-851b-82bbd926a574" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__page_table_check_pte_clear_range", "collapse_pte_mapped_thp", "madvise_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0smIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgcG1kX25vbmUocG1kKWAgY2hlY2sgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuIFRoaXMgcHJldmVudHMgbWFwcGluZyBhbmQgYWNjZXNzaW5nIFBURXMgZnJvbSBhbiBlbXB0eSBQTUQsIHdoaWNoIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBhIGNyYXNoLCBvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIGJ5IG5vcm1hbCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCB3aGVyZSBgcHRlX29mZnNldF9tYXBgIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGBwbWRfbm9uZWAgcG1kLCB3aGljaCBtaWdodCBsZWFkIHRvIGEgY3Jhc2ggb3Igd2FybmluZy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIFRIUCBjb2xsYXBzZSBvcGVyYXRpb25zIChlLmcuLCB2aWEgYGtodWdlcGFnZWRgIG9yIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyYzRjNDk2NjgyM2ExYWZiNDQ1NmU4MmZlNjQxODhmZjkzMTIwZDk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV90YWJsZV9jaGVjay5jIGIvbW0vcGFnZV90YWJsZV9jaGVjay5jXG5pbmRleCA2ZmZjNTM2MzU5Y2QwLi5lZDNlMWE3NmYyNjY0IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV90YWJsZV9jaGVjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3RhYmxlX2NoZWNrLmNcbkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdGlmIChcdTAwMjZpbml0X21tID09IG1tKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXBtZF9iYWQocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcbiYjNDM7XHRpZiAoIXBtZF9ub25lKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4gXHRcdHB0ZV90ICpwdGVwID0gcHRlX29mZnNldF9tYXAoXHUwMDI2cG1kLCBhZGRyKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLJiMzNDssCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRUQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIHdoZXJlIGBwdGVfb2Zmc2V0X21hcGAgY291bGQgYmUgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQsIHdoaWNoIG1pZ2h0IGxlYWQgdG8gYSBjcmFzaCBvciB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMgKGUuZy4sIHZpYSBga2h1Z2VwYWdlZGAgb3IgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjNGM0OTY2ODIzYTFhZmI0NDU2ZTgyZmU2NDE4OGZmOTMxMjBkOTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suYwppbmRleCA2ZmZjNTM2MzU5Y2QwLi5lZDNlMWE3NmYyNjY0IDEwMDY0NAotLS0gYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV90YWJsZV9jaGVjay5jCkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlpZiAoJmFtcDtpbml0X21tID09IG1tKQogCQlyZXR1cm47CiAKLQlpZiAoIXBtZF9iYWQocG1kKSAmYW1wOyZhbXA7ICFwbWRfbGVhZihwbWQpKSB7CiYjNDM7CWlmICghcG1kX25vbmUocG1kKSAmYW1wOyZhbXA7ICFwbWRfYmFkKHBtZCkgJmFtcDsmYW1wOyAhcG1kX2xlYWYocG1kKSkgewogCQlwdGVfdCAqcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKCZhbXA7cG1kLCBhZGRyKTsKIAkJdW5zaWduZWQgbG9uZyBpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBmb2N1c2VkIG9uIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBTcGVjaWZpY2FsbHksIGl0IHRhcmdldHMgdGhlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIGNydWNpYWwgY2hlY2s6IGAhcG1kX25vbmUocG1kKWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwKCZhbXA7cG1kLCBhZGRyKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgbnVsbCBwb2ludGVyIGNoZWNrIG9yIGd1YXJkLiBJdCYjMzk7cyBwcm90ZWN0aW5nIGFnYWluc3QgcG90ZW50aWFsIGRlcmVmZXJlbmNpbmcgb2YgYW4gaW52YWxpZCBwbWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gdGhpbmtpbmcgdGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBhIGNyYXNoIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHBhZ2UgbWFwIGRpcmVjdG9yeSAocG1kKSBpcyBzb21laG93IHVuaW5pdGlhbGl6ZWQgb3IgZG9lc24mIzM5O3QgYWN0dWFsbHkgZXhpc3QgZm9yIGEgZ2l2ZW4gYWRkcmVzcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBsZWFkIHRvIGBwbWRgIGJlaW5nIGluIHRoaXMgc3RhdGUsIGFuZCB3aGF0IHRoZSBvcmlnaW5hbCBhc3N1bXB0aW9uIHdhcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgdGhlIHBtZCBjYW4gYmUgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZSB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgaGVyZSwgYnV0IHRoaXMgaXMgaW1tZWRpYXRlbHkgbWFraW5nIG1lIHRoaW5rIHRoYXQgaXQmIzM5O3MgYSBnb29kIHNhZmV0eSBjaGVjaywgZXNwZWNpYWxseSBpbiB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfdGFibGVfY2hlY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCBmb3IgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI3NC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBpcy4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGVidWcgYSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBnb2luZyBvbiBhdCBsaW5lIDI3NC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3RhYmxlX2NoZWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0XHRwYWdlX3RhYmxlX2NoZWNrX3NldChwdWRfcGZuKHB1ZCksIHN0cmlkZSAqIG5yLCBwdWRfd3JpdGUocHVkKSk7XG4gMjcxOlx0fVxuIDI3MjpcdEVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbiAyNzM6XHRcbiAyNzQ6XHR2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gMjc1Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiAyNzY6XHRcdFx0XHRcdFx0cG1kX3QgcG1kKVxuIDI3NzpcdHtcbiAyNzg6XHRcdGlmIChcdTAwMjZpbml0X21tID09IG1tKVxuIDI3OTpcdFx0XHRyZXR1cm47XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAoIXBtZF9ub25lKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4gMjgyOlx0XHRcdHB0ZV90ICpwdGVwID0gcHRlX29mZnNldF9tYXAoXHUwMDI2cG1kLCBhZGRyKTtcbiAyODM6XHRcdFx0dW5zaWduZWQgbG9uZyBpO1xuIDI4NDpcdFxuIDI4NTpcdFx0XHRpZiAoV0FSTl9PTighcHRlcCkpXG4gMjg2Olx0XHRcdFx0cmV0dXJuO1xuIDI4NzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7XG4gMjg4Olx0XHRcdFx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciwgcHRlcF9nZXQocHRlcCkpO1xuIDI4OTpcdFx0XHRcdGFkZHIgJiM0Mzs9IFBBR0VfU0laRTtcbiAyOTA6XHRcdFx0XHRwdGVwJiM0MzsmIzQzOztcbiAyOTE6XHRcdFx0fVxuIDI5MjpcdFx0XHRwdGVfdW5tYXAocHRlcCAtIFBUUlNfUEVSX1BURSk7XG4gMjkzOlx0XHR9XG4gMjk0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBQYWdlIFRhYmxlIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IOKAkyBzb21lb25lIHdhcyBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAgb24gYSBgcG1kX25vbmVgIFBNRCwgd2hpY2ggaXMgb2J2aW91c2x5IG5vdCBpZGVhbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaWdnaW5nIGludG8gdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgbG9naWMsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSBpdCYjMzk7cyByb2J1c3QuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHdlIG5lZWQgdG8gZnV6eiB0aGlzIGNoYW5nZSBhZ2dyZXNzaXZlbHkuIFdlIHNob3VsZCB0aHJvdyBldmVyeSBjb25jZWl2YWJsZSBzY2VuYXJpbyBhdCBpdCB0byBmbHVzaCBvdXQgYW55IGVkZ2UgY2FzZXMuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIGBLY29uZmlnYCBmb3IgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpZiB3ZSBuZWVkIHRvIGFjdGl2ZWx5IGNvbmZpZ3VyZSB0aGUga2VybmVsIHRvIHRyaWdnZXIgdGhpcyBuZXcsIGltcHJvdmVkIGNoZWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBpdHMgaW1wYWN0IGlzIGtleSBiZWZvcmUgSSBkaXZlIGluIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9UQUJMRV9DSEVDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTEwNT1jb25maWcgUEFHRV9PV05FUlxuLS1cbm1tL0tjb25maWcuZGVidWctMTIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoxMjI6Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcbm1tL0tjb25maWcuZGVidWctMTIzLVx0Ym9vbCBcJiMzNDtDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMzUtXG5tbS9LY29uZmlnLmRlYnVnOjEzNjpjb25maWcgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzctXHRib29sIFwmIzM0O0VuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkZWJ1Z2dpbmcsIHNvIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9LY29uZmlnLmRlYnVnYC4gSSBrbm93IHRoYXQgZmlsZSB1c3VhbGx5IGhvdXNlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG9wdGlvbnMsIGFuZCBnaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdG8gYmUgcHJlc2VudC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSB2aWNpbml0eSBvZiBsaW5lIDEyMiwgYXMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyByZWxhdGVkIG9wdGlvbnMuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgcGFydGljdWxhciBhcmVhIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGZpbmVyIHBvaW50cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGRlYnVnZ2luZyBvcHRpb25zLiBQZXJoYXBzIHNwZWNpZmljIGZsYWdzIG9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBpbiB0aGF0IHJlZ2lvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIxOlx0XG4gMTIyOlx0Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcbiAxMjM6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1wmIzM0O1xuIDEyNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbiAxMjU6XHRcdGRlcGVuZHMgb24gRVhDTFVTSVZFX1NZU1RFTV9SQU1cbiAxMjY6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuIDEyNzpcdFx0aGVscFxuIDEyODpcdFx0ICBDaGVjayB0aGF0IGFub255bW91cyBwYWdlIGlzIG5vdCBiZWluZyBtYXBwZWQgdHdpY2Ugd2l0aCByZWFkIHdyaXRlXG4gMTI5Olx0XHQgIHBlcm1pc3Npb25zLiBDaGVjayB0aGF0IGFub255bW91cyBhbmQgZmlsZSBwYWdlcyBhcmUgbm90IGJlaW5nXG4gMTMwOlx0XHQgIGVycm9uZW91c2x5IHNoYXJlZC4gU2luY2UgdGhlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgdGltZVxuIDEzMTpcdFx0ICBlbnRyaWVzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB1c2VyIHBhZ2UgdGFibGVzLCBsZWFraW5nLCBjb3JydXB0aW9uXG4gMTMyOlx0XHQgIGFuZCBkb3VibGUgbWFwcGluZyBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgc3luY2hyb25vdXNseS5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgSWYgdW5zdXJlIHNheSBcJiMzNDtuXCYjMzQ7LlxuIDEzNTpcdFxuIDEzNjpcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG4gMTM3Olx0XHRib29sIFwmIzM0O0VuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFwmIzM0O1xuIDEzODpcdFx0ZGVwZW5kcyBvbiBQQUdFX1RBQkxFX0NIRUNLXG4gMTM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGFnZSBUYWJsZSBDaGVjayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgc29tZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHBhZ2UgdGFibGUgY2hlY2tzLiBMZXQmIzM5O3Mgc2VlLCBJIG5lZWQgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gQWgsIGhhbmcgb27igKYgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgIHByZXR0eSBtdWNoIGhhbmRsZXMgdGhlIGVuZm9yY2VtZW50IGFzcGVjdCBhdXRvbWF0aWNhbGx5LCBzbyBpdCBzZWVtcyBJJiMzOTttIGNvdmVyZWQuIEkgdGhpbmsgaW4gdGhpcyBzaXR1YXRpb24gSSB3aWxsIGVuYWJsZSBib3RoIG9mIHRob3NlIGNvbmZpZ3MuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSBzaG91bGQgZG91YmxlLWNoZWNrIGFib3V0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvcnRlZCBvciB1dGlsaXplZCBhbnl3aGVyZTsgSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCwganVzdCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xMDQ9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMC1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjExMTpcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTItfVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNzI9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3My1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3NS1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipUaGUgQ29udGV4dCBvZiBDbGVhcmluZyBQVEUgUmFuZ2VzKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSW1tZWRpYXRlbHksIEkga25vdyB0aGlzIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHRvIGNoZWNrIGFuZCBwb3RlbnRpYWxseSBjbGVhciBhIHJhbmdlIG9mIFBhZ2UgVGFibGUgRW50cmllcyAoUFRFcykuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBpbiB0aGUgd2VlZHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb25zLCBhbmQgcHJvYmFibHkgZW5jb3VudGVyaW5nIHNpdHVhdGlvbnMgd2hlcmUgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBvciBmcmVlZC4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdDogd2UmIzM5O3JlIHZlcmlmeWluZyBpZiBjbGVhcmluZyBhIFBURSByYW5nZSBpcyBhcHByb3ByaWF0ZSwgYW5kIGRvaW5nIGl0IGlmIGl0IGlzLiBUaGUgJiMzOTtjaGVjayYjMzk7IGltcGxpZXMgd2UgYXJlIGRvaW5nIG1vcmUgdGhhbiBqdXN0IGNsZWFyaW5nIGJsaW5kbHkuIFRoZXJlJiMzOTtzIHNvbWUgc2FmZXR5IG5ldCBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IG5lY2Vzc2l0YXRlcyB0aGlzICYjMzk7Y2hlY2smIzM5OyBhbmQgY2xlYXIgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD05NT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMDMtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDQ6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTA1LVx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEwLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgYWRkciwgcG1kKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMi19XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTUwPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE1NC1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjE1NTpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTYtXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTg2Mz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjA2MC1cdG1tX2RlY19ucl9wdGVzKG1tKTtcbm1tL2todWdlcGFnZWQuYzoyMDYxOlx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGhhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMDYyLVx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjE0NT1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMjIxLVx0XHRcdG1tX2RlY19ucl9wdGVzKG1tKTtcbm1tL2todWdlcGFnZWQuYzoyMjIyOlx0XHRcdHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMjIzLVx0XHRcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTI3Mj1FWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldCk7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI3NDp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjc1LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRIUCBDb2xsYXBzZSBhbmQgUmV0cmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgVEhQIGNvbGxhcHNlIGFuZCByZXRyYWN0aW9uIG1lY2hhbmlzbXMsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aGUgZnVuY3Rpb25zIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIG1lY2hhbmlzbXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiB3aGVyZSB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbS4gV2FpdCBhIG1pbnV0ZSwgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhvc2UsIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIGV4YW1pbmUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBUaGF0IGxvb2tzIGxpa2UgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZnVuY3Rpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AsIGFuZCB0aGF0IG90aGVyIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODYyLVxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMTg2NC1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjEwMT12b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDMte1xubW0va2h1Z2VwYWdlZC5jOjIxMDQ6XHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMTA1LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI2MzMtXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cbm1tL2todWdlcGFnZWQuYzoyNjM0Olx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXHQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjg0MC1cdFx0ZWxzZVxubW0va2h1Z2VwYWdlZC5jOjI4NDE6XHRcdFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTI4NDItXHRcdFx0XHRcdFx0XHQgICAgICFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUGFnZSBUYWJsZSBDb2xsYXBzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYWdlIHRhYmxlIGNvbGxhcHNpbmcgbG9naWMsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgY29sbGFwc2VfZmlsZWAsIGFuZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIFRoYXQgaW1tZWRpYXRlbHkgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHdoZXJlIHRoaXMgZmVhdHVyZSBpcyB1c2VkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYSBmdW5jdGlvbiBsaWtlIGBtYWR2aXNlYCB3aXRoIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmxhZyBpcyBhIGxpa2VseSB0cmlnZ2VyLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIHByaW1hcnkgdXNlIGNhc2UuIFRvIGRlbHZlIGZ1cnRoZXIsIEkgdGhpbmsgY2hlY2tpbmcgb3V0IHRoZSBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgZnVuY3Rpb24gaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJdCBzZWVtcyBsaWtlIGl0IHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgYmVoYXZpb3Igb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEnigJlsbCBzdGFydCBkaWdnaW5nIGludG8gdGhhdCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXRyYWN0X3BhZ2VfdGFibGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NTYyPWFyZSBleHRyYSByZXF1aXJlbWVudHMgZm9yIGFjY2Vzc2luZyB0aGVtOlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTY3LSAgcm1hcCBsb2NrIGZvciByZWFkaW5nIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIFBURSBhbmQgUE1EIHBhZ2UgdGFibGUgbG9ja3MuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU2ODogIEluIHBhcnRpY3VsYXIsIHRoaXMgaGFwcGVucyBpbiA6YzpmdW5jOmAhcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2hlbiBoYW5kbGluZ1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NjktICA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTc4LSAgY2FuIHRha2UgdGhlIFBNRCBsb2NrIGFuZCByZXZhbGlkYXRlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHBtZCBlbnRyeSBzdGlsbCBtZWV0XG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU3OTogIHRoZSByZXF1aXJlbWVudHMuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01ODAtICB3aGVuIGhhbmRsaW5nIDpjOm1hY3JvOmAhTUFEVl9DT0xMQVBTRWAuXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03MjY9Y2xlYXJlZCB3aXRob3V0IHBhZ2UgdGFibGUgbG9ja3MgKGluIHRoZSA6YzpmdW5jOmAhcGdkX2NsZWFyYCwgOmM6ZnVuYzpgIXA0ZF9jbGVhcmAsXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC03MzAtICAgICAgICAgIHRoZSBwYWdlIHRhYmxlcyBhYm92ZSBpdCBhcyBpcyBkb25lIGJ5XG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjczMTogICAgICAgICAgOmM6ZnVuYzpgIXJldHJhY3RfcGFnZV90YWJsZXNgLCB3aGljaCBpcyBwZXJmb3JtZWQgdW5kZXIgdGhlIGlfbW1hcFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC03MzItICAgICAgICAgIHJlYWQgbG9jaywgUE1ELCBhbmQgUFRFIHBhZ2UgdGFibGUgbG9ja3MsIHdpdGhvdXQgdGhpcyBsZXZlbCBvZiBjYXJlLlxuLS1cbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xOTAzLVx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxubW0va2h1Z2VwYWdlZC5jOjE5MDQ6XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXG5tbS9raHVnZXBhZ2VkLmMtMTkwNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yMTA4PXN0YXRpYyBib29sIGZpbGVfYmFja2VkX3ZtYV9pc19yZXRyYWN0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjE0NC1cbm1tL2todWdlcGFnZWQuYzoyMTQ1OnN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG5tbS9raHVnZXBhZ2VkLmMtMjE0Ni17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjM1LVx0ICovXG5tbS9raHVnZXBhZ2VkLmM6MjYzNjpcdHJldHJhY3RfcGFnZV90YWJsZXMobWFwcGluZywgc3RhcnQpO1xubW0va2h1Z2VwYWdlZC5jLTI2MzctXHRpZiAoY2MgXHUwMDI2XHUwMDI2ICFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKVxuLS1cbm1tL21lbW9yeS5jPTEzMDY9Y29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vbWVtb3J5LmMtMTM0Mi1cdCAqIFdlIGFscmVhZHkgaG9sZCB0aGUgZXhjbHVzaXZlIG1tYXBfbG9jaywgdGhlIGNvcHlfcHRlX3JhbmdlKCkgYW5kXG5tbS9tZW1vcnkuYzoxMzQzOlx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpIGFyZSB1c2luZyB2bWEtXHUwMDNlYW5vbl92bWEgdG8gYmUgZXhjbHVzaXZlLCBzb1xubW0vbWVtb3J5LmMtMTM0NC1cdCAqIHRoZSBQVEUgcGFnZSBpcyBzdGFibGUsIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGdldCBwbWR2YWwgYW5kIGRvXG4tLVxubW0vbXJlbWFwLmM9MTk3PXN0YXRpYyBpbnQgbW92ZV9wdGVzKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4tLVxubW0vbXJlbWFwLmMtMjQ4LVx0ICogdGhpcyBieSB0cmF2ZXJzaW5nIGZpbGUtXHUwMDNlZl9tYXBwaW5nLCBzbyB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSB3aXRoXG5tbS9tcmVtYXAuYzoyNDk6XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuIEluIGFkZGl0aW9uLCB3ZSBhbHJlYWR5IGhvbGQgdGhlIGV4Y2x1c2l2ZVxubW0vbXJlbWFwLmMtMjUwLVx0ICogbW1hcF9sb2NrLCBzbyB0aGlzIG5ld19wdGUgcGFnZSBpcyBzdGFibGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgQ2xlYXJpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgcGFnZSB0YWJsZXMgZ2V0IGNsZWFyZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGByZXRyYWN0X3BhZ2VfdGFibGVzYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGNhbGxpbmcgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgICphbHNvKiBjYWxsZWQgZnJvbSB3aXRoaW4gaXRzZWxmPyBObywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEFmdGVyIGEgcXVpY2sgbG9vaywgSSBzZWUgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyBhY3R1YWxseSBhbiBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmhgLCBhbmQgaXQmIzM5O3MgdGhlIGlubGluZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGltZSB0byBleGFtaW5lIHRoYXQgaGVhZGVyIGZpbGUgbW9yZSBjbG9zZWx5IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoYXQgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFxuIDEwMTpcdFx0X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIG5yKTtcbiAxMDI6XHR9XG4gMTAzOlx0XG4gMTA0Olx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDEwNTpcdFx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4gMTA2Olx0XHRcdFx0XHRcdFx0ICAgIHBtZF90IHBtZClcbiAxMDc6XHR7XG4gMTA4Olx0XHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2cGFnZV90YWJsZV9jaGVja19kaXNhYmxlZCkpXG4gMTA5Olx0XHRcdHJldHVybjtcbiAxMTA6XHRcbiAxMTE6XHRcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XG4gMTEyOlx0fVxuIDExMzpcdFxuIDExNDpcdCNlbHNlXG4gMTE1Olx0XG4gMTE2Olx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfYWxsb2Moc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAxMTc6XHR7XG4gMTE4Olx0fVxuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBQYWdlIFRhYmxlIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYCFwbWRfbm9uZShwbWQpYCBjaGVjayByZWFsbHkgc3RhbmRzIG91dC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIGVpdGhlciBhIHN5c3RlbSBjcmFzaCBvciBhIHdhcm5pbmcgY29uZGl0aW9uIHdoZW4gYHBtZF9ub25lKHBtZClgIGlzIGVuY291bnRlcmVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgZ3VhcmQsIEkmIzM5O2Qgc2F5LgoKVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggYG1tL2todWdlcGFnZWQuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGludmVzdGlnYXRlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AuIEFyZSB0aGV5IHN0YXRpY2FsbHkgZGVmaW5lZCwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQ/IEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgbGlua2FnZSB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4KCkhtbW0sIGl0IGxvb2tzIGxpa2UgYm90aCBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgIGFyZSBzdGF0aWMsIHdoaWNoIG1ha2VzIHRoaXMgYSBiaXQgc2ltcGxlciB0byBmb2xsb3cuIEhvd2V2ZXIsIHdhaXQsIGlzbiYjMzk7dCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGV4cG9ydGVkLCBvciBhbSBJIG1pc3Rha2VuPyBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE5PWV4dGVybiBib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIwOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTIxLVx0XHRib29sIGluc3RhbGxfcG1kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDQtfVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDU6c3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDYtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpbnN0YWxsX3BtZClcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU5OS1cdGlmIChyZXQgXHUwMDNlIDApXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo2MDA6XHRcdGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCB2YWRkciwgZmFsc2UpO1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNjAxLVxuLS1cbm1tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODYyLVxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMTg2NC1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjA4OS0vKipcbm1tL2todWdlcGFnZWQuYzoyMDkwOiAqIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwIC0gVHJ5IHRvIGNvbGxhcHNlIGEgcHRlLW1hcHBlZCBUSFAgZm9yIG1tIGF0XG5tbS9raHVnZXBhZ2VkLmMtMjA5MS0gKiBhZGRyZXNzIGhhZGRyLlxuLS1cbm1tL2todWdlcGFnZWQuYy0yMTAwLSAqL1xubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTIxMDItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG5tbS9raHVnZXBhZ2VkLmMtMjEwMy17XG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jLTIxMDUtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMjU0PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxubW0va2h1Z2VwYWdlZC5jOjI2MzQ6XHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXG5tbS9raHVnZXBhZ2VkLmMtMjYzNS1cdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz0yNzk2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODQwLVx0XHRlbHNlXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MTpcdFx0XHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjg0Mi1cdFx0XHRcdFx0XHRcdCAgICAgIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRIUCBDb2xsYXBzZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFyZSBoYW5kbGVkIGR1cmluZyBtZW1vcnkgY29sbGFwc2Ugb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzbiYjMzk7dCBkZWNsYXJlZCBzdGF0aWMsIG1lYW5pbmcgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIE9uIHRoZSBvdGhlciBoYW5kLCBgY29sbGFwc2VfZmlsZWAgKmlzKiBzdGF0aWMsIGltcGx5aW5nIGl0cyB1c2UgaXMgcmVzdHJpY3RlZCB0byB0aGUgZmlsZS1iYWNrZWQgbWVtb3J5IGNvbGxhcHNlIHByb2NlZHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGBtYWR2aXNlX2NvbGxhcHNlYCBhY3R1YWxseSBjYWxscy4gSSBrbm93IGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBkZWZpbmVkIGluIGBtbS9tYWR2aXNlLmNgLCBzbyBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHRvIHNlZSBpZiBpdCBjYWxscyBlaXRoZXIgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBvciBgY29sbGFwc2VfZmlsZWAsIG9yIGJvdGgsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGNoYWluIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdD0zNDY9QSBoaWdoZXIgdmFsdWUgbWF5IGluY3JlYXNlIG1lbW9yeSBmb290cHJpbnQgZm9yIHNvbWUgd29ya2xvYWRzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MzU0OiAgIEN1cnJlbnRseSwgbWFkdmlzZV9jb2xsYXBzZSBvbmx5IHN1cHBvcnRzIGNvbGxhcHNpbmcgdG8gUE1ELXNpemVkIFRIUHNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTUtICAgYW5kIGRvZXMgbm90IGF0dGVtcHQgbVRIUCBjb2xsYXBzZXMuXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNTc9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE2MS1cbm1tL2todWdlcGFnZWQuYzozMTYyOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXG5tbS9raHVnZXBhZ2VkLmMtMzE2My17XG4tLVxubW0va2h1Z2VwYWdlZC5jLTMxOTMtXG5tbS9raHVnZXBhZ2VkLmM6MzE5NDppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2todWdlcGFnZWQuYy0zMTk1LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyODEtXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFx1MDAzZVx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxubW0va2h1Z2VwYWdlZC5jOjMyODI6XHRcdFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XG5tbS9raHVnZXBhZ2VkLmMtMzI4My19XG4tLVxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM2My1cdGNhc2UgTUFEVl9DT0xMQVBTRTpcbm1tL21hZHZpc2UuYzoxMzY0Olx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG5tbS9tYWR2aXNlLmMtMTM2NS1cdFx0XHRcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZWxvY2tfZHJvcHBlZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTIzND1zdGF0aWMgdm9pZCBmaWxsX21lbW9yeShpbnQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDctICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjQ4OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9yZXRyeSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjY2PXN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzktXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI4MDpcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODEtXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTEwPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNTpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxNi1cdFx0XHQgICAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOC1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUzOTpcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU0MC1cdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU0OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTA6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUxLVx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1NS1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTY6XHRfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTctfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz02Nzk9c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjY4MDpcdC5jb2xsYXBzZSA9IFx1MDAyNm1hZHZpc2VfY29sbGFwc2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjgxLVx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEwNzU9c3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTMyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExMzM6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzQtXHRcdFx0XHRcdCAgIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExNDMtXHQvKiBjLVx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxMTQ0Olx0X19tYWR2aXNlX2NvbGxhcHNlKFwmIzM0O1JlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcJiMzNDssIHAsIDEsIG9wcywgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0NS1cdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEzMTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xNDMxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzI6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzMzpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNDpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMjAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHBlcnRpbmVudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAgc2VlbXMgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUuIEkgYWxzbyB0aGluayBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIGltcG9ydGFudCB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQuIEhtbSwgYnV0IGhhbmcgb24uLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGByZXRyYWN0X3BhZ2VfdGFibGVzYCBpcyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyByZWxldmFudC4gTm93LCBpcyBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFsc28gc3RhdGljPyBObywgbm8gaXQmIzM5O3Mgbm90LiBJIHJlbWVtYmVyIG5vdyB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGAuIEludGVyZXN0aW5nLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGV4cG9ydGVkIGFuZCBpc24mIzM5O3QgYSBzdGF0aWMgZnVuY3Rpb24uIE5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBub24tc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKl9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIEkgKnN3ZWFyKiBJIGp1c3QgZ2xhbmNlZCBhdCBgbW0vcGFnZV90YWJsZV9jaGVjay5jYCBhbmQgc2F3IHNvbWV0aGluZyBpbnRlcmVzdGluZyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYEVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KWAgbWFjcm8uIFRoYXQmIzM5O3MgZ290IG1lIHRoaW5raW5nLiBJdCYjMzk7cyB0aW1lIHRvIHJldmlzaXQgdGhhdCBmaWxlLCBkaXZlIGRlZXBlciwgYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhhdCBzeW1ib2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIExldCYjMzk7cyBnZXQgYmFjayB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3RhYmxlX2NoZWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0XHRcdHB0ZXAmIzQzOyYjNDM7O1xuIDI5MTpcdFx0XHR9XG4gMjkyOlx0XHRcdHB0ZV91bm1hcChwdGVwIC0gUFRSU19QRVJfUFRFKTtcbiAyOTM6XHRcdH1cbiAyOTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTg1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhbiBleHBvcnRlZCBzeW1ib2wsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBSaWdodCwgcmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gYSB1c2VmdWwgZm9jdXMgcG9pbnQgaGVyZSBjb3VsZCBiZSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIFRoYXQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYWxzbywgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG9uIGBtYWR2aXNlX2NvbGxhcHNlYC4gVGhhdCBjb3VsZCBiZSByZWxldmFudCBhcyB3ZWxsLgoKSSBzaG91bGQgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBmb3IgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBMZXQmIzM5O3Mgc2VlLi4uIGl0ICpkZXBlbmRzIG9uKiBgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLYCwgYW5kIGBFWENMVVNJVkVfU1lTVEVNX1JBTWAuIEFsc28sIGl0ICpzZWxlY3RzKiBgUEFHRV9FWFRFTlNJT05gLiBSaWdodCwgcmlnaHQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsYXRlZD8gQWgsIHllcywgdGhlcmUmIzM5O3MgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLgoKT2theSwgbmV4dCBzdG9wOiBsZXQmIzM5O3MgZ28gY2hlY2sgb3V0IHdoYXQgYEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS2AgaXMgYWxsIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xNzQ5PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQ1xuLS1cbmFyY2gvS2NvbmZpZy0xNzUxLVxuYXJjaC9LY29uZmlnOjE3NTI6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xuYXJjaC9LY29uZmlnLTE3NTMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDM0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBhZ2UgVGFibGUgQ2hlY2tpbmcqKgoKT2theSwgc28gdGhpcyBpcyBhYm91dCBlbmFibGluZyBzb21lIHBhZ2UgdGFibGUgY2hlY2tzLCBzcGVjaWZpY2FsbHkgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgc2VlbXMgbGlrZSBhbiBhcmNoaXRlY3R1cmFsIGNob2ljZS4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvciBga2h1Z2VwYWdlZGAsIGFuZCBpdCBsb29rcyBsaWtlIEkmIzM5O20gcmlnaHQuIFRoZW4gSSByZW1lbWJlciB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyBhbHNvIGNhbGxlZCB0aHJvdWdoIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgZnJvbSB3aXRoaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGByZXRyYWN0X3BhZ2VfdGFibGVzYC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYXJlIHRoZXJlICphbnkqIG90aGVyIGNhbGxlcnMgb2YgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYD8gTm9wZSwgbG9va3MgbGlrZSBJJiMzOTt2ZSBhbHJlYWR5IHNjYW5uZWQgYG1tL2todWdlcGFnZWQuY2AgdGhvcm91Z2hseSwgd2hpY2ggZ2l2ZXMgbWUgY29uZmlkZW5jZSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiB0aGUgdHdvIGNhbGxlcnMgYXJlIGluZGVlZCB0aGUgb25lcyBJIGtub3cuCgpTbywgYmFzZWQgb24gdGhpcywgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYW5kIGBtYWR2aXNlX2NvbGxhcHNlYC4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIG1ha2Ugc3VyZSB0aGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBub24tc3RhdGljIHRvIGVuc3VyZSBwcm9wZXIgbGlua2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG1hZHZpc2VfY29sbGFwc2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxNjI9c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzE5My1cbm1tL2todWdlcGFnZWQuYzozMTk0OmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0va2h1Z2VwYWdlZC5jLTMxOTUtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIFN0YXRpYy1uZXNzIG9mIFN5c3RlbSBDYWxscyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgYG1hZHZpc2VfY29sbGFwc2VgLiBUaGUgY29kZSYjMzk7cyBtYWtpbmcgbWUgZG91YmxlLWNoZWNrIGl0cyBkZWNsYXJhdGlvbi4gWWVwLCBjb25maXJtZWQsIGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB3aGF0IEkgZXhwZWN0IHRoZW0gdG8gYmUgdG9vLiBJJiMzOTtsbCB2ZXJpZnkgdGhhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzbiYjMzk7dCBkZWNsYXJlZCBzdGF0aWMgZWl0aGVyLiBJIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIHNvcnRzIG9mIHRoaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0xOT1leHRlcm4gYm9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMDp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0yMS1cdFx0Ym9vbCBpbnN0YWxsX3BtZCk7XG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9NDE9c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ0LX1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ2LVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE4NjM9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXG5tbS9raHVnZXBhZ2VkLmM6MjEwMTp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXMgZGVmaW5pdGVseSBub3Qgc3RhdGljLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCBtYWtlIHN1cmUgd2UmIzM5O3ZlIGFjY291bnRlZCBmb3IgKmFsbCogdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBga2h1Z2VwYWdlZGAgYW5kIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmVhdHVyZS4gVGhpcyBpcyB0aGUga2luZCBvZiBkZXRhaWwgdGhhdCBjYW4gbWFrZSBvciBicmVhayBhIHN5c3RlbS4gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGhpZ2hseSBwcm9iYWJsZSB0byBiZSByZXF1aXJlZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBub3RoaW5nIGlzIG92ZXJsb29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzNC1cbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM2LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTgtXG5tbS9LY29uZmlnOjg1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODYwLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY1LVxubW0vS2NvbmZpZzo4NjY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjctXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODc0LVxubW0vS2NvbmZpZzo4NzU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc2LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTEtXG5tbS9LY29uZmlnOjg5MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5My1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAxLVxubW0vS2NvbmZpZzo5MDI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAzLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA5LVxubW0vS2NvbmZpZzo5MTA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTEtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNy1cbm1tL0tjb25maWc6OTE4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxOS1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyNz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzNi1cbm1tL0tjb25maWc6OTM3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDUtXG5tbS9LY29uZmlnOjk0NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTMtXG5tbS9LY29uZmlnOjk1NDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1NS1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTYxLVxubW0vS2NvbmZpZzo5NjI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYzLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkxOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEtlcm5lbCBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgd2Ugc3RpbGwgbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyB0aGF0IG11Y2ggaGFzbiYjMzk7dCBjaGFuZ2VkLiBOb3csIGxldCYjMzk7cyByZXZpc2l0IHRoYXQgYFBBR0VfVEFCTEVfQ0hFQ0tgIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLiBIbW0sIHJlYWRpbmcgdGhlIGNvbmZpZywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0JiMzOTtzIHJpZ2h0LCBpdCYjMzk7cyB0aGF0ICYjMzQ7Q2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlcyYjMzQ7IGJvb2xlYW4uIFNvLCB0byBnZXQgdGhlIGRlc2lyZWQgYmVoYXZpb3IsIGl0IGxvb2tzIGxpa2UgSSBuZWVkICpib3RoKiBgUEFHRV9UQUJMRV9DSEVDS2AgYW5kIGl0cyBlbmZvcmNlbWVudCBjb21wYW5pb24sIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gR290dGEgZW5hYmxlIHRob3NlIHRvIGdldCBmdWxsIGNvdmVyYWdlLiBBbmQgc2luY2UgSeKAmW0gdGhpbmtpbmcgYWJvdXQgdGhlIGNoZWNrcywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBsaXZlcyDigJMgeWVwLCBpdCYjMzk7cyByaWdodCB3aGVyZSBJIHRob3VnaHQ6IGluIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBHb29kLCBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVx0XHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMzAtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgQ2xlYXJpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBhbHJlYWR5IGNoZWNrZWQgYW5kIGZvdW5kIHRoYXQgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCAtIHRoYXQmIzM5O3MgKndpdGhvdXQqIHRoZSBkb3VibGUgdW5kZXJzY29yZSAtIGlzIGNhbGxlZCBmcm9tIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AuIEludGVyZXN0aW5nLgoKV2FpdCwgZGlkIEkganVzdCBzZWUgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXRzZWxmPyBObywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBjYWxscyBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcmAsIG5vdCB0aGUgZnVuY3Rpb24gd2l0aG91dCB0aGUgbGVhZGluZyB1bmRlcnNjb3Jlcy4KCkFscmlnaHQsIHRoYXQgY2xhcmlmaWVzIHRoZSBpbW1lZGlhdGUgY2FsbCBncmFwaC4gTm93LCB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbiBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJgIGlzIGRvaW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTE2PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxNzp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTE4LVx0XHRcdFx0ICBwdGVfdCBwdGUpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTI3PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cdFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9NDk9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTU0LVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6NTU6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGUpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtNTYtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEwLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgYWRkciwgcG1kKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMi19XG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTEzMT12b2lkIF9fcGFnZV90YWJsZV9jaGVja196ZXJvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE0Ny1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxNDg6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTQ5LVx0XHRcdFx0ICBwdGVfdCBwdGUpXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE1Ni19XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTU3OkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcik7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTU4LVxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yMTA9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjIwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkmIzQzOyYjNDM7KVxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIyMTpcdFx0X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihtbSwgYWRkciAmIzQzOyBQQUdFX1NJWkUgKiBpLCBwdGVwX2dldChwdGVwICYjNDM7IGkpKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMjItXHRpZiAocHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKG1tLCBhZGRyLCBwdGUpIFx1MDAyNlx1MDAyNiAhcHRlX3NwZWNpYWwocHRlKSlcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjg3LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjg4Olx0XHRcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXBfZ2V0KHB0ZXApKTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yODktXHRcdFx0YWRkciAmIzQzOz0gUEFHRV9TSVpFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gY2hhbmdlZC4gTm93LCBsZXQgbWUgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQQUdFX1RBQkxFX0NIRUNLYCwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bGwgd2FudCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Ugc3ltYm9sczogYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLgoKVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoYXQgZnVuY3Rpb24uIFByaW1hcmlseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYG1hZHZpc2VfY29sbGFwc2VgIGlzIHRoZSAqb25seSogcGF0aC4gTm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBga2h1Z2VwYWdlZGAgY2FuIGFsc28gdHJpZ2dlciBpdCB0aHJvdWdoIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgb3IgYHJldHJhY3RfcGFnZV90YWJsZXNgLiBSaWdodCwgYGtodWdlcGFnZWRgIGlzIGEga2VybmVsIHRocmVhZCwgc28gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IHN5c2NhbGwsIGJ1dCBpdCAqZG9lcyogc2NhbiBtZW1vcnkuIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBpcyBhIG1vcmUgZGlyZWN0IHRyaWdnZXIsIG9idmlvdXNseS4KCk5vdywgSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBFWENMVVNJVkVfU1lTVEVNX1JBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYEVYQ0xVU0lWRV9TWVNURU1fUkFNYCBzZXR0aW5nIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWENMVVNJVkVfU1lTVEVNX1JBTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUwMD1jb25maWcgTUVNT1JZX0lTT0xBVElPTlxuLS1cbm1tL0tjb25maWctNTA1LSMgL2Rldi9tZW0uXG5tbS9LY29uZmlnOjUwNjpjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbm1tL0tjb25maWctNTA3LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQYWdlIFRhYmxlIENoZWNrIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZGVmX2Jvb2wgeWAsIHdoaWNoIG1lYW5zIHdlIGhhdmUgYSBib29sZWFuIGRlZmluaXRpb24gc2V0LiBTcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoIGFyZSBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE15IHRhc2sgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGNhbiBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHBvdGVudGlhbCBjYWxsIHBhdGhzLiBJIGtub3cgdGhhdCBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgIGFyZSBrZXkgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCBhbmQgdGhhdCB0aGV5IHJlc2lkZSB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AuIEEga2V5IGZhY3RvciwgdGhvdWdoLCBpcyB0aGF0IGBtbS9raHVnZXBhZ2VkLmNgIGl0c2VsZiBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gVGhlcmVmb3JlLCBhIGRpcmVjdCBwYXRoIHRocm91Z2ggdGhvc2UgZnVuY3Rpb25zIHdpdGhvdXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcHBlYXJzIHVubGlrZWx5LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBleHBsb3JlIGFsdGVybmF0ZSBwYXRocywgY29uc2lkZXJpbmcgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBjb21lcyBpbnRvIHBsYXkgYXMgSSBwcm9jZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgYW5kIGhvdyBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWQubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MTktXHRcdFx0Lypcbm1tL2todWdlcGFnZWQuYzoyNDIwOlx0XHRcdCAqIGtodWdlcGFnZWQgb25seSB3b3JrcyBvbiBjbGVhbiBmaWxlLWJhY2tlZCBmb2xpb3MsXG5tbS9raHVnZXBhZ2VkLmMtMjQyMS1cdFx0XHQgKiBzbyB0aGlzIGZvbGlvIGlzIGRpcnR5IGJlY2F1c2UgaXQgaGFzbiYjMzk7dCBiZWVuIGZsdXNoZWRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjY2PXN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNzUtXHQgKiB3aGlsZSB0aGUgZm9ybWVyIG1pZ2h0IGNhdXNlIE1BRFZfQ09MTEFQU0UgdG8gcmFjZSB3aXRoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc2Olx0ICoga2h1Z2VwYWdlZCBvbiBsb3ctbG9hZCBzeXN0ZW0gKGxpa2UgYSB0ZXN0IG1hY2hpbmUpLCB3aGljaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTI3Ny1cdCAqIHdvdWxkIGNhdXNlIE1BRFZfQ09MTEFQU0UgdG8gZmFpbCB3aXRoIEVBR0FJTi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTg5PXN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02MDktXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjYxMDpcdCAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTYxMS1cdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjIzPXN0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTY1MC1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjUxOlx0ICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjUyLVx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0xMTc4PXN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExODgtXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdG1vdW50ZWQgd2l0aCBodWdlPWFkdmlzZSBvcHRpb24gZm9yIGtodWdlcGFnZWQgdGVzdHMgdG8gd29ya1xcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE4OTpcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRtdGhwX2todWdlcGFnZWQgb25seSBzdXBwb3J0cyBhbm9uIG1lbV90eXBlIG5vdy5cXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExOTAtXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcblxcdFN1cHBvcnRlZCBPcHRpb25zOlxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTM1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEh1Z2VwYWdlIENvbXBpbGF0aW9uIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBraHVnZXBhZ2VkLm9gIG1vZHVsZSBpcyBvbmx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlnLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgdHJhbnNwYXJlbnQgaHVnZXBhZ2UgaW1wbGVtZW50YXRpb24uCgpTbywgaW4gdGVybXMgb2YgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIHdlJiMzOTtyZSBsb29raW5nIGF0OiBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIG9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIHJlbGF0aW9uc2hpcHMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHNvbWUga2V5IHN5bWJvbHMuIEkmIzM5O20gZm9jdXNpbmcgb24gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBUaGVzZSBzb3VuZCBsaWtlIHRoZXkmIzM5O3JlIGNyaXRpY2FsIGZvciB0aGUgcGFnZSB0YWJsZSBpbnRlZ3JpdHkgY2hlY2tzLCBodWdlcGFnZSBjb2xsYXBzaW5nLCBhbmQgbWFkdmlzZS1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudCwgcmVzcGVjdGl2ZWx5LiBVbmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IGlzIGltcG9ydGFudC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGJlaW5nIHVzZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGZ1cnRoZXIgY29udGV4dCBmb3IgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTI3PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cdFx0cHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9MTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMTE6XHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwbWQpO1xuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjc0OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MjEKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGEgQ3JpdGljYWwgUGF0Y2gqKgoKT2theSwgbm8gb3RoZXIgaW5jb21pbmcgY2FsbHMgZm9yIG5vdywgZ29vZC4gVGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHN1bW1hcnkgY2xlYXJseSBpbmRpY2F0ZXMgYSBjcml0aWNhbCBidWcgZml4IGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGhlIGNvcmUgaXNzdWUgaXMgYHB0ZV9vZmZzZXRfbWFwYCBiZWluZyBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBlYXNpbHkgbGVhZCB0byBhIGtlcm5lbCBjcmFzaCBvciBhIGhhcmQtdG8tZGVidWcgd2FybmluZywgYW5kIHRoYXQgc29ydCBvZiBidWcgaXMgYWJzb2x1dGVseSB0aGUga2luZCB3ZSBuZWVkIHRvIGNhdGNoIGVhcmx5LiBUaGUgY29kZSBtZW50aW9ucyB0aGlzIGhhcHBlbmluZyBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmcm9tIGBraHVnZXBhZ2VkYCBhbmQgd2hlbiBzb21lb25lIHVzZXMgYG1hZHZpc2VfY29sbGFwc2VgLgoKUmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHN0cmF0ZWd5LgoKYFdvcnRoRnV6emluZzogdHJ1ZWAgLSBPYnZpb3VzbHkuIE5vIHF1ZXN0aW9uIHRoZXJlLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIHRoZSBmdXp6ZXIgb246CgoqICAgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgOiBUaGUgZml4IGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIGl0IGhhbmRsZXMgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4KKiAgIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGA6IFRIUCBjb2xsYXBzZSBpcyB3aGF0IHRyaWdnZXJzIHRoZSBpc3N1ZSwgc28gd2UgbmVlZCB0byBoaXQgdGhvc2UgY2FsbCBzaXRlcy4KKiAgIGBtYWR2aXNlX2NvbGxhcHNlYDogQXMgd2l0aCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIHRoaXMgaXMgYSBwb3RlbnRpYWwgdHJpZ2dlciBmb3IgdGhlIGJ1Zy4KCkFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBmb3IgdGhlIGZ1enppbmcgcnVuOgoKKiAgIGBQQUdFX1RBQkxFX0NIRUNLYCwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgOiBUaGlzIHdpbGwgZW5hYmxlIHRoZSBjaGVja3MgdGhlIHBhdGNoIGlzIGludGVuZGVkIHRvIGZpeC4KKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWA6IFRIUCBpcyB0aGUgY29udGV4dCwgc28gd2UgbmVlZCB0byBlbmFibGUgVEhQLgoKVGhlIHJlYXNvbmluZyBpcyBzb3VuZDogdGhlIHBhdGNoIHByZXZlbnRzIGBwdGVfb2Zmc2V0X21hcGAgZnJvbSBiZWluZyBjYWxsZWQgb24gYSBiYWQgYHBtZGAuIEl0JiMzOTtzIGNydWNpYWwgd2UgZnV6eiBib3RoIHRoZSBmaXggKmFuZCogdGhlIGNhbGxlcnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBvdXQgaWYgdGhlIGZpeCBoYXMgaG9sZXMgb3IgaW50cm9kdWNlIG5ldyBvbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDSyYjMzQ7LAogICAgJiMzNDtQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZSYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCB3aGVyZSBgcHRlX29mZnNldF9tYXBgIGNvdWxkIGJlIGNhbGxlZCBvbiBhIGBwbWRfbm9uZWAgcG1kLCB3aGljaCBtaWdodCBsZWFkIHRvIGEgY3Jhc2ggb3Igd2FybmluZy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIFRIUCBjb2xsYXBzZSBvcGVyYXRpb25zIChlLmcuLCB2aWEgYGtodWdlcGFnZWRgIG9yIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgdG8gZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfVEFCTEVfQ0hFQ0smIzM0OywKICAgICYjMzQ7UEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgd2hlcmUgYHB0ZV9vZmZzZXRfbWFwYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZCwgd2hpY2ggbWlnaHQgbGVhZCB0byBhIGNyYXNoIG9yIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBUSFAgY29sbGFwc2Ugb3BlcmF0aW9ucyAoZS5nLiwgdmlhIGBraHVnZXBhZ2VkYCBvciBgbWFkdmlzZShNQURWX0NPTExBUFNFKWApLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBgcG1kX25vbmUocG1kKWAgY2hlY2sgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuIFRoaXMgcHJldmVudHMgbWFwcGluZyBhbmQgYWNjZXNzaW5nIFBURXMgZnJvbSBhbiBlbXB0eSBQTUQsIHdoaWNoIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBhIGNyYXNoLCBvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIGJ5IG5vcm1hbCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjNGM0OTY2ODIzYTFhZmI0NDU2ZTgyZmU2NDE4OGZmOTMxMjBkOTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suYwppbmRleCA2ZmZjNTM2MzU5Y2QwLi5lZDNlMWE3NmYyNjY0IDEwMDY0NAotLS0gYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV90YWJsZV9jaGVjay5jCkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlpZiAoJmFtcDtpbml0X21tID09IG1tKQogCQlyZXR1cm47CiAKLQlpZiAoIXBtZF9iYWQocG1kKSAmYW1wOyZhbXA7ICFwbWRfbGVhZihwbWQpKSB7CiYjNDM7CWlmICghcG1kX25vbmUocG1kKSAmYW1wOyZhbXA7ICFwbWRfYmFkKHBtZCkgJmFtcDsmYW1wOyAhcG1kX2xlYWYocG1kKSkgewogCQlwdGVfdCAqcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKCZhbXA7cG1kLCBhZGRyKTsKIAkJdW5zaWduZWQgbG9uZyBpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA3CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBDaGVjayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgYWRkaW5nIGEgYCFwbWRfbm9uZShwbWQpYCBjaGVjayBiZWZvcmUgY2FsbGluZyBgcHRlX29mZnNldF9tYXBgLiAgQ3VycmVudGx5LCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIFBNRCBpcyAqbm90KiBiYWQgYW5kICpub3QqIGEgbGVhZi4gTm93IGl0IGFkZHMgYSBjaGVjayB0aGF0IGl0JiMzOTtzICpub3QqIG5vbmUuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrPyBCdXQsIGFmdGVyIGEgbW9tZW50LCBJIHJlYWxpemUgdGhhdCBgcG1kX25vbmUocG1kKWAgbWVhbnMgdGhlIFBNRCBlbnRyeSBpcyBlbXB0eSDigJMgaXQgaGFzbiYjMzk7dCBiZWVuIHBvcHVsYXRlZCB3aXRoIGFueSBQVEVzIHlldC4gQ2FsbGluZyBgcHRlX29mZnNldF9tYXBgIG9uIGFuIGVtcHR5IFBNRCBpcyBqdXN0IHBsYWluIHdyb25nLCBhbmQgYSB0ZXh0Ym9vayBjYXVzZSBmb3IgYSBjcmFzaCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIG9yIHVubWFwcGVkIG1lbW9yeSBsb2NhdGlvbi4gSeKAmW0gdGhpbmtpbmcgcGFnZSBmYXVsdHMsIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggaXQuLi4gc3RhbmRhcmQga2VybmVsIGNoZWNrcyB3b3VsZCBwcm9iYWJseSB0cmlwLiBJdCYjMzk7cyBhIHByb3RlY3Rpb24gYWdhaW5zdCBtZW1vcnkgYWNjZXNzIGlzc3VlcyByYXRoZXIgdGhhbiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqY29udGVudHMqLiBJdOKAmXMgYSBjbGFzc2ljIGxvZ2ljYWwgYnVnLgoKVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBoZXJlLiAgVGhpcyBpcyBhYm91dCAqcHJldmVudGluZyogaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBub3QgYWJvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU28sIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGlzIGNvcnJlY3QuICBUaGlzIGlzbuKAmXQgc29tZXRoaW5nIEtNU0FOIHdvdWxkIHNwZWNpZmljYWxseSBmbGFnLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYnkgcmVyZWFkaW5nIHRoZSBjb250ZXh0LiAgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHVzZWQgd2hlbiBjbGVhcmluZyBQVEVzLiBJZiBhIFBNRCBpcyBlbXB0eSwgdGhlcmXigJlzIG5vdGhpbmcgdG8gY2xlYXIuIFNraXBwaW5nIHRoZSBgcG1kX25vbmUocG1kKWAgY2hlY2sgd291bGQgbGV0IHVzIGVuZCB1cCB3aXRoIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLgpTbywgeWVhaCwgaXTigJlzIG5vdCBhbiBpc3N1ZSBvZiByZWFkaW5nIGdhcmJhZ2UuIFRoZSBwcm9ibGVtIGlzIGEgbnVsbC1wb2ludGVyIGRlcmVmZXJlbmNlIG9yIGFuIGFjY2VzcyBvZiBhbiB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uLiBLTVNBTiBpcyBtZWFudCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIEtBU0FOIGNhbiBjYXRjaCBpbGxlZ2FsIG1lbW9yeSB1c2FnZS4gSSYjMzk7bGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGFuZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYHBtZF9ub25lKHBtZClgIGNoZWNrIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBiZWZvcmUgY2FsbGluZyBgcHRlX29mZnNldF9tYXBgLiBUaGlzIHByZXZlbnRzIG1hcHBpbmcgYW5kIGFjY2Vzc2luZyBQVEVzIGZyb20gYW4gZW1wdHkgUE1ELCB3aGljaCB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcywgYSBjcmFzaCwgb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBvciBieSBub3JtYWwga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGBwbWRfbm9uZShwbWQpYCBjaGVjayBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYC4gVGhpcyBwcmV2ZW50cyBtYXBwaW5nIGFuZCBhY2Nlc3NpbmcgUFRFcyBmcm9tIGFuIGVtcHR5IFBNRCwgd2hpY2ggd291bGQgbGlrZWx5IHJlc3VsdCBpbiBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIGEgY3Jhc2gsIG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3IgYnkgbm9ybWFsIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDMuMzg2MTQ1ODIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MzAzMjcyMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBgcG1kX25vbmUocG1kKWAgY2hlY2sgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuIFRoaXMgcHJldmVudHMgbWFwcGluZyBhbmQgYWNjZXNzaW5nIFBURXMgZnJvbSBhbiBlbXB0eSBQTUQsIHdoaWNoIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLCBhIGNyYXNoLCBvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIGJ5IG5vcm1hbCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIHdoZXJlIGBwdGVfb2Zmc2V0X21hcGAgY291bGQgYmUgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQsIHdoaWNoIG1pZ2h0IGxlYWQgdG8gYSBjcmFzaCBvciB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMgKGUuZy4sIHZpYSBga2h1Z2VwYWdlZGAgb3IgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowMy4zODYxNTI0NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzY5NDE0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyYzRjNDk2NjgyM2ExYWZiNDQ1NmU4MmZlNjQxODhmZjkzMTIwZDk4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjU3OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suY1xcbmluZGV4IDZmZmM1MzYzNTljZDAuLmVkM2UxYTc2ZjI2NjQgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV90YWJsZV9jaGVjay5jXFxuKysrIGIvbW0vcGFnZV90YWJsZV9jaGVjay5jXFxuQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdGlmIChcXHUwMDI2aW5pdF9tbSA9PSBtbSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFwbWRfYmFkKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcXG4rXFx0aWYgKCFwbWRfbm9uZShwbWQpIFxcdTAwMjZcXHUwMDI2ICFwbWRfYmFkKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcXG4gXFx0XFx0cHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X21hcChcXHUwMDI2cG1kLCBhZGRyKTtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MDQuODYzOTUyMzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg5MTMwNzgyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgd2hlcmUgYHB0ZV9vZmZzZXRfbWFwYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZCwgd2hpY2ggbWlnaHQgbGVhZCB0byBhIGNyYXNoIG9yIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBUSFAgY29sbGFwc2Ugb3BlcmF0aW9ucyAoZS5nLiwgdmlhIGBraHVnZXBhZ2VkYCBvciBgbWFkdmlzZShNQURWX0NPTExBUFNFKWApLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjNGM0OTY2ODIzYTFhZmI0NDU2ZTgyZmU2NDE4OGZmOTMxMjBkOThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzo1NzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfdGFibGVfY2hlY2suYyBiL21tL3BhZ2VfdGFibGVfY2hlY2suY1xuaW5kZXggNmZmYzUzNjM1OWNkMC4uZWQzZTFhNzZmMjY2NCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfdGFibGVfY2hlY2suY1xuKysrIGIvbW0vcGFnZV90YWJsZV9jaGVjay5jXG5AQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdGlmIChcdTAwMjZpbml0X21tID09IG1tKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXBtZF9iYWQocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcbitcdGlmICghcG1kX25vbmUocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9iYWQocG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9sZWFmKHBtZCkpIHtcbiBcdFx0cHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X21hcChcdTAwMjZwbWQsIGFkZHIpO1xuIFx0XHR1bnNpZ25lZCBsb25nIGk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowNC44NjM5NTQxNTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM1OTY5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZvY3VzZWQgb24gYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AuIFNwZWNpZmljYWxseSwgaXQgdGFyZ2V0cyB0aGUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrOiBgIXBtZF9ub25lKHBtZClgIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcChcdTAwMjZwbWQsIGFkZHIpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBudWxsIHBvaW50ZXIgY2hlY2sgb3IgZ3VhcmQuIEl0J3MgcHJvdGVjdGluZyBhZ2FpbnN0IHBvdGVudGlhbCBkZXJlZmVyZW5jaW5nIG9mIGFuIGludmFsaWQgcG1kLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gdGhpbmtpbmcgdGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBhIGNyYXNoIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHBhZ2UgbWFwIGRpcmVjdG9yeSAocG1kKSBpcyBzb21laG93IHVuaW5pdGlhbGl6ZWQgb3IgZG9lc24ndCBhY3R1YWxseSBleGlzdCBmb3IgYSBnaXZlbiBhZGRyZXNzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gYHBtZGAgYmVpbmcgaW4gdGhpcyBzdGF0ZSwgYW5kIHdoYXQgdGhlIG9yaWdpbmFsIGFzc3VtcHRpb24gd2FzLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZSBwbWQgY2FuIGJlIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGhlcmUsIGJ1dCB0aGlzIGlzIGltbWVkaWF0ZWx5IG1ha2luZyBtZSB0aGluayB0aGF0IGl0J3MgYSBnb29kIHNhZmV0eSBjaGVjaywgZXNwZWNpYWxseSBpbiB0aGF0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjA4LjY5OTkyOTA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY4MTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzowOC43NDg2MTcyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc5MzQ3MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjc0LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMuIFRoaXMgY291bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRlYnVnIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGdvaW5nIG9uIGF0IGxpbmUgMjc0LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoxMS41Mjc5NjczNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX3RhYmxlX2NoZWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfc2V0KHB1ZF9wZm4ocHVkKSwgc3RyaWRlICogbnIsIHB1ZF93cml0ZShwdWQpKTtcXG4gMjcxOlxcdH1cXG4gMjcyOlxcdEVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcbiAyNzY6XFx0XFx0XFx0XFx0XFx0XFx0cG1kX3QgcG1kKVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0aWYgKFxcdTAwMjZpbml0X21tID09IG1tKVxcbiAyNzk6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRpZiAoIXBtZF9ub25lKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9iYWQocG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2xlYWYocG1kKSkge1xcbiAyODI6XFx0XFx0XFx0cHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X21hcChcXHUwMDI2cG1kLCBhZGRyKTtcXG4gMjgzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0aWYgKFdBUk5fT04oIXB0ZXApKVxcbiAyODY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyODc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBUUlNfUEVSX1BURTsgaSsrKSB7XFxuIDI4ODpcXHRcXHRcXHRcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwX2dldChwdGVwKSk7XFxuIDI4OTpcXHRcXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG4gMjkwOlxcdFxcdFxcdFxcdHB0ZXArKztcXG4gMjkxOlxcdFxcdFxcdH1cXG4gMjkyOlxcdFxcdFxcdHB0ZV91bm1hcChwdGVwIC0gUFRSU19QRVJfUFRFKTtcXG4gMjkzOlxcdFxcdH1cXG4gMjk0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTEuNTI4MDQ0MTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2ODAxNTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBQYWdlIFRhYmxlIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkg4oCTIHNvbWVvbmUgd2FzIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYCBvbiBhIGBwbWRfbm9uZWAgUE1ELCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IGlkZWFsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpZ2dpbmcgaW50byB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBsb2dpYywgc28gaXQncyBjcml0aWNhbCB0byBlbnN1cmUgaXQncyByb2J1c3QuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHdlIG5lZWQgdG8gZnV6eiB0aGlzIGNoYW5nZSBhZ2dyZXNzaXZlbHkuIFdlIHNob3VsZCB0aHJvdyBldmVyeSBjb25jZWl2YWJsZSBzY2VuYXJpbyBhdCBpdCB0byBmbHVzaCBvdXQgYW55IGVkZ2UgY2FzZXMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIGBQQUdFX1RBQkxFX0NIRUNLYC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpZiB3ZSBuZWVkIHRvIGFjdGl2ZWx5IGNvbmZpZ3VyZSB0aGUga2VybmVsIHRvIHRyaWdnZXIgdGhpcyBuZXcsIGltcHJvdmVkIGNoZWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBpdHMgaW1wYWN0IGlzIGtleSBiZWZvcmUgSSBkaXZlIGluIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MTQuNTk2MDYzMTc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzUzMTEwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTIxLVxcbm1tL0tjb25maWcuZGVidWc6MTIyOmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMjMtXFx0Ym9vbCBcXFwiQ2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTM1LVxcbm1tL0tjb25maWcuZGVidWc6MTM2OmNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzctXFx0Ym9vbCBcXFwiRW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoxNy41MzEzODE5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQxNjA4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZGVidWdnaW5nLCBzbyBsZXQncyB6ZXJvIGluIG9uIGBtbS9LY29uZmlnLmRlYnVnYC4gSSBrbm93IHRoYXQgZmlsZSB1c3VhbGx5IGhvdXNlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG9wdGlvbnMsIGFuZCBnaXZlbiBteSBleHBlcnRpc2UsIEknbSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0byBiZSBwcmVzZW50LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgdmljaW5pdHkgb2YgbGluZSAxMjIsIGFzIHRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyByZWxhdGVkIG9wdGlvbnMuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgcGFydGljdWxhciBhcmVhIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZmluZXIgcG9pbnRzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIG9wdGlvbnMuIFBlcmhhcHMgc3BlY2lmaWMgZmxhZ3Mgb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGluIHRoYXQgcmVnaW9uLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MjAuNzQ1NTQ1OTg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxuIDEyMzpcXHRcXHRib29sIFxcXCJDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gMTI2OlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAxMjc6XFx0XFx0aGVscFxcbiAxMjg6XFx0XFx0ICBDaGVjayB0aGF0IGFub255bW91cyBwYWdlIGlzIG5vdCBiZWluZyBtYXBwZWQgdHdpY2Ugd2l0aCByZWFkIHdyaXRlXFxuIDEyOTpcXHRcXHQgIHBlcm1pc3Npb25zLiBDaGVjayB0aGF0IGFub255bW91cyBhbmQgZmlsZSBwYWdlcyBhcmUgbm90IGJlaW5nXFxuIDEzMDpcXHRcXHQgIGVycm9uZW91c2x5IHNoYXJlZC4gU2luY2UgdGhlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgdGltZVxcbiAxMzE6XFx0XFx0ICBlbnRyaWVzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB1c2VyIHBhZ2UgdGFibGVzLCBsZWFraW5nLCBjb3JydXB0aW9uXFxuIDEzMjpcXHRcXHQgIGFuZCBkb3VibGUgbWFwcGluZyBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgc3luY2hyb25vdXNseS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBJZiB1bnN1cmUgc2F5IFxcXCJuXFxcIi5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcXG4gMTM3OlxcdFxcdGJvb2wgXFxcIkVuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMTM4OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xcbiAxMzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyMC43NDU2NTE0NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MDI2OTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYWdlIFRhYmxlIENoZWNrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZW5hYmxlIHNvbWUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIGNoZWNrcy4gTGV0J3Mgc2VlLCBJIG5lZWQgYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gQWgsIGhhbmcgb27igKYgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgIHByZXR0eSBtdWNoIGhhbmRsZXMgdGhlIGVuZm9yY2VtZW50IGFzcGVjdCBhdXRvbWF0aWNhbGx5LCBzbyBpdCBzZWVtcyBJJ20gY292ZXJlZC4gSSB0aGluayBpbiB0aGlzIHNpdHVhdGlvbiBJIHdpbGwgZW5hYmxlIGJvdGggb2YgdGhvc2UgY29uZmlncy5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgb3IgdXRpbGl6ZWQgYW55d2hlcmU7IEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQsIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMzksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyNC4yMDU5MjQ1MThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTUwNjgyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNz12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNzI9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI3NDp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3NS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjI1Ljk2MTAwMDMyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA0Njg4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKlRoZSBDb250ZXh0IG9mIENsZWFyaW5nIFBURSBSYW5nZXMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gSW1tZWRpYXRlbHksIEkga25vdyB0aGlzIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHRvIGNoZWNrIGFuZCBwb3RlbnRpYWxseSBjbGVhciBhIHJhbmdlIG9mIFBhZ2UgVGFibGUgRW50cmllcyAoUFRFcykuIFRoaXMgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGluIHRoZSB3ZWVkcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgZGVhbGluZyB3aXRoIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMsIGFuZCBwcm9iYWJseSBlbmNvdW50ZXJpbmcgc2l0dWF0aW9ucyB3aGVyZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBuZWVkIHRvIGJlIGludmFsaWRhdGVkIG9yIGZyZWVkLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0OiB3ZSdyZSB2ZXJpZnlpbmcgaWYgY2xlYXJpbmcgYSBQVEUgcmFuZ2UgaXMgYXBwcm9wcmlhdGUsIGFuZCBkb2luZyBpdCBpZiBpdCBpcy4gVGhlICdjaGVjaycgaW1wbGllcyB3ZSBhcmUgZG9pbmcgbW9yZSB0aGFuIGp1c3QgY2xlYXJpbmcgYmxpbmRseS4gVGhlcmUncyBzb21lIHNhZmV0eSBuZXQgaW52b2x2ZWQuIExldCdzIHNlZSB3aGF0IG5lY2Vzc2l0YXRlcyB0aGlzICdjaGVjaycgYW5kIGNsZWFyIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzoyOC44NjU2OTI1ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjM5MzU1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0zMC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD05NT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwMy1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDoxMDQ6c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEwLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjExMTpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwbWQpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTExMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0xNTA9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTQtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xNTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwNjAtXFx0bW1fZGVjX25yX3B0ZXMobW0pO1xcbm1tL2todWdlcGFnZWQuYzoyMDYxOlxcdHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBoYWRkciwgcGd0X3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIwNjItXFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTQ1PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyMS1cXHRcXHRcXHRtbV9kZWNfbnJfcHRlcyhtbSk7XFxubW0va2h1Z2VwYWdlZC5jOjIyMjI6XFx0XFx0XFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMjIzLVxcdFxcdFxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzozMC40ODk2MzM3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjMwNDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVEhQIENvbGxhcHNlIGFuZCBSZXRyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgVEhQIGNvbGxhcHNlIGFuZCByZXRyYWN0aW9uIG1lY2hhbmlzbXMsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aGUgZnVuY3Rpb25zIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2Agd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIG1lY2hhbmlzbXMgSSdtIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHdoZXJlIHRoZXkncmUgY2FsbGVkIGZyb20uIFdhaXQgYSBtaW51dGUsIGJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIHRob3NlLCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byBleGFtaW5lIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGhhdCBsb29rcyBsaWtlIGEgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZ1bmN0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AsIGFuZCB0aGF0IG90aGVyIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzozNC4wNzE5NDEyOTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjM3Njk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NjItXFxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NjQtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTAxPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODQwLVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MTpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4NDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1NzozNS43MzU3MTc5MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzODA3MzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFBhZ2UgVGFibGUgQ29sbGFwc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhZ2UgdGFibGUgY29sbGFwc2luZyBsb2dpYywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBlbnRyeSBwb2ludHMgYXJlIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9maWxlYCwgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gVGhhdCBpbW1lZGlhdGVseSBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgd2hlcmUgdGhpcyBmZWF0dXJlIGlzIHVzZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBhIGZ1bmN0aW9uIGxpa2UgYG1hZHZpc2VgIHdpdGggdGhlIGBNQURWX0NPTExBUFNFYCBmbGFnIGlzIGEgbGlrZWx5IHRyaWdnZXIsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQgYXMgYSBwcmltYXJ5IHVzZSBjYXNlLiBUbyBkZWx2ZSBmdXJ0aGVyLCBJIHRoaW5rIGNoZWNraW5nIG91dCB0aGUgYHJldHJhY3RfcGFnZV90YWJsZXNgIGZ1bmN0aW9uIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSXQgc2VlbXMgbGlrZSBpdCB3aWxsIGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGJlaGF2aW9yIG9mIHdoYXQncyBoYXBwZW5pbmcuIEnigJlsbCBzdGFydCBkaWdnaW5nIGludG8gdGhhdCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6MzkuMTczNzk0NjE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA2Mjc3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJldHJhY3RfcGFnZV90YWJsZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD01NjI9YXJlIGV4dHJhIHJlcXVpcmVtZW50cyBmb3IgYWNjZXNzaW5nIHRoZW06XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTU2Ny0gIHJtYXAgbG9jayBmb3IgcmVhZGluZyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBQVEUgYW5kIFBNRCBwYWdlIHRhYmxlIGxvY2tzLlxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NTY4OiAgSW4gcGFydGljdWxhciwgdGhpcyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYCB3aGVuIGhhbmRsaW5nXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NjktICA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC01NzgtICBjYW4gdGFrZSB0aGUgUE1EIGxvY2sgYW5kIHJldmFsaWRhdGUgdGhhdCB0aGUgY29udGVudHMgb2YgcG1kIGVudHJ5IHN0aWxsIG1lZXRcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjU3OTogIHRoZSByZXF1aXJlbWVudHMuIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBoYXBwZW5zIGluIDpjOmZ1bmM6YCFyZXRyYWN0X3BhZ2VfdGFibGVzYFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNTgwLSAgd2hlbiBoYW5kbGluZyA6YzptYWNybzpgIU1BRFZfQ09MTEFQU0VgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD03MjY9Y2xlYXJlZCB3aXRob3V0IHBhZ2UgdGFibGUgbG9ja3MgKGluIHRoZSA6YzpmdW5jOmAhcGdkX2NsZWFyYCwgOmM6ZnVuYzpgIXA0ZF9jbGVhcmAsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTczMC0gICAgICAgICAgdGhlIHBhZ2UgdGFibGVzIGFib3ZlIGl0IGFzIGlzIGRvbmUgYnlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjczMTogICAgICAgICAgOmM6ZnVuYzpgIXJldHJhY3RfcGFnZV90YWJsZXNgLCB3aGljaCBpcyBwZXJmb3JtZWQgdW5kZXIgdGhlIGlfbW1hcFxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNzMyLSAgICAgICAgICByZWFkIGxvY2ssIFBNRCwgYW5kIFBURSBwYWdlIHRhYmxlIGxvY2tzLCB3aXRob3V0IHRoaXMgbGV2ZWwgb2YgY2FyZS5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE5MDMtXFx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxcbm1tL2todWdlcGFnZWQuYzoxOTA0OlxcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cXG5tbS9raHVnZXBhZ2VkLmMtMTkwNS1cXHQgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTA4PXN0YXRpYyBib29sIGZpbGVfYmFja2VkX3ZtYV9pc19yZXRyYWN0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTQ0LVxcbm1tL2todWdlcGFnZWQuYzoyMTQ1OnN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxubW0va2h1Z2VwYWdlZC5jLTIxNDYte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNTQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjI2MzY6XFx0cmV0cmFjdF9wYWdlX3RhYmxlcyhtYXBwaW5nLCBzdGFydCk7XFxubW0va2h1Z2VwYWdlZC5jLTI2MzctXFx0aWYgKGNjIFxcdTAwMjZcXHUwMDI2ICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG4tLVxcbm1tL21lbW9yeS5jPTEzMDY9Y29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy0xMzQyLVxcdCAqIFdlIGFscmVhZHkgaG9sZCB0aGUgZXhjbHVzaXZlIG1tYXBfbG9jaywgdGhlIGNvcHlfcHRlX3JhbmdlKCkgYW5kXFxubW0vbWVtb3J5LmM6MTM0MzpcXHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkgYXJlIHVzaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEgdG8gYmUgZXhjbHVzaXZlLCBzb1xcbm1tL21lbW9yeS5jLTEzNDQtXFx0ICogdGhlIFBURSBwYWdlIGlzIHN0YWJsZSwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ2V0IHBtZHZhbCBhbmQgZG9cXG4tLVxcbm1tL21yZW1hcC5jPTE5Nz1zdGF0aWMgaW50IG1vdmVfcHRlcyhzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbi0tXFxubW0vbXJlbWFwLmMtMjQ4LVxcdCAqIHRoaXMgYnkgdHJhdmVyc2luZyBmaWxlLVxcdTAwM2VmX21hcHBpbmcsIHNvIHRoZXJlIGlzIG5vIGNvbmN1cnJlbmN5IHdpdGhcXG5tbS9tcmVtYXAuYzoyNDk6XFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpLiBJbiBhZGRpdGlvbiwgd2UgYWxyZWFkeSBob2xkIHRoZSBleGNsdXNpdmVcXG5tbS9tcmVtYXAuYy0yNTAtXFx0ICogbW1hcF9sb2NrLCBzbyB0aGlzIG5ld19wdGUgcGFnZSBpcyBzdGFibGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjQwLjg4MDA4MTcxMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU3NTcwNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIFRhYmxlIENsZWFyaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBwYWdlIHRhYmxlcyBnZXQgY2xlYXJlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgY2FsbGluZyBgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgKmFsc28qIGNhbGxlZCBmcm9tIHdpdGhpbiBpdHNlbGY/IE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBBZnRlciBhIHF1aWNrIGxvb2ssIEkgc2VlIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgYWN0dWFsbHkgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oYCwgYW5kIGl0J3MgdGhlIGlubGluZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYC4gVGltZSB0byBleGFtaW5lIHRoYXQgaGVhZGVyIGZpbGUgbW9yZSBjbG9zZWx5IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gYXQgdGhhdCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo0NS4wMzc2NTY3OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcbiAxMDE6XFx0XFx0X19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KG1tLCBhZGRyLCBwdWRwLCBwdWQsIG5yKTtcXG4gMTAyOlxcdH1cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiAxMDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwbWRfdCBwbWQpXFxuIDEwNzpcXHR7XFxuIDEwODpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnBhZ2VfdGFibGVfY2hlY2tfZGlzYWJsZWQpKVxcbiAxMDk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBhZGRyLCBwbWQpO1xcbiAxMTI6XFx0fVxcbiAxMTM6XFx0XFxuIDExNDpcXHQjZWxzZVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiAxMTc6XFx0e1xcbiAxMTg6XFx0fVxcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU3OjQ1LjAzNzc0MTM3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkyNjAzOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBQYWdlIFRhYmxlIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBUaGUgYWRkaXRpb24gb2YgdGhlIGAhcG1kX25vbmUocG1kKWAgY2hlY2sgcmVhbGx5IHN0YW5kcyBvdXQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcHJldmVudGluZyBlaXRoZXIgYSBzeXN0ZW0gY3Jhc2ggb3IgYSB3YXJuaW5nIGNvbmRpdGlvbiB3aGVuIGBwbWRfbm9uZShwbWQpYCBpcyBlbmNvdW50ZXJlZC4gVGhhdCdzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgZ3VhcmQsIEknZCBzYXkuXG5cblRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBtbS9raHVnZXBhZ2VkLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgLiBBcmUgdGhleSBzdGF0aWNhbGx5IGRlZmluZWQsIG9yIGFyZSB0aGV5IGV4cG9ydGVkPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgbGlua2FnZSB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cy5cblxuSG1tbSwgaXQgbG9va3MgbGlrZSBib3RoIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIHN0YXRpYywgd2hpY2ggbWFrZXMgdGhpcyBhIGJpdCBzaW1wbGVyIHRvIGZvbGxvdy4gSG93ZXZlciwgd2FpdCwgaXNuJ3QgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBleHBvcnRlZCwgb3IgYW0gSSBtaXN0YWtlbj8gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NDkuMzMwMzQ3Njg1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY1MDEzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE5PWV4dGVybiBib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMDp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDU6c3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ2LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQ5OT1pbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy01OTktXFx0aWYgKHJldCBcXHUwMDNlIDApXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NjAwOlxcdFxcdGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCB2YWRkciwgZmFsc2UpO1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTYwMS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODI3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NjItXFxubW0va2h1Z2VwYWdlZC5jOjE4NjM6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NjQtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDg5LS8qKlxcbm1tL2todWdlcGFnZWQuYzoyMDkwOiAqIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwIC0gVHJ5IHRvIGNvbGxhcHNlIGEgcHRlLW1hcHBlZCBUSFAgZm9yIG1tIGF0XFxubW0va2h1Z2VwYWdlZC5jLTIwOTEtICogYWRkcmVzcyBoYWRkci5cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMTAwLSAqL1xcbm1tL2todWdlcGFnZWQuYzoyMTAxOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjEwMi1cXHRcXHRib29sIGluc3RhbGxfcG1kKVxcbm1tL2todWdlcGFnZWQuYy0yMTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6MjEwNDpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwNS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMy1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYzNDpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzUtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODQwLVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6Mjg0MTpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4NDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo1MC45OTUzNjk2OTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MjYzMzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVEhQIENvbGxhcHNlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFyZSBoYW5kbGVkIGR1cmluZyBtZW1vcnkgY29sbGFwc2Ugb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGlzbid0IGRlY2xhcmVkIHN0YXRpYywgbWVhbmluZyBpdCBjYW4gcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gT24gdGhlIG90aGVyIGhhbmQsIGBjb2xsYXBzZV9maWxlYCAqaXMqIHN0YXRpYywgaW1wbHlpbmcgaXRzIHVzZSBpcyByZXN0cmljdGVkIHRvIHRoZSBmaWxlLWJhY2tlZCBtZW1vcnkgY29sbGFwc2UgcHJvY2VkdXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBgbWFkdmlzZV9jb2xsYXBzZWAgYWN0dWFsbHkgY2FsbHMuIEkga25vdyBgbWFkdmlzZV9jb2xsYXBzZWAgaXMgZGVmaW5lZCBpbiBgbW0vbWFkdmlzZS5jYCwgc28gSSdsbCBnbyBhaGVhZCBhbmQgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHRvIHNlZSBpZiBpdCBjYWxscyBlaXRoZXIgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBvciBgY29sbGFwc2VfZmlsZWAsIG9yIGJvdGgsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBjYWxsIGNoYWluIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODYxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTQuNDU4MDA2NTc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NTgxMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sbGFwc2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTM0Nj1BIGhpZ2hlciB2YWx1ZSBtYXkgaW5jcmVhc2UgbWVtb3J5IGZvb3RwcmludCBmb3Igc29tZSB3b3JrbG9hZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMzUzLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdDozNTQ6ICAgQ3VycmVudGx5LCBtYWR2aXNlX2NvbGxhcHNlIG9ubHkgc3VwcG9ydHMgY29sbGFwc2luZyB0byBQTUQtc2l6ZWQgVEhQc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTUtICAgYW5kIGRvZXMgbm90IGF0dGVtcHQgbVRIUCBjb2xsYXBzZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01MTE9aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cXHRcXHQgICAgIGludCBhZHZpY2UpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMzppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTQtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcxMj1zdGF0aWMgaW5saW5lIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE3LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxODpzdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxOS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMxNTc9Ym9vbCBjdXJyZW50X2lzX2todWdlcGFnZWQodm9pZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMTYxLVxcbm1tL2todWdlcGFnZWQuYzozMTYyOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxubW0va2h1Z2VwYWdlZC5jLTMxNjMte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxOTMtXFxubW0va2h1Z2VwYWdlZC5jOjMxOTQ6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0va2h1Z2VwYWdlZC5jLTMxOTUtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMyODEtXFx0cmV0dXJuIHRocHMgPT0gKChoZW5kIC0gaHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBIUEFHRV9QTURfU0hJRlQpID8gMFxcbm1tL2todWdlcGFnZWQuYzozMjgyOlxcdFxcdFxcdDogbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhsYXN0X2ZhaWwpO1xcbm1tL2todWdlcGFnZWQuYy0zMjgzLX1cXG4tLVxcbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM2My1cXHRjYXNlIE1BRFZfQ09MTEFQU0U6XFxubW0vbWFkdmlzZS5jOjEzNjQ6XFx0XFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxubW0vbWFkdmlzZS5jLTEzNjUtXFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MjM0PXN0YXRpYyB2b2lkIGZpbGxfbWVtb3J5KGludCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ3LSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyNDg6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ5LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNjY9c3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc5LVxcdGtzZnRfcHJpbnRfbXNnKFxcXCJBbGxvY2F0ZSBodWdlIHBhZ2UuLi5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MjgwOlxcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgxLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTUxMD1zdGF0aWMgYm9vbCBpc19hbm9uKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1MTU6c3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTE2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MzgtXFx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUzOTpcXHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTQwLVxcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTQ5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTA6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1MS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1NS1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTU2OlxcdF9fbWFkdmlzZV9jb2xsYXBzZShtc2csIHAsIG5yX2hwYWdlcywgb3BzLCBleHBlY3QpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTY3OT1zdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjY4MDpcXHQuY29sbGFwc2UgPSBcXHUwMDI2bWFkdmlzZV9jb2xsYXBzZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjgxLVxcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEwNzU9c3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExMzM6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTM0LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0My1cXHQvKiBjLVxcdTAwM2Vjb2xsYXBzZSgpIHdpbGwgZmluZCBhIGh1Z2VwYWdlIGFuZCBjb21wbGFpbiAtIGNhbGwgZGlyZWN0bHkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExNDQ6XFx0X19tYWR2aXNlX2NvbGxhcHNlKFxcXCJSZS1jb2xsYXBzZSBQTUQtbWFwcGVkIGh1Z2VwYWdlXFxcIiwgcCwgMSwgb3BzLCB0cnVlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE0NS1cXHR2YWxpZGF0ZV9tZW1vcnkocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTEzMTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzI6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDMzOlxcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xNDM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1Nzo1Ni4xMzM1OTUyNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMzE1OTE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHBlcnRpbmVudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAgc2VlbXMgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUuIEkgYWxzbyB0aGluayBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIGltcG9ydGFudCB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQuIEhtbSwgYnV0IGhhbmcgb24uLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGByZXRyYWN0X3BhZ2VfdGFibGVzYCBpcyBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCdzIHJlbGV2YW50LiBOb3csIGlzIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYWxzbyBzdGF0aWM/IE5vLCBubyBpdCdzIG5vdC4gSSByZW1lbWJlciBub3cgdGhhdCBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGAuIEludGVyZXN0aW5nLiBBbmQsIHdoaWxlIEknbSBhdCBpdCwgSSBqdXN0IHJlbWVtYmVyZWQgdGhhdCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgZXhwb3J0ZWQgYW5kIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLiBOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTc6NTkuNjM2NzU3NTQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk1NjMxNjMyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1ODowMi40MzI0MDAwMDFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MTU2NTQzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJICpzd2VhciogSSBqdXN0IGdsYW5jZWQgYXQgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AgYW5kIHNhdyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBFWFBPUlRfU1lNQk9MKF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldClgIG1hY3JvLiBUaGF0J3MgZ290IG1lIHRoaW5raW5nLiBJdCdzIHRpbWUgdG8gcmV2aXNpdCB0aGF0IGZpbGUsIGRpdmUgZGVlcGVyLCBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgc3ltYm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBMZXQncyBnZXQgYmFjayB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowNi4xNDgwNTkyNDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfdGFibGVfY2hlY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0XFx0XFx0XFx0cHRlcCsrO1xcbiAyOTE6XFx0XFx0XFx0fVxcbiAyOTI6XFx0XFx0XFx0cHRlX3VubWFwKHB0ZXAgLSBQVFJTX1BFUl9QVEUpO1xcbiAyOTM6XFx0XFx0fVxcbiAyOTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowNi4xNDgxODg1MjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMTM1MzE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGFuIGV4cG9ydGVkIHN5bWJvbCwgYnV0IGl0ICppcyogbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFJpZ2h0LCByaWdodCwgbGV0J3Mgc2VlLi4uIGEgdXNlZnVsIGZvY3VzIHBvaW50IGhlcmUgY291bGQgYmUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLiBUaGF0IGxvb2tzIHByb21pc2luZy4gQW5kIGFsc28sIGxldCdzIGtlZXAgYW4gZXllIG9uIGBtYWR2aXNlX2NvbGxhcHNlYC4gVGhhdCBjb3VsZCBiZSByZWxldmFudCBhcyB3ZWxsLlxuXG5JIHNob3VsZCBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGZvciBgUEFHRV9UQUJMRV9DSEVDS2AuIExldCdzIHNlZS4uLiBpdCAqZGVwZW5kcyBvbiogYEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS2AsIGFuZCBgRVhDTFVTSVZFX1NZU1RFTV9SQU1gLiBBbHNvLCBpdCAqc2VsZWN0cyogYFBBR0VfRVhURU5TSU9OYC4gUmlnaHQsIHJpZ2h0LiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGF0ZWQ/IEFoLCB5ZXMsIHRoZXJlJ3MgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLlxuXG5Pa2F5LCBuZXh0IHN0b3A6IGxldCdzIGdvIGNoZWNrIG91dCB3aGF0IGBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tgIGlzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTowOS43Nzk1NDQ1MTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTA3NDY2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTc0OT1jb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG4tLVxcbmFyY2gvS2NvbmZpZy0xNzUxLVxcbmFyY2gvS2NvbmZpZzoxNzUyOmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcXG5hcmNoL0tjb25maWctMTc1My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjEyLjA5MDI5ODA0NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU3NDI2NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBhZ2UgVGFibGUgQ2hlY2tpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFib3V0IGVuYWJsaW5nIHNvbWUgcGFnZSB0YWJsZSBjaGVja3MsIHNwZWNpZmljYWxseSBgUEFHRV9UQUJMRV9DSEVDS2AgYW5kIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHNlZW1zIGxpa2UgYW4gYXJjaGl0ZWN0dXJhbCBjaG9pY2UuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIGJpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGBtYWR2aXNlKE1BRFZfQ09MTEFQU0UpYCBvciBga2h1Z2VwYWdlZGAsIGFuZCBpdCBsb29rcyBsaWtlIEknbSByaWdodC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGFsc28gY2FsbGVkIHRocm91Z2ggYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBmcm9tIHdpdGhpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBhbmQgYHJldHJhY3RfcGFnZV90YWJsZXNgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGFyZSB0aGVyZSAqYW55KiBvdGhlciBjYWxsZXJzIG9mIGBwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWA/IE5vcGUsIGxvb2tzIGxpa2UgSSd2ZSBhbHJlYWR5IHNjYW5uZWQgYG1tL2todWdlcGFnZWQuY2AgdGhvcm91Z2hseSwgd2hpY2ggZ2l2ZXMgbWUgY29uZmlkZW5jZSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmc6IHRoZSB0d28gY2FsbGVycyBhcmUgaW5kZWVkIHRoZSBvbmVzIEkga25vdy5cblxuU28sIGJhc2VkIG9uIHRoaXMsIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAuIEknbGwgZ28gYWhlYWQgYW5kIG1ha2Ugc3VyZSB0aGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBub24tc3RhdGljIHRvIGVuc3VyZSBwcm9wZXIgbGlua2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6NTk6MTcuODQ3NzI4MzQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE2ODg4MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtYWR2aXNlX2NvbGxhcHNlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTExPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTItXFx0XFx0ICAgICBpbnQgYWR2aWNlKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MTM6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTE0LVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MTI9c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxNy1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTg6c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTktXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTYyPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE5My1cXG5tbS9raHVnZXBhZ2VkLmM6MzE5NDppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5NS1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjIwLjc2NDYyMzE5N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMzNzI5NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFN0YXRpYy1uZXNzIG9mIFN5c3RlbSBDYWxscyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKipcblxuUmlnaHQsIHNvIEknbSByZXZpc2l0aW5nIGBtYWR2aXNlX2NvbGxhcHNlYC4gVGhlIGNvZGUncyBtYWtpbmcgbWUgZG91YmxlLWNoZWNrIGl0cyBkZWNsYXJhdGlvbi4gWWVwLCBjb25maXJtZWQsIGBtYWR2aXNlX2NvbGxhcHNlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gR29vZC4gTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB3aGF0IEkgZXhwZWN0IHRoZW0gdG8gYmUgdG9vLiBJJ2xsIHZlcmlmeSB0aGF0IGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljIGVpdGhlci4gSSBjYW4ndCBiZSB0b28gY2FyZWZ1bCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIHNvcnRzIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyMy42OTgzNTUyNDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDc2MTY3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE5PWV4dGVybiBib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMDp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDU6c3RhdGljIGlubGluZSB2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ2LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODYzPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtICovXFxubW0va2h1Z2VwYWdlZC5jOjIxMDE6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMTAyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjI2LjMwNTk4MTQyNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDcwNzgyNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCBsZXQncyBwaXZvdCBhbmQgbWFrZSBzdXJlIHdlJ3ZlIGFjY291bnRlZCBmb3IgKmFsbCogdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBga2h1Z2VwYWdlZGAgYW5kIHRoZSBgTUFEVl9DT0xMQVBTRWAgZmVhdHVyZS4gVGhpcyBpcyB0aGUga2luZCBvZiBkZXRhaWwgdGhhdCBjYW4gbWFrZSBvciBicmVhayBhIHN5c3RlbS4gSSdtIHRoaW5raW5nLCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaGlnaGx5IHByb2JhYmxlIHRvIGJlIHJlcXVpcmVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIG5vdGhpbmcgaXMgb3Zlcmxvb2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NjgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OToyOS4zNzY3NjY4MTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjEyNDg1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzQtXFxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM2LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU4LVxcbm1tL0tjb25maWc6ODU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NS1cXG5tbS9LY29uZmlnOjg2NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY3LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3NC1cXG5tbS9LY29uZmlnOjg3NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTEtXFxubW0vS2NvbmZpZzo4OTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAxLVxcbm1tL0tjb25maWc6OTAyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAzLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA5LVxcbm1tL0tjb25maWc6OTEwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTEtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNy1cXG5tbS9LY29uZmlnOjkxODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOS1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM2LVxcbm1tL0tjb25maWc6OTM3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXG5tbS9LY29uZmlnOjk0NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1My1cXG5tbS9LY29uZmlnOjk1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU1LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjEtXFxubW0vS2NvbmZpZzo5NjI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjMtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTozMi4yMzgwMjY3MzFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDU1OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEtlcm5lbCBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIHdlIHN0aWxsIG5lZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgdGhhdCBtdWNoIGhhc24ndCBjaGFuZ2VkLiBOb3csIGxldCdzIHJldmlzaXQgdGhhdCBgUEFHRV9UQUJMRV9DSEVDS2Agb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQncyBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSG1tLCByZWFkaW5nIHRoZSBjb25maWcsIGl0IGxvb2tzIGxpa2UgaXQncyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0J3MgcmlnaHQsIGl0J3MgdGhhdCBcIkNoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcIiBib29sZWFuLiBTbywgdG8gZ2V0IHRoZSBkZXNpcmVkIGJlaGF2aW9yLCBpdCBsb29rcyBsaWtlIEkgbmVlZCAqYm90aCogYFBBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBpdHMgZW5mb3JjZW1lbnQgY29tcGFuaW9uLCBgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRGAuIEdvdHRhIGVuYWJsZSB0aG9zZSB0byBnZXQgZnVsbCBjb3ZlcmFnZS4gQW5kIHNpbmNlIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBjaGVja3MsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgbGl2ZXMg4oCTIHllcCwgaXQncyByaWdodCB3aGVyZSBJIHRob3VnaHQ6IGluIGBtbS9wYWdlX3RhYmxlX2NoZWNrLmNgLiBHb29kLCBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTozNi40NDg1ODk2NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNTU3OTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0zMC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTozOC44NzQxNzcxNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwMTAxOTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBUYWJsZSBDbGVhcmluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gSSd2ZSBhbHJlYWR5IGNoZWNrZWQgYW5kIGZvdW5kIHRoYXQgYHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCAtIHRoYXQncyAqd2l0aG91dCogdGhlIGRvdWJsZSB1bmRlcnNjb3JlIC0gaXMgY2FsbGVkIGZyb20gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGByZXRyYWN0X3BhZ2VfdGFibGVzYC4gSW50ZXJlc3RpbmcuXG5cbldhaXQsIGRpZCBJIGp1c3Qgc2VlIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgaXRzZWxmPyBObywgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGNhbGxzIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCwgbm90IHRoZSBmdW5jdGlvbiB3aXRob3V0IHRoZSBsZWFkaW5nIHVuZGVyc2NvcmVzLlxuXG5BbHJpZ2h0LCB0aGF0IGNsYXJpZmllcyB0aGUgaW1tZWRpYXRlIGNhbGwgZ3JhcGguIE5vdywgdGhlIG5hdHVyYWwgcHJvZ3Jlc3Npb24gaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyYCBpcyBkb2luZy4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo0My42NzUyMDAxM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NDgxMzczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTE2PXZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTc6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTgtXFx0XFx0XFx0XFx0ICBwdGVfdCBwdGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg9Mjc9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0yOC1cXHRcXHRwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oOjI5OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0zMC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD00OT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC01NC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaDo1NTpcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGUpO1xcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTU2LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xMzE9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE0Ny1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTQ4OnZvaWQgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xNDktXFx0XFx0XFx0XFx0ICBwdGVfdCBwdGUpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTU2LX1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTU3OkVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcik7XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE1OC1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yMTA9dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlc19zZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yMjAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yOyBpKyspXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjIyMTpcXHRcXHRfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyKG1tLCBhZGRyICsgUEFHRV9TSVpFICogaSwgcHRlcF9nZXQocHRlcCArIGkpKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjIyLVxcdGlmIChwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2UobW0sIGFkZHIsIHB0ZSkgXFx1MDAyNlxcdTAwMjYgIXB0ZV9zcGVjaWFsKHB0ZSkpXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MjcyPUVYUE9SVF9TWU1CT0woX19wYWdlX3RhYmxlX2NoZWNrX3B1ZHNfc2V0KTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjczLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoyNzQ6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI4Ny1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUFRSU19QRVJfUFRFOyBpKyspIHtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6Mjg4OlxcdFxcdFxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXBfZ2V0KHB0ZXApKTtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMjg5LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo0Ni4xNzAwMjg0MjVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMTcxOTAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gY2hhbmdlZC4gTm93LCBsZXQgbWUgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQQUdFX1RBQkxFX0NIRUNLYCwgYFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdsbCB3YW50IHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBzeW1ib2xzOiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGFuZCBgbWFkdmlzZV9jb2xsYXBzZWAuXG5cblRoZSBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGF0IGZ1bmN0aW9uLiBQcmltYXJpbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBtYWR2aXNlX2NvbGxhcHNlYCBpcyB0aGUgKm9ubHkqIHBhdGguIE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBga2h1Z2VwYWdlZGAgY2FuIGFsc28gdHJpZ2dlciBpdCB0aHJvdWdoIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgb3IgYHJldHJhY3RfcGFnZV90YWJsZXNgLiBSaWdodCwgYGtodWdlcGFnZWRgIGlzIGEga2VybmVsIHRocmVhZCwgc28gaXQncyBub3QgYSBkaXJlY3Qgc3lzY2FsbCwgYnV0IGl0ICpkb2VzKiBzY2FuIG1lbW9yeS4gYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgIGlzIGEgbW9yZSBkaXJlY3QgdHJpZ2dlciwgb2J2aW91c2x5LlxuXG5Ob3csIEknbGwgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFBBR0VfVEFCTEVfQ0hFQ0tgLiBJdCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tgIGFuZCBhbHNvIGBFWENMVVNJVkVfU1lTVEVNX1JBTWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYEVYQ0xVU0lWRV9TWVNURU1fUkFNYCBzZXR0aW5nIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTU4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjU5OjUwLjk5MTc1MDU1OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzQ1MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MDA9Y29uZmlnIE1FTU9SWV9JU09MQVRJT05cXG4tLVxcbm1tL0tjb25maWctNTA1LSMgL2Rldi9tZW0uXFxubW0vS2NvbmZpZzo1MDY6Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxubW0vS2NvbmZpZy01MDctXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo1My40MDUyMTM0NzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNzIyNjgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQYWdlIFRhYmxlIENoZWNrIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGRlZl9ib29sIHlgLCB3aGljaCBtZWFucyB3ZSBoYXZlIGEgYm9vbGVhbiBkZWZpbml0aW9uIHNldC4gU3BlY2lmaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlJ3JlIGNvbmNlcm5lZCB3aXRoIGFyZSBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE15IHRhc2sgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAsIGNhbiBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEkga25vdyB0aGF0IGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBgcmV0cmFjdF9wYWdlX3RhYmxlc2AgYXJlIGtleSBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFuZCB0aGF0IHRoZXkgcmVzaWRlIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYC4gQSBrZXkgZmFjdG9yLCB0aG91Z2gsIGlzIHRoYXQgYG1tL2todWdlcGFnZWQuY2AgaXRzZWxmIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGEgZGlyZWN0IHBhdGggdGhyb3VnaCB0aG9zZSBmdW5jdGlvbnMgd2l0aG91dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFwcGVhcnMgdW5saWtlbHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgZ3JhcGggYW5kIGV4cGxvcmUgYWx0ZXJuYXRlIHBhdGhzLCBjb25zaWRlcmluZyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBNeSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgY29tZXMgaW50byBwbGF5IGFzIEkgcHJvY2VlZCB0byBleGFtaW5lIHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzo1OTo1Ny42MzI0NDU0MzhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTk1MzU0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI1ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQxOS1cXHRcXHRcXHQvKlxcbm1tL2todWdlcGFnZWQuYzoyNDIwOlxcdFxcdFxcdCAqIGtodWdlcGFnZWQgb25seSB3b3JrcyBvbiBjbGVhbiBmaWxlLWJhY2tlZCBmb2xpb3MsXFxubW0va2h1Z2VwYWdlZC5jLTI0MjEtXFx0XFx0XFx0ICogc28gdGhpcyBmb2xpbyBpcyBkaXJ0eSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIGZsdXNoZWRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yNjY9c3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc1LVxcdCAqIHdoaWxlIHRoZSBmb3JtZXIgbWlnaHQgY2F1c2UgTUFEVl9DT0xMQVBTRSB0byByYWNlIHdpdGhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6Mjc2OlxcdCAqIGtodWdlcGFnZWQgb24gbG93LWxvYWQgc3lzdGVtIChsaWtlIGEgdGVzdCBtYWNoaW5lKSwgd2hpY2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjc3LVxcdCAqIHdvdWxkIGNhdXNlIE1BRFZfQ09MTEFQU0UgdG8gZmFpbCB3aXRoIEVBR0FJTi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz01ODk9c3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjA5LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjYxMDpcXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNjExLVxcdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz02MjM9c3RhdGljIHZvaWQgbXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02NTAtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjUxOlxcdCAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02NTItXFx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTExNzg9c3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTg4LVxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdG1vdW50ZWQgd2l0aCBodWdlPWFkdmlzZSBvcHRpb24gZm9yIGtodWdlcGFnZWQgdGVzdHMgdG8gd29ya1xcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjExODk6XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcblxcXFx0bXRocF9raHVnZXBhZ2VkIG9ubHkgc3VwcG9ydHMgYW5vbiBtZW1fdHlwZSBub3cuXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTE5MC1cXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXG5cXFxcdFN1cHBvcnRlZCBPcHRpb25zOlxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjAwLjIzMTk4Njk4MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE5MjM3MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEh1Z2VwYWdlIENvbXBpbGF0aW9uIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBga2h1Z2VwYWdlZC5vYCBtb2R1bGUgaXMgb25seSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlnLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBjb3JlIG9mIHRoZSB0cmFuc3BhcmVudCBodWdlcGFnZSBpbXBsZW1lbnRhdGlvbi5cblxuU28sIGluIHRlcm1zIG9mIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCB3ZSdyZSBsb29raW5nIGF0OiBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYCwgYW5kIG9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIHJlbGF0aW9uc2hpcHMuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiBzb21lIGtleSBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb24gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgLCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBhbmQgYG1hZHZpc2VfY29sbGFwc2VgLiBUaGVzZSBzb3VuZCBsaWtlIHRoZXkncmUgY3JpdGljYWwgZm9yIHRoZSBwYWdlIHRhYmxlIGludGVncml0eSBjaGVja3MsIGh1Z2VwYWdlIGNvbGxhcHNpbmcsIGFuZCBtYWR2aXNlLWJhc2VkIG1lbW9yeSBtYW5hZ2VtZW50LCByZXNwZWN0aXZlbHkuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXkgaW50ZXJhY3QgaXMgaW1wb3J0YW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbCBncmFwaC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIGJlaW5nIHVzZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGZ1cnRoZXIgY29udGV4dCBmb3IgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkzNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNDowMDowNC4yNTEyMjg3MzRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTg1ODc4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaD0yNz12b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdWRzX3NldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTI4LVxcdFxcdHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6Mjk6dm9pZCBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oLTMwLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZV90YWJsZV9jaGVjay5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaC0xMTAtXFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmg6MTExOlxcdF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBtZCk7XFxuaW5jbHVkZS9saW51eC9wYWdlX3RhYmxlX2NoZWNrLmgtMTEyLX1cXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0yNzI9RVhQT1JUX1NZTUJPTChfX3BhZ2VfdGFibGVfY2hlY2tfcHVkc19zZXQpO1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0yNzMtXFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjI3NDp2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTI3NS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjA2LjY0OTgyMzc4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTUxMjYxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBDcml0aWNhbCBQYXRjaCoqXG5cbk9rYXksIG5vIG90aGVyIGluY29taW5nIGNhbGxzIGZvciBub3csIGdvb2QuIFRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBzdW1tYXJ5IGNsZWFybHkgaW5kaWNhdGVzIGEgY3JpdGljYWwgYnVnIGZpeCBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAuIFRoZSBjb3JlIGlzc3VlIGlzIGBwdGVfb2Zmc2V0X21hcGAgYmVpbmcgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgZWFzaWx5IGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgYSBoYXJkLXRvLWRlYnVnIHdhcm5pbmcsIGFuZCB0aGF0IHNvcnQgb2YgYnVnIGlzIGFic29sdXRlbHkgdGhlIGtpbmQgd2UgbmVlZCB0byBjYXRjaCBlYXJseS4gVGhlIGNvZGUgbWVudGlvbnMgdGhpcyBoYXBwZW5pbmcgZHVyaW5nIFRIUCBjb2xsYXBzZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBga2h1Z2VwYWdlZGAgYW5kIHdoZW4gc29tZW9uZSB1c2VzIGBtYWR2aXNlX2NvbGxhcHNlYC5cblxuUmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgc3RyYXRlZ3kuXG5cbmBXb3J0aEZ1enppbmc6IHRydWVgIC0gT2J2aW91c2x5LiBObyBxdWVzdGlvbiB0aGVyZS5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uLiBJJ2xsIG5lZWQgdG8gZm9jdXMgdGhlIGZ1enplciBvbjpcblxuKiAgIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYDogVGhlIGZpeCBpdHNlbGYuIEdvdHRhIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXG4qICAgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYDogVEhQIGNvbGxhcHNlIGlzIHdoYXQgdHJpZ2dlcnMgdGhlIGlzc3VlLCBzbyB3ZSBuZWVkIHRvIGhpdCB0aG9zZSBjYWxsIHNpdGVzLlxuKiAgIGBtYWR2aXNlX2NvbGxhcHNlYDogQXMgd2l0aCBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIHRoaXMgaXMgYSBwb3RlbnRpYWwgdHJpZ2dlciBmb3IgdGhlIGJ1Zy5cblxuQW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgc2V0IGZvciB0aGUgZnV6emluZyBydW46XG5cbiogICBgUEFHRV9UQUJMRV9DSEVDS2AsIGBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEYDogVGhpcyB3aWxsIGVuYWJsZSB0aGUgY2hlY2tzIHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBmaXguXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYDogVEhQIGlzIHRoZSBjb250ZXh0LCBzbyB3ZSBuZWVkIHRvIGVuYWJsZSBUSFAuXG5cblRoZSByZWFzb25pbmcgaXMgc291bmQ6IHRoZSBwYXRjaCBwcmV2ZW50cyBgcHRlX29mZnNldF9tYXBgIGZyb20gYmVpbmcgY2FsbGVkIG9uIGEgYmFkIGBwbWRgLiBJdCdzIGNydWNpYWwgd2UgZnV6eiBib3RoIHRoZSBmaXggKmFuZCogdGhlIGNhbGxlcnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCBvdXQgaWYgdGhlIGZpeCBoYXMgaG9sZXMgb3IgaW50cm9kdWNlIG5ldyBvbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcyMSwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MTMuODQ0OTU0NTI2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzc0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLXCIsXG4gICAgXCJQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VcIixcbiAgICBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gICAgXCJtYWR2aXNlX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIHdoZXJlIGBwdGVfb2Zmc2V0X21hcGAgY291bGQgYmUgY2FsbGVkIG9uIGEgYHBtZF9ub25lYCBwbWQsIHdoaWNoIG1pZ2h0IGxlYWQgdG8gYSBjcmFzaCBvciB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgVEhQIGNvbGxhcHNlIG9wZXJhdGlvbnMgKGUuZy4sIHZpYSBga2h1Z2VwYWdlZGAgb3IgYG1hZHZpc2UoTUFEVl9DT0xMQVBTRSlgKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tcIixcbiAgICBcIlBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZVwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgd2hlcmUgYHB0ZV9vZmZzZXRfbWFwYCBjb3VsZCBiZSBjYWxsZWQgb24gYSBgcG1kX25vbmVgIHBtZCwgd2hpY2ggbWlnaHQgbGVhZCB0byBhIGNyYXNoIG9yIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBUSFAgY29sbGFwc2Ugb3BlcmF0aW9ucyAoZS5nLiwgdmlhIGBraHVnZXBhZ2VkYCBvciBgbWFkdmlzZShNQURWX0NPTExBUFNFKWApLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXJzIHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjEzLjk5NDc0MDA0WiIsIlNlcSI6NDksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk0NjY1MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MTMuOTk1NDI4MzhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzY5Mzk3MjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwbWRfbm9uZShwbWQpYCBjaGVjayBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYC4gVGhpcyBwcmV2ZW50cyBtYXBwaW5nIGFuZCBhY2Nlc3NpbmcgUFRFcyBmcm9tIGFuIGVtcHR5IFBNRCwgd2hpY2ggd291bGQgbGlrZWx5IHJlc3VsdCBpbiBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIGEgY3Jhc2gsIG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3IgYnkgbm9ybWFsIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYzRjNDk2NjgyM2ExYWZiNDQ1NmU4MmZlNjQxODhmZjkzMTIwZDk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6NTc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmMgYi9tbS9wYWdlX3RhYmxlX2NoZWNrLmNcbmluZGV4IDZmZmM1MzYzNTljZDAuLmVkM2UxYTc2ZjI2NjQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3RhYmxlX2NoZWNrLmNcbisrKyBiL21tL3BhZ2VfdGFibGVfY2hlY2suY1xuQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRpZiAoXHUwMDI2aW5pdF9tbSA9PSBtbSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4rXHRpZiAoIXBtZF9ub25lKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfYmFkKHBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfbGVhZihwbWQpKSB7XG4gXHRcdHB0ZV90ICpwdGVwID0gcHRlX29mZnNldF9tYXAoXHUwMDI2cG1kLCBhZGRyKTtcbiBcdFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDQ6MDA6MTMuOTk1NDI5NzRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5Mzk0OTEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGFnZSBUYWJsZSBDaGVjayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3BhZ2VfdGFibGVfY2hlY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYSBgIXBtZF9ub25lKHBtZClgIGNoZWNrIGJlZm9yZSBjYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAuICBDdXJyZW50bHksIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgUE1EIGlzICpub3QqIGJhZCBhbmQgKm5vdCogYSBsZWFmLiBOb3cgaXQgYWRkcyBhIGNoZWNrIHRoYXQgaXQncyAqbm90KiBub25lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrPyBCdXQsIGFmdGVyIGEgbW9tZW50LCBJIHJlYWxpemUgdGhhdCBgcG1kX25vbmUocG1kKWAgbWVhbnMgdGhlIFBNRCBlbnRyeSBpcyBlbXB0eSDigJMgaXQgaGFzbid0IGJlZW4gcG9wdWxhdGVkIHdpdGggYW55IFBURXMgeWV0LiBDYWxsaW5nIGBwdGVfb2Zmc2V0X21hcGAgb24gYW4gZW1wdHkgUE1EIGlzIGp1c3QgcGxhaW4gd3JvbmcsIGFuZCBhIHRleHRib29rIGNhdXNlIGZvciBhIGNyYXNoIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBJdCdzIGxpa2VseSB0cnlpbmcgdG8gZGVyZWZlcmVuY2UgYW4gaW52YWxpZCBvciB1bm1hcHBlZCBtZW1vcnkgbG9jYXRpb24uIEnigJltIHRoaW5raW5nIHBhZ2UgZmF1bHRzLCBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIGl0Li4uIHN0YW5kYXJkIGtlcm5lbCBjaGVja3Mgd291bGQgcHJvYmFibHkgdHJpcC4gSXQncyBhIHByb3RlY3Rpb24gYWdhaW5zdCBtZW1vcnkgYWNjZXNzIGlzc3VlcyByYXRoZXIgdGhhbiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqY29udGVudHMqLiBJdOKAmXMgYSBjbGFzc2ljIGxvZ2ljYWwgYnVnLlxuXG5UaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UgaGVyZS4gIFRoaXMgaXMgYWJvdXQgKnByZXZlbnRpbmcqIGludmFsaWQgbWVtb3J5IGFjY2Vzcywgbm90IGFib3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFNvLCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyBjb3JyZWN0LiAgVGhpcyBpc27igJl0IHNvbWV0aGluZyBLTVNBTiB3b3VsZCBzcGVjaWZpY2FsbHkgZmxhZy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYnkgcmVyZWFkaW5nIHRoZSBjb250ZXh0LiAgYF9fcGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2VgIGlzIHVzZWQgd2hlbiBjbGVhcmluZyBQVEVzLiBJZiBhIFBNRCBpcyBlbXB0eSwgdGhlcmXigJlzIG5vdGhpbmcgdG8gY2xlYXIuIFNraXBwaW5nIHRoZSBgcG1kX25vbmUocG1kKWAgY2hlY2sgd291bGQgbGV0IHVzIGVuZCB1cCB3aXRoIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuU28sIHllYWgsIGl04oCZcyBub3QgYW4gaXNzdWUgb2YgcmVhZGluZyBnYXJiYWdlLiBUaGUgcHJvYmxlbSBpcyBhIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhbiBhY2Nlc3Mgb2YgYW4gdW5tYXBwZWQgbWVtb3J5IHJlZ2lvbi4gS01TQU4gaXMgbWVhbnQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBLQVNBTiBjYW4gY2F0Y2ggaWxsZWdhbCBtZW1vcnkgdXNhZ2UuIEknbGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGFuZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA0OjAwOjIxLjY4OTM4MTk0MloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGBwbWRfbm9uZShwbWQpYCBjaGVjayBpbiBgX19wYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZWAgYmVmb3JlIGNhbGxpbmcgYHB0ZV9vZmZzZXRfbWFwYC4gVGhpcyBwcmV2ZW50cyBtYXBwaW5nIGFuZCBhY2Nlc3NpbmcgUFRFcyBmcm9tIGFuIGVtcHR5IFBNRCwgd2hpY2ggd291bGQgbGlrZWx5IHJlc3VsdCBpbiBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MsIGEgY3Jhc2gsIG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3IgYnkgbm9ybWFsIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYHBtZF9ub25lKHBtZClgIGNoZWNrIGluIGBfX3BhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlYCBiZWZvcmUgY2FsbGluZyBgcHRlX29mZnNldF9tYXBgLiBUaGlzIHByZXZlbnRzIG1hcHBpbmcgYW5kIGFjY2Vzc2luZyBQVEVzIGZyb20gYW4gZW1wdHkgUE1ELCB3aGljaCB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcywgYSBjcmFzaCwgb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBvciBieSBub3JtYWwga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow45jhw[1] Phase: Succeeded StartedAt: 2026-08-19 04:00:33 +0000 UTC FinishedAt: 2026-08-19 04:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 04:00:33 +0000 UTC FinishedAt: 2026-08-19 04:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2] Phase: Succeeded StartedAt: 2026-08-19 04:00:33 +0000 UTC FinishedAt: 2026-08-19 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 04:00:33 +0000 UTC FinishedAt: 2026-08-19 07:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 04:00:33 +0000 UTC FinishedAt: 2026-08-19 04:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 04:00:33 +0000 UTC FinishedAt: 2026-08-19 04:00:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45jhw/series-workflow45jhw-convert-artifact-2982152448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 04:00:43 +0000 UTC FinishedAt: 2026-08-19 04:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 04:00:43 +0000 UTC FinishedAt: 2026-08-19 04:17:09 +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:*df946e0f-83cc-42b5-9761-6f5471d15d0a,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-workflow45jhw/series-workflow45jhw-convert-artifact-2982152448/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": "a2dbdb16-93cc-40ac-8cc3-7775faa7b9c0", "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-workflow45jhw/series-workflow45jhw-build-action-2412598214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 04:00:43 +0000 UTC FinishedAt: 2026-08-19 04:16:59 +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:*df946e0f-83cc-42b5-9761-6f5471d15d0a,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-workflow45jhw/series-workflow45jhw-convert-artifact-2982152448/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": "a2dbdb16-93cc-40ac-8cc3-7775faa7b9c0", "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-workflow45jhw/series-workflow45jhw-build-action-2412598214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 04:17:09 +0000 UTC FinishedAt: 2026-08-19 04:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 04:17:09 +0000 UTC FinishedAt: 2026-08-19 04:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 04:17:09 +0000 UTC FinishedAt: 2026-08-19 04:17:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 04:17:09 +0000 UTC FinishedAt: 2026-08-19 04:17:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45jhw/series-workflow45jhw-convert-artifact-699112103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 04:17:20 +0000 UTC FinishedAt: 2026-08-19 04:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 04:17:20 +0000 UTC FinishedAt: 2026-08-19 04:19:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a2dbdb16-93cc-40ac-8cc3-7775faa7b9c0,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-workflow45jhw/series-workflow45jhw-build-action-2412598214/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-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 04:19:29 +0000 UTC FinishedAt: 2026-08-19 04:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 04:19:29 +0000 UTC FinishedAt: 2026-08-19 04:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 04:19:29 +0000 UTC FinishedAt: 2026-08-19 04:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 04:19:29 +0000 UTC FinishedAt: 2026-08-19 04:35:53 +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:*df946e0f-83cc-42b5-9761-6f5471d15d0a,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-workflow45jhw/series-workflow45jhw-convert-artifact-699112103/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": "f16b27fe-f3e5-4d6b-b65e-ad186bffd1d4", "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-workflow45jhw/series-workflow45jhw-build-action-2046561323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 04:19:29 +0000 UTC FinishedAt: 2026-08-19 04:35:43 +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:*df946e0f-83cc-42b5-9761-6f5471d15d0a,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-workflow45jhw/series-workflow45jhw-convert-artifact-699112103/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": "f16b27fe-f3e5-4d6b-b65e-ad186bffd1d4", "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-workflow45jhw/series-workflow45jhw-build-action-2046561323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 04:35:53 +0000 UTC FinishedAt: 2026-08-19 04:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 04:35:53 +0000 UTC FinishedAt: 2026-08-19 04:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 04:35:53 +0000 UTC FinishedAt: 2026-08-19 04:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 04:35:53 +0000 UTC FinishedAt: 2026-08-19 04:37:52 +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:*f16b27fe-f3e5-4d6b-b65e-ad186bffd1d4,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-workflow45jhw/series-workflow45jhw-build-action-2046561323/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-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 07:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a2dbdb16-93cc-40ac-8cc3-7775faa7b9c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f16b27fe-f3e5-4d6b-b65e-ad186bffd1d4,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-workflow45jhw/series-workflow45jhw-build-action-2412598214/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-workflow45jhw/series-workflow45jhw-build-action-2046561323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 04:38:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 04:38:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45jhw/series-workflow45jhw-convert-artifact-2947706880/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 04:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 04:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 04:38:02 +0000 UTC FinishedAt: 2026-08-19 04:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 04:38:12 +0000 UTC FinishedAt: 2026-08-19 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45jhw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__page_table_check_pte_clear_range","collapse_pte_mapped_thp","madvise_collapse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_TABLE_CHECK","PAGE_TABLE_CHECK_ENFORCED","TRANSPARENT_HUGEPAGE"],"series_id":"0d08f0e6-5fec-4ff1-851b-82bbd926a574","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 04:38:12 +0000 UTC FinishedAt: 2026-08-19 07:40:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a2dbdb16-93cc-40ac-8cc3-7775faa7b9c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f16b27fe-f3e5-4d6b-b65e-ad186bffd1d4,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-workflow45jhw/series-workflow45jhw-build-action-2412598214/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-workflow45jhw/series-workflow45jhw-build-action-2046561323/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-workflow45jhw/series-workflow45jhw-convert-artifact-2947706880/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,}