Name: series-workflowlmlpr Phase: Succeeded StartedAt: 2026-09-15 04:30:56 +0000 UTC FinishedAt: 2026-09-15 09:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[0] Phase: Succeeded StartedAt: 2026-09-15 04:30:56 +0000 UTC FinishedAt: 2026-09-15 05:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 04:30:56 +0000 UTC FinishedAt: 2026-09-15 05:21:32 +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": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "TRANSPARENT_HUGEPAGE", "SWAP" ], "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": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "TRANSPARENT_HUGEPAGE", "SWAP" ], "series_id": "4be482a0-787d-4579-983b-a64f5ea7314d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__mem_cgroup_large_folio_over_high", "do_huge_pmd_anonymous_page", "swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "baa8de2f3448d1466a888a805c18d01c998fe052", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBmb3IgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiAoVEhQIGFuZCBzd2FwIGNhY2hlKSB1bmRlciBtZW1jZyBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudC4gSXQgaW50cm9kdWNlcyBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkgdG8gcHJldmVudCBub24tYmxvY2tpbmcgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMgZnJvbSBieXBhc3NpbmcgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZywgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIGluIGFub255bW91cyBwYWdlIGZhdWx0cyBhbmQgc3dhcC1pbiBmYXVsdHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1tIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMDRjODU1MTc3MDQ2N2I1ZDIwZWIwNzVjNWE2NzRhMWMwMWY3ZWY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDU6MTk6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggNDZiZjcyNGNhZTdhZi4uZGVmZWYwZDNkNzEwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0MSw2ICYjNDM7OTQxLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcbiB9XG4gXG4mIzQzO2Jvb2wgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xuJiM0MzsgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4mIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgdGFzayYjMzk7cyBvdmVyLWhpZ2ggZGVidCBpcyBtb3JlIHRoYW4gYSBmYXN0IHBhdGggaGVyZSwgaXQgYWxzbyBzY29wZXNcbiYjNDM7ICogdGhlIGNoZWNrIHRvIHRoZSBjYXNlIHRoYXQgaXMgYnJva2VuLiAgVGhlIGRlYnQgaXMgc2V0dGxlZCBhbmQgY2xlYXJlZCBvblxuJiM0MzsgKiBldmVyeSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBhIHRhc2sgZmF1bHRpbmcgbGFyZ2UgZm9saW9zIGZyb20gYVxuJiM0MzsgKiB1c2Vyc3BhY2UgbG9vcCBhbHdheXMgZmluZHMgaXQgemVybyBhbmQga2VlcHMgZ2V0dGluZyB0aGVtIC0gbWVtb3J5LmhpZ2hcbiYjNDM7ICogaXMgZW5mb3JjZWQgZm9yIGl0IG9uIHRoZSB3YXkgb3V0LiAgT25seSBhIGxvb3AgdGhhdCBzdGF5cyBpbiB0aGUga2VybmVsLFxuJiM0MzsgKiB3aGVyZSBub3RoaW5nIHRocm90dGxlcyBhdCBhbGwsIGFjY3J1ZXMgZGVidCBhbmQgcmVhY2hlcyB0aGUgY291bnRlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdGlmIChsaWtlbHkoIWN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gobW0sIGdmcCk7XG4mIzQzO31cbiYjNDM7XG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuQEAgLTEzOTAsNiAmIzQzOzE0MTcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKFxuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIHN0cnVjdCBtZW1fY2dyb3VwICpvb21fZG9tYWluKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNzE0MGExMDMxZmIyZS4uMDU5NTE5NDY1YjI0NCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMzU1LDYgJiM0MzsxMzU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIFRIUCBjaGFyZ2VkIHdpdGggYSBnZnAgdGhhdCBjYW5ub3QgYmxvY2sgZXNjYXBlcyB0aGUgbWVtb3J5LmhpZ2hcbiYjNDM7XHQgKiB0aHJvdHRsaW5nIGluIHRyeV9jaGFyZ2VfbWVtY2coKS4gIERvbiYjMzk7dCBoYW5kIG91dCBvbmUgd2hpbGUgdGhlXG4mIzQzO1x0ICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWRcbiYjNDM7XHQgKiB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZXMgYXMgZG9jdW1lbnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4mIzQzO1x0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuJiM0MztcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyIFx1MDAyNiBIUEFHRV9QTURfTUFTSyk7XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTQ2MGNiYTUzNTg4ZS4uZGQ3YTYyYzNkYWNiMiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjU4Nyw2ICYjNDM7MjU4Nyw2MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4gXHRyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xuJiM0MzsgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4mIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuJiM0MzsgKlxuJiM0MzsgKiBtZW1vcnkuaGlnaCBpcyBlbmZvcmNlZCBvbiByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBzeW5jaHJvbm91c2x5IGluXG4mIzQzOyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcFxuJiM0MzsgKiBhbGxvd2luZyBibG9ja2luZy4gIExhcmdlIGZvbGlvcyBhcmUgY2hhcmdlZCB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsXG4mIzQzOyAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGJsb2NraW5nIHVubGVzcyB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgYXNrcyBmb3IgZGlyZWN0XG4mIzQzOyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0XG4mIzQzOyAqIGRvZXMgbm90IHJldHVybiB0byB1c2Vyc3BhY2UgaW5iZXR3ZWVuIC0gdGhlIHBvcHVsYXRlIGxvb3Agb2YgbWxvY2soKSBvclxuJiM0MzsgKiBNQURWX1BPUFVMQVRFXyosIGFueSBHVVAtZHJpdmVuIHBvcHVsYXRpb24gLSBjYW4gZ3JvdyB1c2FnZSBmcm9tXG4mIzQzOyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS5cbiYjNDM7ICpcbiYjNDM7ICogQWJvdmUgbWVtb3J5LmhpZ2ggdGhlIGNncm91cCBpcyBzdXBwb3NlZCB0byBiZSB1bmRlciByZWNsYWltIHByZXNzdXJlLCBzb1xuJiM0MzsgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpc1xuJiM0MzsgKiBjaGFyZ2VkIHdpdGggYSBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcyBkb2N1bWVudGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZVxuJiM0MzsgKiBsYXJnZSBmb2xpbyBlaXRoZXIgd2F5LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlXG4mIzQzOyAqIGNvdW50ZXIgbG9va3VwIG9mZiB0aGUgZmF1bHQgcGF0aCB1bmxlc3MgdGhlIHRhc2sgaGFzIGFjdHVhbGx5IGNoYXJnZWRcbiYjNDM7ICogYWJvdmUgbWVtb3J5LmhpZ2ggYmVmb3JlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuXG4mIzQzOyAqL1xuJiM0Mztib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7XG4mIzQzO1x0Ym9vbCBvdmVyX2hpZ2ggPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGNoYXJnZSB0aGF0IGNhbiBibG9jayBpcyB0aHJvdHRsZWQgYnkgdHJ5X2NoYXJnZV9tZW1jZygpIGl0c2VsZixcbiYjNDM7XHQgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gZ2l2ZSB1cCB0aGUgbGFyZ2UgZm9saW8gZm9yIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuJiM0MztcdGlmICghbWVtY2cpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaXRlciA9IG1lbWNnOyBpdGVyOyBpdGVyID0gcGFyZW50X21lbV9jZ3JvdXAoaXRlcikpIHtcbiYjNDM7XHRcdGlmIChwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZpdGVyLVx1MDAzZW1lbW9yeSkgXHUwMDNlXG4mIzQzO1x0XHQgICAgUkVBRF9PTkNFKGl0ZXItXHUwMDNlbWVtb3J5LmhpZ2gpKSB7XG4mIzQzO1x0XHRcdG92ZXJfaGlnaCA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3Zlcl9oaWdoO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG4gICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOTI2Mjc2ZDQxOTIwMi4uYjI4ZmNjYzg2MjE2YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUzMjEsNiAmIzQzOzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xuIFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xuJiM0MztcbiYjNDM7XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbiYjNDM7XHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4mIzQzO1x0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNjI1YzE4NWExY2E0ZC4uYTIzNWM5YWVjYWYxOCAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNDQwLDkgJiM0Mzs0NDAsMjMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHQgKiBMaW1pdCBUSFAgZ2ZwLiBUaGUgbGltaXRhdGlvbiBpcyBhIG5vLW9wIGZvciB0eXBpY2FsXG4gXHQgKiBHRlBfSElHSFVTRVJfTU9WQUJMRSBidXQgbWF0dGVycyBmb3Igc2htZW0uXG4gXHQgKi9cbi1cdGlmIChvcmRlcilcbiYjNDM7XHRpZiAob3JkZXIpIHtcbiBcdFx0Z2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKHZtYV90aHBfZ2ZwX21hc2sodm1hKSwgZ2ZwKTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIGdmcCBtYXkgbm90IGFsbG93IGJsb2NraW5nLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2VcbiYjNDM7XHRcdCAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW5cbiYjNDM7XHRcdCAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXJcbiYjNDM7XHRcdCAqIHJldHJ5IHdpdGggYSBzbWFsbGVyIG9yZGVyLCBkb3duIHRvIG9yZGVyLTAsIHdoaWNoIGlzXG4mIzQzO1x0XHQgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlciYjMzk7cyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhc1xuJiM0MztcdFx0ICogZG9jdW1lbnRlZC4gIE9ubHkgZmF1bHQgY29udGV4dCBpcyB0aHJvdHRsZWQgaGVyZTsgdGhlXG4mIzQzO1x0XHQgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlXG4mIzQzO1x0XHQgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodm1mIFx1MDAyNlx1MDAyNiBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXHUwMDNldm1fbW0sIGdmcCkpXG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobXBvbCB8fCAhdm1mKSB7XG4gXHRcdGZvbGlvID0gZm9saW9fYWxsb2NfbXBvbChnZnAsIG9yZGVyLCBtcG9sLCBpbHgsIG51bWFfbm9kZV9pZCgpKTtcbiBcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgZm9yIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gKFRIUCBhbmQgc3dhcCBjYWNoZSkgdW5kZXIgbWVtY2cgbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQuIEl0IGludHJvZHVjZXMgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpIHRvIHByZXZlbnQgbm9uLWJsb2NraW5nIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zIGZyb20gYnlwYXNzaW5nIG1lbW9yeS5oaWdoIHRocm90dGxpbmcsIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBpbiBhbm9ueW1vdXMgcGFnZSBmYXVsdHMgYW5kIHN3YXAtaW4gZmF1bHRzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCByZWFjaGFibGUgY29yZSBtbSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzA0Yzg1NTE3NzA0NjdiNWQyMGViMDc1YzVhNjc0YTFjMDFmN2VmNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA1OjE5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA0NmJmNzI0Y2FlN2FmLi5kZWZlZjBkM2Q3MTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTQxLDYgJiM0Mzs5NDEsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaykKIAkJX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spOwogfQogCiYjNDM7Ym9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogU2VlIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKS4KJiM0MzsgKgomIzQzOyAqIFRoZSB0YXNrJiMzOTtzIG92ZXItaGlnaCBkZWJ0IGlzIG1vcmUgdGhhbiBhIGZhc3QgcGF0aCBoZXJlLCBpdCBhbHNvIHNjb3BlcwomIzQzOyAqIHRoZSBjaGVjayB0byB0aGUgY2FzZSB0aGF0IGlzIGJyb2tlbi4gIFRoZSBkZWJ0IGlzIHNldHRsZWQgYW5kIGNsZWFyZWQgb24KJiM0MzsgKiBldmVyeSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBhIHRhc2sgZmF1bHRpbmcgbGFyZ2UgZm9saW9zIGZyb20gYQomIzQzOyAqIHVzZXJzcGFjZSBsb29wIGFsd2F5cyBmaW5kcyBpdCB6ZXJvIGFuZCBrZWVwcyBnZXR0aW5nIHRoZW0gLSBtZW1vcnkuaGlnaAomIzQzOyAqIGlzIGVuZm9yY2VkIGZvciBpdCBvbiB0aGUgd2F5IG91dC4gIE9ubHkgYSBsb29wIHRoYXQgc3RheXMgaW4gdGhlIGtlcm5lbCwKJiM0MzsgKiB3aGVyZSBub3RoaW5nIHRocm90dGxlcyBhdCBhbGwsIGFjY3J1ZXMgZGVidCBhbmQgcmVhY2hlcyB0aGUgY291bnRlcnMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlpZiAobGlrZWx5KCFjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChtbSwgZ2ZwKTsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLApAQCAtMTM5MCw2ICYjNDM7MTQxNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKQogewogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbikKIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTM1NSw2ICYjNDM7MTM1NSwxOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJLyoKJiM0MzsJICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJiMzOTt0IGhhbmQgb3V0IG9uZSB3aGlsZSB0aGUKJiM0MzsJICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWQKJiM0MzsJICogd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVzIGFzIGRvY3VtZW50ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkgewomIzQzOwkJY291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgJmFtcDsgSFBBR0VfUE1EX01BU0spOwogCiAJaWYgKHVubGlrZWx5KCFmb2xpbykpIHsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxNDYwY2JhNTM1ODhlLi5kZDdhNjJjM2RhY2IyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNTg3LDYgJiM0MzsyNTg3LDYyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcywKIAlyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogbWVtb3J5LmhpZ2ggaXMgZW5mb3JjZWQgb24gcmV0dXJuIHRvIHVzZXJzcGFjZSwgb3Igc3luY2hyb25vdXNseSBpbgomIzQzOyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcAomIzQzOyAqIGFsbG93aW5nIGJsb2NraW5nLiAgTGFyZ2UgZm9saW9zIGFyZSBjaGFyZ2VkIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwKJiM0MzsgKiB3aGljaCBkb2VzIG5vdCBhbGxvdyBibG9ja2luZyB1bmxlc3MgdGhlIGFsbG9jYXRpb24gcG9saWN5IGFza3MgZm9yIGRpcmVjdAomIzQzOyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0CiYjNDM7ICogZG9lcyBub3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbmJldHdlZW4gLSB0aGUgcG9wdWxhdGUgbG9vcCBvZiBtbG9jaygpIG9yCiYjNDM7ICogTUFEVl9QT1BVTEFURV8qLCBhbnkgR1VQLWRyaXZlbiBwb3B1bGF0aW9uIC0gY2FuIGdyb3cgdXNhZ2UgZnJvbQomIzQzOyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS4KJiM0MzsgKgomIzQzOyAqIEFib3ZlIG1lbW9yeS5oaWdoIHRoZSBjZ3JvdXAgaXMgc3VwcG9zZWQgdG8gYmUgdW5kZXIgcmVjbGFpbSBwcmVzc3VyZSwgc28KJiM0MzsgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpcwomIzQzOyAqIGNoYXJnZWQgd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzIGRvY3VtZW50ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZQomIzQzOyAqIGxhcmdlIGZvbGlvIGVpdGhlciB3YXkuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlCiYjNDM7ICogY291bnRlciBsb29rdXAgb2ZmIHRoZSBmYXVsdCBwYXRoIHVubGVzcyB0aGUgdGFzayBoYXMgYWN0dWFsbHkgY2hhcmdlZAomIzQzOyAqIGFib3ZlIG1lbW9yeS5oaWdoIGJlZm9yZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci4KJiM0MzsgKi8KJiM0Mztib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7CiYjNDM7CWJvb2wgb3Zlcl9oaWdoID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hhcmdlIHRoYXQgY2FuIGJsb2NrIGlzIHRocm90dGxlZCBieSB0cnlfY2hhcmdlX21lbWNnKCkgaXRzZWxmLAomIzQzOwkgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gZ2l2ZSB1cCB0aGUgbGFyZ2UgZm9saW8gZm9yIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaXRlciA9IG1lbWNnOyBpdGVyOyBpdGVyID0gcGFyZW50X21lbV9jZ3JvdXAoaXRlcikpIHsKJiM0MzsJCWlmIChwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO2l0ZXItJmd0O21lbW9yeSkgJmd0OwomIzQzOwkJICAgIFJFQURfT05DRShpdGVyLSZndDttZW1vcnkuaGlnaCkpIHsKJiM0MzsJCQlvdmVyX2hpZ2ggPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG92ZXJfaGlnaDsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tCiAgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmQKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOTI2Mjc2ZDQxOTIwMi4uYjI4ZmNjYzg2MjE2YiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUzMjEsNiAmIzQzOzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCS8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqLwogCWdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTsKJiM0MzsKJiM0MzsJLyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovCiYjNDM7CWlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtJmd0O3ZtX21tLCBnZnApKSB7CiYjNDM7CQljb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CX0KJiM0MzsKIAl3aGlsZSAob3JkZXJzKSB7CiAJCWFkZHIgPSBBTElHTl9ET1dOKHZtZi0mZ3Q7YWRkcmVzcywgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKTsKIAkJZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA2MjVjMTg1YTFjYTRkLi5hMjM1YzlhZWNhZjE4IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC00NDAsOSAmIzQzOzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkgKiBMaW1pdCBUSFAgZ2ZwLiBUaGUgbGltaXRhdGlvbiBpcyBhIG5vLW9wIGZvciB0eXBpY2FsCiAJICogR0ZQX0hJR0hVU0VSX01PVkFCTEUgYnV0IG1hdHRlcnMgZm9yIHNobWVtLgogCSAqLwotCWlmIChvcmRlcikKJiM0MzsJaWYgKG9yZGVyKSB7CiAJCWdmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayh2bWFfdGhwX2dmcF9tYXNrKHZtYSksIGdmcCk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGlzIGdmcCBtYXkgbm90IGFsbG93IGJsb2NraW5nLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2UKJiM0MzsJCSAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW4KJiM0MzsJCSAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHJldHJ5IHdpdGggYSBzbWFsbGVyIG9yZGVyLCBkb3duIHRvIG9yZGVyLTAsIHdoaWNoIGlzCiYjNDM7CQkgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlciYjMzk7cyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcwomIzQzOwkJICogZG9jdW1lbnRlZC4gIE9ubHkgZmF1bHQgY29udGV4dCBpcyB0aHJvdHRsZWQgaGVyZTsgdGhlCiYjNDM7CQkgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlCiYjNDM7CQkgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLgomIzQzOwkJICovCiYjNDM7CQlpZiAodm1mICZhbXA7JmFtcDsgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwogCWlmIChtcG9sIHx8ICF2bWYpIHsKIAkJZm9saW8gPSBmb2xpb19hbGxvY19tcG9sKGdmcCwgb3JkZXIsIG1wb2wsIGlseCwgbnVtYV9ub2RlX2lkKCkpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGNoZWNrIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgYW5kIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IHdoZW4gYSBtZW1vcnkgY2dyb3VwJiMzOTtzIGAuaGlnaGAgbGltaXQgaXMgZXhjZWVkZWQuIFRoZSBjb2RlIHNuaXBwZXRzIGdpdmUgYSBjbGVhciBwaWN0dXJlOgoKKiAgIEl0IGludHJvZHVjZXMgYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgdGhhdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgbWVtb3J5IGNncm91cCBpcyBvdmVyIHRoZSBgLmhpZ2hgIGxpbWl0LiBXaGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoaXMgaXMgYSByZWFsIGNoZWNrLCBvdGhlcndpc2UgaXQmIzM5O3MganVzdCBzdHViYmVkLgoqICAgVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIChmb3IgVEhQL2h1Z2UgcGFnZSBhbGxvY2F0aW9uKSwgYGFsbG9jX2Fub25fZm9saW9gIChmb3IgYW5vbnltb3VzIGZvbGlvIGFsbG9jYXRpb24pLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgKGR1cmluZyBzd2FwIG9wZXJhdGlvbnMpLiBUaGUgY2FsbHMgYWxsIHNlZW0gdG8gYmUgYWJvdXQgY2hlY2tpbmcgaWYgdGhlIGAuaGlnaGAgbGltaXQgaXMgb3ZlciwgYW5kIGlmIGl0IGlzLCBpdCBlaXRoZXIgZmFsbHMgYmFjayAoaW4gVEhQL2ZvbGlvIGFsbG9jYXRpb24pIG9yIHJldHVybnMgYW4gZXJyb3IgKGluIHN3YXAgYWxsb2NhdGlvbikuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGlzIGFnYWluc3QgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEuIFRoZSBjcml0ZXJpYSBzdGF0ZXMgdGhhdCBhbnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBhcmUgZGVmaW5pdGVseSBpbiBzY29wZS4gSSBjYW4gc2VlIGNvcmUgbW0gY29kZSBiZWluZyB0b3VjaGVkICggYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AgYXJlIGFsbCBkZWZpbml0ZWx5IGNvcmUpLCBhbmQgc3BlY2lmaWNhbGx5LCBjb2RlIHJlbGF0ZWQgdG8gbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiwgVEhQLCBhbmQgc3dhcCBhbGxvY2F0aW9uICp1bmRlciogbWVtb3J5LmhpZ2ggbWVtY2cgbGltaXRzLiBUaGlzIGlzIGFic29sdXRlbHkgY29yZSBtbS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGFsbG9jYXRpb24gcGF0aHMgZm9yIGxhcmdlIGZvbGlvcywgVEhQLCBhbmQgc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3aGljaCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBgLmhpZ2hgIGxpbWl0IGNoZWNrcy4gVGhpcyBtZWFucyBpdCYjMzk7cyAxMDAlIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIHRoZXJlZm9yZSBJJiMzOTttIGltbWVkaWF0ZWx5IGxlYW5pbmcgdG93YXJkcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIGNsZWFybHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHYCBlbmFibGVkLCBhcyB0aGF0JiMzOTtzIHRoZSBjb25kaXRpb25hbCBmb3IgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlYWwgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5lZWRlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYENPTkZJR19TV0FQYCB3b3VsZCBiZSByZXF1aXJlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBJIHdpbGwgbmVlZCB0byB1c2UgYSBncmVwIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBvciBzb3VyY2UgY29kZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1NTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTkwLS8qKlxubW0vbWVtY29udHJvbC5jOjI1OTE6ICogX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xubW0vbWVtY29udHJvbC5jLTI1OTItICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjE2LSAqL1xubW0vbWVtY29udHJvbC5jOjI2MTc6Ym9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtMjYxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCioqQ2hlY2tpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gZm9yIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIG1lbW9yeSBjb250cm9sLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbXBpbGF0aW9uIGd1YXJkIGZvciBgbW0vbWVtY29udHJvbC5jYCB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayB0byB1bmRlcnN0YW5kICp3aHkqIG9yICppZiogYSBzcGVjaWZpYyBtb2R1bGUgaXMgY29tcGlsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZyBvciBkZXBlbmRlbmN5IHRoYXQmIzM5O3MgYWZmZWN0aW5nIGl0cyBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBidWlsZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIGRpYWdub3NlIGFueSBidWlsZC1yZWxhdGVkIGlzc3VlcyB3aXRoIHRoaXMgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgZHJpdmluZyB0aGlzIGNoZWNrIC0gc28gSSYjMzk7bSBob3BpbmcgSSYjMzk7bGwgcXVpY2tseSBmaW5kIHRoZSBjb25kaXRpb24gSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNjpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDctaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA5LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgbW1jb250cm9sLm9gIGlzIGJ1aWx0IHdpdGggYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgbGlrZWx5IGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGxpbWl0aW5nIG9yIGFjY291bnRpbmcuIEdpdmVuIHRoYXQgY29udGV4dCwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgY29kZSBhcm91bmQgbGFyZ2UgbWVtb3J5IHBhZ2VzIChodWdlcGFnZXMpIGFuZCBzd2FwIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgaHVnZV9tZW1vcnkuY2AgYW5kIGBzd2FwX3N0YXRlLmNgIHJlZmVyZW5jZWQgaW4gYG1tL01ha2VmaWxlYC4gVGhlc2UgYXJlYXMgYXJlIGNydWNpYWwgYmVjYXVzZSBtZW1vcnkgY29udHJvbCBncm91cHMgb2Z0ZW4gbmVlZCB0byBpbnRlcmFjdCBpbnRyaWNhdGVseSB3aXRoIGh1Z2VwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGFuZCBob3cgc3dhcHBlZCBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGNncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaW50ZXJhY3RzIHdpdGggdGhvc2UgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9yIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGNvbmZpZ3VyYXRpb24sIG9yIGhvdyBodWdlcGFnZXMgb3Igc3dhcCBiZWhhdmlvciBpcyBkaWZmZXJlbnQgd2hlbiBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGluIHVzZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50ZWdyYXRpb24gcG9pbnRzLCB0aGUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBkZXNpZ24gZGVjaXNpb25zIHJlbGF0ZWQgdG8gaG93IHRoZXNlIGNvbXBvbmVudHMgcGxheSB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoaHVnZV9tZW1vcnl8c3dhcF9zdGF0ZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nz1lbmRpZlxubW0vTWFrZWZpbGUtNzgtXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4tLVxubW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvZGUuIEkgc2VlIHRoYXQgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIEkgc2hvdWxkIGhhdmUga25vd24gdGhhdCBhbHJlYWR5LCBmb3IgdGhlIGBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCBmdW5jdGlvbiBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkuaGlnaCBsb2dpYywgdGhhdCBtYWtlcyBzZW5zZS4gQWxzbywgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIGZvciBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBmb3IgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAuIEFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfU1dBUGAgaXMgbmVlZGVkIGZvciBgc3dhcF9zdGF0ZS5jYCwgcGFydGljdWxhcmx5IGZvciBgX19zd2FwX2NhY2hlX2FsbG9jYC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgcGVyaGFwcyBsZXNzIG9idmlvdXMgb25lcywgZm9yIGVpdGhlciBgQ09ORklHX01FTUNHYCBvciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gVGltZSB0byBkaWcgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ny1cbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzktXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaW5pdC9LY29uZmlnYCBTZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDEwNzUgdG8gMTEwMCBvZiBgaW5pdC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoaXMgc2VnbWVudCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbi4gR2l2ZW4gdGhlIGZpbGUgbmFtZSwgYEtjb25maWdgLCBhbmQgdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSByZWxhdGVkIHRvICpzb21lKiBhc3BlY3Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsIHNldHVwIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgbG9hZGluZyBvciBlYXJseSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgbGlrZSAmIzM0O2NvbmZpZyYjMzQ7LCAmIzM0O2Jvb2wmIzM0OywgJiMzNDt0cmlzdGF0ZSYjMzQ7LCAmIzM0O2RlcGVuZHMgb24mIzM0OywgJiMzNDtzZWxlY3QmIzM0OywgYW5kIGFueSBtb2R1bGUgb3IgZHJpdmVyIG5hbWVzIHRvIGdsZWFuIHRoZSBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlc2Ugb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIGxvZ2ljYWwgZmxvdyAtIHRoZSBoaWVyYXJjaHksIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgZGVmaW5lZCBlbHNld2hlcmUgaW4gS2NvbmZpZyBhbmQgdGhlIHNvdXJjZSBjb2RlLiBUaGUgc3BlY2lmaWMgc2VjdGlvbiB3aWxsIGRldGVybWluZSBob3cgaW1wb3J0YW50IGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5MDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5MTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTI6XHRcdGRlZmF1bHQgeVxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX1YxXG4xMTAyOlx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgTUVNQ0dgIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHYC4gSXTigJlzIHByb2JhYmx5IGEgY29yZSBjb21wb25lbnQsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXTigJlzIG5vdCByZWFsbHkgZGVwZW5kZW50IG9uIGFueXRoaW5nICplbHNlKi4gQnV0IGp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIExldCBtZSBmaXJlIHVwIHRoZSBrZXJuZWwgY29uZmlnLCBhbmQgbmF2aWdhdGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AuLi4gc3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyBkaWdnaW5nIHdpdGhpbiB0aGUgYENHUk9VUFNgIHNlY3Rpb24g4oCTIHRoYXTigJlzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGl0LiBHb3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gaG93IGl0JiMzOTtzIGVuYWJsZWQgb3IgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENHUk9VUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNDY9Y29uZmlnIFNMQUJfT0JKX0VYVFxuLS1cbmluaXQvS2NvbmZpZy0xMDQ4LVxuaW5pdC9LY29uZmlnOjEwNDk6bWVudWNvbmZpZyBDR1JPVVBTXG5pbml0L0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDR1JPVVBTIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXM6IEEgQ29uZmlndXJhdGlvbiBRdWVyeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBZZXMsIENHUk9VUFMgaXMgZGVmaW5pdGVseSB0aGUgb3ZlcmFyY2hpbmcgc3RydWN0dXJlLCB0aGUgY29udGFpbmVyIGZvciBhbGwgb2YgdGhpcy4gQnV0IG5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBzZXR0aW5nIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIGl0cyBzdGF0dXMgYW5kIGhvdyBpdCBwbGF5cyB3aXRoIHRoaXMgc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgQ0dST1VQUyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMxPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMzLVxubW0vS2NvbmZpZzo4MzQ6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzUtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBhc3BlY3QsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBUaGUgZmlsZSBJIG5lZWQgaXMgYG1tL0tjb25maWdgLCBhbmQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGxpbmVzIDgzNCB0aHJvdWdoIDg1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHdoYXRldmVyIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaG9sZHMgdGhlIGluZm9ybWF0aW9uIEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyb3VuZCB0aGlzIHNwZWNpZmljIGFyZWEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHdoYXRldmVyIGl0IGlzIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzQ6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODM1Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4MzY6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDgzNzpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4Mzg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4Mzk6XHRcdHNlbGVjdCBNTV9JRFxuIDg0MDpcdFx0aGVscFxuIDg0MTpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODQyOlx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NDM6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODQ0Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODQ1Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NDY6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg0NzpcdFxuIDg0ODpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NDk6XHRcbiA4NTA6XHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDg1MTpcdFxuIDg1MjpcdGNob2ljZVxuIDg1MzpcdFx0cHJvbXB0IFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcJiMzNDtcbiA4NTQ6XHRcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4gODU1Olx0XHRoZWxwXG4gODU2Olx0XHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxuIDg1NzpcdFxuIDg1ODpcdFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtleSBTeW1ib2xzIGluIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHN5bWJvbHMuIEZpcnN0IHVwLCBJJiMzOTttIGxvb2tpbmcgYXQgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgLiBEZWZpbmVkIHJpZ2h0IHRoZXJlIGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYW5kIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltYXJ5IGZvY3VzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgbGlrZWx5IHJlc2lkZSwgc28gSSYjMzk7bSBnb2luZyB0byBwYXkgdmVyeSBjbG9zZSBhdHRlbnRpb24gdG8gaXQuCgpUaGVuLCB0aGVyZSYjMzk7cyBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgc28gSSBzaG91bGQgbG9vayBmb3IgaXRzIGNhbGxlcnMuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgdGhpcyBvbmUuIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIHNvIEkgdGhpbmsgdGhpcyB3aWxsIHlpZWxkIGltcG9ydGFudCBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hX2FsbG9jX2Fub25fZm9saW9fcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xubW0vaHVnZV9tZW1vcnkuYy0xMzUwLVxubW0vaHVnZV9tZW1vcnkuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQzOD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ0NjpcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vaHVnZV9tZW1vcnkuYy0xNDQ3LVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMTUwPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTU3LVxubW0vaHVnZV9tZW1vcnkuYzoyMTU4Olx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTIxNTktXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9tZW1vcnkuYz01MjcwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTMyNC1cbm1tL21lbW9yeS5jOjUzMjU6XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbm1tL21lbW9yeS5jLTUzMjYtXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTM5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgc3BlYWtpbmcgYXMgYW4gZXhwZXJ0OgoKKipUcmFjaW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIFBhdGhzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgdGhhdCBsZWFkIHRvIHRoZSBhbGxvY2F0aW9uIGFuZCBoYW5kbGluZyBvZiBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW52b2x2aW5nIGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfemVyb193cF9wbWRgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZS4gSSYjMzk7bSBhc3N1bWluZyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGFsbG9jYXRpb24gYW5kIGhhbmRsaW5nIG9mIGFub255bW91cyBodWdlIHBhZ2VzLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlaXIgdXNlLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGhhdmUgdG8gZm9sbG93IGEgYnVuY2ggb2YgYHRyYWNlX3ByaW50a2Agc3RhdGVtZW50cyBhbmQgY2FsbCBzdGFjayBpbnNwZWN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgYW5kIHdoZW4sIGFuZCBob3csIHRoZSB6ZXJvIHBhZ2UgaXMgd3JpdHRlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2V8ZG9faHVnZV96ZXJvX3dwX3BtZCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xNDI4PXN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQzNy1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQzODpzdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaHVnZV9tZW1vcnkuYy0xNDM5LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1Nzc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE2MzAtXG5tbS9odWdlX21lbW9yeS5jOjE2MzE6XHRyZXR1cm4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xubW0vaHVnZV9tZW1vcnkuYy0xNjMyLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTIxNDA9Ym9vbCBodWdlX3BtZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTQ5LVxubW0vaHVnZV9tZW1vcnkuYzoyMTUwOnN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIxNTEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjE4Mj12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3dwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTk0LVx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jOjIxOTU6XHRcdHZtX2ZhdWx0X3QgcmV0ID0gZG9faHVnZV96ZXJvX3dwX3BtZCh2bWYpO1xubW0vaHVnZV9tZW1vcnkuYy0yMTk2LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjUzNj1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI1NTEtXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcbm1tL2h1Z2VfbWVtb3J5LmM6MjU1MjpcdCAqIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtMjU1My1cdCAqL1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NzgwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzg4LSAqIEBwYWdlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFuZCBzZXR1cCBhZnRlciBpdCYjMzk7cyBhbGxvY2F0ZWQuIFRoZSBjb2RlIGJpdHNcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzg5OiAqIGhlcmUgZm9sbG93IGNsb3NlbHkgdGhlIGNvZGUgaW4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLiBUaGlzIEFQSSBkb2VzXG5tbS9taWdyYXRlX2RldmljZS5jLTc5MC0gKiBub3Qgc3VwcG9ydCBUSFAgemVybyBwYWdlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBIdWdlIFBNRCBBbm9ueW1vdXMgUGFnZSBGYXVsdHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uLCBub3QgYSBzdGF0aWMgb25lLCB3aGljaCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgYnJvYWRlciBodWdlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgYWxyZWFkeSBrbm93IGl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgc28gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBzcGVjaWZpYyB0byBoYW5kbGluZyBmYXVsdHMgZm9yIGFub255bW91cyBodWdlIFBNRHMg4oCTIGJpZyBwYWdlcyB0aGF0IGFyZW4mIzM5O3QgYmFja2VkIGJ5IGFueSBmaWxlLgoKTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaHVnZSBQTUQgZmF1bHRzIGFjdHVhbGx5IGdldCBhbiBhbm9ueW1vdXMgcGFnZSBhbGxvY2F0ZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIGlzIHRoZSBjYWxscyB0byBgYWxsb2NfYW5vbl9mb2xpb2AuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgaW4gYG1tL21lbW9yeS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGFuZCBpbnNpZ2h0IGludG8gd2hlcmUgdGhlc2UgaHVnZSBwYWdlcyBhcmUgYmVpbmcgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSBvbiBkZW1hbmQsIHJpZ2h0IHdoZW4gYSBwcm9jZXNzIHRyaWVzIHRvIGFjY2VzcyB0aGVtLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBhbm9uIGZvbGlvJiMzOTtzIGFsbG9jYXRpb24gbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZSBwYWdlIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19hbm9uX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xubW0vaHVnZV9tZW1vcnkuYy0xMzUwLVxubW0vaHVnZV9tZW1vcnkuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQzOD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ0NjpcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vaHVnZV9tZW1vcnkuYy0xNDQ3LVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMTUwPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTU3LVxubW0vaHVnZV9tZW1vcnkuYzoyMTU4Olx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTIxNTktXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9tZW1vcnkuYz01MjU4PXN0YXRpYyBib29sIHB0ZV9yYW5nZV9ub25lKHB0ZV90ICpwdGUsIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1vcnkuYy01MjY5LVxubW0vbWVtb3J5LmM6NTI3MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vbWVtb3J5LmMtNTI3MS17XG4tLVxubW0vbWVtb3J5LmMtNTMyNC1cbm1tL21lbW9yeS5jOjUzMjU6XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbm1tL21lbW9yeS5jLTUzMjYtXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4tLVxubW0vbWVtb3J5LmM9NTQwMz1zdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01NDU3LVx0LyogUmV0dXJucyBOVUxMIG9uIE9PTSBvciBFUlJfUFRSKC1FQUdBSU4pIGlmIHdlIG11c3QgcmV0cnkgdGhlIGZhdWx0ICovXG5tbS9tZW1vcnkuYzo1NDU4Olx0Zm9saW8gPSBhbGxvY19hbm9uX2ZvbGlvKHZtZik7XG5tbS9tZW1vcnkuYy01NDU5LVx0aWYgKElTX0VSUihmb2xpbykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFub255bW91cyBQYWdlIEZhdWx0cyoqCgpPa2F5LCBzbyBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgKmV2ZXJ5KiBhbm9ueW1vdXMgcGFnZSBmYXVsdC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViLCB0aGUgbW9zdCBjb21tb24gY2FzZSwgc28gd2UgbmVlZCB0byBsb29rIGJleW9uZCB0aGF0IGZ1bmN0aW9uLiBGb2N1c2luZyBvbiBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIGEgd2FzdGUgb2YgdGltZSBhdCB0aGlzIHBvaW50LiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZSBwcm9ibGVtIGlzbiYjMzk7dCBpbiB0aGUgKmhhbmRsaW5nKiBvZiB0aGUgZmF1bHQsIGJ1dCBpbiBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBzd2FwcGVkIHBhZ2VzLCBzbyB0aGUgbmV4dCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGluIGBzd2FwX3N0YXRlLmNgLCBwYXJ0aWN1bGFybHkgdGhlIGBfX3N3YXBfY2FjaGVfYWxsb2NgIGZ1bmN0aW9uLCBwcm92aWRlcyBzb21lIGluc2lnaHRzIGludG8gaG93IGFub255bW91cyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCB3aGVuIHN3YXBwZWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzLiBXaGF0IGNhdXNlcyB0aGUgc3dhcCBjYWNoZSB0byBiZSB1c2VkIHNvIGZyZXF1ZW50bHk/IE5vdywgSSBuZWVkIHRvIHNlZSB3aGF0IGZ1bmN0aW9ucyBhY3R1YWxseSAqY2FsbCogYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoZSBjYWxsIGdyYXBoIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldmVhbCB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciB2aWV3IG9mIHdoZXJlIHRoZSBib3R0bGVuZWNrIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTM2OT12b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQxNS0gKi9cbm1tL3N3YXBfc3RhdGUuYzo0MTY6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtNDE3LVx0XHRcdFx0XHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTUzNT1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01NTAtXHRkbyB7XG5tbS9zd2FwX3N0YXRlLmM6NTUxOlx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG5tbS9zd2FwX3N0YXRlLmMtNTUyLVx0XHRcdFx0XHQgdm1mLCBtcG9sLCBpbHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhhdCBmdW5jdGlvbiBpcyBwcmV0dHkgY3J1Y2lhbCB0byB0aGUgc3dhcCBpbXBsZW1lbnRhdGlvbiwgc28ga25vd2luZyBpdHMgY2FsbCBwYXRocyBpcyB2aXRhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIG9yIHVuZGVyc3RhbmRpbmcgYSBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoaXMgbGlrZWx5IG1lYW5zIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGZyb20gdGhlIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBzd2FwIGNhY2hlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JhYmx5IHN0YXJ0IHdpdGggYHN3YXBfcmVhZHBhZ2VgLCBgc3dhcF93cml0ZXBhZ2VgLCBhbmQgdGhlIHJlY2xhaW0gcGF0aC4gIFRob3NlIGFyZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zLCBhbmQgYW55dGhpbmcgdGhleSBpbnZva2UsIGludGVyYWN0IHdpdGggdGhlIHN3YXAgY2FjaGUgY29kZS4gQXJlIHRoZXJlIHNwZWNpZmljIGZvbGlvIGZsYWdzLCBvciBwYWdlIHN0YXRlcywgdGhhdCBhcmUgYmVpbmcgcGFzc2VkIGluIHdoaWNoIHdvdWxkIGxlYWQgdG8gdGhlIGludm9jYXRpb24gb2YgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIOKAkyBpcyB0aGlzIGNhbGwgcGF0aCB0cmlnZ2VyZWQgYnkgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtPwoKSSYjMzk7bGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IC0gYW0gSSBjb25jZXJuZWQgYWJvdXQgYSBwYXJ0aWN1bGFyIGlzc3VlIHN1Y2ggYXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG1lbW9yeSBsZWFrcywgb3IgYSBjcmFzaD8gIEtub3dpbmcgdGhpcywgSSBjYW4gbmFycm93IGRvd24gdGhlIHNlYXJjaCB0byByZWxldmFudCBjYWxsIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGlmIHRoaXMgaXMgYWJvdXQgcGVyZm9ybWFuY2UsIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBmcmVxdWVudGx5IGV4ZWN1dGVkIHBhdGhzLiBJZiBJIGFtIGxvb2tpbmcgZm9yIGEgbWVtb3J5IGxlYWsgSSB3YW50IHRvIGxvb2sgYXQgd2hlcmUgdGhlIGZvbGlvIGlzICpyZWxlYXNlZCogYWZ0ZXIgYWxsb2NhdGlvbiBhbmQgdmVyaWZ5IHRoYXQgZXZlcnkgYWxsb2NhdGlvbiBoYXMgYSBjb3JyZXNwb25kaW5nIGZyZWUuCgpJJiMzOTtsbCBwcm9iYWJseSB1c2UgYSB0b29sIHRvIHRyYXZlcnNlIHRoZSBjYWxsZ3JhcGggb3IganVzdCBncmVwIGZvciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBzb3VyY2UuIEkgZXhwZWN0IGl0IHRvIGdldCBxdWl0ZSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGNvcmUgc3dhcCBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBkaWZmZXJlbnQgY2FsbGVyIGNvbnRleHRzIGFuZCB3aGF0IHRoZXkgYXJlIHRyeWluZyB0byBhY2hpZXZlLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGZvciBhbnkgY29kZSBwYXRocyB0aGF0IG1heSBpbmRpcmVjdGx5IGNhbGwgdGhlIGZ1bmN0aW9uIHRocm91Z2ggc29tZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zLiBNeSBnZW5lcmFsIGFpbSB3aWxsIGJlIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBjYWxsIGNoYWluLCBmcm9tIHRoZSBoaWdoZXN0LWxldmVsIFZGUyBmdW5jdGlvbnMgZG93biB0byB0aGUgc3BlY2lmaWMgZm9saW8gYWxsb2NhdGlvbi4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxubW0vc3dhcC5oLTMxNi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz00MTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUxOC0vKipcbm1tL3N3YXBfc3RhdGUuYzo1MTk6ICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtNTIwLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUzNC0gKi9cbm1tL3N3YXBfc3RhdGUuYzo1MzU6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbm1tL3N3YXBfc3RhdGUuYy01MzYtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NjYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjcyLVx0XHRcdHJldHVybiBmb2xpbztcbm1tL3N3YXBfc3RhdGUuYzo2NzM6XHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNjc0LVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTcwND1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MTMtXHRcdFx0cmV0dXJuIGZvbGlvO1xubW0vc3dhcF9zdGF0ZS5jOjcxNDpcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xubW0vc3dhcF9zdGF0ZS5jLTcxNS1cdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTg0ND12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTg4OS0gKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmJiM0Mztzd2Fwb25cbm1tL3N3YXBmaWxlLmM6MTg5MDogKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpXG5tbS9zd2FwZmlsZS5jLTE4OTEtICogICAgICAgLy8gY2hlY2sgc3dhcF9tYXBcbi0tXG5tbS96c3dhcC5jPTEwMDU9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwMjEtXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xubW0venN3YXAuYzoxMDIyOlx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG5tbS96c3dhcC5jLTEwMjMtXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjYzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gZHVyaW5nIHBhZ2UgZmF1bHRzLiBgc3dhcGluX3N5bmNgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgZm9yIGZhdWx0IGhhbmRsaW5nLiBJbnRlcmVzdGluZyB0aGF0IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljOyBpdCYjMzk7cyBleHBvcnRlZCBpbnRlcm5hbGx5IHZpYSBgbW0vc3dhcC5oYC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBkZXNpZ25lZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG5vdCBqdXN0IHN0cmljdGx5IGxpbWl0ZWQgdG8gdGhlIGZpbGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqdXNhZ2UqIHBhdHRlcm5zIG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGltZSB0byBkaWcgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB3aGF0IGV4YWN0bHkgaXMgY2FsbGluZyBgc3dhcGluX3N5bmNgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGluX3N5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9NDg0ND12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00OTM1LVx0XHRpZiAoZGF0YV9yYWNlKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pKVxubW0vbWVtb3J5LmM6NDkzNjpcdFx0XHRmb2xpbyA9IHN3YXBpbl9zeW5jKGVudHJ5LCBHRlBfSElHSFVTRVJfTU9WQUJMRSxcbm1tL21lbW9yeS5jLTQ5MzctXHRcdFx0XHRcdCAgICB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyh2bWYpIHwgQklUKDApLFxuLS1cbm1tL3NobWVtLmM9MjI0OD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMjYyLVx0bXBvbCA9IHNobWVtX2dldF9wZ29mZl9wb2xpY3koaW5mbywgaW5kZXgsIG9yZGVyLCBcdTAwMjZpbHgpO1xubW0vc2htZW0uYzoyMjYzOlx0Zm9saW8gPSBzd2FwaW5fc3luYyhlbnRyeSwgZ2ZwLCBCSVQob3JkZXIpLCB2bWYsIG1wb2wsIGlseCk7XG5tbS9zaG1lbS5jLTIyNjQtXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuLS1cbm1tL3N3YXAuaD0zMzI9c3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLFxubW0vc3dhcC5oLTMzMy1cdFx0c3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbm1tL3N3YXAuaC0zMzUtXHRcdFx0ICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbi0tXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vc3dhcC5oLTQxMy1cbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxubW0vc3dhcC5oLTQxNS1cdHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NjYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjg4LS8qKlxubW0vc3dhcF9zdGF0ZS5jOjY4OTogKiBzd2FwaW5fc3luYyAtIHN3YXAtaW4gb25lIG9yIG11bHRpcGxlIGVudHJpZXMgc2tpcHBpbmcgcmVhZGFoZWFkLlxubW0vc3dhcF9zdGF0ZS5jLTY5MC0gKiBAZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3Rcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzAzLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjcwNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxubW0vc3dhcF9zdGF0ZS5jLTcwNS1cdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGFuZCBpdHMgQ2FsbGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSSYjMzk7dmUgY29uZmlybWVkIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBzeW1ib2wsIG1lYW5pbmcgaXQmIzM5O3MgZXhwbGljaXRseSBleHBvcnRlZCBpbiB0aGUgdm1saW51eC4gTm93LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGlkZW50aWZ5IGl0cyBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxlcnMgdG8gZXZhbHVhdGUgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3QuCgpUaGUgY29kZSBpdHNlbGYsIHdpdGggaXRzIGNoZWNrIGZvciBibG9ja2luZyBhbGxvY2F0aW9ucywgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGluIGEgbWVtb3J5IGNncm91cCBpZiB0aGUgbWVtb3J5IHVzYWdlIGlzIGFscmVhZHkgb3ZlciB0aGUgJiMzNDtoaWdoJiMzNDsgd2F0ZXJtYXJrLCB1bmxlc3MgYSBibG9ja2luZyBhbGxvY2F0aW9uIGlzIGJlaW5nIGF0dGVtcHRlZC4gVGhlIGxvb3AgdGhyb3VnaCBwYXJlbnQgY2dyb3VwcyBpcyB0aGUgc3RhbmRhcmQgYXBwcm9hY2ggZm9yIHRoaXMga2luZCBvZiBoaWVyYXJjaGljYWwgbWVtb3J5IG1hbmFnZW1lbnQuCgpOZXh0LCBJIGxvb2sgZm9yIHBsYWNlcyB0aGF0IHRvdWNoIG9yIGNhbGwgdGhpcyBmdW5jdGlvbi4gRnJvbSBpbml0aWFsIGluc3BlY3Rpb24sIEkgc2VlIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgaXMgbGlrZWx5IHVzZWQgaW4gVEhQIGFub255bW91cyBmYXVsdHMgKGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWApIGFuZCB3aGVuIGFsbG9jYXRpbmcgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLgoKSSBkaWQgYSBkZWVwZXIgZGl2ZSBhbmQgY29uZmlybWVkIG15IGluaXRpYWwgZmluZGluZ3Mgd2VyZSBjb3JyZWN0LiBOb3cgSSYjMzk7bSBjaGVja2luZyB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW5kaXJlY3QgY2FsbGVycy4gYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBpcyBUSFAtc3BlY2lmaWMsIHdoaWNoIG1lYW5zIGl0cyBpbXBhY3QgaXNuJiMzOTt0IGFzIHdpZGVzcHJlYWQgYXMgZnVuY3Rpb25zIGxpa2UgYGRvX2Fub255bW91c19wYWdlYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGRlYWxzIHdpdGggc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCBhZ2FpbiBhIG1vcmUgdGFyZ2V0ZWQgYXJlYS4KCkEgcmV2aWV3IG9mIHRoZSBjb21taXQgZGlmZnMgaGVscHMgbWUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBhbGwgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXI6IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGlzIHRoZSBvbmUgdGhhdCBjYWxscyBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLiBgYWxsb2NfYW5vbl9mb2xpb2AgY2FsbHMgYGRvX2Fub255bW91c19wYWdlYC4gYF9fc3dhcF9jYWNoZV9hbGxvY2AgKGNhbGxlZCBieSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApIGlzIHVzZWQgaW4gc3dhcCBjYWNoZSBvcGVyYXRpb25zLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgbXkgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmU6CiogICBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAKKiAgIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAKKiAgIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYAoKTm93IHRvIHZlcmlmeSBjb25maWcgcmVxdWlyZW1lbnRzLCBzaW5jZSB0aGlzIGlzIGFsbCBkZXBlbmRlbnQgb24gY2VydGFpbiBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCByZXF1aXJlcyBgQ09ORklHX01FTUNHPXlgLiAgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgbmVlZHMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRT15YC4gIEFuZCBgX19zd2FwX2NhY2hlX2FsbG9jYCByZXF1aXJlcyBgQ09ORklHX1NXQVA9eWAuIEkmIzM5O2xsIHdhbnQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQuIEZpbmFsbHksIEkmIzM5O2xsIGNoZWNrIHRoYXQgYE1FTUNHYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3MuICBJJiMzOTtsbCBsb29rIGF0IHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDk6XHRtZW51Y29uZmlnIENHUk9VUFNcbjEwNTA6XHRcdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4xMDUxOlx0XHRzZWxlY3QgS0VSTkZTXG4xMDUyOlx0XHRoZWxwXG4xMDUzOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxuMTA1NDpcdFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XG4xMDU1Olx0XHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXG4xMDU2Olx0XHQgIFNlZVxuMTA1NzpcdFx0XHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XHQoQ0ZTKVxuMTA1ODpcdFx0XHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cbjEwNTk6XHRcdFx0XHRcdFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcbjEwNjA6XHRcbjEwNjE6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA2MjpcdFxuMTA2MzpcdGlmIENHUk9VUFNcbjEwNjQ6XHRcbjEwNjU6XHRjb25maWcgUEFHRV9DT1VOVEVSXG4xMDY2Olx0XHRib29sXG4xMDY3Olx0XG4xMDY4Olx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4xMDY5Olx0XHRib29sIFwmIzM0O0Zhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbjEwNzA6XHRcdGhlbHBcbjEwNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXCYjMzQ7ZmF2b3JkeW5tb2RzXCYjMzQ7IG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XG4xMDcyOlx0XHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcbjEwNzM6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDc0Olx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDc1Olx0XG4xMDc2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzc6XHRcbjEwNzg6XHRjb25maWcgTUVNQ0dcbjEwNzk6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODA6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODE6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDgyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDgzOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxOTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgc3lzdGVtIGlzIHB1dCB0b2dldGhlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDR1JPVVBTYCBpcyBlbmFibGVkLCB0aGVuIGl0JiMzOTtzIHdyYXBwaW5nIHVwIGBjb25maWcgTUVNQ0dgLiBUaGlzIG1lYW5zIGBDR1JPVVBTYCBhbmQgYE1FTUNHYCBhcmUgdGlnaHRseSBjb3VwbGVkLCB3aGljaCBpc24mIzM5O3Qgc3VycHJpc2luZy4gSSBhbHNvIHNlZSB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaW4gdGhlIG1peCBoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYFNXQVBgIOKAkyBjYW4mIzM5O3QgZm9yZ2V0IGFib3V0IHN3YXAgc3BhY2UuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYSBiaXQgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrIGlmIGBTV0FQYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIGFueSBvZiB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMsIG9yIGlmIGl0IGNhbiBsaXZlIGluZGVwZW5kZW50bHkuIEdvdHRhIGdldCB0aGUgYXJjaGl0ZWN0dXJlIG1hcHBlZCBvdXQgY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVBcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgZXhhbWluaW5nIHRoYXQgcXVlc3Rpb246CgoqKkFuYWx5emluZyBTV0FQJiMzOTtzIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYFNXQVBgIGluIGBtbS9LY29uZmlnYCBkZXBlbmRzIG9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGluIGFuZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVuIGFuZCB3aHkgYFNXQVBgIGdldHMgaW5jbHVkZWQgb3IgZXhjbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDExOlx0XG4gIDEyOlx0bWVudWNvbmZpZyBTV0FQXG4gIDEzOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiAhQVJDSF9OT19TV0FQXG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NjAKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c3VhbCBzdXNwZWN0cywgYE1NVWAgYW5kIGBCTE9DS2AsIGFyZSBwcmVzZW50LiBTdGFuZGFyZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKWAgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhlIGdvYWwgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHRvIGVuZm9yY2UgYG1lbW9yeS5oaWdoYCBsaW1pdHMgd2l0aGluIGEgbWVtY2cgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVEhQcyBhbmQgdGhlIHN3YXAgY2FjaGUgc3BlY2lmaWNhbGx5LCBhbmQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc2NlbmFyaW9zIHdpdGggbm9uLWJsb2NraW5nIEdGUCBtYXNrcy4KCkVzc2VudGlhbGx5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5mbHVlbmNlIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZGVjaXNpb25zIHdoZW4gaGFuZGxpbmcgdGhpbmdzIGxpa2UgYW5vbnltb3VzIFBNRCBmYXVsdHMsIG11bHRpLXNpemUgVEhQIGZhdWx0cywgYW5kIHN3YXAtY2FjaGUgYWxsb2NhdGlvbnMuIElmIGBtZW1vcnkuaGlnaGAgaXMgYnJlYWNoZWQsIHRoZSBmYWxsYmFjayBzdHJhdGVneSB3aWxsIGJlIHRvIHVzZSBzbWFsbGVyIG9yZGVycywgb3IgZXZlbiBvcmRlci0wIGFsbG9jYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgYXJlYXM6IGBtbS9tZW1jb250cm9sLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tZW1vcnkuY2AsIGFuZCBgbW0vc3dhcF9zdGF0ZS5jYC4gVGhhdCYjMzk7cyByZWFzb25hYmxlLCBpdCBoaXRzIHRoZSByZWxldmFudCBwaWVjZXMuCgpBbHJpZ2h0LCBhZnRlciB0aGlzIHF1aWNrIHJldmlldywgZXZlcnl0aGluZyBsb29rcyBjb25zaXN0ZW50IGFuZCBpbiBvcmRlci4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0JiMzOTtzIGEgY2xlYW4gaW1wbGVtZW50YXRpb24gb2YgYW4gaW1wb3J0YW50IHBvbGljeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGZvciBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIChUSFAgYW5kIHN3YXAgY2FjaGUpIHVuZGVyIG1lbWNnIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50LiBJdCBpbnRyb2R1Y2VzIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSB0byBwcmV2ZW50IG5vbi1ibG9ja2luZyBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucyBmcm9tIGJ5cGFzc2luZyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLCBmYWxsaW5nIGJhY2sgdG8gc21hbGxlciBvcmRlcnMgaW4gYW5vbnltb3VzIHBhZ2UgZmF1bHRzIGFuZCBzd2FwLWluIGZhdWx0cy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbW0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgZm9yIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gKFRIUCBhbmQgc3dhcCBjYWNoZSkgdW5kZXIgbWVtY2cgbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQuIEl0IGludHJvZHVjZXMgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpIHRvIHByZXZlbnQgbm9uLWJsb2NraW5nIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zIGZyb20gYnlwYXNzaW5nIG1lbW9yeS5oaWdoIHRocm90dGxpbmcsIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBpbiBhbm9ueW1vdXMgcGFnZSBmYXVsdHMgYW5kIHN3YXAtaW4gZmF1bHRzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCByZWFjaGFibGUgY29yZSBtbSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBjZ3JvdXAgY2hlY2sgKGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGApIHRvIGVuZm9yY2UgYG1lbW9yeS5oaWdoYCBsaW1pdHMgYnkgZmFsbGluZyBiYWNrIGZyb20gbGFyZ2UgZm9saW9zIHRvIG9yZGVyLTAgYWxsb2NhdGlvbnMgd2hlbiBhbGxvY2F0aW5nIG5vbi1ibG9ja2luZyBmb2xpb3MgYWJvdmUgdGhlIHRocmVzaG9sZC5cblxuVGhlIGNoYW5nZXMgb25seSBhbHRlciBhbGxvY2F0aW9uIG9yZGVyIGZhbGxiYWNrIGhldXJpc3RpY3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBhZGQgYSBoZWxwZXIgaW4gYG1tL21lbWNvbnRyb2wuY2AgdGhhdCBjaGVja3MgYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCBhbmQgcmVhZHMgYHBhZ2VfY291bnRlcmAgdmFsdWVzLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCwgbm8gbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQsIGFuZCBmb2xpbyBpbml0aWFsaXphdGlvbiBzZW1hbnRpY3MgYXJlIHVuY2hhbmdlZCAoYW5vbnltb3VzIHBhZ2VzL2ZvbGlvcyBjb250aW51ZSB0byBiZSB6ZXJvZWQgYmVmb3JlIG1hcHBpbmcpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcyBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4sIHJlZmNvdW50aW5nLCBOVUxMIGRlcmVmZXJlbmNlcywgb3IgbG9ja2RlcCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL0xPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzA0Yzg1NTE3NzA0NjdiNWQyMGViMDc1YzVhNjc0YTFjMDFmN2VmNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA1OjE5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA0NmJmNzI0Y2FlN2FmLi5kZWZlZjBkM2Q3MTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTQxLDYgJiM0Mzs5NDEsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaykKIAkJX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spOwogfQogCiYjNDM7Ym9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogU2VlIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKS4KJiM0MzsgKgomIzQzOyAqIFRoZSB0YXNrJiMzOTtzIG92ZXItaGlnaCBkZWJ0IGlzIG1vcmUgdGhhbiBhIGZhc3QgcGF0aCBoZXJlLCBpdCBhbHNvIHNjb3BlcwomIzQzOyAqIHRoZSBjaGVjayB0byB0aGUgY2FzZSB0aGF0IGlzIGJyb2tlbi4gIFRoZSBkZWJ0IGlzIHNldHRsZWQgYW5kIGNsZWFyZWQgb24KJiM0MzsgKiBldmVyeSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBhIHRhc2sgZmF1bHRpbmcgbGFyZ2UgZm9saW9zIGZyb20gYQomIzQzOyAqIHVzZXJzcGFjZSBsb29wIGFsd2F5cyBmaW5kcyBpdCB6ZXJvIGFuZCBrZWVwcyBnZXR0aW5nIHRoZW0gLSBtZW1vcnkuaGlnaAomIzQzOyAqIGlzIGVuZm9yY2VkIGZvciBpdCBvbiB0aGUgd2F5IG91dC4gIE9ubHkgYSBsb29wIHRoYXQgc3RheXMgaW4gdGhlIGtlcm5lbCwKJiM0MzsgKiB3aGVyZSBub3RoaW5nIHRocm90dGxlcyBhdCBhbGwsIGFjY3J1ZXMgZGVidCBhbmQgcmVhY2hlcyB0aGUgY291bnRlcnMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlpZiAobGlrZWx5KCFjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChtbSwgZ2ZwKTsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLApAQCAtMTM5MCw2ICYjNDM7MTQxNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKQogewogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbikKIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTM1NSw2ICYjNDM7MTM1NSwxOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJLyoKJiM0MzsJICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJiMzOTt0IGhhbmQgb3V0IG9uZSB3aGlsZSB0aGUKJiM0MzsJICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWQKJiM0MzsJICogd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVzIGFzIGRvY3VtZW50ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkgewomIzQzOwkJY291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgJmFtcDsgSFBBR0VfUE1EX01BU0spOwogCiAJaWYgKHVubGlrZWx5KCFmb2xpbykpIHsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxNDYwY2JhNTM1ODhlLi5kZDdhNjJjM2RhY2IyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNTg3LDYgJiM0MzsyNTg3LDYyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcywKIAlyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogbWVtb3J5LmhpZ2ggaXMgZW5mb3JjZWQgb24gcmV0dXJuIHRvIHVzZXJzcGFjZSwgb3Igc3luY2hyb25vdXNseSBpbgomIzQzOyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcAomIzQzOyAqIGFsbG93aW5nIGJsb2NraW5nLiAgTGFyZ2UgZm9saW9zIGFyZSBjaGFyZ2VkIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwKJiM0MzsgKiB3aGljaCBkb2VzIG5vdCBhbGxvdyBibG9ja2luZyB1bmxlc3MgdGhlIGFsbG9jYXRpb24gcG9saWN5IGFza3MgZm9yIGRpcmVjdAomIzQzOyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0CiYjNDM7ICogZG9lcyBub3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbmJldHdlZW4gLSB0aGUgcG9wdWxhdGUgbG9vcCBvZiBtbG9jaygpIG9yCiYjNDM7ICogTUFEVl9QT1BVTEFURV8qLCBhbnkgR1VQLWRyaXZlbiBwb3B1bGF0aW9uIC0gY2FuIGdyb3cgdXNhZ2UgZnJvbQomIzQzOyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS4KJiM0MzsgKgomIzQzOyAqIEFib3ZlIG1lbW9yeS5oaWdoIHRoZSBjZ3JvdXAgaXMgc3VwcG9zZWQgdG8gYmUgdW5kZXIgcmVjbGFpbSBwcmVzc3VyZSwgc28KJiM0MzsgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpcwomIzQzOyAqIGNoYXJnZWQgd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzIGRvY3VtZW50ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZQomIzQzOyAqIGxhcmdlIGZvbGlvIGVpdGhlciB3YXkuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlCiYjNDM7ICogY291bnRlciBsb29rdXAgb2ZmIHRoZSBmYXVsdCBwYXRoIHVubGVzcyB0aGUgdGFzayBoYXMgYWN0dWFsbHkgY2hhcmdlZAomIzQzOyAqIGFib3ZlIG1lbW9yeS5oaWdoIGJlZm9yZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci4KJiM0MzsgKi8KJiM0Mztib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7CiYjNDM7CWJvb2wgb3Zlcl9oaWdoID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hhcmdlIHRoYXQgY2FuIGJsb2NrIGlzIHRocm90dGxlZCBieSB0cnlfY2hhcmdlX21lbWNnKCkgaXRzZWxmLAomIzQzOwkgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gZ2l2ZSB1cCB0aGUgbGFyZ2UgZm9saW8gZm9yIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaXRlciA9IG1lbWNnOyBpdGVyOyBpdGVyID0gcGFyZW50X21lbV9jZ3JvdXAoaXRlcikpIHsKJiM0MzsJCWlmIChwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO2l0ZXItJmd0O21lbW9yeSkgJmd0OwomIzQzOwkJICAgIFJFQURfT05DRShpdGVyLSZndDttZW1vcnkuaGlnaCkpIHsKJiM0MzsJCQlvdmVyX2hpZ2ggPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG92ZXJfaGlnaDsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tCiAgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmQKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOTI2Mjc2ZDQxOTIwMi4uYjI4ZmNjYzg2MjE2YiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUzMjEsNiAmIzQzOzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCS8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqLwogCWdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTsKJiM0MzsKJiM0MzsJLyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovCiYjNDM7CWlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtJmd0O3ZtX21tLCBnZnApKSB7CiYjNDM7CQljb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CX0KJiM0MzsKIAl3aGlsZSAob3JkZXJzKSB7CiAJCWFkZHIgPSBBTElHTl9ET1dOKHZtZi0mZ3Q7YWRkcmVzcywgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKTsKIAkJZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA2MjVjMTg1YTFjYTRkLi5hMjM1YzlhZWNhZjE4IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC00NDAsOSAmIzQzOzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkgKiBMaW1pdCBUSFAgZ2ZwLiBUaGUgbGltaXRhdGlvbiBpcyBhIG5vLW9wIGZvciB0eXBpY2FsCiAJICogR0ZQX0hJR0hVU0VSX01PVkFCTEUgYnV0IG1hdHRlcnMgZm9yIHNobWVtLgogCSAqLwotCWlmIChvcmRlcikKJiM0MzsJaWYgKG9yZGVyKSB7CiAJCWdmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayh2bWFfdGhwX2dmcF9tYXNrKHZtYSksIGdmcCk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGlzIGdmcCBtYXkgbm90IGFsbG93IGJsb2NraW5nLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2UKJiM0MzsJCSAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW4KJiM0MzsJCSAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHJldHJ5IHdpdGggYSBzbWFsbGVyIG9yZGVyLCBkb3duIHRvIG9yZGVyLTAsIHdoaWNoIGlzCiYjNDM7CQkgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlciYjMzk7cyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcwomIzQzOwkJICogZG9jdW1lbnRlZC4gIE9ubHkgZmF1bHQgY29udGV4dCBpcyB0aHJvdHRsZWQgaGVyZTsgdGhlCiYjNDM7CQkgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlCiYjNDM7CQkgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLgomIzQzOwkJICovCiYjNDM7CQlpZiAodm1mICZhbXA7JmFtcDsgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwogCWlmIChtcG9sIHx8ICF2bWYpIHsKIAkJZm9saW8gPSBmb2xpb19hbGxvY19tcG9sKGdmcCwgb3JkZXIsIG1wb2wsIGlseCwgbnVtYV9ub2RlX2lkKCkpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY0CgkJCQkJCQlvdXRwdXQ6IDI1NwoJCQkJCQkJdGhvdWdodHM6IDE3NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIGZvciBtZW1jZyBgbWVtb3J5LmhpZ2hgIFRocm90dGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIHdoaWNoIG1vZGlmaWVzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYG1lbW9yeS5oaWdoYCB0aHJvdHRsaW5nIGZvciBsYXJnZSBmb2xpb3MgKFRIUC9tVEhQKSB3aXRoaW4gbWVtb3J5IGNncm91cHMsIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyB1c2luZyBgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGluIHNldmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMsIGluY2x1ZGluZyBgaHVnZV9tZW1vcnkuY2AsIGBtZW1vcnkuY2AsIGFuZCBgc3dhcF9zdGF0ZS5jYC4gRXNzZW50aWFsbHksIGlmIGEgbWVtY2cgaXMgYWJvdmUgaXRzIGBtZW1vcnkuaGlnaGAgbGltaXQgYW5kIHRoZSBhbGxvY2F0aW9uIGNhbiYjMzk7dCBibG9jaywgdGhlIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZmFsbHMgYmFjayB0byBvcmRlci0wLCB1c2luZyBibG9ja2luZyBHRlAsIGFsbG93aW5nIGZvciBwcm9wZXIgdGhyb3R0bGluZy4KCk5leHQsIEkgbWV0aG9kaWNhbGx5IHdlbnQgdGhyb3VnaCB0aGUgY3J1Y2lhbCBhcmVhcyB3aGVyZSBLTVNBTiB3b3VsZCBiZSByZWxldmFudC4gSSBjaGVja2VkIGZvciBwb3RlbnRpYWwgaXNzdWVzIGxpa2Uga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgY29uZGl0aW9uYWwgbG9naWMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdGhlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciwgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBOb25lIG9mIHRoZXNlIHZ1bG5lcmFiaWxpdGllcyBhcmUgcHJlc2VudC4KCkkgdGhlbiBzY3J1dGluaXplZCB0aGUgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGZ1bmN0aW9uIGFuZCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzIHRvIGVuc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXMgd2VyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgcmVhZC4gYGN1cnJlbnQtJmd0O21lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAsIGBpdGVyLSZndDttZW1vcnlgLCBgaXRlci0mZ3Q7bWVtb3J5LmhpZ2hgLCBgdm1hLSZndDt2bV9tbWAsIGBnZnBgIGFyZSBhbGwgYWNjb3VudGVkIGZvciBhbmQgY2hlY2tlZC4gVGhlIG9yZGVyLTAgZm9saW8gZmFsbGJhY2sgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBwYWdlIGlzc3VlcyBhcyB0aG9zZSBmb2xpb3MgYXJlIGFsd2F5cyB6ZXJvZWQgYmVmb3JlIGJlaW5nIG1hcHBlZC4gSSBjb25maXJtZWQgdGhlcmUgYXJlIG5vIGluZm8gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgpDb25zaWRlcmluZyBLTVNBTiYjMzk7cyBwdXJwb3NlLCB3aGljaCBpcyB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBnaXZlbiB0aGF0IHRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBBbGwgZXhpc3RpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIGNvcnJlY3QgZmFsbGJhY2sgcGF0aCBpbiBzcGVjaWZpYyBjYXNlcy4KClRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGNsZWFyOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzIuMjIxMTgyMDk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODA2ODEzMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hcIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGNncm91cCBjaGVjayAoYG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCkgdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyBieSBmYWxsaW5nIGJhY2sgZnJvbSBsYXJnZSBmb2xpb3MgdG8gb3JkZXItMCBhbGxvY2F0aW9ucyB3aGVuIGFsbG9jYXRpbmcgbm9uLWJsb2NraW5nIGZvbGlvcyBhYm92ZSB0aGUgdGhyZXNob2xkLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGFuZCByZWFkcyBgcGFnZV9jb3VudGVyYCB2YWx1ZXMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBubyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgYW5kIGZvbGlvIGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgdW5jaGFuZ2VkIChhbm9ueW1vdXMgcGFnZXMvZm9saW9zIGNvbnRpbnVlIHRvIGJlIHplcm9lZCBiZWZvcmUgbWFwcGluZykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiwgcmVmY291bnRpbmcsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciBsb2NrZGVwIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4vTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBmb3IgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiAoVEhQIGFuZCBzd2FwIGNhY2hlKSB1bmRlciBtZW1jZyBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudC4gSXQgaW50cm9kdWNlcyBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkgdG8gcHJldmVudCBub24tYmxvY2tpbmcgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMgZnJvbSBieXBhc3NpbmcgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZywgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIGluIGFub255bW91cyBwYWdlIGZhdWx0cyBhbmQgc3dhcC1pbiBmYXVsdHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1tIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjMyLjIyMTE4OTgxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjM0NDI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwNGM4NTUxNzcwNDY3YjVkMjBlYjA3NWM1YTY3NGExYzAxZjdlZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDU6MTk6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDQ2YmY3MjRjYWU3YWYuLmRlZmVmMGQzZDcxMGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC05NDEsNiArOTQxLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdFxcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcXG4gfVxcbiBcXG4rYm9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xcbitcXG4rLyoqXFxuKyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/XFxuKyAqIEBtbTogbW0gdGhlIGZvbGlvIHdvdWxkIGJlIGNoYXJnZWQgYWdhaW5zdCwgbWF5IGJlIE5VTExcXG4rICogQGdmcDogZ2ZwIG1hc2sgdGhlIGZvbGlvIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgY2hhcmdlZCB3aXRoXFxuKyAqXFxuKyAqIFNlZSBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkuXFxuKyAqXFxuKyAqIFRoZSB0YXNrJ3Mgb3Zlci1oaWdoIGRlYnQgaXMgbW9yZSB0aGFuIGEgZmFzdCBwYXRoIGhlcmUsIGl0IGFsc28gc2NvcGVzXFxuKyAqIHRoZSBjaGVjayB0byB0aGUgY2FzZSB0aGF0IGlzIGJyb2tlbi4gIFRoZSBkZWJ0IGlzIHNldHRsZWQgYW5kIGNsZWFyZWQgb25cXG4rICogZXZlcnkgcmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gYSB0YXNrIGZhdWx0aW5nIGxhcmdlIGZvbGlvcyBmcm9tIGFcXG4rICogdXNlcnNwYWNlIGxvb3AgYWx3YXlzIGZpbmRzIGl0IHplcm8gYW5kIGtlZXBzIGdldHRpbmcgdGhlbSAtIG1lbW9yeS5oaWdoXFxuKyAqIGlzIGVuZm9yY2VkIGZvciBpdCBvbiB0aGUgd2F5IG91dC4gIE9ubHkgYSBsb29wIHRoYXQgc3RheXMgaW4gdGhlIGtlcm5lbCxcXG4rICogd2hlcmUgbm90aGluZyB0aHJvdHRsZXMgYXQgYWxsLCBhY2NydWVzIGRlYnQgYW5kIHJlYWNoZXMgdGhlIGNvdW50ZXJzLlxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0aWYgKGxpa2VseSghY3VycmVudC1cXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gobW0sIGdmcCk7XFxuK31cXG4rXFxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIFxcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbkBAIC0xMzkwLDYgKzE0MTcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAoXFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbilcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTM1NSw2ICsxMzU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoXFxuK1xcdCAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJ3QgaGFuZCBvdXQgb25lIHdoaWxlIHRoZVxcbitcXHQgKiBjZ3JvdXAgaXMgYWxyZWFkeSBhYm92ZSBtZW1vcnkuaGlnaDogdGhlIG9yZGVyLTAgZmFsbGJhY2sgaXMgY2hhcmdlZFxcbitcXHQgKiB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZXMgYXMgZG9jdW1lbnRlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuK1xcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XFxuK1xcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyIFxcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTQ2MGNiYTUzNTg4ZS4uZGQ3YTYyYzNkYWNiMiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjU4Nyw2ICsyNTg3LDYyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4gXFx0cmV0dXJuIHBlbmFsdHlfamlmZmllcyAqIG5yX3BhZ2VzIC8gTUVNQ0dfQ0hBUkdFX0JBVENIO1xcbiB9XFxuIFxcbisvKipcXG4rICogX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xcbisgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXFxuKyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxcbisgKlxcbisgKiBtZW1vcnkuaGlnaCBpcyBlbmZvcmNlZCBvbiByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBzeW5jaHJvbm91c2x5IGluXFxuKyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcFxcbisgKiBhbGxvd2luZyBibG9ja2luZy4gIExhcmdlIGZvbGlvcyBhcmUgY2hhcmdlZCB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsXFxuKyAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGJsb2NraW5nIHVubGVzcyB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgYXNrcyBmb3IgZGlyZWN0XFxuKyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0XFxuKyAqIGRvZXMgbm90IHJldHVybiB0byB1c2Vyc3BhY2UgaW5iZXR3ZWVuIC0gdGhlIHBvcHVsYXRlIGxvb3Agb2YgbWxvY2soKSBvclxcbisgKiBNQURWX1BPUFVMQVRFXyosIGFueSBHVVAtZHJpdmVuIHBvcHVsYXRpb24gLSBjYW4gZ3JvdyB1c2FnZSBmcm9tXFxuKyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS5cXG4rICpcXG4rICogQWJvdmUgbWVtb3J5LmhpZ2ggdGhlIGNncm91cCBpcyBzdXBwb3NlZCB0byBiZSB1bmRlciByZWNsYWltIHByZXNzdXJlLCBzb1xcbisgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpc1xcbisgKiBjaGFyZ2VkIHdpdGggYSBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcyBkb2N1bWVudGVkLlxcbisgKlxcbisgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZVxcbisgKiBsYXJnZSBmb2xpbyBlaXRoZXIgd2F5LlxcbisgKlxcbisgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlXFxuKyAqIGNvdW50ZXIgbG9va3VwIG9mZiB0aGUgZmF1bHQgcGF0aCB1bmxlc3MgdGhlIHRhc2sgaGFzIGFjdHVhbGx5IGNoYXJnZWRcXG4rICogYWJvdmUgbWVtb3J5LmhpZ2ggYmVmb3JlLlxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuXFxuKyAqL1xcbitib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICppdGVyO1xcbitcXHRib29sIG92ZXJfaGlnaCA9IGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBjaGFyZ2UgdGhhdCBjYW4gYmxvY2sgaXMgdGhyb3R0bGVkIGJ5IHRyeV9jaGFyZ2VfbWVtY2coKSBpdHNlbGYsXFxuK1xcdCAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBnaXZlIHVwIHRoZSBsYXJnZSBmb2xpbyBmb3IgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpdGVyID0gbWVtY2c7IGl0ZXI7IGl0ZXIgPSBwYXJlbnRfbWVtX2Nncm91cChpdGVyKSkge1xcbitcXHRcXHRpZiAocGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNml0ZXItXFx1MDAzZW1lbW9yeSkgXFx1MDAzZVxcbitcXHRcXHQgICAgUkVBRF9PTkNFKGl0ZXItXFx1MDAzZW1lbW9yeS5oaWdoKSkge1xcbitcXHRcXHRcXHRvdmVyX2hpZ2ggPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK1xcbitcXHRyZXR1cm4gb3Zlcl9oaWdoO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cXG4gICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA5MjYyNzZkNDE5MjAyLi5iMjhmY2NjODYyMTZiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNTMyMSw2ICs1MzIxLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcbiBcXHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cXG4gXFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbitcXG4rXFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXFxuK1xcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuK1xcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbitcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXHR9XFxuK1xcbiBcXHR3aGlsZSAob3JkZXJzKSB7XFxuIFxcdFxcdGFkZHIgPSBBTElHTl9ET1dOKHZtZi1cXHUwMDNlYWRkcmVzcywgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gXFx0XFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggNjI1YzE4NWExY2E0ZC4uYTIzNWM5YWVjYWYxOCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcXG5AQCAtNDQwLDkgKzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0ICogTGltaXQgVEhQIGdmcC4gVGhlIGxpbWl0YXRpb24gaXMgYSBuby1vcCBmb3IgdHlwaWNhbFxcbiBcXHQgKiBHRlBfSElHSFVTRVJfTU9WQUJMRSBidXQgbWF0dGVycyBmb3Igc2htZW0uXFxuIFxcdCAqL1xcbi1cXHRpZiAob3JkZXIpXFxuK1xcdGlmIChvcmRlcikge1xcbiBcXHRcXHRnZnAgPSB0aHBfc2htZW1fbGltaXRfZ2ZwX21hc2sodm1hX3RocF9nZnBfbWFzayh2bWEpLCBnZnApO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhpcyBnZnAgbWF5IG5vdCBhbGxvdyBibG9ja2luZywgaW4gd2hpY2ggY2FzZSB0aGUgY2hhcmdlXFxuK1xcdFxcdCAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW5cXG4rXFx0XFx0ICogdHJ5X2NoYXJnZV9tZW1jZygpLiAgQWJvdmUgbWVtb3J5LmhpZ2gsIGhhdmUgdGhlIGNhbGxlclxcbitcXHRcXHQgKiByZXRyeSB3aXRoIGEgc21hbGxlciBvcmRlciwgZG93biB0byBvcmRlci0wLCB3aGljaCBpc1xcbitcXHRcXHQgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlcidzIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzXFxuK1xcdFxcdCAqIGRvY3VtZW50ZWQuICBPbmx5IGZhdWx0IGNvbnRleHQgaXMgdGhyb3R0bGVkIGhlcmU7IHRoZVxcbitcXHRcXHQgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlXFxuK1xcdFxcdCAqIG5vdCB0aGUgb25lcyB0byBob2xkIGJhY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodm1mIFxcdTAwMjZcXHUwMDI2IG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHZtYS1cXHUwMDNldm1fbW0sIGdmcCkpXFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobXBvbCB8fCAhdm1mKSB7XFxuIFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2NfbXBvbChnZnAsIG9yZGVyLCBtcG9sLCBpbHgsIG51bWFfbm9kZV9pZCgpKTtcXG4gXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzMuNzg0MzIxOTEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5MTE4NjQ2NzE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgZm9yIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gKFRIUCBhbmQgc3dhcCBjYWNoZSkgdW5kZXIgbWVtY2cgbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQuIEl0IGludHJvZHVjZXMgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpIHRvIHByZXZlbnQgbm9uLWJsb2NraW5nIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zIGZyb20gYnlwYXNzaW5nIG1lbW9yeS5oaWdoIHRocm90dGxpbmcsIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBpbiBhbm9ueW1vdXMgcGFnZSBmYXVsdHMgYW5kIHN3YXAtaW4gZmF1bHRzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCByZWFjaGFibGUgY29yZSBtbSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwNGM4NTUxNzcwNDY3YjVkMjBlYjA3NWM1YTY3NGExYzAxZjdlZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNToxOTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDQ2YmY3MjRjYWU3YWYuLmRlZmVmMGQzZDcxMGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC05NDEsNiArOTQxLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcbiB9XG4gXG4rYm9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuK1xuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/XG4rICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTFxuKyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuKyAqXG4rICogU2VlIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKS5cbisgKlxuKyAqIFRoZSB0YXNrJ3Mgb3Zlci1oaWdoIGRlYnQgaXMgbW9yZSB0aGFuIGEgZmFzdCBwYXRoIGhlcmUsIGl0IGFsc28gc2NvcGVzXG4rICogdGhlIGNoZWNrIHRvIHRoZSBjYXNlIHRoYXQgaXMgYnJva2VuLiAgVGhlIGRlYnQgaXMgc2V0dGxlZCBhbmQgY2xlYXJlZCBvblxuKyAqIGV2ZXJ5IHJldHVybiB0byB1c2Vyc3BhY2UsIHNvIGEgdGFzayBmYXVsdGluZyBsYXJnZSBmb2xpb3MgZnJvbSBhXG4rICogdXNlcnNwYWNlIGxvb3AgYWx3YXlzIGZpbmRzIGl0IHplcm8gYW5kIGtlZXBzIGdldHRpbmcgdGhlbSAtIG1lbW9yeS5oaWdoXG4rICogaXMgZW5mb3JjZWQgZm9yIGl0IG9uIHRoZSB3YXkgb3V0LiAgT25seSBhIGxvb3AgdGhhdCBzdGF5cyBpbiB0aGUga2VybmVsLFxuKyAqIHdoZXJlIG5vdGhpbmcgdGhyb3R0bGVzIGF0IGFsbCwgYWNjcnVlcyBkZWJ0IGFuZCByZWFjaGVzIHRoZSBjb3VudGVycy5cbisgKlxuKyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRpZiAobGlrZWx5KCFjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKG1tLCBnZnApO1xuK31cbitcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5AQCAtMTM5MCw2ICsxNDE3LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbilcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTM1NSw2ICsxMzU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4rXHQvKlxuK1x0ICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoXG4rXHQgKiB0aHJvdHRsaW5nIGluIHRyeV9jaGFyZ2VfbWVtY2coKS4gIERvbid0IGhhbmQgb3V0IG9uZSB3aGlsZSB0aGVcbitcdCAqIGNncm91cCBpcyBhbHJlYWR5IGFib3ZlIG1lbW9yeS5oaWdoOiB0aGUgb3JkZXItMCBmYWxsYmFjayBpcyBjaGFyZ2VkXG4rXHQgKiB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZXMgYXMgZG9jdW1lbnRlZC5cbitcdCAqL1xuK1x0aWYgKG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHZtYS1cdTAwM2V2bV9tbSwgZ2ZwKSkge1xuK1x0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuK1x0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgXHUwMDI2IEhQQUdFX1BNRF9NQVNLKTtcbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxNDYwY2JhNTM1ODhlLi5kZDdhNjJjM2RhY2IyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNTg3LDYgKzI1ODcsNjIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuIFx0cmV0dXJuIHBlbmFsdHlfamlmZmllcyAqIG5yX3BhZ2VzIC8gTUVNQ0dfQ0hBUkdFX0JBVENIO1xuIH1cbiBcbisvKipcbisgKiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/XG4rICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTFxuKyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuKyAqXG4rICogbWVtb3J5LmhpZ2ggaXMgZW5mb3JjZWQgb24gcmV0dXJuIHRvIHVzZXJzcGFjZSwgb3Igc3luY2hyb25vdXNseSBpblxuKyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcFxuKyAqIGFsbG93aW5nIGJsb2NraW5nLiAgTGFyZ2UgZm9saW9zIGFyZSBjaGFyZ2VkIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCxcbisgKiB3aGljaCBkb2VzIG5vdCBhbGxvdyBibG9ja2luZyB1bmxlc3MgdGhlIGFsbG9jYXRpb24gcG9saWN5IGFza3MgZm9yIGRpcmVjdFxuKyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0XG4rICogZG9lcyBub3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbmJldHdlZW4gLSB0aGUgcG9wdWxhdGUgbG9vcCBvZiBtbG9jaygpIG9yXG4rICogTUFEVl9QT1BVTEFURV8qLCBhbnkgR1VQLWRyaXZlbiBwb3B1bGF0aW9uIC0gY2FuIGdyb3cgdXNhZ2UgZnJvbVxuKyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS5cbisgKlxuKyAqIEFib3ZlIG1lbW9yeS5oaWdoIHRoZSBjZ3JvdXAgaXMgc3VwcG9zZWQgdG8gYmUgdW5kZXIgcmVjbGFpbSBwcmVzc3VyZSwgc29cbisgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpc1xuKyAqIGNoYXJnZWQgd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzIGRvY3VtZW50ZWQuXG4rICpcbisgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZVxuKyAqIGxhcmdlIGZvbGlvIGVpdGhlciB3YXkuXG4rICpcbisgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlXG4rICogY291bnRlciBsb29rdXAgb2ZmIHRoZSBmYXVsdCBwYXRoIHVubGVzcyB0aGUgdGFzayBoYXMgYWN0dWFsbHkgY2hhcmdlZFxuKyAqIGFib3ZlIG1lbW9yeS5oaWdoIGJlZm9yZS5cbisgKlxuKyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci5cbisgKi9cbitib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICppdGVyO1xuK1x0Ym9vbCBvdmVyX2hpZ2ggPSBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBBIGNoYXJnZSB0aGF0IGNhbiBibG9jayBpcyB0aHJvdHRsZWQgYnkgdHJ5X2NoYXJnZV9tZW1jZygpIGl0c2VsZixcbitcdCAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBnaXZlIHVwIHRoZSBsYXJnZSBmb2xpbyBmb3IgaXQuXG4rXHQgKi9cbitcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpdGVyID0gbWVtY2c7IGl0ZXI7IGl0ZXIgPSBwYXJlbnRfbWVtX2Nncm91cChpdGVyKSkge1xuK1x0XHRpZiAocGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2aXRlci1cdTAwM2VtZW1vcnkpIFx1MDAzZVxuK1x0XHQgICAgUkVBRF9PTkNFKGl0ZXItXHUwMDNlbWVtb3J5LmhpZ2gpKSB7XG4rXHRcdFx0b3Zlcl9oaWdoID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1xuK1x0cmV0dXJuIG92ZXJfaGlnaDtcbit9XG4rXG4gLypcbiAgKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cbiAgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA5MjYyNzZkNDE5MjAyLi5iMjhmY2NjODYyMTZiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTMyMSw2ICs1MzIxLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXG4gXHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cbiBcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcbitcbitcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuK1x0aWYgKG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHZtYS1cdTAwM2V2bV9tbSwgZ2ZwKSkge1xuK1x0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbitcdFx0Z290byBmYWxsYmFjaztcbitcdH1cbitcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNjI1YzE4NWExY2E0ZC4uYTIzNWM5YWVjYWYxOCAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNDQwLDkgKzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdCAqIExpbWl0IFRIUCBnZnAuIFRoZSBsaW1pdGF0aW9uIGlzIGEgbm8tb3AgZm9yIHR5cGljYWxcbiBcdCAqIEdGUF9ISUdIVVNFUl9NT1ZBQkxFIGJ1dCBtYXR0ZXJzIGZvciBzaG1lbS5cbiBcdCAqL1xuLVx0aWYgKG9yZGVyKVxuK1x0aWYgKG9yZGVyKSB7XG4gXHRcdGdmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayh2bWFfdGhwX2dmcF9tYXNrKHZtYSksIGdmcCk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFRoaXMgZ2ZwIG1heSBub3QgYWxsb3cgYmxvY2tpbmcsIGluIHdoaWNoIGNhc2UgdGhlIGNoYXJnZVxuK1x0XHQgKiBiZWxvdyBlc2NhcGVzIHRoZSBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nIGluXG4rXHRcdCAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXJcbitcdFx0ICogcmV0cnkgd2l0aCBhIHNtYWxsZXIgb3JkZXIsIGRvd24gdG8gb3JkZXItMCwgd2hpY2ggaXNcbitcdFx0ICogY2hhcmdlZCB3aXRoIHRoZSBjYWxsZXIncyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhc1xuK1x0XHQgKiBkb2N1bWVudGVkLiAgT25seSBmYXVsdCBjb250ZXh0IGlzIHRocm90dGxlZCBoZXJlOyB0aGVcbitcdFx0ICogcmVhZGFoZWFkIGFuZCB6c3dhcCB3cml0ZWJhY2sgY2FsbGVycyBoYXZlIG5vIEB2bWYgYW5kIGFyZVxuK1x0XHQgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLlxuK1x0XHQgKi9cbitcdFx0aWYgKHZtZiBcdTAwMjZcdTAwMjYgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuIFx0aWYgKG1wb2wgfHwgIXZtZikge1xuIFx0XHRmb2xpbyA9IGZvbGlvX2FsbG9jX21wb2woZ2ZwLCBvcmRlciwgbXBvbCwgaWx4LCBudW1hX25vZGVfaWQoKSk7XG4gXHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzMuNzg0MzIzNTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTExMjY2OTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBpdCdzIGludHJvZHVjaW5nIGEgY2hlY2sgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwcyBhbmQgbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgd2hlbiBhIG1lbW9yeSBjZ3JvdXAncyBgLmhpZ2hgIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGUgY29kZSBzbmlwcGV0cyBnaXZlIGEgY2xlYXIgcGljdHVyZTpcblxuKiAgIEl0IGludHJvZHVjZXMgYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgdGhhdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgbWVtb3J5IGNncm91cCBpcyBvdmVyIHRoZSBgLmhpZ2hgIGxpbWl0LiBXaGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoaXMgaXMgYSByZWFsIGNoZWNrLCBvdGhlcndpc2UgaXQncyBqdXN0IHN0dWJiZWQuXG4qICAgVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIChmb3IgVEhQL2h1Z2UgcGFnZSBhbGxvY2F0aW9uKSwgYGFsbG9jX2Fub25fZm9saW9gIChmb3IgYW5vbnltb3VzIGZvbGlvIGFsbG9jYXRpb24pLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgKGR1cmluZyBzd2FwIG9wZXJhdGlvbnMpLiBUaGUgY2FsbHMgYWxsIHNlZW0gdG8gYmUgYWJvdXQgY2hlY2tpbmcgaWYgdGhlIGAuaGlnaGAgbGltaXQgaXMgb3ZlciwgYW5kIGlmIGl0IGlzLCBpdCBlaXRoZXIgZmFsbHMgYmFjayAoaW4gVEhQL2ZvbGlvIGFsbG9jYXRpb24pIG9yIHJldHVybnMgYW4gZXJyb3IgKGluIHN3YXAgYWxsb2NhdGlvbikuXG5cbk5vdywgbGV0J3MgZXZhbHVhdGUgdGhpcyBhZ2FpbnN0IHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLiBUaGUgY3JpdGVyaWEgc3RhdGVzIHRoYXQgYW55IGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGRlZmluaXRlbHkgaW4gc2NvcGUuIEkgY2FuIHNlZSBjb3JlIG1tIGNvZGUgYmVpbmcgdG91Y2hlZCAoIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9zd2FwX3N0YXRlLmNgIGFyZSBhbGwgZGVmaW5pdGVseSBjb3JlKSwgYW5kIHNwZWNpZmljYWxseSwgY29kZSByZWxhdGVkIHRvIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24sIFRIUCwgYW5kIHN3YXAgYWxsb2NhdGlvbiAqdW5kZXIqIG1lbW9yeS5oaWdoIG1lbWNnIGxpbWl0cy4gVGhpcyBpcyBhYnNvbHV0ZWx5IGNvcmUgbW0uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhbGxvY2F0aW9uIHBhdGhzIGZvciBsYXJnZSBmb2xpb3MsIFRIUCwgYW5kIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYC5oaWdoYCBsaW1pdCBjaGVja3MuIFRoaXMgbWVhbnMgaXQncyAxMDAlIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIHRoZXJlZm9yZSBJJ20gaW1tZWRpYXRlbHkgbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBJdCdzIGNsZWFybHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHYCBlbmFibGVkLCBhcyB0aGF0J3MgdGhlIGNvbmRpdGlvbmFsIGZvciB0aGUgZnVuY3Rpb24ncyByZWFsIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5lZWRlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYENPTkZJR19TV0FQYCB3b3VsZCBiZSByZXF1aXJlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBJIHdpbGwgbmVlZCB0byB1c2UgYSBncmVwIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBvciBzb3VyY2UgY29kZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzguODk2OTk0OTE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjc0ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTU5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTkwLS8qKlxcbm1tL21lbWNvbnRyb2wuYzoyNTkxOiAqIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2ggLSB3b3VsZCBhIGxhcmdlIGZvbGlvIGVzY2FwZSBtZW1vcnkuaGlnaD9cXG5tbS9tZW1jb250cm9sLmMtMjU5Mi0gKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjYxNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6MjYxNzpib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtMjYxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjM4Ljk1MDY3NTM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNzg1MzMzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqQ2hlY2tpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gZm9yIGBtbS9tZW1jb250cm9sLmNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbWVtb3J5IGNvbnRyb2wuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb21waWxhdGlvbiBndWFyZCBmb3IgYG1tL21lbWNvbnRyb2wuY2Agd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIHRvIHVuZGVyc3RhbmQgKndoeSogb3IgKmlmKiBhIHNwZWNpZmljIG1vZHVsZSBpcyBjb21waWxlZC4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWcgb3IgZGVwZW5kZW5jeSB0aGF0J3MgYWZmZWN0aW5nIGl0cyBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBidWlsZC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZGlhZ25vc2UgYW55IGJ1aWxkLXJlbGF0ZWQgaXNzdWVzIHdpdGggdGhpcyBmaWxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgZHJpdmluZyB0aGlzIGNoZWNrIC0gc28gSSdtIGhvcGluZyBJJ2xsIHF1aWNrbHkgZmluZCB0aGUgY29uZGl0aW9uIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjQxLjMyOTIxMTgzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ0MzM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNjpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDctaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA4Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo0MS4zNzg2NjI4NDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA2NDAxMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBtbWNvbnRyb2wub2AgaXMgYnVpbHQgd2l0aCBgQ09ORklHX01FTUNHYCBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMsIGxpa2VseSBpbiByZWxhdGlvbiB0byByZXNvdXJjZSBsaW1pdGluZyBvciBhY2NvdW50aW5nLiBHaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYXJvdW5kIGxhcmdlIG1lbW9yeSBwYWdlcyAoaHVnZXBhZ2VzKSBhbmQgc3dhcCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiBgaHVnZV9tZW1vcnkuY2AgYW5kIGBzd2FwX3N0YXRlLmNgIHJlZmVyZW5jZWQgaW4gYG1tL01ha2VmaWxlYC4gVGhlc2UgYXJlYXMgYXJlIGNydWNpYWwgYmVjYXVzZSBtZW1vcnkgY29udHJvbCBncm91cHMgb2Z0ZW4gbmVlZCB0byBpbnRlcmFjdCBpbnRyaWNhdGVseSB3aXRoIGh1Z2VwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGFuZCBob3cgc3dhcHBlZCBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGNncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaW50ZXJhY3RzIHdpdGggdGhvc2UgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9yIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGNvbmZpZ3VyYXRpb24sIG9yIGhvdyBodWdlcGFnZXMgb3Igc3dhcCBiZWhhdmlvciBpcyBkaWZmZXJlbnQgd2hlbiBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGluIHVzZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMsIHRoZSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgcmVsYXRlZCB0byBob3cgdGhlc2UgY29tcG9uZW50cyBwbGF5IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6NDMuMzg1MDY2NTI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTQyMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihodWdlX21lbW9yeXxzd2FwX3N0YXRlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03Nz1lbmRpZlxcbm1tL01ha2VmaWxlLTc4LVxcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDE9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDI6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMy1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo0My40MzIyMTYxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMzc0MzgyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgY29kZS4gSSBzZWUgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBhbmQgSSBzaG91bGQgaGF2ZSBrbm93biB0aGF0IGFscmVhZHksIGZvciB0aGUgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeS5oaWdoIGxvZ2ljLCB0aGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlc3NlbnRpYWwgZm9yIGBtbS9odWdlX21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGZvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYC4gQW5kIG9mIGNvdXJzZSwgYENPTkZJR19TV0FQYCBpcyBuZWVkZWQgZm9yIGBzd2FwX3N0YXRlLmNgLCBwYXJ0aWN1bGFybHkgZm9yIGBfX3N3YXBfY2FjaGVfYWxsb2NgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgcGVyaGFwcyBsZXNzIG9idmlvdXMgb25lcywgZm9yIGVpdGhlciBgQ09ORklHX01FTUNHYCBvciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gVGltZSB0byBkaWcgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo0NS42Njk2NTY1MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzMzMTc2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6NDguMDQyOTg3MTkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NTIzNTkxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpbml0L0tjb25maWdgIFNlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEwNzUgdG8gMTEwMCBvZiBgaW5pdC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhpcyBzZWdtZW50IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uLiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBgS2NvbmZpZ2AsIGFuZCB0aGUgbGluZSBudW1iZXJzLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgcmVsYXRlZCB0byAqc29tZSogYXNwZWN0IG9mIHRoZSBrZXJuZWwncyBpbml0aWFsIHNldHVwIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgbG9hZGluZyBvciBlYXJseSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSdsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiY29uZmlnXCIsIFwiYm9vbFwiLCBcInRyaXN0YXRlXCIsIFwiZGVwZW5kcyBvblwiLCBcInNlbGVjdFwiLCBhbmQgYW55IG1vZHVsZSBvciBkcml2ZXIgbmFtZXMgdG8gZ2xlYW4gdGhlIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGVzZSBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBsb2dpY2FsIGZsb3cgLSB0aGUgaGllcmFyY2h5LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGRlZmluZWQgZWxzZXdoZXJlIGluIEtjb25maWcgYW5kIHRoZSBzb3VyY2UgY29kZS4gVGhlIHNwZWNpZmljIHNlY3Rpb24gd2lsbCBkZXRlcm1pbmUgaG93IGltcG9ydGFudCBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjUxLjQ5NTM0ODM0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTE6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwMjpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDQ6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjUxLjQ5NTQ4MDgwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTcxMzcyMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYE1FTUNHYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHYC4gSXTigJlzIHByb2JhYmx5IGEgY29yZSBjb21wb25lbnQsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXTigJlzIG5vdCByZWFsbHkgZGVwZW5kZW50IG9uIGFueXRoaW5nICplbHNlKi4gQnV0IGp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIExldCBtZSBmaXJlIHVwIHRoZSBrZXJuZWwgY29uZmlnLCBhbmQgbmF2aWdhdGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AuLi4gc3BlY2lmaWNhbGx5LCBJJ2xsIGdvIGRpZ2dpbmcgd2l0aGluIHRoZSBgQ0dST1VQU2Agc2VjdGlvbiDigJMgdGhhdOKAmXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaXQuIEdvdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBpbiBob3cgaXQncyBlbmFibGVkIG9yIGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTMwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1My42NjY4NTUzNzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTIyMzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0dST1VQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNDY9Y29uZmlnIFNMQUJfT0JKX0VYVFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNDgtXFxuaW5pdC9LY29uZmlnOjEwNDk6bWVudWNvbmZpZyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTEwNTAtXFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1My43MTMzODIyNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMxOTI1ODM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDR1JPVVBTIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXM6IEEgQ29uZmlndXJhdGlvbiBRdWVyeSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gWWVzLCBDR1JPVVBTIGlzIGRlZmluaXRlbHkgdGhlIG92ZXJhcmNoaW5nIHN0cnVjdHVyZSwgdGhlIGNvbnRhaW5lciBmb3IgYWxsIG9mIHRoaXMuIEJ1dCBub3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBzZXR0aW5nIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gaXRzIHN0YXR1cyBhbmQgaG93IGl0IHBsYXlzIHdpdGggdGhpcyBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBDR1JPVVBTIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1Ny4wMzI2NDg3NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjgyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzE9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMy1cXG5tbS9LY29uZmlnOjgzNDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzUtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6NTcuMDc4OTUxMjk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1NjMyNDk3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gVGhlIGZpbGUgSSBuZWVkIGlzIGBtbS9LY29uZmlnYCwgYW5kIEknbSBpbnRlcmVzdGVkIGluIGxpbmVzIDgzNCB0aHJvdWdoIDg1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHdoYXRldmVyIEknbSBpbnZlc3RpZ2F0aW5nLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBob2xkcyB0aGUgaW5mb3JtYXRpb24gSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyb3VuZCB0aGlzIHNwZWNpZmljIGFyZWEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRlcGVuZGVuY2llcyB0aGF0IGNvbnRyb2wgd2hhdGV2ZXIgaXQgaXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1OS42NDIyMDMxMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODM0LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM0OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM1OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzc6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODM5OlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDA6XFx0XFx0aGVscFxcbiA4NDE6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MjpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQzOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NDpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NTpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ2OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NDk6XFx0XFxuIDg1MDpcXHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NTE6XFx0XFxuIDg1MjpcXHRjaG9pY2VcXG4gODUzOlxcdFxcdHByb21wdCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1xcXCJcXG4gODU0OlxcdFxcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg1NTpcXHRcXHRoZWxwXFxuIDg1NjpcXHRcXHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjU5LjY0MjMzNDI4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzUwMzgyNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2V5IFN5bWJvbHMgaW4gdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBDb250ZXh0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHN5bWJvbHMuIEZpcnN0IHVwLCBJJ20gbG9va2luZyBhdCBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAuIERlZmluZWQgcmlnaHQgdGhlcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCdzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIHByaW1hcnkgZm9jdXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2lsbCBsaWtlbHkgcmVzaWRlLCBzbyBJJ20gZ29pbmcgdG8gcGF5IHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGl0LlxuXG5UaGVuLCB0aGVyZSdzIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSXQncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIEkgc2hvdWxkIGxvb2sgZm9yIGl0cyBjYWxsZXJzLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyB0aGlzIG9uZS4gSSBrbm93IHRoaXMgY29kZSBwcmV0dHkgd2VsbCwgc28gSSB0aGluayB0aGlzIHdpbGwgeWllbGQgaW1wb3J0YW50IGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjAyLjM5MjcxOTEyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MDgxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTEzNDk9RVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcXG5tbS9odWdlX21lbW9yeS5jLTEzNTAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEzNTItXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDM4PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0NDUtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDQ2OlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE0NDctXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxNTA9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjE1Ny1cXG5tbS9odWdlX21lbW9yeS5jOjIxNTg6XFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjE1OS1cXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG4tLVxcbm1tL21lbW9yeS5jPTUyNzA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUzMjQtXFxubW0vbWVtb3J5LmM6NTMyNTpcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG5tbS9tZW1vcnkuYy01MzI2LVxcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjAyLjQ0MzYzNTE0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjY0MTA2NTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHNwZWFraW5nIGFzIGFuIGV4cGVydDpcblxuKipUcmFjaW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIFBhdGhzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzIHRoYXQgbGVhZCB0byB0aGUgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIGludm9sdmluZyBgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3plcm9fd3BfcG1kYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZS4gSSdtIGFzc3VtaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgb2YgYW5vbnltb3VzIGh1Z2UgcGFnZXMuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmQgYW5kIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZWlyIHVzZS4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIGhhdmUgdG8gZm9sbG93IGEgYnVuY2ggb2YgYHRyYWNlX3ByaW50a2Agc3RhdGVtZW50cyBhbmQgY2FsbCBzdGFjayBpbnNwZWN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgYW5kIHdoZW4sIGFuZCBob3csIHRoZSB6ZXJvIHBhZ2UgaXMgd3JpdHRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDoyNS4wODQ3MDM2MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDcwOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlfGRvX2h1Z2VfemVyb193cF9wbWQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTE0Mjg9c3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0MzctXFxubW0vaHVnZV9tZW1vcnkuYzoxNDM4OnN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaHVnZV9tZW1vcnkuYy0xNDM5LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTU3Nz12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNjMwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTYzMTpcXHRyZXR1cm4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTYzMi19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxNDA9Ym9vbCBodWdlX3BtZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxNDktXFxubW0vaHVnZV9tZW1vcnkuYzoyMTUwOnN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaHVnZV9tZW1vcnkuYy0yMTUxLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjE4Mj12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3dwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxOTQtXFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzoyMTk1OlxcdFxcdHZtX2ZhdWx0X3QgcmV0ID0gZG9faHVnZV96ZXJvX3dwX3BtZCh2bWYpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjE5Ni1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjUzNj1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1MS1cXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcXG5tbS9odWdlX21lbW9yeS5jOjI1NTI6XFx0ICogX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1My1cXHQgKi9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NzgwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODgtICogQHBhZ2UgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIHNldHVwIGFmdGVyIGl0J3MgYWxsb2NhdGVkLiBUaGUgY29kZSBiaXRzXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODk6ICogaGVyZSBmb2xsb3cgY2xvc2VseSB0aGUgY29kZSBpbiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKCkuIFRoaXMgQVBJIGRvZXNcXG5tbS9taWdyYXRlX2RldmljZS5jLTc5MC0gKiBub3Qgc3VwcG9ydCBUSFAgemVybyBwYWdlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6MjUuMTQwNzgxNjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyOTIzNjkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZSBQTUQgQW5vbnltb3VzIFBhZ2UgRmF1bHRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAuIEl0J3MgYSBmdW5jdGlvbiwgbm90IGEgc3RhdGljIG9uZSwgd2hpY2ggdGVsbHMgbWUgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgYnJvYWRlciBodWdlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBhbHJlYWR5IGtub3cgaXQncyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNvIEknbSBndWVzc2luZyBpdCdzIHNwZWNpZmljIHRvIGhhbmRsaW5nIGZhdWx0cyBmb3IgYW5vbnltb3VzIGh1Z2UgUE1EcyDigJMgYmlnIHBhZ2VzIHRoYXQgYXJlbid0IGJhY2tlZCBieSBhbnkgZmlsZS5cblxuTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaHVnZSBQTUQgZmF1bHRzIGFjdHVhbGx5IGdldCBhbiBhbm9ueW1vdXMgcGFnZSBhbGxvY2F0ZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIGlzIHRoZSBjYWxscyB0byBgYWxsb2NfYW5vbl9mb2xpb2AuIEknbGwgd2FudCB0byBjaGVjayB0aGUgY2FsbGVycyBpbiBgbW0vbWVtb3J5LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbGxvY2F0aW9uIHBhdGggYW5kIGluc2lnaHQgaW50byB3aGVyZSB0aGVzZSBodWdlIHBhZ2VzIGFyZSBiZWluZyBicm91Z2h0IGludG8gZXhpc3RlbmNlIG9uIGRlbWFuZCwgcmlnaHQgd2hlbiBhIHByb2Nlc3MgdHJpZXMgdG8gYWNjZXNzIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseSBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGFub24gZm9saW8ncyBhbGxvY2F0aW9uIGxvZ2ljIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGh1Z2UgcGFnZSBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDoyNy40NzAwMjA2NzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTkzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2Fub25fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1MC1cXG5tbS9odWdlX21lbW9yeS5jOjEzNTE6c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1Mi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE0Mzg9c3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0NS1cXG5tbS9odWdlX21lbW9yeS5jOjE0NDY6XFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0Ny1cXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjE1MD1zdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3plcm9fd3BfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMTU3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjE1ODpcXHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vaHVnZV9tZW1vcnkuYy0yMTU5LVxcdGlmICh1bmxpa2VseSghZm9saW8pKVxcbi0tXFxubW0vbWVtb3J5LmM9NTI1OD1zdGF0aWMgYm9vbCBwdGVfcmFuZ2Vfbm9uZShwdGVfdCAqcHRlLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1vcnkuYy01MjY5LVxcbm1tL21lbW9yeS5jOjUyNzA6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy01MjcxLXtcXG4tLVxcbm1tL21lbW9yeS5jLTUzMjQtXFxubW0vbWVtb3J5LmM6NTMyNTpcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG5tbS9tZW1vcnkuYy01MzI2LVxcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz01NDAzPXN0YXRpYyB2bV9mYXVsdF90IGRvX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTQ1Ny1cXHQvKiBSZXR1cm5zIE5VTEwgb24gT09NIG9yIEVSUl9QVFIoLUVBR0FJTikgaWYgd2UgbXVzdCByZXRyeSB0aGUgZmF1bHQgKi9cXG5tbS9tZW1vcnkuYzo1NDU4OlxcdGZvbGlvID0gYWxsb2NfYW5vbl9mb2xpbyh2bWYpO1xcbm1tL21lbW9yeS5jLTU0NTktXFx0aWYgKElTX0VSUihmb2xpbykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjI3LjUyNzYxOTc5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDk2NDIyMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBbm9ueW1vdXMgUGFnZSBGYXVsdHMqKlxuXG5Pa2F5LCBzbyBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgKmV2ZXJ5KiBhbm9ueW1vdXMgcGFnZSBmYXVsdC4gSXQncyB0aGUgY2VudHJhbCBodWIsIHRoZSBtb3N0IGNvbW1vbiBjYXNlLCBzbyB3ZSBuZWVkIHRvIGxvb2sgYmV5b25kIHRoYXQgZnVuY3Rpb24uIEZvY3VzaW5nIG9uIGBkb19hbm9ueW1vdXNfcGFnZWAgaXMgYSB3YXN0ZSBvZiB0aW1lIGF0IHRoaXMgcG9pbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIHByb2JsZW0gaXNuJ3QgaW4gdGhlICpoYW5kbGluZyogb2YgdGhlIGZhdWx0LCBidXQgaW4gaG93IHdlJ3JlIG1hbmFnaW5nIHRoZSBzd2FwcGVkIHBhZ2VzLCBzbyB0aGUgbmV4dCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgaW4gYHN3YXBfc3RhdGUuY2AsIHBhcnRpY3VsYXJseSB0aGUgYF9fc3dhcF9jYWNoZV9hbGxvY2AgZnVuY3Rpb24sIHByb3ZpZGVzIHNvbWUgaW5zaWdodHMgaW50byBob3cgYW5vbnltb3VzIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkIHdoZW4gc3dhcHBlZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMuIFdoYXQgY2F1c2VzIHRoZSBzd2FwIGNhY2hlIHRvIGJlIHVzZWQgc28gZnJlcXVlbnRseT8gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGFjdHVhbGx5ICpjYWxsKiBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhlIGNhbGwgZ3JhcGggb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV2ZWFsIHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiwgYW5kIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHZpZXcgb2Ygd2hlcmUgdGhlIGJvdHRsZW5lY2sgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODM2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6MzEuMDI0MDQ0ODM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI3MjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2FjaGVfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz0zNjk9dm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQxNS0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NDE2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXBfc3RhdGUuYy00MTctXFx0XFx0XFx0XFx0XFx0c3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTUzNT1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTU1MC1cXHRkbyB7XFxubW0vc3dhcF9zdGF0ZS5jOjU1MTpcXHRcXHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXFxubW0vc3dhcF9zdGF0ZS5jLTU1Mi1cXHRcXHRcXHRcXHRcXHQgdm1mLCBtcG9sLCBpbHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDozMS4wNzYzMjMyNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDgzMTAxNzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGNydWNpYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24sIHNvIGtub3dpbmcgaXRzIGNhbGwgcGF0aHMgaXMgdml0YWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciB1bmRlcnN0YW5kaW5nIGEgY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGxpa2VseSBtZWFucyB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBmcm9tIHRoZSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgc3dhcCBjYWNoZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JhYmx5IHN0YXJ0IHdpdGggYHN3YXBfcmVhZHBhZ2VgLCBgc3dhcF93cml0ZXBhZ2VgLCBhbmQgdGhlIHJlY2xhaW0gcGF0aC4gIFRob3NlIGFyZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aGluZyB0aGV5IGludm9rZSwgaW50ZXJhY3Qgd2l0aCB0aGUgc3dhcCBjYWNoZSBjb2RlLiBBcmUgdGhlcmUgc3BlY2lmaWMgZm9saW8gZmxhZ3MsIG9yIHBhZ2Ugc3RhdGVzLCB0aGF0IGFyZSBiZWluZyBwYXNzZWQgaW4gd2hpY2ggd291bGQgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2A/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIGlzIHRoaXMgY2FsbCBwYXRoIHRyaWdnZXJlZCBieSBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaW4gYW5vdGhlciBwYXJ0IG9mIHRoZSBzeXN0ZW0/XG5cbkknbGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IC0gYW0gSSBjb25jZXJuZWQgYWJvdXQgYSBwYXJ0aWN1bGFyIGlzc3VlIHN1Y2ggYXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG1lbW9yeSBsZWFrcywgb3IgYSBjcmFzaD8gIEtub3dpbmcgdGhpcywgSSBjYW4gbmFycm93IGRvd24gdGhlIHNlYXJjaCB0byByZWxldmFudCBjYWxsIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGlmIHRoaXMgaXMgYWJvdXQgcGVyZm9ybWFuY2UsIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGZyZXF1ZW50bHkgZXhlY3V0ZWQgcGF0aHMuIElmIEkgYW0gbG9va2luZyBmb3IgYSBtZW1vcnkgbGVhayBJIHdhbnQgdG8gbG9vayBhdCB3aGVyZSB0aGUgZm9saW8gaXMgKnJlbGVhc2VkKiBhZnRlciBhbGxvY2F0aW9uIGFuZCB2ZXJpZnkgdGhhdCBldmVyeSBhbGxvY2F0aW9uIGhhcyBhIGNvcnJlc3BvbmRpbmcgZnJlZS5cblxuSSdsbCBwcm9iYWJseSB1c2UgYSB0b29sIHRvIHRyYXZlcnNlIHRoZSBjYWxsZ3JhcGggb3IganVzdCBncmVwIGZvciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBzb3VyY2UuIEkgZXhwZWN0IGl0IHRvIGdldCBxdWl0ZSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBpdCdzIGEgY29yZSBzd2FwIGZ1bmN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZGlmZmVyZW50IGNhbGxlciBjb250ZXh0cyBhbmQgd2hhdCB0aGV5IGFyZSB0cnlpbmcgdG8gYWNoaWV2ZS4gSSdsbCBhbHNvIGNoZWNrIGZvciBhbnkgY29kZSBwYXRocyB0aGF0IG1heSBpbmRpcmVjdGx5IGNhbGwgdGhlIGZ1bmN0aW9uIHRocm91Z2ggc29tZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zLiBNeSBnZW5lcmFsIGFpbSB3aWxsIGJlIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBjYWxsIGNoYWluLCBmcm9tIHRoZSBoaWdoZXN0LWxldmVsIFZGUyBmdW5jdGlvbnMgZG93biB0byB0aGUgc3BlY2lmaWMgZm9saW8gYWxsb2NhdGlvbi4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDozNS45MDczNDI5MjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDgyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXAuaD0zMTQ9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbm1tL3N3YXAuaC0zMTYtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTUxOC0vKipcXG5tbS9zd2FwX3N0YXRlLmM6NTE5OiAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy01MjAtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MzQtICovXFxubW0vc3dhcF9zdGF0ZS5jOjUzNTpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbm1tL3N3YXBfc3RhdGUuYy01MzYtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NjYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02NzItXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo2NzM6XFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG5tbS9zd2FwX3N0YXRlLmMtNjc0LVxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTcwND1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcxMy1cXHRcXHRcXHRyZXR1cm4gZm9saW87XFxubW0vc3dhcF9zdGF0ZS5jOjcxNDpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XFxubW0vc3dhcF9zdGF0ZS5jLTcxNS1cXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTg0ND12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODg5LSAqICAgICAuLi5cXHRcXHRcXHRcXHRzd2Fwb2ZmK3N3YXBvblxcbm1tL3N3YXBmaWxlLmM6MTg5MDogKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpXFxubW0vc3dhcGZpbGUuYy0xODkxLSAqICAgICAgIC8vIGNoZWNrIHN3YXBfbWFwXFxuLS1cXG5tbS96c3dhcC5jPTEwMDU9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTAyMS1cXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL3pzd2FwLmM6MTAyMjpcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG5tbS96c3dhcC5jLTEwMjMtXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDozNS45NjA0MzY0NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTc0NjYzMzE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU3dhcCBDYWNoZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gZHVyaW5nIHBhZ2UgZmF1bHRzLiBgc3dhcGluX3N5bmNgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgZm9yIGZhdWx0IGhhbmRsaW5nLiBJbnRlcmVzdGluZyB0aGF0IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24ndCBzdGF0aWM7IGl0J3MgZXhwb3J0ZWQgaW50ZXJuYWxseSB2aWEgYG1tL3N3YXAuaGAuIFRoYXQgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG5vdCBqdXN0IHN0cmljdGx5IGxpbWl0ZWQgdG8gdGhlIGZpbGUgd2hlcmUgaXQncyBkZWZpbmVkLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp1c2FnZSogcGF0dGVybnMgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHdoYXQgZXhhY3RseSBpcyBjYWxsaW5nIGBzd2FwaW5fc3luY2AgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjQxLjcwNzA3MjMzNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MTExODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4NDQ9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00OTM1LVxcdFxcdGlmIChkYXRhX3JhY2Uoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NZTkNIUk9OT1VTX0lPKSlcXG5tbS9tZW1vcnkuYzo0OTM2OlxcdFxcdFxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbm1tL21lbW9yeS5jLTQ5MzctXFx0XFx0XFx0XFx0XFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXFxuLS1cXG5tbS9zaG1lbS5jPTIyNDg9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjYyLVxcdG1wb2wgPSBzaG1lbV9nZXRfcGdvZmZfcG9saWN5KGluZm8sIGluZGV4LCBvcmRlciwgXFx1MDAyNmlseCk7XFxubW0vc2htZW0uYzoyMjYzOlxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIGdmcCwgQklUKG9yZGVyKSwgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3NobWVtLmMtMjI2NC1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXFxubW0vc3dhcC5oLTMzMy1cXHRcXHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG5tbS9zd2FwLmgtMzM1LVxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuLS1cXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwLmgtNDEzLVxcbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxcbm1tL3N3YXAuaC00MTUtXFx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY2Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjg4LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2ODk6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjkwLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwMy0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzA0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTcwNS1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjQxLjc1NjQ4OTM4N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjM0NDQyOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgYW5kIGl0cyBDYWxsZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSSd2ZSBjb25maXJtZWQgaXQncyBhIG5vbi1zdGF0aWMgc3ltYm9sLCBtZWFuaW5nIGl0J3MgZXhwbGljaXRseSBleHBvcnRlZCBpbiB0aGUgdm1saW51eC4gTm93LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGlkZW50aWZ5IGl0cyBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxlcnMgdG8gZXZhbHVhdGUgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3QuXG5cblRoZSBjb2RlIGl0c2VsZiwgd2l0aCBpdHMgY2hlY2sgZm9yIGJsb2NraW5nIGFsbG9jYXRpb25zLCBtYWtlcyBzZW5zZS4gSXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBpbiBhIG1lbW9yeSBjZ3JvdXAgaWYgdGhlIG1lbW9yeSB1c2FnZSBpcyBhbHJlYWR5IG92ZXIgdGhlIFwiaGlnaFwiIHdhdGVybWFyaywgdW5sZXNzIGEgYmxvY2tpbmcgYWxsb2NhdGlvbiBpcyBiZWluZyBhdHRlbXB0ZWQuIFRoZSBsb29wIHRocm91Z2ggcGFyZW50IGNncm91cHMgaXMgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGZvciB0aGlzIGtpbmQgb2YgaGllcmFyY2hpY2FsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5OZXh0LCBJIGxvb2sgZm9yIHBsYWNlcyB0aGF0IHRvdWNoIG9yIGNhbGwgdGhpcyBmdW5jdGlvbi4gRnJvbSBpbml0aWFsIGluc3BlY3Rpb24sIEkgc2VlIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgaXMgbGlrZWx5IHVzZWQgaW4gVEhQIGFub255bW91cyBmYXVsdHMgKGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWApIGFuZCB3aGVuIGFsbG9jYXRpbmcgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLlxuXG5JIGRpZCBhIGRlZXBlciBkaXZlIGFuZCBjb25maXJtZWQgbXkgaW5pdGlhbCBmaW5kaW5ncyB3ZXJlIGNvcnJlY3QuIE5vdyBJJ20gY2hlY2tpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgcG90ZW50aWFsIGluZGlyZWN0IGNhbGxlcnMuIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgaXMgVEhQLXNwZWNpZmljLCB3aGljaCBtZWFucyBpdHMgaW1wYWN0IGlzbid0IGFzIHdpZGVzcHJlYWQgYXMgZnVuY3Rpb25zIGxpa2UgYGRvX2Fub255bW91c19wYWdlYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGRlYWxzIHdpdGggc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCBhZ2FpbiBhIG1vcmUgdGFyZ2V0ZWQgYXJlYS5cblxuQSByZXZpZXcgb2YgdGhlIGNvbW1pdCBkaWZmcyBoZWxwcyBtZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGFsbCB0aGUgcGllY2VzIGZpdCB0b2dldGhlcjogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgaXMgdGhlIG9uZSB0aGF0IGNhbGxzIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAuIGBhbGxvY19hbm9uX2ZvbGlvYCBjYWxscyBgZG9fYW5vbnltb3VzX3BhZ2VgLiBgX19zd2FwX2NhY2hlX2FsbG9jYCAoY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCkgaXMgdXNlZCBpbiBzd2FwIGNhY2hlIG9wZXJhdGlvbnMuXG5cbkdpdmVuIHRoaXMsIEknbSBjb25maWRlbnQgbXkgXCJGb2N1c1N5bWJvbHNcIiBhcmU6XG4qICAgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgXG4qICAgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYFxuKiAgIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYFxuXG5Ob3cgdG8gdmVyaWZ5IGNvbmZpZyByZXF1aXJlbWVudHMsIHNpbmNlIHRoaXMgaXMgYWxsIGRlcGVuZGVudCBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0c9eWAuICBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBuZWVkcyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFPXlgLiAgQW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NgIHJlcXVpcmVzIGBDT05GSUdfU1dBUD15YC4gSSdsbCB3YW50IHRvIGVuc3VyZSB0aGVzZSBhcmUgZW5hYmxlZCBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZnVuY3Rpb25zIGFzIGludGVuZGVkLiBGaW5hbGx5LCBJJ2xsIGNoZWNrIHRoYXQgYE1FTUNHYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlncy4gIEknbGwgbG9vayBhdCB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDo0OS45OTA5MzUwMDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQ5LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQ5OlxcdG1lbnVjb25maWcgQ0dST1VQU1xcbjEwNTA6XFx0XFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcbjEwNTE6XFx0XFx0c2VsZWN0IEtFUk5GU1xcbjEwNTI6XFx0XFx0aGVscFxcbjEwNTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3JcXG4xMDU0OlxcdFxcdCAgdXNlIHdpdGggcHJvY2VzcyBjb250cm9sIHN1YnN5c3RlbXMgc3VjaCBhcyBDcHVzZXRzLCBDRlMsIG1lbW9yeVxcbjEwNTU6XFx0XFx0ICBjb250cm9scyBvciBkZXZpY2UgaXNvbGF0aW9uLlxcbjEwNTY6XFx0XFx0ICBTZWVcXG4xMDU3OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcXHQoQ0ZTKVxcbjEwNTg6XFx0XFx0XFx0LSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS8gKGZlYXR1cmVzIGZvciBncm91cGluZywgaXNvbGF0aW9uXFxuMTA1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDYyOlxcdFxcbjEwNjM6XFx0aWYgQ0dST1VQU1xcbjEwNjQ6XFx0XFxuMTA2NTpcXHRjb25maWcgUEFHRV9DT1VOVEVSXFxuMTA2NjpcXHRcXHRib29sXFxuMTA2NzpcXHRcXG4xMDY4OlxcdGNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbjEwNjk6XFx0XFx0Ym9vbCBcXFwiRmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFxcXCJcXG4xMDcwOlxcdFxcdGhlbHBcXG4xMDcxOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXFxcImZhdm9yZHlubW9kc1xcXCIgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcXG4xMDcyOlxcdFxcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxcbjEwNzM6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDc0OlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3NzpcXHRcXG4xMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjQ5Ljk5MTA2NDkzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTEwMTg4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFN5c3RlbSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgc3lzdGVtIGlzIHB1dCB0b2dldGhlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDR1JPVVBTYCBpcyBlbmFibGVkLCB0aGVuIGl0J3Mgd3JhcHBpbmcgdXAgYGNvbmZpZyBNRU1DR2AuIFRoaXMgbWVhbnMgYENHUk9VUFNgIGFuZCBgTUVNQ0dgIGFyZSB0aWdodGx5IGNvdXBsZWQsIHdoaWNoIGlzbid0IHN1cnByaXNpbmcuIEkgYWxzbyBzZWUgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGluIHRoZSBtaXggaGVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBTV0FQYCDigJMgY2FuJ3QgZm9yZ2V0IGFib3V0IHN3YXAgc3BhY2UuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhIGJpdCBiZXR0ZXIuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBzcGVjaWZpY2FsbHkgY2hlY2sgaWYgYFNXQVBgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHNlZSBpZiBpdCByZWxpZXMgb24gYW55IG9mIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgb3IgaWYgaXQgY2FuIGxpdmUgaW5kZXBlbmRlbnRseS4gR290dGEgZ2V0IHRoZSBhcmNoaXRlY3R1cmUgbWFwcGVkIG91dCBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6NTYuOTAxMjU2MDUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI2ODI3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6NTYuOTQ5NTM0NjI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNzcxNTA4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgZXhhbWluaW5nIHRoYXQgcXVlc3Rpb246XG5cbioqQW5hbHl6aW5nIFNXQVAncyBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYFNXQVBgIGluIGBtbS9LY29uZmlnYCBkZXBlbmRzIG9uLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbiBhbmQgY2hlY2sgdGhlIEtjb25maWcgZmlsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVuIGFuZCB3aHkgYFNXQVBgIGdldHMgaW5jbHVkZWQgb3IgZXhjbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTE4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjE6MDEuMTI2Njg4NDQ4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTE6XFx0XFxuICAxMjpcXHRtZW51Y29uZmlnIFNXQVBcXG4gIDEzOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTU1VIFxcdTAwMjZcXHUwMDI2IEJMT0NLIFxcdTAwMjZcXHUwMDI2ICFBUkNIX05PX1NXQVBcXG4gIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxcbiAgMTg6XFx0XFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXFxuICAxOTpcXHRcXHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxcbiAgMjA6XFx0XFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMTowMS4xMjY3ODc5NzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc2Njk2MzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c3VhbCBzdXNwZWN0cywgYE1NVWAgYW5kIGBCTE9DS2AsIGFyZSBwcmVzZW50LiBTdGFuZGFyZC4gTGV0J3MgZGlnIGludG8gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpYCBpcyBiZWluZyBpbnRyb2R1Y2VkLiBUaGUgZ29hbCBoZXJlIGlzIHByZXR0eSBjbGVhcjogdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyB3aXRoaW4gYSBtZW1jZyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gVGhpcyBtZWFucyB3ZSdyZSB0YWxraW5nIGFib3V0IFRIUHMgYW5kIHRoZSBzd2FwIGNhY2hlIHNwZWNpZmljYWxseSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgc2NlbmFyaW9zIHdpdGggbm9uLWJsb2NraW5nIEdGUCBtYXNrcy5cblxuRXNzZW50aWFsbHksIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmZsdWVuY2UgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBkZWNpc2lvbnMgd2hlbiBoYW5kbGluZyB0aGluZ3MgbGlrZSBhbm9ueW1vdXMgUE1EIGZhdWx0cywgbXVsdGktc2l6ZSBUSFAgZmF1bHRzLCBhbmQgc3dhcC1jYWNoZSBhbGxvY2F0aW9ucy4gSWYgYG1lbW9yeS5oaWdoYCBpcyBicmVhY2hlZCwgdGhlIGZhbGxiYWNrIHN0cmF0ZWd5IHdpbGwgYmUgdG8gdXNlIHNtYWxsZXIgb3JkZXJzLCBvciBldmVuIG9yZGVyLTAgYWxsb2NhdGlvbnMuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJIHNlZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzOiBgbW0vbWVtY29udHJvbC5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQncyByZWFzb25hYmxlLCBpdCBoaXRzIHRoZSByZWxldmFudCBwaWVjZXMuXG5cbkFscmlnaHQsIGFmdGVyIHRoaXMgcXVpY2sgcmV2aWV3LCBldmVyeXRoaW5nIGxvb2tzIGNvbnNpc3RlbnQgYW5kIGluIG9yZGVyLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCdzIGEgY2xlYW4gaW1wbGVtZW50YXRpb24gb2YgYW4gaW1wb3J0YW50IHBvbGljeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NjAsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjE6MDQuODkzNzUzMTk4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMzE1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hcIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBmb3IgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiAoVEhQIGFuZCBzd2FwIGNhY2hlKSB1bmRlciBtZW1jZyBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudC4gSXQgaW50cm9kdWNlcyBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkgdG8gcHJldmVudCBub24tYmxvY2tpbmcgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMgZnJvbSBieXBhc3NpbmcgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZywgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIGluIGFub255bW91cyBwYWdlIGZhdWx0cyBhbmQgc3dhcC1pbiBmYXVsdHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1tIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaFwiLFxuICAgIFwiZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGZvciBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIChUSFAgYW5kIHN3YXAgY2FjaGUpIHVuZGVyIG1lbWNnIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50LiBJdCBpbnRyb2R1Y2VzIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSB0byBwcmV2ZW50IG5vbi1ibG9ja2luZyBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucyBmcm9tIGJ5cGFzc2luZyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLCBmYWxsaW5nIGJhY2sgdG8gc21hbGxlciBvcmRlcnMgaW4gYW5vbnltb3VzIHBhZ2UgZmF1bHRzIGFuZCBzd2FwLWluIGZhdWx0cy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbW0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjE6MDQuOTcwNzkzMzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1NzE5Mjg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIxOjA0Ljk3MTI2MzQ1NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MDU2NzE4Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGNncm91cCBjaGVjayAoYG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCkgdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyBieSBmYWxsaW5nIGJhY2sgZnJvbSBsYXJnZSBmb2xpb3MgdG8gb3JkZXItMCBhbGxvY2F0aW9ucyB3aGVuIGFsbG9jYXRpbmcgbm9uLWJsb2NraW5nIGZvbGlvcyBhYm92ZSB0aGUgdGhyZXNob2xkLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGFuZCByZWFkcyBgcGFnZV9jb3VudGVyYCB2YWx1ZXMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBubyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgYW5kIGZvbGlvIGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgdW5jaGFuZ2VkIChhbm9ueW1vdXMgcGFnZXMvZm9saW9zIGNvbnRpbnVlIHRvIGJlIHplcm9lZCBiZWZvcmUgbWFwcGluZykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiwgcmVmY291bnRpbmcsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciBsb2NrZGVwIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4vTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzA0Yzg1NTE3NzA0NjdiNWQyMGViMDc1YzVhNjc0YTFjMDFmN2VmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjE5OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggNDZiZjcyNGNhZTdhZi4uZGVmZWYwZDNkNzEwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0MSw2ICs5NDEsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuIH1cbiBcbitib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4rXG4rLyoqXG4rICogbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2ggLSB3b3VsZCBhIGxhcmdlIGZvbGlvIGVzY2FwZSBtZW1vcnkuaGlnaD9cbisgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4rICogQGdmcDogZ2ZwIG1hc2sgdGhlIGZvbGlvIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgY2hhcmdlZCB3aXRoXG4rICpcbisgKiBTZWUgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpLlxuKyAqXG4rICogVGhlIHRhc2sncyBvdmVyLWhpZ2ggZGVidCBpcyBtb3JlIHRoYW4gYSBmYXN0IHBhdGggaGVyZSwgaXQgYWxzbyBzY29wZXNcbisgKiB0aGUgY2hlY2sgdG8gdGhlIGNhc2UgdGhhdCBpcyBicm9rZW4uICBUaGUgZGVidCBpcyBzZXR0bGVkIGFuZCBjbGVhcmVkIG9uXG4rICogZXZlcnkgcmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gYSB0YXNrIGZhdWx0aW5nIGxhcmdlIGZvbGlvcyBmcm9tIGFcbisgKiB1c2Vyc3BhY2UgbG9vcCBhbHdheXMgZmluZHMgaXQgemVybyBhbmQga2VlcHMgZ2V0dGluZyB0aGVtIC0gbWVtb3J5LmhpZ2hcbisgKiBpcyBlbmZvcmNlZCBmb3IgaXQgb24gdGhlIHdheSBvdXQuICBPbmx5IGEgbG9vcCB0aGF0IHN0YXlzIGluIHRoZSBrZXJuZWwsXG4rICogd2hlcmUgbm90aGluZyB0aHJvdHRsZXMgYXQgYWxsLCBhY2NydWVzIGRlYnQgYW5kIHJlYWNoZXMgdGhlIGNvdW50ZXJzLlxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCBmYWxsIGJhY2sgdG8gYSBzbWFsbGVyIG9yZGVyLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdGlmIChsaWtlbHkoIWN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gobW0sIGdmcCk7XG4rfVxuK1xuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4gdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbkBAIC0xMzkwLDYgKzE0MTcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKFxuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIHN0cnVjdCBtZW1fY2dyb3VwICpvb21fZG9tYWluKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNzE0MGExMDMxZmIyZS4uMDU5NTE5NDY1YjI0NCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMzU1LDYgKzEzNTUsMTggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbitcdC8qXG4rXHQgKiBBIFRIUCBjaGFyZ2VkIHdpdGggYSBnZnAgdGhhdCBjYW5ub3QgYmxvY2sgZXNjYXBlcyB0aGUgbWVtb3J5LmhpZ2hcbitcdCAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJ3QgaGFuZCBvdXQgb25lIHdoaWxlIHRoZVxuK1x0ICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWRcbitcdCAqIHdpdGggYSBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlcyBhcyBkb2N1bWVudGVkLlxuK1x0ICovXG4rXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4rXHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XG4rXHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkciBcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDE0NjBjYmE1MzU4OGUuLmRkN2E2MmMzZGFjYjIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI1ODcsNiArMjU4Nyw2MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4gXHRyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7XG4gfVxuIFxuKy8qKlxuKyAqIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2ggLSB3b3VsZCBhIGxhcmdlIGZvbGlvIGVzY2FwZSBtZW1vcnkuaGlnaD9cbisgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4rICogQGdmcDogZ2ZwIG1hc2sgdGhlIGZvbGlvIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgY2hhcmdlZCB3aXRoXG4rICpcbisgKiBtZW1vcnkuaGlnaCBpcyBlbmZvcmNlZCBvbiByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBzeW5jaHJvbm91c2x5IGluXG4rICogdHJ5X2NoYXJnZV9tZW1jZygpIC0gYnV0IHRoZSBzeW5jaHJvbm91cyBwYXRoIGlzIGdhdGVkIG9uIHRoZSBjaGFyZ2UgZ2ZwXG4rICogYWxsb3dpbmcgYmxvY2tpbmcuICBMYXJnZSBmb2xpb3MgYXJlIGNoYXJnZWQgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLFxuKyAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGJsb2NraW5nIHVubGVzcyB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgYXNrcyBmb3IgZGlyZWN0XG4rICogY29tcGFjdGlvbiwgc28gdGhvc2UgY2hhcmdlcyBlc2NhcGUgdGhyb3R0bGluZyBlbnRpcmVseTogYSBmYXVsdCBsb29wIHRoYXRcbisgKiBkb2VzIG5vdCByZXR1cm4gdG8gdXNlcnNwYWNlIGluYmV0d2VlbiAtIHRoZSBwb3B1bGF0ZSBsb29wIG9mIG1sb2NrKCkgb3JcbisgKiBNQURWX1BPUFVMQVRFXyosIGFueSBHVVAtZHJpdmVuIHBvcHVsYXRpb24gLSBjYW4gZ3JvdyB1c2FnZSBmcm9tXG4rICogbWVtb3J5LmhpZ2ggYWxsIHRoZSB3YXkgdXAgdG8gbWVtb3J5Lm1heCB3aXRoIG5vIHJlY2xhaW0gYW5kIG5vIGRlbGF5LlxuKyAqXG4rICogQWJvdmUgbWVtb3J5LmhpZ2ggdGhlIGNncm91cCBpcyBzdXBwb3NlZCB0byBiZSB1bmRlciByZWNsYWltIHByZXNzdXJlLCBzb1xuKyAqIHJlZnVzZSB0aGUgbGFyZ2UgZm9saW8gaW5zdGVhZC4gIENhbGxlcnMgZmFsbCBiYWNrIHRvIG9yZGVyLTAsIHdoaWNoIGlzXG4rICogY2hhcmdlZCB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZWQgYXMgZG9jdW1lbnRlZC5cbisgKlxuKyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBzbmFwc2hvdCBvZiB0aGUgY291bnRlcnM7IGEgc3RhbGUgcmVzdWx0IG9ubHkgY29zdHMgb25lXG4rICogbGFyZ2UgZm9saW8gZWl0aGVyIHdheS5cbisgKlxuKyAqIENhbGxlcnMgc2hvdWxkIHVzZSBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpLCB3aGljaCBrZWVwcyB0aGVcbisgKiBjb3VudGVyIGxvb2t1cCBvZmYgdGhlIGZhdWx0IHBhdGggdW5sZXNzIHRoZSB0YXNrIGhhcyBhY3R1YWxseSBjaGFyZ2VkXG4rICogYWJvdmUgbWVtb3J5LmhpZ2ggYmVmb3JlLlxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCBmYWxsIGJhY2sgdG8gYSBzbWFsbGVyIG9yZGVyLlxuKyAqL1xuK2Jvb2wgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7XG4rXHRib29sIG92ZXJfaGlnaCA9IGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIEEgY2hhcmdlIHRoYXQgY2FuIGJsb2NrIGlzIHRocm90dGxlZCBieSB0cnlfY2hhcmdlX21lbWNnKCkgaXRzZWxmLFxuK1x0ICogdGhlcmUgaXMgbm8gcmVhc29uIHRvIGdpdmUgdXAgdGhlIGxhcmdlIGZvbGlvIGZvciBpdC5cbitcdCAqL1xuK1x0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGl0ZXIgPSBtZW1jZzsgaXRlcjsgaXRlciA9IHBhcmVudF9tZW1fY2dyb3VwKGl0ZXIpKSB7XG4rXHRcdGlmIChwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZpdGVyLVx1MDAzZW1lbW9yeSkgXHUwMDNlXG4rXHRcdCAgICBSRUFEX09OQ0UoaXRlci1cdTAwM2VtZW1vcnkuaGlnaCkpIHtcbitcdFx0XHRvdmVyX2hpZ2ggPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRyZXR1cm4gb3Zlcl9oaWdoO1xuK31cbitcbiAvKlxuICAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxuICAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDkyNjI3NmQ0MTkyMDIuLmIyOGZjY2M4NjIxNmIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC01MzIxLDYgKzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xuIFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xuK1xuK1x0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG4rXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4rXHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuK1x0XHRnb3RvIGZhbGxiYWNrO1xuK1x0fVxuK1xuIFx0d2hpbGUgKG9yZGVycykge1xuIFx0XHRhZGRyID0gQUxJR05fRE9XTih2bWYtXHUwMDNlYWRkcmVzcywgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4gXHRcdGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkcik7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA2MjVjMTg1YTFjYTRkLi5hMjM1YzlhZWNhZjE4IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC00NDAsOSArNDQwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0ICogTGltaXQgVEhQIGdmcC4gVGhlIGxpbWl0YXRpb24gaXMgYSBuby1vcCBmb3IgdHlwaWNhbFxuIFx0ICogR0ZQX0hJR0hVU0VSX01PVkFCTEUgYnV0IG1hdHRlcnMgZm9yIHNobWVtLlxuIFx0ICovXG4tXHRpZiAob3JkZXIpXG4rXHRpZiAob3JkZXIpIHtcbiBcdFx0Z2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKHZtYV90aHBfZ2ZwX21hc2sodm1hKSwgZ2ZwKTtcbiBcbitcdFx0LypcbitcdFx0ICogVGhpcyBnZnAgbWF5IG5vdCBhbGxvdyBibG9ja2luZywgaW4gd2hpY2ggY2FzZSB0aGUgY2hhcmdlXG4rXHRcdCAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW5cbitcdFx0ICogdHJ5X2NoYXJnZV9tZW1jZygpLiAgQWJvdmUgbWVtb3J5LmhpZ2gsIGhhdmUgdGhlIGNhbGxlclxuK1x0XHQgKiByZXRyeSB3aXRoIGEgc21hbGxlciBvcmRlciwgZG93biB0byBvcmRlci0wLCB3aGljaCBpc1xuK1x0XHQgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlcidzIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzXG4rXHRcdCAqIGRvY3VtZW50ZWQuICBPbmx5IGZhdWx0IGNvbnRleHQgaXMgdGhyb3R0bGVkIGhlcmU7IHRoZVxuK1x0XHQgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlXG4rXHRcdCAqIG5vdCB0aGUgb25lcyB0byBob2xkIGJhY2suXG4rXHRcdCAqL1xuK1x0XHRpZiAodm1mIFx1MDAyNlx1MDAyNiBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXHUwMDNldm1fbW0sIGdmcCkpXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4gXHRpZiAobXBvbCB8fCAhdm1mKSB7XG4gXHRcdGZvbGlvID0gZm9saW9fYWxsb2NfbXBvbChnZnAsIG9yZGVyLCBtcG9sLCBpbHgsIG51bWFfbm9kZV9pZCgpKTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMTowNC45NzEyNjQ0OTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcwNTY2OTU1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIGZvciBtZW1jZyBgbWVtb3J5LmhpZ2hgIFRocm90dGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBvYmplY3RpdmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCB3aGljaCBtb2RpZmllcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGBtZW1vcnkuaGlnaGAgdGhyb3R0bGluZyBmb3IgbGFyZ2UgZm9saW9zIChUSFAvbVRIUCkgd2l0aGluIG1lbW9yeSBjZ3JvdXBzLCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyB1c2luZyBgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGluIHNldmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMsIGluY2x1ZGluZyBgaHVnZV9tZW1vcnkuY2AsIGBtZW1vcnkuY2AsIGFuZCBgc3dhcF9zdGF0ZS5jYC4gRXNzZW50aWFsbHksIGlmIGEgbWVtY2cgaXMgYWJvdmUgaXRzIGBtZW1vcnkuaGlnaGAgbGltaXQgYW5kIHRoZSBhbGxvY2F0aW9uIGNhbid0IGJsb2NrLCB0aGUgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWxscyBiYWNrIHRvIG9yZGVyLTAsIHVzaW5nIGJsb2NraW5nIEdGUCwgYWxsb3dpbmcgZm9yIHByb3BlciB0aHJvdHRsaW5nLlxuXG5OZXh0LCBJIG1ldGhvZGljYWxseSB3ZW50IHRocm91Z2ggdGhlIGNydWNpYWwgYXJlYXMgd2hlcmUgS01TQU4gd291bGQgYmUgcmVsZXZhbnQuIEkgY2hlY2tlZCBmb3IgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YgYm91bmRzIGNoZWNrcyBvciBsb2dpYyBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gTm9uZSBvZiB0aGVzZSB2dWxuZXJhYmlsaXRpZXMgYXJlIHByZXNlbnQuXG5cbkkgdGhlbiBzY3J1dGluaXplZCB0aGUgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGZ1bmN0aW9uIGFuZCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzIHRvIGVuc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXMgd2VyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgcmVhZC4gYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCwgYGl0ZXItXHUwMDNlbWVtb3J5YCwgYGl0ZXItXHUwMDNlbWVtb3J5LmhpZ2hgLCBgdm1hLVx1MDAzZXZtX21tYCwgYGdmcGAgYXJlIGFsbCBhY2NvdW50ZWQgZm9yIGFuZCBjaGVja2VkLiBUaGUgb3JkZXItMCBmb2xpbyBmYWxsYmFjayBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgcGFnZSBpc3N1ZXMgYXMgdGhvc2UgZm9saW9zIGFyZSBhbHdheXMgemVyb2VkIGJlZm9yZSBiZWluZyBtYXBwZWQuIEkgY29uZmlybWVkIHRoZXJlIGFyZSBubyBpbmZvIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5Db25zaWRlcmluZyBLTVNBTidzIHB1cnBvc2UsIHdoaWNoIGlzIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIGdpdmVuIHRoYXQgdGhlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBBbGwgZXhpc3RpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIGNvcnJlY3QgZmFsbGJhY2sgcGF0aCBpbiBzcGVjaWZpYyBjYXNlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgY29kZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgaXQncyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY0LCJPdXRwdXRUb2tlbnMiOjI1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMToyMi4wMjc5NjMwNzFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhbHRlciBhbGxvY2F0aW9uIG9yZGVyIGZhbGxiYWNrIGhldXJpc3RpY3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBhZGQgYSBoZWxwZXIgaW4gYG1tL21lbWNvbnRyb2wuY2AgdGhhdCBjaGVja3MgYGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGNncm91cCBjaGVjayAoYG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCkgdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyBieSBmYWxsaW5nIGJhY2sgZnJvbSBsYXJnZSBmb2xpb3MgdG8gb3JkZXItMCBhbGxvY2F0aW9ucyB3aGVuIGFsbG9jYXRpbmcgbm9uLWJsb2NraW5nIGZvbGlvcyBhYm92ZSB0aGUgdGhyZXNob2xkLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGFuZCByZWFkcyBgcGFnZV9jb3VudGVyYCB2YWx1ZXMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBubyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgYW5kIGZvbGlvIGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgdW5jaGFuZ2VkIChhbm9ueW1vdXMgcGFnZXMvZm9saW9zIGNvbnRpbnVlIHRvIGJlIHplcm9lZCBiZWZvcmUgbWFwcGluZykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiwgcmVmY291bnRpbmcsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciBsb2NrZGVwIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4vTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 04:30:56 +0000 UTC FinishedAt: 2026-09-15 05:21:22 +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": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "TRANSPARENT_HUGEPAGE", "SWAP" ], "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": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "TRANSPARENT_HUGEPAGE", "SWAP" ], "series_id": "4be482a0-787d-4579-983b-a64f5ea7314d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__mem_cgroup_large_folio_over_high", "do_huge_pmd_anonymous_page", "swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "baa8de2f3448d1466a888a805c18d01c998fe052", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBmb3IgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiAoVEhQIGFuZCBzd2FwIGNhY2hlKSB1bmRlciBtZW1jZyBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudC4gSXQgaW50cm9kdWNlcyBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkgdG8gcHJldmVudCBub24tYmxvY2tpbmcgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMgZnJvbSBieXBhc3NpbmcgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZywgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIGluIGFub255bW91cyBwYWdlIGZhdWx0cyBhbmQgc3dhcC1pbiBmYXVsdHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1tIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMDRjODU1MTc3MDQ2N2I1ZDIwZWIwNzVjNWE2NzRhMWMwMWY3ZWY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDU6MTk6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggNDZiZjcyNGNhZTdhZi4uZGVmZWYwZDNkNzEwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0MSw2ICYjNDM7OTQxLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcbiB9XG4gXG4mIzQzO2Jvb2wgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xuJiM0MzsgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4mIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgdGFzayYjMzk7cyBvdmVyLWhpZ2ggZGVidCBpcyBtb3JlIHRoYW4gYSBmYXN0IHBhdGggaGVyZSwgaXQgYWxzbyBzY29wZXNcbiYjNDM7ICogdGhlIGNoZWNrIHRvIHRoZSBjYXNlIHRoYXQgaXMgYnJva2VuLiAgVGhlIGRlYnQgaXMgc2V0dGxlZCBhbmQgY2xlYXJlZCBvblxuJiM0MzsgKiBldmVyeSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBhIHRhc2sgZmF1bHRpbmcgbGFyZ2UgZm9saW9zIGZyb20gYVxuJiM0MzsgKiB1c2Vyc3BhY2UgbG9vcCBhbHdheXMgZmluZHMgaXQgemVybyBhbmQga2VlcHMgZ2V0dGluZyB0aGVtIC0gbWVtb3J5LmhpZ2hcbiYjNDM7ICogaXMgZW5mb3JjZWQgZm9yIGl0IG9uIHRoZSB3YXkgb3V0LiAgT25seSBhIGxvb3AgdGhhdCBzdGF5cyBpbiB0aGUga2VybmVsLFxuJiM0MzsgKiB3aGVyZSBub3RoaW5nIHRocm90dGxlcyBhdCBhbGwsIGFjY3J1ZXMgZGVidCBhbmQgcmVhY2hlcyB0aGUgY291bnRlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdGlmIChsaWtlbHkoIWN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gobW0sIGdmcCk7XG4mIzQzO31cbiYjNDM7XG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuQEAgLTEzOTAsNiAmIzQzOzE0MTcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKFxuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIHN0cnVjdCBtZW1fY2dyb3VwICpvb21fZG9tYWluKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNzE0MGExMDMxZmIyZS4uMDU5NTE5NDY1YjI0NCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMzU1LDYgJiM0MzsxMzU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIFRIUCBjaGFyZ2VkIHdpdGggYSBnZnAgdGhhdCBjYW5ub3QgYmxvY2sgZXNjYXBlcyB0aGUgbWVtb3J5LmhpZ2hcbiYjNDM7XHQgKiB0aHJvdHRsaW5nIGluIHRyeV9jaGFyZ2VfbWVtY2coKS4gIERvbiYjMzk7dCBoYW5kIG91dCBvbmUgd2hpbGUgdGhlXG4mIzQzO1x0ICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWRcbiYjNDM7XHQgKiB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZXMgYXMgZG9jdW1lbnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4mIzQzO1x0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuJiM0MztcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyIFx1MDAyNiBIUEFHRV9QTURfTUFTSyk7XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTQ2MGNiYTUzNTg4ZS4uZGQ3YTYyYzNkYWNiMiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjU4Nyw2ICYjNDM7MjU4Nyw2MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4gXHRyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xuJiM0MzsgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4mIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuJiM0MzsgKlxuJiM0MzsgKiBtZW1vcnkuaGlnaCBpcyBlbmZvcmNlZCBvbiByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBzeW5jaHJvbm91c2x5IGluXG4mIzQzOyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcFxuJiM0MzsgKiBhbGxvd2luZyBibG9ja2luZy4gIExhcmdlIGZvbGlvcyBhcmUgY2hhcmdlZCB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsXG4mIzQzOyAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGJsb2NraW5nIHVubGVzcyB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgYXNrcyBmb3IgZGlyZWN0XG4mIzQzOyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0XG4mIzQzOyAqIGRvZXMgbm90IHJldHVybiB0byB1c2Vyc3BhY2UgaW5iZXR3ZWVuIC0gdGhlIHBvcHVsYXRlIGxvb3Agb2YgbWxvY2soKSBvclxuJiM0MzsgKiBNQURWX1BPUFVMQVRFXyosIGFueSBHVVAtZHJpdmVuIHBvcHVsYXRpb24gLSBjYW4gZ3JvdyB1c2FnZSBmcm9tXG4mIzQzOyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS5cbiYjNDM7ICpcbiYjNDM7ICogQWJvdmUgbWVtb3J5LmhpZ2ggdGhlIGNncm91cCBpcyBzdXBwb3NlZCB0byBiZSB1bmRlciByZWNsYWltIHByZXNzdXJlLCBzb1xuJiM0MzsgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpc1xuJiM0MzsgKiBjaGFyZ2VkIHdpdGggYSBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcyBkb2N1bWVudGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZVxuJiM0MzsgKiBsYXJnZSBmb2xpbyBlaXRoZXIgd2F5LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlXG4mIzQzOyAqIGNvdW50ZXIgbG9va3VwIG9mZiB0aGUgZmF1bHQgcGF0aCB1bmxlc3MgdGhlIHRhc2sgaGFzIGFjdHVhbGx5IGNoYXJnZWRcbiYjNDM7ICogYWJvdmUgbWVtb3J5LmhpZ2ggYmVmb3JlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuXG4mIzQzOyAqL1xuJiM0Mztib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7XG4mIzQzO1x0Ym9vbCBvdmVyX2hpZ2ggPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGNoYXJnZSB0aGF0IGNhbiBibG9jayBpcyB0aHJvdHRsZWQgYnkgdHJ5X2NoYXJnZV9tZW1jZygpIGl0c2VsZixcbiYjNDM7XHQgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gZ2l2ZSB1cCB0aGUgbGFyZ2UgZm9saW8gZm9yIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuJiM0MztcdGlmICghbWVtY2cpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaXRlciA9IG1lbWNnOyBpdGVyOyBpdGVyID0gcGFyZW50X21lbV9jZ3JvdXAoaXRlcikpIHtcbiYjNDM7XHRcdGlmIChwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZpdGVyLVx1MDAzZW1lbW9yeSkgXHUwMDNlXG4mIzQzO1x0XHQgICAgUkVBRF9PTkNFKGl0ZXItXHUwMDNlbWVtb3J5LmhpZ2gpKSB7XG4mIzQzO1x0XHRcdG92ZXJfaGlnaCA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3Zlcl9oaWdoO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG4gICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOTI2Mjc2ZDQxOTIwMi4uYjI4ZmNjYzg2MjE2YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUzMjEsNiAmIzQzOzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xuIFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xuJiM0MztcbiYjNDM7XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbiYjNDM7XHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4mIzQzO1x0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbiYjNDM7XHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNjI1YzE4NWExY2E0ZC4uYTIzNWM5YWVjYWYxOCAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNDQwLDkgJiM0Mzs0NDAsMjMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHQgKiBMaW1pdCBUSFAgZ2ZwLiBUaGUgbGltaXRhdGlvbiBpcyBhIG5vLW9wIGZvciB0eXBpY2FsXG4gXHQgKiBHRlBfSElHSFVTRVJfTU9WQUJMRSBidXQgbWF0dGVycyBmb3Igc2htZW0uXG4gXHQgKi9cbi1cdGlmIChvcmRlcilcbiYjNDM7XHRpZiAob3JkZXIpIHtcbiBcdFx0Z2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKHZtYV90aHBfZ2ZwX21hc2sodm1hKSwgZ2ZwKTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIGdmcCBtYXkgbm90IGFsbG93IGJsb2NraW5nLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2VcbiYjNDM7XHRcdCAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW5cbiYjNDM7XHRcdCAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXJcbiYjNDM7XHRcdCAqIHJldHJ5IHdpdGggYSBzbWFsbGVyIG9yZGVyLCBkb3duIHRvIG9yZGVyLTAsIHdoaWNoIGlzXG4mIzQzO1x0XHQgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlciYjMzk7cyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhc1xuJiM0MztcdFx0ICogZG9jdW1lbnRlZC4gIE9ubHkgZmF1bHQgY29udGV4dCBpcyB0aHJvdHRsZWQgaGVyZTsgdGhlXG4mIzQzO1x0XHQgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlXG4mIzQzO1x0XHQgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodm1mIFx1MDAyNlx1MDAyNiBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXHUwMDNldm1fbW0sIGdmcCkpXG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobXBvbCB8fCAhdm1mKSB7XG4gXHRcdGZvbGlvID0gZm9saW9fYWxsb2NfbXBvbChnZnAsIG9yZGVyLCBtcG9sLCBpbHgsIG51bWFfbm9kZV9pZCgpKTtcbiBcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgZm9yIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gKFRIUCBhbmQgc3dhcCBjYWNoZSkgdW5kZXIgbWVtY2cgbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQuIEl0IGludHJvZHVjZXMgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpIHRvIHByZXZlbnQgbm9uLWJsb2NraW5nIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zIGZyb20gYnlwYXNzaW5nIG1lbW9yeS5oaWdoIHRocm90dGxpbmcsIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBpbiBhbm9ueW1vdXMgcGFnZSBmYXVsdHMgYW5kIHN3YXAtaW4gZmF1bHRzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCByZWFjaGFibGUgY29yZSBtbSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzA0Yzg1NTE3NzA0NjdiNWQyMGViMDc1YzVhNjc0YTFjMDFmN2VmNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA1OjE5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA0NmJmNzI0Y2FlN2FmLi5kZWZlZjBkM2Q3MTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTQxLDYgJiM0Mzs5NDEsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaykKIAkJX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spOwogfQogCiYjNDM7Ym9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogU2VlIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKS4KJiM0MzsgKgomIzQzOyAqIFRoZSB0YXNrJiMzOTtzIG92ZXItaGlnaCBkZWJ0IGlzIG1vcmUgdGhhbiBhIGZhc3QgcGF0aCBoZXJlLCBpdCBhbHNvIHNjb3BlcwomIzQzOyAqIHRoZSBjaGVjayB0byB0aGUgY2FzZSB0aGF0IGlzIGJyb2tlbi4gIFRoZSBkZWJ0IGlzIHNldHRsZWQgYW5kIGNsZWFyZWQgb24KJiM0MzsgKiBldmVyeSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBhIHRhc2sgZmF1bHRpbmcgbGFyZ2UgZm9saW9zIGZyb20gYQomIzQzOyAqIHVzZXJzcGFjZSBsb29wIGFsd2F5cyBmaW5kcyBpdCB6ZXJvIGFuZCBrZWVwcyBnZXR0aW5nIHRoZW0gLSBtZW1vcnkuaGlnaAomIzQzOyAqIGlzIGVuZm9yY2VkIGZvciBpdCBvbiB0aGUgd2F5IG91dC4gIE9ubHkgYSBsb29wIHRoYXQgc3RheXMgaW4gdGhlIGtlcm5lbCwKJiM0MzsgKiB3aGVyZSBub3RoaW5nIHRocm90dGxlcyBhdCBhbGwsIGFjY3J1ZXMgZGVidCBhbmQgcmVhY2hlcyB0aGUgY291bnRlcnMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlpZiAobGlrZWx5KCFjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChtbSwgZ2ZwKTsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLApAQCAtMTM5MCw2ICYjNDM7MTQxNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKQogewogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbikKIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTM1NSw2ICYjNDM7MTM1NSwxOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJLyoKJiM0MzsJICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJiMzOTt0IGhhbmQgb3V0IG9uZSB3aGlsZSB0aGUKJiM0MzsJICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWQKJiM0MzsJICogd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVzIGFzIGRvY3VtZW50ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkgewomIzQzOwkJY291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgJmFtcDsgSFBBR0VfUE1EX01BU0spOwogCiAJaWYgKHVubGlrZWx5KCFmb2xpbykpIHsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxNDYwY2JhNTM1ODhlLi5kZDdhNjJjM2RhY2IyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNTg3LDYgJiM0MzsyNTg3LDYyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcywKIAlyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogbWVtb3J5LmhpZ2ggaXMgZW5mb3JjZWQgb24gcmV0dXJuIHRvIHVzZXJzcGFjZSwgb3Igc3luY2hyb25vdXNseSBpbgomIzQzOyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcAomIzQzOyAqIGFsbG93aW5nIGJsb2NraW5nLiAgTGFyZ2UgZm9saW9zIGFyZSBjaGFyZ2VkIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwKJiM0MzsgKiB3aGljaCBkb2VzIG5vdCBhbGxvdyBibG9ja2luZyB1bmxlc3MgdGhlIGFsbG9jYXRpb24gcG9saWN5IGFza3MgZm9yIGRpcmVjdAomIzQzOyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0CiYjNDM7ICogZG9lcyBub3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbmJldHdlZW4gLSB0aGUgcG9wdWxhdGUgbG9vcCBvZiBtbG9jaygpIG9yCiYjNDM7ICogTUFEVl9QT1BVTEFURV8qLCBhbnkgR1VQLWRyaXZlbiBwb3B1bGF0aW9uIC0gY2FuIGdyb3cgdXNhZ2UgZnJvbQomIzQzOyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS4KJiM0MzsgKgomIzQzOyAqIEFib3ZlIG1lbW9yeS5oaWdoIHRoZSBjZ3JvdXAgaXMgc3VwcG9zZWQgdG8gYmUgdW5kZXIgcmVjbGFpbSBwcmVzc3VyZSwgc28KJiM0MzsgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpcwomIzQzOyAqIGNoYXJnZWQgd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzIGRvY3VtZW50ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZQomIzQzOyAqIGxhcmdlIGZvbGlvIGVpdGhlciB3YXkuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlCiYjNDM7ICogY291bnRlciBsb29rdXAgb2ZmIHRoZSBmYXVsdCBwYXRoIHVubGVzcyB0aGUgdGFzayBoYXMgYWN0dWFsbHkgY2hhcmdlZAomIzQzOyAqIGFib3ZlIG1lbW9yeS5oaWdoIGJlZm9yZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci4KJiM0MzsgKi8KJiM0Mztib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7CiYjNDM7CWJvb2wgb3Zlcl9oaWdoID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hhcmdlIHRoYXQgY2FuIGJsb2NrIGlzIHRocm90dGxlZCBieSB0cnlfY2hhcmdlX21lbWNnKCkgaXRzZWxmLAomIzQzOwkgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gZ2l2ZSB1cCB0aGUgbGFyZ2UgZm9saW8gZm9yIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaXRlciA9IG1lbWNnOyBpdGVyOyBpdGVyID0gcGFyZW50X21lbV9jZ3JvdXAoaXRlcikpIHsKJiM0MzsJCWlmIChwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO2l0ZXItJmd0O21lbW9yeSkgJmd0OwomIzQzOwkJICAgIFJFQURfT05DRShpdGVyLSZndDttZW1vcnkuaGlnaCkpIHsKJiM0MzsJCQlvdmVyX2hpZ2ggPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG92ZXJfaGlnaDsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tCiAgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmQKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOTI2Mjc2ZDQxOTIwMi4uYjI4ZmNjYzg2MjE2YiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUzMjEsNiAmIzQzOzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCS8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqLwogCWdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTsKJiM0MzsKJiM0MzsJLyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovCiYjNDM7CWlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtJmd0O3ZtX21tLCBnZnApKSB7CiYjNDM7CQljb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CX0KJiM0MzsKIAl3aGlsZSAob3JkZXJzKSB7CiAJCWFkZHIgPSBBTElHTl9ET1dOKHZtZi0mZ3Q7YWRkcmVzcywgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKTsKIAkJZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA2MjVjMTg1YTFjYTRkLi5hMjM1YzlhZWNhZjE4IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC00NDAsOSAmIzQzOzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkgKiBMaW1pdCBUSFAgZ2ZwLiBUaGUgbGltaXRhdGlvbiBpcyBhIG5vLW9wIGZvciB0eXBpY2FsCiAJICogR0ZQX0hJR0hVU0VSX01PVkFCTEUgYnV0IG1hdHRlcnMgZm9yIHNobWVtLgogCSAqLwotCWlmIChvcmRlcikKJiM0MzsJaWYgKG9yZGVyKSB7CiAJCWdmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayh2bWFfdGhwX2dmcF9tYXNrKHZtYSksIGdmcCk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGlzIGdmcCBtYXkgbm90IGFsbG93IGJsb2NraW5nLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2UKJiM0MzsJCSAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW4KJiM0MzsJCSAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHJldHJ5IHdpdGggYSBzbWFsbGVyIG9yZGVyLCBkb3duIHRvIG9yZGVyLTAsIHdoaWNoIGlzCiYjNDM7CQkgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlciYjMzk7cyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcwomIzQzOwkJICogZG9jdW1lbnRlZC4gIE9ubHkgZmF1bHQgY29udGV4dCBpcyB0aHJvdHRsZWQgaGVyZTsgdGhlCiYjNDM7CQkgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlCiYjNDM7CQkgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLgomIzQzOwkJICovCiYjNDM7CQlpZiAodm1mICZhbXA7JmFtcDsgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwogCWlmIChtcG9sIHx8ICF2bWYpIHsKIAkJZm9saW8gPSBmb2xpb19hbGxvY19tcG9sKGdmcCwgb3JkZXIsIG1wb2wsIGlseCwgbnVtYV9ub2RlX2lkKCkpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGNoZWNrIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgYW5kIGxhcmdlIGZvbGlvcywgc3BlY2lmaWNhbGx5IHdoZW4gYSBtZW1vcnkgY2dyb3VwJiMzOTtzIGAuaGlnaGAgbGltaXQgaXMgZXhjZWVkZWQuIFRoZSBjb2RlIHNuaXBwZXRzIGdpdmUgYSBjbGVhciBwaWN0dXJlOgoKKiAgIEl0IGludHJvZHVjZXMgYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgdGhhdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgbWVtb3J5IGNncm91cCBpcyBvdmVyIHRoZSBgLmhpZ2hgIGxpbWl0LiBXaGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoaXMgaXMgYSByZWFsIGNoZWNrLCBvdGhlcndpc2UgaXQmIzM5O3MganVzdCBzdHViYmVkLgoqICAgVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIChmb3IgVEhQL2h1Z2UgcGFnZSBhbGxvY2F0aW9uKSwgYGFsbG9jX2Fub25fZm9saW9gIChmb3IgYW5vbnltb3VzIGZvbGlvIGFsbG9jYXRpb24pLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgKGR1cmluZyBzd2FwIG9wZXJhdGlvbnMpLiBUaGUgY2FsbHMgYWxsIHNlZW0gdG8gYmUgYWJvdXQgY2hlY2tpbmcgaWYgdGhlIGAuaGlnaGAgbGltaXQgaXMgb3ZlciwgYW5kIGlmIGl0IGlzLCBpdCBlaXRoZXIgZmFsbHMgYmFjayAoaW4gVEhQL2ZvbGlvIGFsbG9jYXRpb24pIG9yIHJldHVybnMgYW4gZXJyb3IgKGluIHN3YXAgYWxsb2NhdGlvbikuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGlzIGFnYWluc3QgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEuIFRoZSBjcml0ZXJpYSBzdGF0ZXMgdGhhdCBhbnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBhcmUgZGVmaW5pdGVseSBpbiBzY29wZS4gSSBjYW4gc2VlIGNvcmUgbW0gY29kZSBiZWluZyB0b3VjaGVkICggYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AgYXJlIGFsbCBkZWZpbml0ZWx5IGNvcmUpLCBhbmQgc3BlY2lmaWNhbGx5LCBjb2RlIHJlbGF0ZWQgdG8gbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiwgVEhQLCBhbmQgc3dhcCBhbGxvY2F0aW9uICp1bmRlciogbWVtb3J5LmhpZ2ggbWVtY2cgbGltaXRzLiBUaGlzIGlzIGFic29sdXRlbHkgY29yZSBtbS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGFsbG9jYXRpb24gcGF0aHMgZm9yIGxhcmdlIGZvbGlvcywgVEhQLCBhbmQgc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3aGljaCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBgLmhpZ2hgIGxpbWl0IGNoZWNrcy4gVGhpcyBtZWFucyBpdCYjMzk7cyAxMDAlIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIHRoZXJlZm9yZSBJJiMzOTttIGltbWVkaWF0ZWx5IGxlYW5pbmcgdG93YXJkcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIGNsZWFybHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHYCBlbmFibGVkLCBhcyB0aGF0JiMzOTtzIHRoZSBjb25kaXRpb25hbCBmb3IgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlYWwgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5lZWRlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYENPTkZJR19TV0FQYCB3b3VsZCBiZSByZXF1aXJlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBJIHdpbGwgbmVlZCB0byB1c2UgYSBncmVwIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBvciBzb3VyY2UgY29kZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1NTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTkwLS8qKlxubW0vbWVtY29udHJvbC5jOjI1OTE6ICogX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xubW0vbWVtY29udHJvbC5jLTI1OTItICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjE2LSAqL1xubW0vbWVtY29udHJvbC5jOjI2MTc6Ym9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtMjYxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCioqQ2hlY2tpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gZm9yIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIG1lbW9yeSBjb250cm9sLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbXBpbGF0aW9uIGd1YXJkIGZvciBgbW0vbWVtY29udHJvbC5jYCB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayB0byB1bmRlcnN0YW5kICp3aHkqIG9yICppZiogYSBzcGVjaWZpYyBtb2R1bGUgaXMgY29tcGlsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZyBvciBkZXBlbmRlbmN5IHRoYXQmIzM5O3MgYWZmZWN0aW5nIGl0cyBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBidWlsZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIGRpYWdub3NlIGFueSBidWlsZC1yZWxhdGVkIGlzc3VlcyB3aXRoIHRoaXMgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgZHJpdmluZyB0aGlzIGNoZWNrIC0gc28gSSYjMzk7bSBob3BpbmcgSSYjMzk7bGwgcXVpY2tseSBmaW5kIHRoZSBjb25kaXRpb24gSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNjpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDctaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA5LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgbW1jb250cm9sLm9gIGlzIGJ1aWx0IHdpdGggYENPTkZJR19NRU1DR2AgZW5hYmxlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgbGlrZWx5IGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGxpbWl0aW5nIG9yIGFjY291bnRpbmcuIEdpdmVuIHRoYXQgY29udGV4dCwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgY29kZSBhcm91bmQgbGFyZ2UgbWVtb3J5IHBhZ2VzIChodWdlcGFnZXMpIGFuZCBzd2FwIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgaHVnZV9tZW1vcnkuY2AgYW5kIGBzd2FwX3N0YXRlLmNgIHJlZmVyZW5jZWQgaW4gYG1tL01ha2VmaWxlYC4gVGhlc2UgYXJlYXMgYXJlIGNydWNpYWwgYmVjYXVzZSBtZW1vcnkgY29udHJvbCBncm91cHMgb2Z0ZW4gbmVlZCB0byBpbnRlcmFjdCBpbnRyaWNhdGVseSB3aXRoIGh1Z2VwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGFuZCBob3cgc3dhcHBlZCBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGNncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaW50ZXJhY3RzIHdpdGggdGhvc2UgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9yIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGNvbmZpZ3VyYXRpb24sIG9yIGhvdyBodWdlcGFnZXMgb3Igc3dhcCBiZWhhdmlvciBpcyBkaWZmZXJlbnQgd2hlbiBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGluIHVzZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50ZWdyYXRpb24gcG9pbnRzLCB0aGUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBkZXNpZ24gZGVjaXNpb25zIHJlbGF0ZWQgdG8gaG93IHRoZXNlIGNvbXBvbmVudHMgcGxheSB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoaHVnZV9tZW1vcnl8c3dhcF9zdGF0ZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nz1lbmRpZlxubW0vTWFrZWZpbGUtNzgtXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4tLVxubW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvZGUuIEkgc2VlIHRoYXQgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCwgYW5kIEkgc2hvdWxkIGhhdmUga25vd24gdGhhdCBhbHJlYWR5LCBmb3IgdGhlIGBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCBmdW5jdGlvbiBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkuaGlnaCBsb2dpYywgdGhhdCBtYWtlcyBzZW5zZS4gQWxzbywgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIGZvciBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBmb3IgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAuIEFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfU1dBUGAgaXMgbmVlZGVkIGZvciBgc3dhcF9zdGF0ZS5jYCwgcGFydGljdWxhcmx5IGZvciBgX19zd2FwX2NhY2hlX2FsbG9jYC4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgcGVyaGFwcyBsZXNzIG9idmlvdXMgb25lcywgZm9yIGVpdGhlciBgQ09ORklHX01FTUNHYCBvciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gVGltZSB0byBkaWcgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2OD1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ny1cbmluaXQvS2NvbmZpZzoxMDc4OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzktXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaW5pdC9LY29uZmlnYCBTZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDEwNzUgdG8gMTEwMCBvZiBgaW5pdC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoaXMgc2VnbWVudCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbi4gR2l2ZW4gdGhlIGZpbGUgbmFtZSwgYEtjb25maWdgLCBhbmQgdGhlIGxpbmUgbnVtYmVycywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSByZWxhdGVkIHRvICpzb21lKiBhc3BlY3Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBpbml0aWFsIHNldHVwIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgbG9hZGluZyBvciBlYXJseSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgbGlrZSAmIzM0O2NvbmZpZyYjMzQ7LCAmIzM0O2Jvb2wmIzM0OywgJiMzNDt0cmlzdGF0ZSYjMzQ7LCAmIzM0O2RlcGVuZHMgb24mIzM0OywgJiMzNDtzZWxlY3QmIzM0OywgYW5kIGFueSBtb2R1bGUgb3IgZHJpdmVyIG5hbWVzIHRvIGdsZWFuIHRoZSBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlc2Ugb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIGxvZ2ljYWwgZmxvdyAtIHRoZSBoaWVyYXJjaHksIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMgZGVmaW5lZCBlbHNld2hlcmUgaW4gS2NvbmZpZyBhbmQgdGhlIHNvdXJjZSBjb2RlLiBUaGUgc3BlY2lmaWMgc2VjdGlvbiB3aWxsIGRldGVybWluZSBob3cgaW1wb3J0YW50IGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5MDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5MTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTI6XHRcdGRlZmF1bHQgeVxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX1YxXG4xMTAyOlx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgTUVNQ0dgIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHYC4gSXTigJlzIHByb2JhYmx5IGEgY29yZSBjb21wb25lbnQsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXTigJlzIG5vdCByZWFsbHkgZGVwZW5kZW50IG9uIGFueXRoaW5nICplbHNlKi4gQnV0IGp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIExldCBtZSBmaXJlIHVwIHRoZSBrZXJuZWwgY29uZmlnLCBhbmQgbmF2aWdhdGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AuLi4gc3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyBkaWdnaW5nIHdpdGhpbiB0aGUgYENHUk9VUFNgIHNlY3Rpb24g4oCTIHRoYXTigJlzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGl0LiBHb3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gaG93IGl0JiMzOTtzIGVuYWJsZWQgb3IgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENHUk9VUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNDY9Y29uZmlnIFNMQUJfT0JKX0VYVFxuLS1cbmluaXQvS2NvbmZpZy0xMDQ4LVxuaW5pdC9LY29uZmlnOjEwNDk6bWVudWNvbmZpZyBDR1JPVVBTXG5pbml0L0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDR1JPVVBTIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXM6IEEgQ29uZmlndXJhdGlvbiBRdWVyeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBZZXMsIENHUk9VUFMgaXMgZGVmaW5pdGVseSB0aGUgb3ZlcmFyY2hpbmcgc3RydWN0dXJlLCB0aGUgY29udGFpbmVyIGZvciBhbGwgb2YgdGhpcy4gQnV0IG5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBzZXR0aW5nIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIGl0cyBzdGF0dXMgYW5kIGhvdyBpdCBwbGF5cyB3aXRoIHRoaXMgc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgQ0dST1VQUyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMxPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMzLVxubW0vS2NvbmZpZzo4MzQ6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzUtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBhc3BlY3QsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBUaGUgZmlsZSBJIG5lZWQgaXMgYG1tL0tjb25maWdgLCBhbmQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGxpbmVzIDgzNCB0aHJvdWdoIDg1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHdoYXRldmVyIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaG9sZHMgdGhlIGluZm9ybWF0aW9uIEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyb3VuZCB0aGlzIHNwZWNpZmljIGFyZWEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHdoYXRldmVyIGl0IGlzIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzQ6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODM1Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4MzY6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDgzNzpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4Mzg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4Mzk6XHRcdHNlbGVjdCBNTV9JRFxuIDg0MDpcdFx0aGVscFxuIDg0MTpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODQyOlx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NDM6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODQ0Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODQ1Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NDY6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg0NzpcdFxuIDg0ODpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NDk6XHRcbiA4NTA6XHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDg1MTpcdFxuIDg1MjpcdGNob2ljZVxuIDg1MzpcdFx0cHJvbXB0IFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcJiMzNDtcbiA4NTQ6XHRcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4gODU1Olx0XHRoZWxwXG4gODU2Olx0XHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxuIDg1NzpcdFxuIDg1ODpcdFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtleSBTeW1ib2xzIGluIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHN5bWJvbHMuIEZpcnN0IHVwLCBJJiMzOTttIGxvb2tpbmcgYXQgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgLiBEZWZpbmVkIHJpZ2h0IHRoZXJlIGluIGBtbS9tZW1jb250cm9sLmNgLiBJdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYW5kIGl0JiMzOTtzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltYXJ5IGZvY3VzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgbGlrZWx5IHJlc2lkZSwgc28gSSYjMzk7bSBnb2luZyB0byBwYXkgdmVyeSBjbG9zZSBhdHRlbnRpb24gdG8gaXQuCgpUaGVuLCB0aGVyZSYjMzk7cyBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSwgc28gSSBzaG91bGQgbG9vayBmb3IgaXRzIGNhbGxlcnMuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgdGhpcyBvbmUuIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIHNvIEkgdGhpbmsgdGhpcyB3aWxsIHlpZWxkIGltcG9ydGFudCBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hX2FsbG9jX2Fub25fZm9saW9fcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xubW0vaHVnZV9tZW1vcnkuYy0xMzUwLVxubW0vaHVnZV9tZW1vcnkuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQzOD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ0NjpcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vaHVnZV9tZW1vcnkuYy0xNDQ3LVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMTUwPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTU3LVxubW0vaHVnZV9tZW1vcnkuYzoyMTU4Olx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTIxNTktXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9tZW1vcnkuYz01MjcwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTMyNC1cbm1tL21lbW9yeS5jOjUzMjU6XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbm1tL21lbW9yeS5jLTUzMjYtXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTM5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgc3BlYWtpbmcgYXMgYW4gZXhwZXJ0OgoKKipUcmFjaW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIFBhdGhzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgdGhhdCBsZWFkIHRvIHRoZSBhbGxvY2F0aW9uIGFuZCBoYW5kbGluZyBvZiBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW52b2x2aW5nIGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfemVyb193cF9wbWRgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZS4gSSYjMzk7bSBhc3N1bWluZyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGFsbG9jYXRpb24gYW5kIGhhbmRsaW5nIG9mIGFub255bW91cyBodWdlIHBhZ2VzLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlaXIgdXNlLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGhhdmUgdG8gZm9sbG93IGEgYnVuY2ggb2YgYHRyYWNlX3ByaW50a2Agc3RhdGVtZW50cyBhbmQgY2FsbCBzdGFjayBpbnNwZWN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgYW5kIHdoZW4sIGFuZCBob3csIHRoZSB6ZXJvIHBhZ2UgaXMgd3JpdHRlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2V8ZG9faHVnZV96ZXJvX3dwX3BtZCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xNDI4PXN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQzNy1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQzODpzdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaHVnZV9tZW1vcnkuYy0xNDM5LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1Nzc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE2MzAtXG5tbS9odWdlX21lbW9yeS5jOjE2MzE6XHRyZXR1cm4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xubW0vaHVnZV9tZW1vcnkuYy0xNjMyLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTIxNDA9Ym9vbCBodWdlX3BtZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTQ5LVxubW0vaHVnZV9tZW1vcnkuYzoyMTUwOnN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIxNTEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjE4Mj12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3dwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTk0LVx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jOjIxOTU6XHRcdHZtX2ZhdWx0X3QgcmV0ID0gZG9faHVnZV96ZXJvX3dwX3BtZCh2bWYpO1xubW0vaHVnZV9tZW1vcnkuYy0yMTk2LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjUzNj1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI1NTEtXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcbm1tL2h1Z2VfbWVtb3J5LmM6MjU1MjpcdCAqIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtMjU1My1cdCAqL1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NzgwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzg4LSAqIEBwYWdlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFuZCBzZXR1cCBhZnRlciBpdCYjMzk7cyBhbGxvY2F0ZWQuIFRoZSBjb2RlIGJpdHNcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzg5OiAqIGhlcmUgZm9sbG93IGNsb3NlbHkgdGhlIGNvZGUgaW4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLiBUaGlzIEFQSSBkb2VzXG5tbS9taWdyYXRlX2RldmljZS5jLTc5MC0gKiBub3Qgc3VwcG9ydCBUSFAgemVybyBwYWdlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBIdWdlIFBNRCBBbm9ueW1vdXMgUGFnZSBGYXVsdHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uLCBub3QgYSBzdGF0aWMgb25lLCB3aGljaCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgYnJvYWRlciBodWdlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgYWxyZWFkeSBrbm93IGl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgc28gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBzcGVjaWZpYyB0byBoYW5kbGluZyBmYXVsdHMgZm9yIGFub255bW91cyBodWdlIFBNRHMg4oCTIGJpZyBwYWdlcyB0aGF0IGFyZW4mIzM5O3QgYmFja2VkIGJ5IGFueSBmaWxlLgoKTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaHVnZSBQTUQgZmF1bHRzIGFjdHVhbGx5IGdldCBhbiBhbm9ueW1vdXMgcGFnZSBhbGxvY2F0ZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIGlzIHRoZSBjYWxscyB0byBgYWxsb2NfYW5vbl9mb2xpb2AuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgaW4gYG1tL21lbW9yeS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYWxsb2NhdGlvbiBwYXRoIGFuZCBpbnNpZ2h0IGludG8gd2hlcmUgdGhlc2UgaHVnZSBwYWdlcyBhcmUgYmVpbmcgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSBvbiBkZW1hbmQsIHJpZ2h0IHdoZW4gYSBwcm9jZXNzIHRyaWVzIHRvIGFjY2VzcyB0aGVtLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBhbm9uIGZvbGlvJiMzOTtzIGFsbG9jYXRpb24gbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZSBwYWdlIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19hbm9uX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xubW0vaHVnZV9tZW1vcnkuYy0xMzUwLVxubW0vaHVnZV9tZW1vcnkuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQzOD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ0NjpcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vaHVnZV9tZW1vcnkuYy0xNDQ3LVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMTUwPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMTU3LVxubW0vaHVnZV9tZW1vcnkuYzoyMTU4Olx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTIxNTktXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9tZW1vcnkuYz01MjU4PXN0YXRpYyBib29sIHB0ZV9yYW5nZV9ub25lKHB0ZV90ICpwdGUsIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1vcnkuYy01MjY5LVxubW0vbWVtb3J5LmM6NTI3MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vbWVtb3J5LmMtNTI3MS17XG4tLVxubW0vbWVtb3J5LmMtNTMyNC1cbm1tL21lbW9yeS5jOjUzMjU6XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbm1tL21lbW9yeS5jLTUzMjYtXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4tLVxubW0vbWVtb3J5LmM9NTQwMz1zdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01NDU3LVx0LyogUmV0dXJucyBOVUxMIG9uIE9PTSBvciBFUlJfUFRSKC1FQUdBSU4pIGlmIHdlIG11c3QgcmV0cnkgdGhlIGZhdWx0ICovXG5tbS9tZW1vcnkuYzo1NDU4Olx0Zm9saW8gPSBhbGxvY19hbm9uX2ZvbGlvKHZtZik7XG5tbS9tZW1vcnkuYy01NDU5LVx0aWYgKElTX0VSUihmb2xpbykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFub255bW91cyBQYWdlIEZhdWx0cyoqCgpPa2F5LCBzbyBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgKmV2ZXJ5KiBhbm9ueW1vdXMgcGFnZSBmYXVsdC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViLCB0aGUgbW9zdCBjb21tb24gY2FzZSwgc28gd2UgbmVlZCB0byBsb29rIGJleW9uZCB0aGF0IGZ1bmN0aW9uLiBGb2N1c2luZyBvbiBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIGEgd2FzdGUgb2YgdGltZSBhdCB0aGlzIHBvaW50LiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZSBwcm9ibGVtIGlzbiYjMzk7dCBpbiB0aGUgKmhhbmRsaW5nKiBvZiB0aGUgZmF1bHQsIGJ1dCBpbiBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBzd2FwcGVkIHBhZ2VzLCBzbyB0aGUgbmV4dCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGluIGBzd2FwX3N0YXRlLmNgLCBwYXJ0aWN1bGFybHkgdGhlIGBfX3N3YXBfY2FjaGVfYWxsb2NgIGZ1bmN0aW9uLCBwcm92aWRlcyBzb21lIGluc2lnaHRzIGludG8gaG93IGFub255bW91cyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCB3aGVuIHN3YXBwZWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzLiBXaGF0IGNhdXNlcyB0aGUgc3dhcCBjYWNoZSB0byBiZSB1c2VkIHNvIGZyZXF1ZW50bHk/IE5vdywgSSBuZWVkIHRvIHNlZSB3aGF0IGZ1bmN0aW9ucyBhY3R1YWxseSAqY2FsbCogYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoZSBjYWxsIGdyYXBoIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldmVhbCB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciB2aWV3IG9mIHdoZXJlIHRoZSBib3R0bGVuZWNrIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTM2OT12b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQxNS0gKi9cbm1tL3N3YXBfc3RhdGUuYzo0MTY6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtNDE3LVx0XHRcdFx0XHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTUzNT1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01NTAtXHRkbyB7XG5tbS9zd2FwX3N0YXRlLmM6NTUxOlx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG5tbS9zd2FwX3N0YXRlLmMtNTUyLVx0XHRcdFx0XHQgdm1mLCBtcG9sLCBpbHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhhdCBmdW5jdGlvbiBpcyBwcmV0dHkgY3J1Y2lhbCB0byB0aGUgc3dhcCBpbXBsZW1lbnRhdGlvbiwgc28ga25vd2luZyBpdHMgY2FsbCBwYXRocyBpcyB2aXRhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIG9yIHVuZGVyc3RhbmRpbmcgYSBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoaXMgbGlrZWx5IG1lYW5zIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGZyb20gdGhlIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBzd2FwIGNhY2hlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JhYmx5IHN0YXJ0IHdpdGggYHN3YXBfcmVhZHBhZ2VgLCBgc3dhcF93cml0ZXBhZ2VgLCBhbmQgdGhlIHJlY2xhaW0gcGF0aC4gIFRob3NlIGFyZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zLCBhbmQgYW55dGhpbmcgdGhleSBpbnZva2UsIGludGVyYWN0IHdpdGggdGhlIHN3YXAgY2FjaGUgY29kZS4gQXJlIHRoZXJlIHNwZWNpZmljIGZvbGlvIGZsYWdzLCBvciBwYWdlIHN0YXRlcywgdGhhdCBhcmUgYmVpbmcgcGFzc2VkIGluIHdoaWNoIHdvdWxkIGxlYWQgdG8gdGhlIGludm9jYXRpb24gb2YgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIOKAkyBpcyB0aGlzIGNhbGwgcGF0aCB0cmlnZ2VyZWQgYnkgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtPwoKSSYjMzk7bGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IC0gYW0gSSBjb25jZXJuZWQgYWJvdXQgYSBwYXJ0aWN1bGFyIGlzc3VlIHN1Y2ggYXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG1lbW9yeSBsZWFrcywgb3IgYSBjcmFzaD8gIEtub3dpbmcgdGhpcywgSSBjYW4gbmFycm93IGRvd24gdGhlIHNlYXJjaCB0byByZWxldmFudCBjYWxsIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGlmIHRoaXMgaXMgYWJvdXQgcGVyZm9ybWFuY2UsIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBmcmVxdWVudGx5IGV4ZWN1dGVkIHBhdGhzLiBJZiBJIGFtIGxvb2tpbmcgZm9yIGEgbWVtb3J5IGxlYWsgSSB3YW50IHRvIGxvb2sgYXQgd2hlcmUgdGhlIGZvbGlvIGlzICpyZWxlYXNlZCogYWZ0ZXIgYWxsb2NhdGlvbiBhbmQgdmVyaWZ5IHRoYXQgZXZlcnkgYWxsb2NhdGlvbiBoYXMgYSBjb3JyZXNwb25kaW5nIGZyZWUuCgpJJiMzOTtsbCBwcm9iYWJseSB1c2UgYSB0b29sIHRvIHRyYXZlcnNlIHRoZSBjYWxsZ3JhcGggb3IganVzdCBncmVwIGZvciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBzb3VyY2UuIEkgZXhwZWN0IGl0IHRvIGdldCBxdWl0ZSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGNvcmUgc3dhcCBmdW5jdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBkaWZmZXJlbnQgY2FsbGVyIGNvbnRleHRzIGFuZCB3aGF0IHRoZXkgYXJlIHRyeWluZyB0byBhY2hpZXZlLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGZvciBhbnkgY29kZSBwYXRocyB0aGF0IG1heSBpbmRpcmVjdGx5IGNhbGwgdGhlIGZ1bmN0aW9uIHRocm91Z2ggc29tZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zLiBNeSBnZW5lcmFsIGFpbSB3aWxsIGJlIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBjYWxsIGNoYWluLCBmcm9tIHRoZSBoaWdoZXN0LWxldmVsIFZGUyBmdW5jdGlvbnMgZG93biB0byB0aGUgc3BlY2lmaWMgZm9saW8gYWxsb2NhdGlvbi4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxubW0vc3dhcC5oLTMxNi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz00MTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUxOC0vKipcbm1tL3N3YXBfc3RhdGUuYzo1MTk6ICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtNTIwLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUzNC0gKi9cbm1tL3N3YXBfc3RhdGUuYzo1MzU6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbm1tL3N3YXBfc3RhdGUuYy01MzYtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NjYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjcyLVx0XHRcdHJldHVybiBmb2xpbztcbm1tL3N3YXBfc3RhdGUuYzo2NzM6XHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNjc0LVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTcwND1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MTMtXHRcdFx0cmV0dXJuIGZvbGlvO1xubW0vc3dhcF9zdGF0ZS5jOjcxNDpcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xubW0vc3dhcF9zdGF0ZS5jLTcxNS1cdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTg0ND12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTg4OS0gKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmJiM0Mztzd2Fwb25cbm1tL3N3YXBmaWxlLmM6MTg5MDogKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpXG5tbS9zd2FwZmlsZS5jLTE4OTEtICogICAgICAgLy8gY2hlY2sgc3dhcF9tYXBcbi0tXG5tbS96c3dhcC5jPTEwMDU9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwMjEtXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xubW0venN3YXAuYzoxMDIyOlx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG5tbS96c3dhcC5jLTEwMjMtXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjYzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gZHVyaW5nIHBhZ2UgZmF1bHRzLiBgc3dhcGluX3N5bmNgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgZm9yIGZhdWx0IGhhbmRsaW5nLiBJbnRlcmVzdGluZyB0aGF0IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljOyBpdCYjMzk7cyBleHBvcnRlZCBpbnRlcm5hbGx5IHZpYSBgbW0vc3dhcC5oYC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBkZXNpZ25lZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG5vdCBqdXN0IHN0cmljdGx5IGxpbWl0ZWQgdG8gdGhlIGZpbGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqdXNhZ2UqIHBhdHRlcm5zIG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGltZSB0byBkaWcgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB3aGF0IGV4YWN0bHkgaXMgY2FsbGluZyBgc3dhcGluX3N5bmNgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGluX3N5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9NDg0ND12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00OTM1LVx0XHRpZiAoZGF0YV9yYWNlKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pKVxubW0vbWVtb3J5LmM6NDkzNjpcdFx0XHRmb2xpbyA9IHN3YXBpbl9zeW5jKGVudHJ5LCBHRlBfSElHSFVTRVJfTU9WQUJMRSxcbm1tL21lbW9yeS5jLTQ5MzctXHRcdFx0XHRcdCAgICB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyh2bWYpIHwgQklUKDApLFxuLS1cbm1tL3NobWVtLmM9MjI0OD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMjYyLVx0bXBvbCA9IHNobWVtX2dldF9wZ29mZl9wb2xpY3koaW5mbywgaW5kZXgsIG9yZGVyLCBcdTAwMjZpbHgpO1xubW0vc2htZW0uYzoyMjYzOlx0Zm9saW8gPSBzd2FwaW5fc3luYyhlbnRyeSwgZ2ZwLCBCSVQob3JkZXIpLCB2bWYsIG1wb2wsIGlseCk7XG5tbS9zaG1lbS5jLTIyNjQtXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuLS1cbm1tL3N3YXAuaD0zMzI9c3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLFxubW0vc3dhcC5oLTMzMy1cdFx0c3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbm1tL3N3YXAuaC0zMzUtXHRcdFx0ICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbi0tXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vc3dhcC5oLTQxMy1cbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxubW0vc3dhcC5oLTQxNS1cdHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NjYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjg4LS8qKlxubW0vc3dhcF9zdGF0ZS5jOjY4OTogKiBzd2FwaW5fc3luYyAtIHN3YXAtaW4gb25lIG9yIG11bHRpcGxlIGVudHJpZXMgc2tpcHBpbmcgcmVhZGFoZWFkLlxubW0vc3dhcF9zdGF0ZS5jLTY5MC0gKiBAZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3Rcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzAzLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjcwNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxubW0vc3dhcF9zdGF0ZS5jLTcwNS1cdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGFuZCBpdHMgQ2FsbGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSSYjMzk7dmUgY29uZmlybWVkIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBzeW1ib2wsIG1lYW5pbmcgaXQmIzM5O3MgZXhwbGljaXRseSBleHBvcnRlZCBpbiB0aGUgdm1saW51eC4gTm93LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGlkZW50aWZ5IGl0cyBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxlcnMgdG8gZXZhbHVhdGUgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3QuCgpUaGUgY29kZSBpdHNlbGYsIHdpdGggaXRzIGNoZWNrIGZvciBibG9ja2luZyBhbGxvY2F0aW9ucywgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHByZXZlbnQgYSBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIGluIGEgbWVtb3J5IGNncm91cCBpZiB0aGUgbWVtb3J5IHVzYWdlIGlzIGFscmVhZHkgb3ZlciB0aGUgJiMzNDtoaWdoJiMzNDsgd2F0ZXJtYXJrLCB1bmxlc3MgYSBibG9ja2luZyBhbGxvY2F0aW9uIGlzIGJlaW5nIGF0dGVtcHRlZC4gVGhlIGxvb3AgdGhyb3VnaCBwYXJlbnQgY2dyb3VwcyBpcyB0aGUgc3RhbmRhcmQgYXBwcm9hY2ggZm9yIHRoaXMga2luZCBvZiBoaWVyYXJjaGljYWwgbWVtb3J5IG1hbmFnZW1lbnQuCgpOZXh0LCBJIGxvb2sgZm9yIHBsYWNlcyB0aGF0IHRvdWNoIG9yIGNhbGwgdGhpcyBmdW5jdGlvbi4gRnJvbSBpbml0aWFsIGluc3BlY3Rpb24sIEkgc2VlIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgaXMgbGlrZWx5IHVzZWQgaW4gVEhQIGFub255bW91cyBmYXVsdHMgKGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWApIGFuZCB3aGVuIGFsbG9jYXRpbmcgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLgoKSSBkaWQgYSBkZWVwZXIgZGl2ZSBhbmQgY29uZmlybWVkIG15IGluaXRpYWwgZmluZGluZ3Mgd2VyZSBjb3JyZWN0LiBOb3cgSSYjMzk7bSBjaGVja2luZyB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW5kaXJlY3QgY2FsbGVycy4gYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBpcyBUSFAtc3BlY2lmaWMsIHdoaWNoIG1lYW5zIGl0cyBpbXBhY3QgaXNuJiMzOTt0IGFzIHdpZGVzcHJlYWQgYXMgZnVuY3Rpb25zIGxpa2UgYGRvX2Fub255bW91c19wYWdlYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGRlYWxzIHdpdGggc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCBhZ2FpbiBhIG1vcmUgdGFyZ2V0ZWQgYXJlYS4KCkEgcmV2aWV3IG9mIHRoZSBjb21taXQgZGlmZnMgaGVscHMgbWUgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBhbGwgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXI6IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGlzIHRoZSBvbmUgdGhhdCBjYWxscyBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLiBgYWxsb2NfYW5vbl9mb2xpb2AgY2FsbHMgYGRvX2Fub255bW91c19wYWdlYC4gYF9fc3dhcF9jYWNoZV9hbGxvY2AgKGNhbGxlZCBieSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApIGlzIHVzZWQgaW4gc3dhcCBjYWNoZSBvcGVyYXRpb25zLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgbXkgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmU6CiogICBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAKKiAgIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAKKiAgIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYAoKTm93IHRvIHZlcmlmeSBjb25maWcgcmVxdWlyZW1lbnRzLCBzaW5jZSB0aGlzIGlzIGFsbCBkZXBlbmRlbnQgb24gY2VydGFpbiBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCByZXF1aXJlcyBgQ09ORklHX01FTUNHPXlgLiAgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgbmVlZHMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRT15YC4gIEFuZCBgX19zd2FwX2NhY2hlX2FsbG9jYCByZXF1aXJlcyBgQ09ORklHX1NXQVA9eWAuIEkmIzM5O2xsIHdhbnQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQuIEZpbmFsbHksIEkmIzM5O2xsIGNoZWNrIHRoYXQgYE1FTUNHYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3MuICBJJiMzOTtsbCBsb29rIGF0IHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDk6XHRtZW51Y29uZmlnIENHUk9VUFNcbjEwNTA6XHRcdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4xMDUxOlx0XHRzZWxlY3QgS0VSTkZTXG4xMDUyOlx0XHRoZWxwXG4xMDUzOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZ3JvdXBpbmcgc2V0cyBvZiBwcm9jZXNzZXMgdG9nZXRoZXIsIGZvclxuMTA1NDpcdFx0ICB1c2Ugd2l0aCBwcm9jZXNzIGNvbnRyb2wgc3Vic3lzdGVtcyBzdWNoIGFzIENwdXNldHMsIENGUywgbWVtb3J5XG4xMDU1Olx0XHQgIGNvbnRyb2xzIG9yIGRldmljZSBpc29sYXRpb24uXG4xMDU2Olx0XHQgIFNlZVxuMTA1NzpcdFx0XHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XHQoQ0ZTKVxuMTA1ODpcdFx0XHQtIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxLyAoZmVhdHVyZXMgZm9yIGdyb3VwaW5nLCBpc29sYXRpb25cbjEwNTk6XHRcdFx0XHRcdFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcbjEwNjA6XHRcbjEwNjE6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA2MjpcdFxuMTA2MzpcdGlmIENHUk9VUFNcbjEwNjQ6XHRcbjEwNjU6XHRjb25maWcgUEFHRV9DT1VOVEVSXG4xMDY2Olx0XHRib29sXG4xMDY3Olx0XG4xMDY4Olx0Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4xMDY5Olx0XHRib29sIFwmIzM0O0Zhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbjEwNzA6XHRcdGhlbHBcbjEwNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXCYjMzQ7ZmF2b3JkeW5tb2RzXCYjMzQ7IG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XG4xMDcyOlx0XHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcbjEwNzM6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDc0Olx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDc1Olx0XG4xMDc2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwNzc6XHRcbjEwNzg6XHRjb25maWcgTUVNQ0dcbjEwNzk6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODA6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODE6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDgyOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDgzOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxOTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgc3lzdGVtIGlzIHB1dCB0b2dldGhlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDR1JPVVBTYCBpcyBlbmFibGVkLCB0aGVuIGl0JiMzOTtzIHdyYXBwaW5nIHVwIGBjb25maWcgTUVNQ0dgLiBUaGlzIG1lYW5zIGBDR1JPVVBTYCBhbmQgYE1FTUNHYCBhcmUgdGlnaHRseSBjb3VwbGVkLCB3aGljaCBpc24mIzM5O3Qgc3VycHJpc2luZy4gSSBhbHNvIHNlZSB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaW4gdGhlIG1peCBoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYFNXQVBgIOKAkyBjYW4mIzM5O3QgZm9yZ2V0IGFib3V0IHN3YXAgc3BhY2UuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYSBiaXQgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrIGlmIGBTV0FQYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBzZWUgaWYgaXQgcmVsaWVzIG9uIGFueSBvZiB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMsIG9yIGlmIGl0IGNhbiBsaXZlIGluZGVwZW5kZW50bHkuIEdvdHRhIGdldCB0aGUgYXJjaGl0ZWN0dXJlIG1hcHBlZCBvdXQgY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVBcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgZXhhbWluaW5nIHRoYXQgcXVlc3Rpb246CgoqKkFuYWx5emluZyBTV0FQJiMzOTtzIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYFNXQVBgIGluIGBtbS9LY29uZmlnYCBkZXBlbmRzIG9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGluIGFuZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVuIGFuZCB3aHkgYFNXQVBgIGdldHMgaW5jbHVkZWQgb3IgZXhjbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDExOlx0XG4gIDEyOlx0bWVudWNvbmZpZyBTV0FQXG4gIDEzOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiAhQVJDSF9OT19TV0FQXG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NjAKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIHRoZSB1c3VhbCBzdXNwZWN0cywgYE1NVWAgYW5kIGBCTE9DS2AsIGFyZSBwcmVzZW50LiBTdGFuZGFyZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKWAgaXMgYmVpbmcgaW50cm9kdWNlZC4gVGhlIGdvYWwgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHRvIGVuZm9yY2UgYG1lbW9yeS5oaWdoYCBsaW1pdHMgd2l0aGluIGEgbWVtY2cgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVEhQcyBhbmQgdGhlIHN3YXAgY2FjaGUgc3BlY2lmaWNhbGx5LCBhbmQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc2NlbmFyaW9zIHdpdGggbm9uLWJsb2NraW5nIEdGUCBtYXNrcy4KCkVzc2VudGlhbGx5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5mbHVlbmNlIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZGVjaXNpb25zIHdoZW4gaGFuZGxpbmcgdGhpbmdzIGxpa2UgYW5vbnltb3VzIFBNRCBmYXVsdHMsIG11bHRpLXNpemUgVEhQIGZhdWx0cywgYW5kIHN3YXAtY2FjaGUgYWxsb2NhdGlvbnMuIElmIGBtZW1vcnkuaGlnaGAgaXMgYnJlYWNoZWQsIHRoZSBmYWxsYmFjayBzdHJhdGVneSB3aWxsIGJlIHRvIHVzZSBzbWFsbGVyIG9yZGVycywgb3IgZXZlbiBvcmRlci0wIGFsbG9jYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgYXJlYXM6IGBtbS9tZW1jb250cm9sLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tZW1vcnkuY2AsIGFuZCBgbW0vc3dhcF9zdGF0ZS5jYC4gVGhhdCYjMzk7cyByZWFzb25hYmxlLCBpdCBoaXRzIHRoZSByZWxldmFudCBwaWVjZXMuCgpBbHJpZ2h0LCBhZnRlciB0aGlzIHF1aWNrIHJldmlldywgZXZlcnl0aGluZyBsb29rcyBjb25zaXN0ZW50IGFuZCBpbiBvcmRlci4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0JiMzOTtzIGEgY2xlYW4gaW1wbGVtZW50YXRpb24gb2YgYW4gaW1wb3J0YW50IHBvbGljeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGZvciBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIChUSFAgYW5kIHN3YXAgY2FjaGUpIHVuZGVyIG1lbWNnIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50LiBJdCBpbnRyb2R1Y2VzIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSB0byBwcmV2ZW50IG5vbi1ibG9ja2luZyBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucyBmcm9tIGJ5cGFzc2luZyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLCBmYWxsaW5nIGJhY2sgdG8gc21hbGxlciBvcmRlcnMgaW4gYW5vbnltb3VzIHBhZ2UgZmF1bHRzIGFuZCBzd2FwLWluIGZhdWx0cy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbW0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgZm9yIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gKFRIUCBhbmQgc3dhcCBjYWNoZSkgdW5kZXIgbWVtY2cgbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQuIEl0IGludHJvZHVjZXMgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpIHRvIHByZXZlbnQgbm9uLWJsb2NraW5nIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zIGZyb20gYnlwYXNzaW5nIG1lbW9yeS5oaWdoIHRocm90dGxpbmcsIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBpbiBhbm9ueW1vdXMgcGFnZSBmYXVsdHMgYW5kIHN3YXAtaW4gZmF1bHRzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCByZWFjaGFibGUgY29yZSBtbSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lbW9yeSBjZ3JvdXAgY2hlY2sgKGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGApIHRvIGVuZm9yY2UgYG1lbW9yeS5oaWdoYCBsaW1pdHMgYnkgZmFsbGluZyBiYWNrIGZyb20gbGFyZ2UgZm9saW9zIHRvIG9yZGVyLTAgYWxsb2NhdGlvbnMgd2hlbiBhbGxvY2F0aW5nIG5vbi1ibG9ja2luZyBmb2xpb3MgYWJvdmUgdGhlIHRocmVzaG9sZC5cblxuVGhlIGNoYW5nZXMgb25seSBhbHRlciBhbGxvY2F0aW9uIG9yZGVyIGZhbGxiYWNrIGhldXJpc3RpY3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBhZGQgYSBoZWxwZXIgaW4gYG1tL21lbWNvbnRyb2wuY2AgdGhhdCBjaGVja3MgYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCBhbmQgcmVhZHMgYHBhZ2VfY291bnRlcmAgdmFsdWVzLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCwgbm8gbWVtb3J5IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQsIGFuZCBmb2xpbyBpbml0aWFsaXphdGlvbiBzZW1hbnRpY3MgYXJlIHVuY2hhbmdlZCAoYW5vbnltb3VzIHBhZ2VzL2ZvbGlvcyBjb250aW51ZSB0byBiZSB6ZXJvZWQgYmVmb3JlIG1hcHBpbmcpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcyBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4sIHJlZmNvdW50aW5nLCBOVUxMIGRlcmVmZXJlbmNlcywgb3IgbG9ja2RlcCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOL0xPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzA0Yzg1NTE3NzA0NjdiNWQyMGViMDc1YzVhNjc0YTFjMDFmN2VmNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA1OjE5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA0NmJmNzI0Y2FlN2FmLi5kZWZlZjBkM2Q3MTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTQxLDYgJiM0Mzs5NDEsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaykKIAkJX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spOwogfQogCiYjNDM7Ym9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogU2VlIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKS4KJiM0MzsgKgomIzQzOyAqIFRoZSB0YXNrJiMzOTtzIG92ZXItaGlnaCBkZWJ0IGlzIG1vcmUgdGhhbiBhIGZhc3QgcGF0aCBoZXJlLCBpdCBhbHNvIHNjb3BlcwomIzQzOyAqIHRoZSBjaGVjayB0byB0aGUgY2FzZSB0aGF0IGlzIGJyb2tlbi4gIFRoZSBkZWJ0IGlzIHNldHRsZWQgYW5kIGNsZWFyZWQgb24KJiM0MzsgKiBldmVyeSByZXR1cm4gdG8gdXNlcnNwYWNlLCBzbyBhIHRhc2sgZmF1bHRpbmcgbGFyZ2UgZm9saW9zIGZyb20gYQomIzQzOyAqIHVzZXJzcGFjZSBsb29wIGFsd2F5cyBmaW5kcyBpdCB6ZXJvIGFuZCBrZWVwcyBnZXR0aW5nIHRoZW0gLSBtZW1vcnkuaGlnaAomIzQzOyAqIGlzIGVuZm9yY2VkIGZvciBpdCBvbiB0aGUgd2F5IG91dC4gIE9ubHkgYSBsb29wIHRoYXQgc3RheXMgaW4gdGhlIGtlcm5lbCwKJiM0MzsgKiB3aGVyZSBub3RoaW5nIHRocm90dGxlcyBhdCBhbGwsIGFjY3J1ZXMgZGVidCBhbmQgcmVhY2hlcyB0aGUgY291bnRlcnMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlpZiAobGlrZWx5KCFjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChtbSwgZ2ZwKTsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLApAQCAtMTM5MCw2ICYjNDM7MTQxNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKQogewogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbikKIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTM1NSw2ICYjNDM7MTM1NSwxOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJLyoKJiM0MzsJICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJiMzOTt0IGhhbmQgb3V0IG9uZSB3aGlsZSB0aGUKJiM0MzsJICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWQKJiM0MzsJICogd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVzIGFzIGRvY3VtZW50ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkgewomIzQzOwkJY291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKIAlmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgJmFtcDsgSFBBR0VfUE1EX01BU0spOwogCiAJaWYgKHVubGlrZWx5KCFmb2xpbykpIHsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxNDYwY2JhNTM1ODhlLi5kZDdhNjJjM2RhY2IyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNTg3LDYgJiM0MzsyNTg3LDYyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcywKIAlyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/CiYjNDM7ICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTAomIzQzOyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aAomIzQzOyAqCiYjNDM7ICogbWVtb3J5LmhpZ2ggaXMgZW5mb3JjZWQgb24gcmV0dXJuIHRvIHVzZXJzcGFjZSwgb3Igc3luY2hyb25vdXNseSBpbgomIzQzOyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcAomIzQzOyAqIGFsbG93aW5nIGJsb2NraW5nLiAgTGFyZ2UgZm9saW9zIGFyZSBjaGFyZ2VkIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwKJiM0MzsgKiB3aGljaCBkb2VzIG5vdCBhbGxvdyBibG9ja2luZyB1bmxlc3MgdGhlIGFsbG9jYXRpb24gcG9saWN5IGFza3MgZm9yIGRpcmVjdAomIzQzOyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0CiYjNDM7ICogZG9lcyBub3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbmJldHdlZW4gLSB0aGUgcG9wdWxhdGUgbG9vcCBvZiBtbG9jaygpIG9yCiYjNDM7ICogTUFEVl9QT1BVTEFURV8qLCBhbnkgR1VQLWRyaXZlbiBwb3B1bGF0aW9uIC0gY2FuIGdyb3cgdXNhZ2UgZnJvbQomIzQzOyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS4KJiM0MzsgKgomIzQzOyAqIEFib3ZlIG1lbW9yeS5oaWdoIHRoZSBjZ3JvdXAgaXMgc3VwcG9zZWQgdG8gYmUgdW5kZXIgcmVjbGFpbSBwcmVzc3VyZSwgc28KJiM0MzsgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpcwomIzQzOyAqIGNoYXJnZWQgd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzIGRvY3VtZW50ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZQomIzQzOyAqIGxhcmdlIGZvbGlvIGVpdGhlciB3YXkuCiYjNDM7ICoKJiM0MzsgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlCiYjNDM7ICogY291bnRlciBsb29rdXAgb2ZmIHRoZSBmYXVsdCBwYXRoIHVubGVzcyB0aGUgdGFzayBoYXMgYWN0dWFsbHkgY2hhcmdlZAomIzQzOyAqIGFib3ZlIG1lbW9yeS5oaWdoIGJlZm9yZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci4KJiM0MzsgKi8KJiM0Mztib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7CiYjNDM7CWJvb2wgb3Zlcl9oaWdoID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hhcmdlIHRoYXQgY2FuIGJsb2NrIGlzIHRocm90dGxlZCBieSB0cnlfY2hhcmdlX21lbWNnKCkgaXRzZWxmLAomIzQzOwkgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gZ2l2ZSB1cCB0aGUgbGFyZ2UgZm9saW8gZm9yIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaXRlciA9IG1lbWNnOyBpdGVyOyBpdGVyID0gcGFyZW50X21lbV9jZ3JvdXAoaXRlcikpIHsKJiM0MzsJCWlmIChwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO2l0ZXItJmd0O21lbW9yeSkgJmd0OwomIzQzOwkJICAgIFJFQURfT05DRShpdGVyLSZndDttZW1vcnkuaGlnaCkpIHsKJiM0MzsJCQlvdmVyX2hpZ2ggPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG92ZXJfaGlnaDsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tCiAgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmQKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOTI2Mjc2ZDQxOTIwMi4uYjI4ZmNjYzg2MjE2YiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUzMjEsNiAmIzQzOzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCS8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqLwogCWdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTsKJiM0MzsKJiM0MzsJLyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovCiYjNDM7CWlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtJmd0O3ZtX21tLCBnZnApKSB7CiYjNDM7CQljb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTsKJiM0MzsJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CX0KJiM0MzsKIAl3aGlsZSAob3JkZXJzKSB7CiAJCWFkZHIgPSBBTElHTl9ET1dOKHZtZi0mZ3Q7YWRkcmVzcywgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKTsKIAkJZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA2MjVjMTg1YTFjYTRkLi5hMjM1YzlhZWNhZjE4IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC00NDAsOSAmIzQzOzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkgKiBMaW1pdCBUSFAgZ2ZwLiBUaGUgbGltaXRhdGlvbiBpcyBhIG5vLW9wIGZvciB0eXBpY2FsCiAJICogR0ZQX0hJR0hVU0VSX01PVkFCTEUgYnV0IG1hdHRlcnMgZm9yIHNobWVtLgogCSAqLwotCWlmIChvcmRlcikKJiM0MzsJaWYgKG9yZGVyKSB7CiAJCWdmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayh2bWFfdGhwX2dmcF9tYXNrKHZtYSksIGdmcCk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGlzIGdmcCBtYXkgbm90IGFsbG93IGJsb2NraW5nLCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2UKJiM0MzsJCSAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW4KJiM0MzsJCSAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHJldHJ5IHdpdGggYSBzbWFsbGVyIG9yZGVyLCBkb3duIHRvIG9yZGVyLTAsIHdoaWNoIGlzCiYjNDM7CQkgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlciYjMzk7cyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcwomIzQzOwkJICogZG9jdW1lbnRlZC4gIE9ubHkgZmF1bHQgY29udGV4dCBpcyB0aHJvdHRsZWQgaGVyZTsgdGhlCiYjNDM7CQkgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlCiYjNDM7CQkgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLgomIzQzOwkJICovCiYjNDM7CQlpZiAodm1mICZhbXA7JmFtcDsgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLSZndDt2bV9tbSwgZ2ZwKSkKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwogCWlmIChtcG9sIHx8ICF2bWYpIHsKIAkJZm9saW8gPSBmb2xpb19hbGxvY19tcG9sKGdmcCwgb3JkZXIsIG1wb2wsIGlseCwgbnVtYV9ub2RlX2lkKCkpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY0CgkJCQkJCQlvdXRwdXQ6IDI1NwoJCQkJCQkJdGhvdWdodHM6IDE3NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIGZvciBtZW1jZyBgbWVtb3J5LmhpZ2hgIFRocm90dGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIHdoaWNoIG1vZGlmaWVzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYG1lbW9yeS5oaWdoYCB0aHJvdHRsaW5nIGZvciBsYXJnZSBmb2xpb3MgKFRIUC9tVEhQKSB3aXRoaW4gbWVtb3J5IGNncm91cHMsIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyB1c2luZyBgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGluIHNldmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMsIGluY2x1ZGluZyBgaHVnZV9tZW1vcnkuY2AsIGBtZW1vcnkuY2AsIGFuZCBgc3dhcF9zdGF0ZS5jYC4gRXNzZW50aWFsbHksIGlmIGEgbWVtY2cgaXMgYWJvdmUgaXRzIGBtZW1vcnkuaGlnaGAgbGltaXQgYW5kIHRoZSBhbGxvY2F0aW9uIGNhbiYjMzk7dCBibG9jaywgdGhlIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gZmFsbHMgYmFjayB0byBvcmRlci0wLCB1c2luZyBibG9ja2luZyBHRlAsIGFsbG93aW5nIGZvciBwcm9wZXIgdGhyb3R0bGluZy4KCk5leHQsIEkgbWV0aG9kaWNhbGx5IHdlbnQgdGhyb3VnaCB0aGUgY3J1Y2lhbCBhcmVhcyB3aGVyZSBLTVNBTiB3b3VsZCBiZSByZWxldmFudC4gSSBjaGVja2VkIGZvciBwb3RlbnRpYWwgaXNzdWVzIGxpa2Uga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgY29uZGl0aW9uYWwgbG9naWMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdGhlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciwgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBOb25lIG9mIHRoZXNlIHZ1bG5lcmFiaWxpdGllcyBhcmUgcHJlc2VudC4KCkkgdGhlbiBzY3J1dGluaXplZCB0aGUgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGZ1bmN0aW9uIGFuZCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzIHRvIGVuc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXMgd2VyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgcmVhZC4gYGN1cnJlbnQtJmd0O21lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAsIGBpdGVyLSZndDttZW1vcnlgLCBgaXRlci0mZ3Q7bWVtb3J5LmhpZ2hgLCBgdm1hLSZndDt2bV9tbWAsIGBnZnBgIGFyZSBhbGwgYWNjb3VudGVkIGZvciBhbmQgY2hlY2tlZC4gVGhlIG9yZGVyLTAgZm9saW8gZmFsbGJhY2sgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBwYWdlIGlzc3VlcyBhcyB0aG9zZSBmb2xpb3MgYXJlIGFsd2F5cyB6ZXJvZWQgYmVmb3JlIGJlaW5nIG1hcHBlZC4gSSBjb25maXJtZWQgdGhlcmUgYXJlIG5vIGluZm8gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgpDb25zaWRlcmluZyBLTVNBTiYjMzk7cyBwdXJwb3NlLCB3aGljaCBpcyB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGFuZCBnaXZlbiB0aGF0IHRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBBbGwgZXhpc3RpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIGNvcnJlY3QgZmFsbGJhY2sgcGF0aCBpbiBzcGVjaWZpYyBjYXNlcy4KClRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGNsZWFyOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzIuMjIxMTgyMDk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODA2ODEzMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hcIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGNncm91cCBjaGVjayAoYG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCkgdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyBieSBmYWxsaW5nIGJhY2sgZnJvbSBsYXJnZSBmb2xpb3MgdG8gb3JkZXItMCBhbGxvY2F0aW9ucyB3aGVuIGFsbG9jYXRpbmcgbm9uLWJsb2NraW5nIGZvbGlvcyBhYm92ZSB0aGUgdGhyZXNob2xkLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGFuZCByZWFkcyBgcGFnZV9jb3VudGVyYCB2YWx1ZXMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBubyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgYW5kIGZvbGlvIGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgdW5jaGFuZ2VkIChhbm9ueW1vdXMgcGFnZXMvZm9saW9zIGNvbnRpbnVlIHRvIGJlIHplcm9lZCBiZWZvcmUgbWFwcGluZykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiwgcmVmY291bnRpbmcsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciBsb2NrZGVwIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4vTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBmb3IgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiAoVEhQIGFuZCBzd2FwIGNhY2hlKSB1bmRlciBtZW1jZyBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudC4gSXQgaW50cm9kdWNlcyBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkgdG8gcHJldmVudCBub24tYmxvY2tpbmcgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMgZnJvbSBieXBhc3NpbmcgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZywgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIGluIGFub255bW91cyBwYWdlIGZhdWx0cyBhbmQgc3dhcC1pbiBmYXVsdHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1tIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjMyLjIyMTE4OTgxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjM0NDI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwNGM4NTUxNzcwNDY3YjVkMjBlYjA3NWM1YTY3NGExYzAxZjdlZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDU6MTk6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDQ2YmY3MjRjYWU3YWYuLmRlZmVmMGQzZDcxMGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC05NDEsNiArOTQxLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdFxcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcXG4gfVxcbiBcXG4rYm9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xcbitcXG4rLyoqXFxuKyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/XFxuKyAqIEBtbTogbW0gdGhlIGZvbGlvIHdvdWxkIGJlIGNoYXJnZWQgYWdhaW5zdCwgbWF5IGJlIE5VTExcXG4rICogQGdmcDogZ2ZwIG1hc2sgdGhlIGZvbGlvIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgY2hhcmdlZCB3aXRoXFxuKyAqXFxuKyAqIFNlZSBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkuXFxuKyAqXFxuKyAqIFRoZSB0YXNrJ3Mgb3Zlci1oaWdoIGRlYnQgaXMgbW9yZSB0aGFuIGEgZmFzdCBwYXRoIGhlcmUsIGl0IGFsc28gc2NvcGVzXFxuKyAqIHRoZSBjaGVjayB0byB0aGUgY2FzZSB0aGF0IGlzIGJyb2tlbi4gIFRoZSBkZWJ0IGlzIHNldHRsZWQgYW5kIGNsZWFyZWQgb25cXG4rICogZXZlcnkgcmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gYSB0YXNrIGZhdWx0aW5nIGxhcmdlIGZvbGlvcyBmcm9tIGFcXG4rICogdXNlcnNwYWNlIGxvb3AgYWx3YXlzIGZpbmRzIGl0IHplcm8gYW5kIGtlZXBzIGdldHRpbmcgdGhlbSAtIG1lbW9yeS5oaWdoXFxuKyAqIGlzIGVuZm9yY2VkIGZvciBpdCBvbiB0aGUgd2F5IG91dC4gIE9ubHkgYSBsb29wIHRoYXQgc3RheXMgaW4gdGhlIGtlcm5lbCxcXG4rICogd2hlcmUgbm90aGluZyB0aHJvdHRsZXMgYXQgYWxsLCBhY2NydWVzIGRlYnQgYW5kIHJlYWNoZXMgdGhlIGNvdW50ZXJzLlxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0aWYgKGxpa2VseSghY3VycmVudC1cXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gobW0sIGdmcCk7XFxuK31cXG4rXFxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIFxcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbkBAIC0xMzkwLDYgKzE0MTcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAoXFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbilcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTM1NSw2ICsxMzU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoXFxuK1xcdCAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJ3QgaGFuZCBvdXQgb25lIHdoaWxlIHRoZVxcbitcXHQgKiBjZ3JvdXAgaXMgYWxyZWFkeSBhYm92ZSBtZW1vcnkuaGlnaDogdGhlIG9yZGVyLTAgZmFsbGJhY2sgaXMgY2hhcmdlZFxcbitcXHQgKiB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZXMgYXMgZG9jdW1lbnRlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuK1xcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XFxuK1xcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyIFxcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTQ2MGNiYTUzNTg4ZS4uZGQ3YTYyYzNkYWNiMiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjU4Nyw2ICsyNTg3LDYyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4gXFx0cmV0dXJuIHBlbmFsdHlfamlmZmllcyAqIG5yX3BhZ2VzIC8gTUVNQ0dfQ0hBUkdFX0JBVENIO1xcbiB9XFxuIFxcbisvKipcXG4rICogX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCAtIHdvdWxkIGEgbGFyZ2UgZm9saW8gZXNjYXBlIG1lbW9yeS5oaWdoP1xcbisgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXFxuKyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxcbisgKlxcbisgKiBtZW1vcnkuaGlnaCBpcyBlbmZvcmNlZCBvbiByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBzeW5jaHJvbm91c2x5IGluXFxuKyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcFxcbisgKiBhbGxvd2luZyBibG9ja2luZy4gIExhcmdlIGZvbGlvcyBhcmUgY2hhcmdlZCB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsXFxuKyAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGJsb2NraW5nIHVubGVzcyB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgYXNrcyBmb3IgZGlyZWN0XFxuKyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0XFxuKyAqIGRvZXMgbm90IHJldHVybiB0byB1c2Vyc3BhY2UgaW5iZXR3ZWVuIC0gdGhlIHBvcHVsYXRlIGxvb3Agb2YgbWxvY2soKSBvclxcbisgKiBNQURWX1BPUFVMQVRFXyosIGFueSBHVVAtZHJpdmVuIHBvcHVsYXRpb24gLSBjYW4gZ3JvdyB1c2FnZSBmcm9tXFxuKyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS5cXG4rICpcXG4rICogQWJvdmUgbWVtb3J5LmhpZ2ggdGhlIGNncm91cCBpcyBzdXBwb3NlZCB0byBiZSB1bmRlciByZWNsYWltIHByZXNzdXJlLCBzb1xcbisgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpc1xcbisgKiBjaGFyZ2VkIHdpdGggYSBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhcyBkb2N1bWVudGVkLlxcbisgKlxcbisgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZVxcbisgKiBsYXJnZSBmb2xpbyBlaXRoZXIgd2F5LlxcbisgKlxcbisgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlXFxuKyAqIGNvdW50ZXIgbG9va3VwIG9mZiB0aGUgZmF1bHQgcGF0aCB1bmxlc3MgdGhlIHRhc2sgaGFzIGFjdHVhbGx5IGNoYXJnZWRcXG4rICogYWJvdmUgbWVtb3J5LmhpZ2ggYmVmb3JlLlxcbisgKlxcbisgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgb3JkZXIuXFxuKyAqL1xcbitib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICppdGVyO1xcbitcXHRib29sIG92ZXJfaGlnaCA9IGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBjaGFyZ2UgdGhhdCBjYW4gYmxvY2sgaXMgdGhyb3R0bGVkIGJ5IHRyeV9jaGFyZ2VfbWVtY2coKSBpdHNlbGYsXFxuK1xcdCAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBnaXZlIHVwIHRoZSBsYXJnZSBmb2xpbyBmb3IgaXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpdGVyID0gbWVtY2c7IGl0ZXI7IGl0ZXIgPSBwYXJlbnRfbWVtX2Nncm91cChpdGVyKSkge1xcbitcXHRcXHRpZiAocGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNml0ZXItXFx1MDAzZW1lbW9yeSkgXFx1MDAzZVxcbitcXHRcXHQgICAgUkVBRF9PTkNFKGl0ZXItXFx1MDAzZW1lbW9yeS5oaWdoKSkge1xcbitcXHRcXHRcXHRvdmVyX2hpZ2ggPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK1xcbitcXHRyZXR1cm4gb3Zlcl9oaWdoO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cXG4gICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA5MjYyNzZkNDE5MjAyLi5iMjhmY2NjODYyMTZiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNTMyMSw2ICs1MzIxLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcbiBcXHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cXG4gXFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbitcXG4rXFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXFxuK1xcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuK1xcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbitcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXHR9XFxuK1xcbiBcXHR3aGlsZSAob3JkZXJzKSB7XFxuIFxcdFxcdGFkZHIgPSBBTElHTl9ET1dOKHZtZi1cXHUwMDNlYWRkcmVzcywgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gXFx0XFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggNjI1YzE4NWExY2E0ZC4uYTIzNWM5YWVjYWYxOCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcXG5AQCAtNDQwLDkgKzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0ICogTGltaXQgVEhQIGdmcC4gVGhlIGxpbWl0YXRpb24gaXMgYSBuby1vcCBmb3IgdHlwaWNhbFxcbiBcXHQgKiBHRlBfSElHSFVTRVJfTU9WQUJMRSBidXQgbWF0dGVycyBmb3Igc2htZW0uXFxuIFxcdCAqL1xcbi1cXHRpZiAob3JkZXIpXFxuK1xcdGlmIChvcmRlcikge1xcbiBcXHRcXHRnZnAgPSB0aHBfc2htZW1fbGltaXRfZ2ZwX21hc2sodm1hX3RocF9nZnBfbWFzayh2bWEpLCBnZnApO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhpcyBnZnAgbWF5IG5vdCBhbGxvdyBibG9ja2luZywgaW4gd2hpY2ggY2FzZSB0aGUgY2hhcmdlXFxuK1xcdFxcdCAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW5cXG4rXFx0XFx0ICogdHJ5X2NoYXJnZV9tZW1jZygpLiAgQWJvdmUgbWVtb3J5LmhpZ2gsIGhhdmUgdGhlIGNhbGxlclxcbitcXHRcXHQgKiByZXRyeSB3aXRoIGEgc21hbGxlciBvcmRlciwgZG93biB0byBvcmRlci0wLCB3aGljaCBpc1xcbitcXHRcXHQgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlcidzIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzXFxuK1xcdFxcdCAqIGRvY3VtZW50ZWQuICBPbmx5IGZhdWx0IGNvbnRleHQgaXMgdGhyb3R0bGVkIGhlcmU7IHRoZVxcbitcXHRcXHQgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlXFxuK1xcdFxcdCAqIG5vdCB0aGUgb25lcyB0byBob2xkIGJhY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodm1mIFxcdTAwMjZcXHUwMDI2IG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHZtYS1cXHUwMDNldm1fbW0sIGdmcCkpXFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobXBvbCB8fCAhdm1mKSB7XFxuIFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2NfbXBvbChnZnAsIG9yZGVyLCBtcG9sLCBpbHgsIG51bWFfbm9kZV9pZCgpKTtcXG4gXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzMuNzg0MzIxOTEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5MTE4NjQ2NzE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgZm9yIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24gKFRIUCBhbmQgc3dhcCBjYWNoZSkgdW5kZXIgbWVtY2cgbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQuIEl0IGludHJvZHVjZXMgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpIHRvIHByZXZlbnQgbm9uLWJsb2NraW5nIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zIGZyb20gYnlwYXNzaW5nIG1lbW9yeS5oaWdoIHRocm90dGxpbmcsIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBpbiBhbm9ueW1vdXMgcGFnZSBmYXVsdHMgYW5kIHN3YXAtaW4gZmF1bHRzLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCByZWFjaGFibGUgY29yZSBtbSBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwNGM4NTUxNzcwNDY3YjVkMjBlYjA3NWM1YTY3NGExYzAxZjdlZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNToxOTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDQ2YmY3MjRjYWU3YWYuLmRlZmVmMGQzZDcxMGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC05NDEsNiArOTQxLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcbiB9XG4gXG4rYm9vbCBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuK1xuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/XG4rICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTFxuKyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuKyAqXG4rICogU2VlIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKS5cbisgKlxuKyAqIFRoZSB0YXNrJ3Mgb3Zlci1oaWdoIGRlYnQgaXMgbW9yZSB0aGFuIGEgZmFzdCBwYXRoIGhlcmUsIGl0IGFsc28gc2NvcGVzXG4rICogdGhlIGNoZWNrIHRvIHRoZSBjYXNlIHRoYXQgaXMgYnJva2VuLiAgVGhlIGRlYnQgaXMgc2V0dGxlZCBhbmQgY2xlYXJlZCBvblxuKyAqIGV2ZXJ5IHJldHVybiB0byB1c2Vyc3BhY2UsIHNvIGEgdGFzayBmYXVsdGluZyBsYXJnZSBmb2xpb3MgZnJvbSBhXG4rICogdXNlcnNwYWNlIGxvb3AgYWx3YXlzIGZpbmRzIGl0IHplcm8gYW5kIGtlZXBzIGdldHRpbmcgdGhlbSAtIG1lbW9yeS5oaWdoXG4rICogaXMgZW5mb3JjZWQgZm9yIGl0IG9uIHRoZSB3YXkgb3V0LiAgT25seSBhIGxvb3AgdGhhdCBzdGF5cyBpbiB0aGUga2VybmVsLFxuKyAqIHdoZXJlIG5vdGhpbmcgdGhyb3R0bGVzIGF0IGFsbCwgYWNjcnVlcyBkZWJ0IGFuZCByZWFjaGVzIHRoZSBjb3VudGVycy5cbisgKlxuKyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRpZiAobGlrZWx5KCFjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKG1tLCBnZnApO1xuK31cbitcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5AQCAtMTM5MCw2ICsxNDE3LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLCBzdHJ1Y3QgbWVtX2Nncm91cCAqb29tX2RvbWFpbilcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDcxNDBhMTAzMWZiMmUuLjA1OTUxOTQ2NWIyNDQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTM1NSw2ICsxMzU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IGludCBvcmRlciA9IEhQQUdFX1BNRF9PUkRFUjtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4rXHQvKlxuK1x0ICogQSBUSFAgY2hhcmdlZCB3aXRoIGEgZ2ZwIHRoYXQgY2Fubm90IGJsb2NrIGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoXG4rXHQgKiB0aHJvdHRsaW5nIGluIHRyeV9jaGFyZ2VfbWVtY2coKS4gIERvbid0IGhhbmQgb3V0IG9uZSB3aGlsZSB0aGVcbitcdCAqIGNncm91cCBpcyBhbHJlYWR5IGFib3ZlIG1lbW9yeS5oaWdoOiB0aGUgb3JkZXItMCBmYWxsYmFjayBpcyBjaGFyZ2VkXG4rXHQgKiB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZXMgYXMgZG9jdW1lbnRlZC5cbitcdCAqL1xuK1x0aWYgKG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHZtYS1cdTAwM2V2bV9tbSwgZ2ZwKSkge1xuK1x0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuK1x0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIgXHUwMDI2IEhQQUdFX1BNRF9NQVNLKTtcbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxNDYwY2JhNTM1ODhlLi5kZDdhNjJjM2RhY2IyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNTg3LDYgKzI1ODcsNjIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkodW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuIFx0cmV0dXJuIHBlbmFsdHlfamlmZmllcyAqIG5yX3BhZ2VzIC8gTUVNQ0dfQ0hBUkdFX0JBVENIO1xuIH1cbiBcbisvKipcbisgKiBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoIC0gd291bGQgYSBsYXJnZSBmb2xpbyBlc2NhcGUgbWVtb3J5LmhpZ2g/XG4rICogQG1tOiBtbSB0aGUgZm9saW8gd291bGQgYmUgY2hhcmdlZCBhZ2FpbnN0LCBtYXkgYmUgTlVMTFxuKyAqIEBnZnA6IGdmcCBtYXNrIHRoZSBmb2xpbyB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIGNoYXJnZWQgd2l0aFxuKyAqXG4rICogbWVtb3J5LmhpZ2ggaXMgZW5mb3JjZWQgb24gcmV0dXJuIHRvIHVzZXJzcGFjZSwgb3Igc3luY2hyb25vdXNseSBpblxuKyAqIHRyeV9jaGFyZ2VfbWVtY2coKSAtIGJ1dCB0aGUgc3luY2hyb25vdXMgcGF0aCBpcyBnYXRlZCBvbiB0aGUgY2hhcmdlIGdmcFxuKyAqIGFsbG93aW5nIGJsb2NraW5nLiAgTGFyZ2UgZm9saW9zIGFyZSBjaGFyZ2VkIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCxcbisgKiB3aGljaCBkb2VzIG5vdCBhbGxvdyBibG9ja2luZyB1bmxlc3MgdGhlIGFsbG9jYXRpb24gcG9saWN5IGFza3MgZm9yIGRpcmVjdFxuKyAqIGNvbXBhY3Rpb24sIHNvIHRob3NlIGNoYXJnZXMgZXNjYXBlIHRocm90dGxpbmcgZW50aXJlbHk6IGEgZmF1bHQgbG9vcCB0aGF0XG4rICogZG9lcyBub3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbmJldHdlZW4gLSB0aGUgcG9wdWxhdGUgbG9vcCBvZiBtbG9jaygpIG9yXG4rICogTUFEVl9QT1BVTEFURV8qLCBhbnkgR1VQLWRyaXZlbiBwb3B1bGF0aW9uIC0gY2FuIGdyb3cgdXNhZ2UgZnJvbVxuKyAqIG1lbW9yeS5oaWdoIGFsbCB0aGUgd2F5IHVwIHRvIG1lbW9yeS5tYXggd2l0aCBubyByZWNsYWltIGFuZCBubyBkZWxheS5cbisgKlxuKyAqIEFib3ZlIG1lbW9yeS5oaWdoIHRoZSBjZ3JvdXAgaXMgc3VwcG9zZWQgdG8gYmUgdW5kZXIgcmVjbGFpbSBwcmVzc3VyZSwgc29cbisgKiByZWZ1c2UgdGhlIGxhcmdlIGZvbGlvIGluc3RlYWQuICBDYWxsZXJzIGZhbGwgYmFjayB0byBvcmRlci0wLCB3aGljaCBpc1xuKyAqIGNoYXJnZWQgd2l0aCBhIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzIGRvY3VtZW50ZWQuXG4rICpcbisgKiBUaGlzIGlzIGEgbG9ja2xlc3Mgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzOyBhIHN0YWxlIHJlc3VsdCBvbmx5IGNvc3RzIG9uZVxuKyAqIGxhcmdlIGZvbGlvIGVpdGhlciB3YXkuXG4rICpcbisgKiBDYWxsZXJzIHNob3VsZCB1c2UgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSwgd2hpY2gga2VlcHMgdGhlXG4rICogY291bnRlciBsb29rdXAgb2ZmIHRoZSBmYXVsdCBwYXRoIHVubGVzcyB0aGUgdGFzayBoYXMgYWN0dWFsbHkgY2hhcmdlZFxuKyAqIGFib3ZlIG1lbW9yeS5oaWdoIGJlZm9yZS5cbisgKlxuKyAqIFJldHVybjogJXRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgZmFsbCBiYWNrIHRvIGEgc21hbGxlciBvcmRlci5cbisgKi9cbitib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICppdGVyO1xuK1x0Ym9vbCBvdmVyX2hpZ2ggPSBmYWxzZTtcbitcbitcdC8qXG4rXHQgKiBBIGNoYXJnZSB0aGF0IGNhbiBibG9jayBpcyB0aHJvdHRsZWQgYnkgdHJ5X2NoYXJnZV9tZW1jZygpIGl0c2VsZixcbitcdCAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBnaXZlIHVwIHRoZSBsYXJnZSBmb2xpbyBmb3IgaXQuXG4rXHQgKi9cbitcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpdGVyID0gbWVtY2c7IGl0ZXI7IGl0ZXIgPSBwYXJlbnRfbWVtX2Nncm91cChpdGVyKSkge1xuK1x0XHRpZiAocGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2aXRlci1cdTAwM2VtZW1vcnkpIFx1MDAzZVxuK1x0XHQgICAgUkVBRF9PTkNFKGl0ZXItXHUwMDNlbWVtb3J5LmhpZ2gpKSB7XG4rXHRcdFx0b3Zlcl9oaWdoID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1xuK1x0cmV0dXJuIG92ZXJfaGlnaDtcbit9XG4rXG4gLypcbiAgKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cbiAgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA5MjYyNzZkNDE5MjAyLi5iMjhmY2NjODYyMTZiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTMyMSw2ICs1MzIxLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXG4gXHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cbiBcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcbitcbitcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuK1x0aWYgKG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKHZtYS1cdTAwM2V2bV9tbSwgZ2ZwKSkge1xuK1x0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbitcdFx0Z290byBmYWxsYmFjaztcbitcdH1cbitcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNjI1YzE4NWExY2E0ZC4uYTIzNWM5YWVjYWYxOCAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNDQwLDkgKzQ0MCwyMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdCAqIExpbWl0IFRIUCBnZnAuIFRoZSBsaW1pdGF0aW9uIGlzIGEgbm8tb3AgZm9yIHR5cGljYWxcbiBcdCAqIEdGUF9ISUdIVVNFUl9NT1ZBQkxFIGJ1dCBtYXR0ZXJzIGZvciBzaG1lbS5cbiBcdCAqL1xuLVx0aWYgKG9yZGVyKVxuK1x0aWYgKG9yZGVyKSB7XG4gXHRcdGdmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayh2bWFfdGhwX2dmcF9tYXNrKHZtYSksIGdmcCk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFRoaXMgZ2ZwIG1heSBub3QgYWxsb3cgYmxvY2tpbmcsIGluIHdoaWNoIGNhc2UgdGhlIGNoYXJnZVxuK1x0XHQgKiBiZWxvdyBlc2NhcGVzIHRoZSBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nIGluXG4rXHRcdCAqIHRyeV9jaGFyZ2VfbWVtY2coKS4gIEFib3ZlIG1lbW9yeS5oaWdoLCBoYXZlIHRoZSBjYWxsZXJcbitcdFx0ICogcmV0cnkgd2l0aCBhIHNtYWxsZXIgb3JkZXIsIGRvd24gdG8gb3JkZXItMCwgd2hpY2ggaXNcbitcdFx0ICogY2hhcmdlZCB3aXRoIHRoZSBjYWxsZXIncyBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlZCBhc1xuK1x0XHQgKiBkb2N1bWVudGVkLiAgT25seSBmYXVsdCBjb250ZXh0IGlzIHRocm90dGxlZCBoZXJlOyB0aGVcbitcdFx0ICogcmVhZGFoZWFkIGFuZCB6c3dhcCB3cml0ZWJhY2sgY2FsbGVycyBoYXZlIG5vIEB2bWYgYW5kIGFyZVxuK1x0XHQgKiBub3QgdGhlIG9uZXMgdG8gaG9sZCBiYWNrLlxuK1x0XHQgKi9cbitcdFx0aWYgKHZtZiBcdTAwMjZcdTAwMjYgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuIFx0aWYgKG1wb2wgfHwgIXZtZikge1xuIFx0XHRmb2xpbyA9IGZvbGlvX2FsbG9jX21wb2woZ2ZwLCBvcmRlciwgbXBvbCwgaWx4LCBudW1hX25vZGVfaWQoKSk7XG4gXHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzMuNzg0MzIzNTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTExMjY2OTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBpdCdzIGludHJvZHVjaW5nIGEgY2hlY2sgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwcyBhbmQgbGFyZ2UgZm9saW9zLCBzcGVjaWZpY2FsbHkgd2hlbiBhIG1lbW9yeSBjZ3JvdXAncyBgLmhpZ2hgIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGUgY29kZSBzbmlwcGV0cyBnaXZlIGEgY2xlYXIgcGljdHVyZTpcblxuKiAgIEl0IGludHJvZHVjZXMgYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgdGhhdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgbWVtb3J5IGNncm91cCBpcyBvdmVyIHRoZSBgLmhpZ2hgIGxpbWl0LiBXaGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoaXMgaXMgYSByZWFsIGNoZWNrLCBvdGhlcndpc2UgaXQncyBqdXN0IHN0dWJiZWQuXG4qICAgVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIChmb3IgVEhQL2h1Z2UgcGFnZSBhbGxvY2F0aW9uKSwgYGFsbG9jX2Fub25fZm9saW9gIChmb3IgYW5vbnltb3VzIGZvbGlvIGFsbG9jYXRpb24pLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgKGR1cmluZyBzd2FwIG9wZXJhdGlvbnMpLiBUaGUgY2FsbHMgYWxsIHNlZW0gdG8gYmUgYWJvdXQgY2hlY2tpbmcgaWYgdGhlIGAuaGlnaGAgbGltaXQgaXMgb3ZlciwgYW5kIGlmIGl0IGlzLCBpdCBlaXRoZXIgZmFsbHMgYmFjayAoaW4gVEhQL2ZvbGlvIGFsbG9jYXRpb24pIG9yIHJldHVybnMgYW4gZXJyb3IgKGluIHN3YXAgYWxsb2NhdGlvbikuXG5cbk5vdywgbGV0J3MgZXZhbHVhdGUgdGhpcyBhZ2FpbnN0IHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLiBUaGUgY3JpdGVyaWEgc3RhdGVzIHRoYXQgYW55IGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGRlZmluaXRlbHkgaW4gc2NvcGUuIEkgY2FuIHNlZSBjb3JlIG1tIGNvZGUgYmVpbmcgdG91Y2hlZCAoIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tZW1vcnkuY2AsIGBtbS9zd2FwX3N0YXRlLmNgIGFyZSBhbGwgZGVmaW5pdGVseSBjb3JlKSwgYW5kIHNwZWNpZmljYWxseSwgY29kZSByZWxhdGVkIHRvIGxhcmdlIGZvbGlvIGFsbG9jYXRpb24sIFRIUCwgYW5kIHN3YXAgYWxsb2NhdGlvbiAqdW5kZXIqIG1lbW9yeS5oaWdoIG1lbWNnIGxpbWl0cy4gVGhpcyBpcyBhYnNvbHV0ZWx5IGNvcmUgbW0uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhbGxvY2F0aW9uIHBhdGhzIGZvciBsYXJnZSBmb2xpb3MsIFRIUCwgYW5kIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYC5oaWdoYCBsaW1pdCBjaGVja3MuIFRoaXMgbWVhbnMgaXQncyAxMDAlIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIHRoZXJlZm9yZSBJJ20gaW1tZWRpYXRlbHkgbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBJdCdzIGNsZWFybHkgZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHYCBlbmFibGVkLCBhcyB0aGF0J3MgdGhlIGNvbmRpdGlvbmFsIGZvciB0aGUgZnVuY3Rpb24ncyByZWFsIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5lZWRlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYENPTkZJR19TV0FQYCB3b3VsZCBiZSByZXF1aXJlZCwgZ2l2ZW4gdGhlIHRvdWNoIHRvIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBJIHdpbGwgbmVlZCB0byB1c2UgYSBncmVwIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBvciBzb3VyY2UgY29kZSB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6MzguODk2OTk0OTE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjc0ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTU5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTkwLS8qKlxcbm1tL21lbWNvbnRyb2wuYzoyNTkxOiAqIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2ggLSB3b3VsZCBhIGxhcmdlIGZvbGlvIGVzY2FwZSBtZW1vcnkuaGlnaD9cXG5tbS9tZW1jb250cm9sLmMtMjU5Mi0gKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjYxNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6MjYxNzpib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtMjYxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjM4Ljk1MDY3NTM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNzg1MzMzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqQ2hlY2tpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gZm9yIGBtbS9tZW1jb250cm9sLmNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbWVtb3J5IGNvbnRyb2wuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb21waWxhdGlvbiBndWFyZCBmb3IgYG1tL21lbWNvbnRyb2wuY2Agd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIHRvIHVuZGVyc3RhbmQgKndoeSogb3IgKmlmKiBhIHNwZWNpZmljIG1vZHVsZSBpcyBjb21waWxlZC4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWcgb3IgZGVwZW5kZW5jeSB0aGF0J3MgYWZmZWN0aW5nIGl0cyBpbmNsdXNpb24gaW4gdGhlIGtlcm5lbCBidWlsZC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZGlhZ25vc2UgYW55IGJ1aWxkLXJlbGF0ZWQgaXNzdWVzIHdpdGggdGhpcyBmaWxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgZHJpdmluZyB0aGlzIGNoZWNrIC0gc28gSSdtIGhvcGluZyBJJ2xsIHF1aWNrbHkgZmluZCB0aGUgY29uZGl0aW9uIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjQxLjMyOTIxMTgzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ0MzM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNjpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDctaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA4Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo0MS4zNzg2NjI4NDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA2NDAxMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBtbWNvbnRyb2wub2AgaXMgYnVpbHQgd2l0aCBgQ09ORklHX01FTUNHYCBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMsIGxpa2VseSBpbiByZWxhdGlvbiB0byByZXNvdXJjZSBsaW1pdGluZyBvciBhY2NvdW50aW5nLiBHaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYXJvdW5kIGxhcmdlIG1lbW9yeSBwYWdlcyAoaHVnZXBhZ2VzKSBhbmQgc3dhcCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiBgaHVnZV9tZW1vcnkuY2AgYW5kIGBzd2FwX3N0YXRlLmNgIHJlZmVyZW5jZWQgaW4gYG1tL01ha2VmaWxlYC4gVGhlc2UgYXJlYXMgYXJlIGNydWNpYWwgYmVjYXVzZSBtZW1vcnkgY29udHJvbCBncm91cHMgb2Z0ZW4gbmVlZCB0byBpbnRlcmFjdCBpbnRyaWNhdGVseSB3aXRoIGh1Z2VwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGFuZCBob3cgc3dhcHBlZCBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGNncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaW50ZXJhY3RzIHdpdGggdGhvc2UgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIGNvbmRpdGlvbmFsIG9yIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGNvbmZpZ3VyYXRpb24sIG9yIGhvdyBodWdlcGFnZXMgb3Igc3dhcCBiZWhhdmlvciBpcyBkaWZmZXJlbnQgd2hlbiBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGluIHVzZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMsIHRoZSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgcmVsYXRlZCB0byBob3cgdGhlc2UgY29tcG9uZW50cyBwbGF5IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6NDMuMzg1MDY2NTI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTQyMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihodWdlX21lbW9yeXxzd2FwX3N0YXRlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03Nz1lbmRpZlxcbm1tL01ha2VmaWxlLTc4LVxcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDE9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDI6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMy1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo0My40MzIyMTYxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMzc0MzgyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgY29kZS4gSSBzZWUgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBhbmQgSSBzaG91bGQgaGF2ZSBrbm93biB0aGF0IGFscmVhZHksIGZvciB0aGUgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeS5oaWdoIGxvZ2ljLCB0aGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlc3NlbnRpYWwgZm9yIGBtbS9odWdlX21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGZvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYC4gQW5kIG9mIGNvdXJzZSwgYENPTkZJR19TV0FQYCBpcyBuZWVkZWQgZm9yIGBzd2FwX3N0YXRlLmNgLCBwYXJ0aWN1bGFybHkgZm9yIGBfX3N3YXBfY2FjaGVfYWxsb2NgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgcGVyaGFwcyBsZXNzIG9idmlvdXMgb25lcywgZm9yIGVpdGhlciBgQ09ORklHX01FTUNHYCBvciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYD8gVGltZSB0byBkaWcgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo0NS42Njk2NTY1MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzMzMTc2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6NDguMDQyOTg3MTkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NTIzNTkxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpbml0L0tjb25maWdgIFNlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEwNzUgdG8gMTEwMCBvZiBgaW5pdC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhpcyBzZWdtZW50IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uLiBHaXZlbiB0aGUgZmlsZSBuYW1lLCBgS2NvbmZpZ2AsIGFuZCB0aGUgbGluZSBudW1iZXJzLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgcmVsYXRlZCB0byAqc29tZSogYXNwZWN0IG9mIHRoZSBrZXJuZWwncyBpbml0aWFsIHNldHVwIGFuZCBwb3RlbnRpYWxseSBtb2R1bGUgbG9hZGluZyBvciBlYXJseSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSdsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiY29uZmlnXCIsIFwiYm9vbFwiLCBcInRyaXN0YXRlXCIsIFwiZGVwZW5kcyBvblwiLCBcInNlbGVjdFwiLCBhbmQgYW55IG1vZHVsZSBvciBkcml2ZXIgbmFtZXMgdG8gZ2xlYW4gdGhlIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGVzZSBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBsb2dpY2FsIGZsb3cgLSB0aGUgaGllcmFyY2h5LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGRlZmluZWQgZWxzZXdoZXJlIGluIEtjb25maWcgYW5kIHRoZSBzb3VyY2UgY29kZS4gVGhlIHNwZWNpZmljIHNlY3Rpb24gd2lsbCBkZXRlcm1pbmUgaG93IGltcG9ydGFudCBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjUxLjQ5NTM0ODM0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTE6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwMjpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDQ6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjUxLjQ5NTQ4MDgwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTcxMzcyMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYE1FTUNHYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHYC4gSXTigJlzIHByb2JhYmx5IGEgY29yZSBjb21wb25lbnQsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXTigJlzIG5vdCByZWFsbHkgZGVwZW5kZW50IG9uIGFueXRoaW5nICplbHNlKi4gQnV0IGp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIExldCBtZSBmaXJlIHVwIHRoZSBrZXJuZWwgY29uZmlnLCBhbmQgbmF2aWdhdGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AuLi4gc3BlY2lmaWNhbGx5LCBJJ2xsIGdvIGRpZ2dpbmcgd2l0aGluIHRoZSBgQ0dST1VQU2Agc2VjdGlvbiDigJMgdGhhdOKAmXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaXQuIEdvdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBpbiBob3cgaXQncyBlbmFibGVkIG9yIGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTMwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1My42NjY4NTUzNzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTIyMzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0dST1VQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNDY9Y29uZmlnIFNMQUJfT0JKX0VYVFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNDgtXFxuaW5pdC9LY29uZmlnOjEwNDk6bWVudWNvbmZpZyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTEwNTAtXFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1My43MTMzODIyNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMxOTI1ODM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDR1JPVVBTIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXM6IEEgQ29uZmlndXJhdGlvbiBRdWVyeSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gWWVzLCBDR1JPVVBTIGlzIGRlZmluaXRlbHkgdGhlIG92ZXJhcmNoaW5nIHN0cnVjdHVyZSwgdGhlIGNvbnRhaW5lciBmb3IgYWxsIG9mIHRoaXMuIEJ1dCBub3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBzZXR0aW5nIGZvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gaXRzIHN0YXR1cyBhbmQgaG93IGl0IHBsYXlzIHdpdGggdGhpcyBzZXR1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBDR1JPVVBTIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1Ny4wMzI2NDg3NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjgyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzE9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMy1cXG5tbS9LY29uZmlnOjgzNDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzUtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MTk6NTcuMDc4OTUxMjk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1NjMyNDk3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gVGhlIGZpbGUgSSBuZWVkIGlzIGBtbS9LY29uZmlnYCwgYW5kIEknbSBpbnRlcmVzdGVkIGluIGxpbmVzIDgzNCB0aHJvdWdoIDg1MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHdoYXRldmVyIEknbSBpbnZlc3RpZ2F0aW5nLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBob2xkcyB0aGUgaW5mb3JtYXRpb24gSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyb3VuZCB0aGlzIHNwZWNpZmljIGFyZWEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRlcGVuZGVuY2llcyB0aGF0IGNvbnRyb2wgd2hhdGV2ZXIgaXQgaXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToxOTo1OS42NDIyMDMxMTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODM0LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM0OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM1OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzc6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODM5OlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDA6XFx0XFx0aGVscFxcbiA4NDE6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MjpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQzOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NDpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NTpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ2OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NDk6XFx0XFxuIDg1MDpcXHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NTE6XFx0XFxuIDg1MjpcXHRjaG9pY2VcXG4gODUzOlxcdFxcdHByb21wdCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1xcXCJcXG4gODU0OlxcdFxcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuIDg1NTpcXHRcXHRoZWxwXFxuIDg1NjpcXHRcXHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjE5OjU5LjY0MjMzNDI4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzUwMzgyNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2V5IFN5bWJvbHMgaW4gdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBDb250ZXh0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHN5bWJvbHMuIEZpcnN0IHVwLCBJJ20gbG9va2luZyBhdCBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAuIERlZmluZWQgcmlnaHQgdGhlcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCdzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBhZGRlZCBieSB0aGlzIHBhdGNoLCBzbyBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIHByaW1hcnkgZm9jdXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2lsbCBsaWtlbHkgcmVzaWRlLCBzbyBJJ20gZ29pbmcgdG8gcGF5IHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGl0LlxuXG5UaGVuLCB0aGVyZSdzIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSXQncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgc2NvcGUsIHNvIEkgc2hvdWxkIGxvb2sgZm9yIGl0cyBjYWxsZXJzLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyB0aGlzIG9uZS4gSSBrbm93IHRoaXMgY29kZSBwcmV0dHkgd2VsbCwgc28gSSB0aGluayB0aGlzIHdpbGwgeWllbGQgaW1wb3J0YW50IGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjAyLjM5MjcxOTEyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MDgxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTEzNDk9RVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcXG5tbS9odWdlX21lbW9yeS5jLTEzNTAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEzNTItXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDM4PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0NDUtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDQ2OlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE0NDctXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxNTA9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjE1Ny1cXG5tbS9odWdlX21lbW9yeS5jOjIxNTg6XFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjE1OS1cXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG4tLVxcbm1tL21lbW9yeS5jPTUyNzA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUzMjQtXFxubW0vbWVtb3J5LmM6NTMyNTpcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG5tbS9tZW1vcnkuYy01MzI2LVxcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjAyLjQ0MzYzNTE0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjY0MTA2NTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHNwZWFraW5nIGFzIGFuIGV4cGVydDpcblxuKipUcmFjaW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIFBhdGhzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzIHRoYXQgbGVhZCB0byB0aGUgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIGludm9sdmluZyBgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3plcm9fd3BfcG1kYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVzZS4gSSdtIGFzc3VtaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgb2YgYW5vbnltb3VzIGh1Z2UgcGFnZXMuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmQgYW5kIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZWlyIHVzZS4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIGhhdmUgdG8gZm9sbG93IGEgYnVuY2ggb2YgYHRyYWNlX3ByaW50a2Agc3RhdGVtZW50cyBhbmQgY2FsbCBzdGFjayBpbnNwZWN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgYW5kIHdoZW4sIGFuZCBob3csIHRoZSB6ZXJvIHBhZ2UgaXMgd3JpdHRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDoyNS4wODQ3MDM2MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDcwOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlfGRvX2h1Z2VfemVyb193cF9wbWQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTE0Mjg9c3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0MzctXFxubW0vaHVnZV9tZW1vcnkuYzoxNDM4OnN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaHVnZV9tZW1vcnkuYy0xNDM5LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTU3Nz12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNjMwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTYzMTpcXHRyZXR1cm4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTYzMi19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxNDA9Ym9vbCBodWdlX3BtZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxNDktXFxubW0vaHVnZV9tZW1vcnkuYzoyMTUwOnN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaHVnZV9tZW1vcnkuYy0yMTUxLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjE4Mj12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3dwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxOTQtXFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzoyMTk1OlxcdFxcdHZtX2ZhdWx0X3QgcmV0ID0gZG9faHVnZV96ZXJvX3dwX3BtZCh2bWYpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjE5Ni1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjUzNj1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1MS1cXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcXG5tbS9odWdlX21lbW9yeS5jOjI1NTI6XFx0ICogX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1My1cXHQgKi9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NzgwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODgtICogQHBhZ2UgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIHNldHVwIGFmdGVyIGl0J3MgYWxsb2NhdGVkLiBUaGUgY29kZSBiaXRzXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODk6ICogaGVyZSBmb2xsb3cgY2xvc2VseSB0aGUgY29kZSBpbiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKCkuIFRoaXMgQVBJIGRvZXNcXG5tbS9taWdyYXRlX2RldmljZS5jLTc5MC0gKiBub3Qgc3VwcG9ydCBUSFAgemVybyBwYWdlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6MjUuMTQwNzgxNjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyOTIzNjkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZSBQTUQgQW5vbnltb3VzIFBhZ2UgRmF1bHRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAuIEl0J3MgYSBmdW5jdGlvbiwgbm90IGEgc3RhdGljIG9uZSwgd2hpY2ggdGVsbHMgbWUgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgYnJvYWRlciBodWdlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBhbHJlYWR5IGtub3cgaXQncyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNvIEknbSBndWVzc2luZyBpdCdzIHNwZWNpZmljIHRvIGhhbmRsaW5nIGZhdWx0cyBmb3IgYW5vbnltb3VzIGh1Z2UgUE1EcyDigJMgYmlnIHBhZ2VzIHRoYXQgYXJlbid0IGJhY2tlZCBieSBhbnkgZmlsZS5cblxuTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaHVnZSBQTUQgZmF1bHRzIGFjdHVhbGx5IGdldCBhbiBhbm9ueW1vdXMgcGFnZSBhbGxvY2F0ZWQuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIGlzIHRoZSBjYWxscyB0byBgYWxsb2NfYW5vbl9mb2xpb2AuIEknbGwgd2FudCB0byBjaGVjayB0aGUgY2FsbGVycyBpbiBgbW0vbWVtb3J5LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbGxvY2F0aW9uIHBhdGggYW5kIGluc2lnaHQgaW50byB3aGVyZSB0aGVzZSBodWdlIHBhZ2VzIGFyZSBiZWluZyBicm91Z2h0IGludG8gZXhpc3RlbmNlIG9uIGRlbWFuZCwgcmlnaHQgd2hlbiBhIHByb2Nlc3MgdHJpZXMgdG8gYWNjZXNzIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseSBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGFub24gZm9saW8ncyBhbGxvY2F0aW9uIGxvZ2ljIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGh1Z2UgcGFnZSBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDoyNy40NzAwMjA2NzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTkzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2Fub25fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTCh0aHBfZ2V0X3VubWFwcGVkX2FyZWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1MC1cXG5tbS9odWdlX21lbW9yeS5jOjEzNTE6c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1Mi1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE0Mzg9c3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0NS1cXG5tbS9odWdlX21lbW9yeS5jOjE0NDY6XFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0Ny1cXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjE1MD1zdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3plcm9fd3BfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMTU3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjE1ODpcXHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vaHVnZV9tZW1vcnkuYy0yMTU5LVxcdGlmICh1bmxpa2VseSghZm9saW8pKVxcbi0tXFxubW0vbWVtb3J5LmM9NTI1OD1zdGF0aWMgYm9vbCBwdGVfcmFuZ2Vfbm9uZShwdGVfdCAqcHRlLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1vcnkuYy01MjY5LVxcbm1tL21lbW9yeS5jOjUyNzA6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy01MjcxLXtcXG4tLVxcbm1tL21lbW9yeS5jLTUzMjQtXFxubW0vbWVtb3J5LmM6NTMyNTpcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG5tbS9tZW1vcnkuYy01MzI2LVxcdGlmIChtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz01NDAzPXN0YXRpYyB2bV9mYXVsdF90IGRvX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTQ1Ny1cXHQvKiBSZXR1cm5zIE5VTEwgb24gT09NIG9yIEVSUl9QVFIoLUVBR0FJTikgaWYgd2UgbXVzdCByZXRyeSB0aGUgZmF1bHQgKi9cXG5tbS9tZW1vcnkuYzo1NDU4OlxcdGZvbGlvID0gYWxsb2NfYW5vbl9mb2xpbyh2bWYpO1xcbm1tL21lbW9yeS5jLTU0NTktXFx0aWYgKElTX0VSUihmb2xpbykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjI3LjUyNzYxOTc5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDk2NDIyMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBbm9ueW1vdXMgUGFnZSBGYXVsdHMqKlxuXG5Pa2F5LCBzbyBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgKmV2ZXJ5KiBhbm9ueW1vdXMgcGFnZSBmYXVsdC4gSXQncyB0aGUgY2VudHJhbCBodWIsIHRoZSBtb3N0IGNvbW1vbiBjYXNlLCBzbyB3ZSBuZWVkIHRvIGxvb2sgYmV5b25kIHRoYXQgZnVuY3Rpb24uIEZvY3VzaW5nIG9uIGBkb19hbm9ueW1vdXNfcGFnZWAgaXMgYSB3YXN0ZSBvZiB0aW1lIGF0IHRoaXMgcG9pbnQuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIHByb2JsZW0gaXNuJ3QgaW4gdGhlICpoYW5kbGluZyogb2YgdGhlIGZhdWx0LCBidXQgaW4gaG93IHdlJ3JlIG1hbmFnaW5nIHRoZSBzd2FwcGVkIHBhZ2VzLCBzbyB0aGUgbmV4dCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgaW4gYHN3YXBfc3RhdGUuY2AsIHBhcnRpY3VsYXJseSB0aGUgYF9fc3dhcF9jYWNoZV9hbGxvY2AgZnVuY3Rpb24sIHByb3ZpZGVzIHNvbWUgaW5zaWdodHMgaW50byBob3cgYW5vbnltb3VzIG1lbW9yeSBpcyBiZWluZyBoYW5kbGVkIHdoZW4gc3dhcHBlZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMuIFdoYXQgY2F1c2VzIHRoZSBzd2FwIGNhY2hlIHRvIGJlIHVzZWQgc28gZnJlcXVlbnRseT8gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGFjdHVhbGx5ICpjYWxsKiBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhlIGNhbGwgZ3JhcGggb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV2ZWFsIHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiwgYW5kIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHZpZXcgb2Ygd2hlcmUgdGhlIGJvdHRsZW5lY2sgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODM2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6MzEuMDI0MDQ0ODM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI3MjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2FjaGVfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz0zNjk9dm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQxNS0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NDE2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXBfc3RhdGUuYy00MTctXFx0XFx0XFx0XFx0XFx0c3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTUzNT1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTU1MC1cXHRkbyB7XFxubW0vc3dhcF9zdGF0ZS5jOjU1MTpcXHRcXHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXFxubW0vc3dhcF9zdGF0ZS5jLTU1Mi1cXHRcXHRcXHRcXHRcXHQgdm1mLCBtcG9sLCBpbHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDozMS4wNzYzMjMyNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDgzMTAxNzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGNydWNpYWwgdG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24sIHNvIGtub3dpbmcgaXRzIGNhbGwgcGF0aHMgaXMgdml0YWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBvciB1bmRlcnN0YW5kaW5nIGEgY2hhbmdlIGluIGJlaGF2aW9yLiBUaGlzIGxpa2VseSBtZWFucyB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBmcm9tIHRoZSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgc3dhcCBjYWNoZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByb2JhYmx5IHN0YXJ0IHdpdGggYHN3YXBfcmVhZHBhZ2VgLCBgc3dhcF93cml0ZXBhZ2VgLCBhbmQgdGhlIHJlY2xhaW0gcGF0aC4gIFRob3NlIGFyZSB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aGluZyB0aGV5IGludm9rZSwgaW50ZXJhY3Qgd2l0aCB0aGUgc3dhcCBjYWNoZSBjb2RlLiBBcmUgdGhlcmUgc3BlY2lmaWMgZm9saW8gZmxhZ3MsIG9yIHBhZ2Ugc3RhdGVzLCB0aGF0IGFyZSBiZWluZyBwYXNzZWQgaW4gd2hpY2ggd291bGQgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2A/IFdoYXQgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIGlzIHRoaXMgY2FsbCBwYXRoIHRyaWdnZXJlZCBieSBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaW4gYW5vdGhlciBwYXJ0IG9mIHRoZSBzeXN0ZW0/XG5cbkknbGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IC0gYW0gSSBjb25jZXJuZWQgYWJvdXQgYSBwYXJ0aWN1bGFyIGlzc3VlIHN1Y2ggYXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG1lbW9yeSBsZWFrcywgb3IgYSBjcmFzaD8gIEtub3dpbmcgdGhpcywgSSBjYW4gbmFycm93IGRvd24gdGhlIHNlYXJjaCB0byByZWxldmFudCBjYWxsIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGlmIHRoaXMgaXMgYWJvdXQgcGVyZm9ybWFuY2UsIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGZyZXF1ZW50bHkgZXhlY3V0ZWQgcGF0aHMuIElmIEkgYW0gbG9va2luZyBmb3IgYSBtZW1vcnkgbGVhayBJIHdhbnQgdG8gbG9vayBhdCB3aGVyZSB0aGUgZm9saW8gaXMgKnJlbGVhc2VkKiBhZnRlciBhbGxvY2F0aW9uIGFuZCB2ZXJpZnkgdGhhdCBldmVyeSBhbGxvY2F0aW9uIGhhcyBhIGNvcnJlc3BvbmRpbmcgZnJlZS5cblxuSSdsbCBwcm9iYWJseSB1c2UgYSB0b29sIHRvIHRyYXZlcnNlIHRoZSBjYWxsZ3JhcGggb3IganVzdCBncmVwIGZvciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBzb3VyY2UuIEkgZXhwZWN0IGl0IHRvIGdldCBxdWl0ZSBpbnZvbHZlZCwgZ2l2ZW4gdGhhdCBpdCdzIGEgY29yZSBzd2FwIGZ1bmN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZGlmZmVyZW50IGNhbGxlciBjb250ZXh0cyBhbmQgd2hhdCB0aGV5IGFyZSB0cnlpbmcgdG8gYWNoaWV2ZS4gSSdsbCBhbHNvIGNoZWNrIGZvciBhbnkgY29kZSBwYXRocyB0aGF0IG1heSBpbmRpcmVjdGx5IGNhbGwgdGhlIGZ1bmN0aW9uIHRocm91Z2ggc29tZSBpbnRlcm1lZGlhdGUgZnVuY3Rpb25zLiBNeSBnZW5lcmFsIGFpbSB3aWxsIGJlIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBjYWxsIGNoYWluLCBmcm9tIHRoZSBoaWdoZXN0LWxldmVsIFZGUyBmdW5jdGlvbnMgZG93biB0byB0aGUgc3BlY2lmaWMgZm9saW8gYWxsb2NhdGlvbi4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDozNS45MDczNDI5MjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDgyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXAuaD0zMTQ9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbm1tL3N3YXAuaC0zMTYtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTUxOC0vKipcXG5tbS9zd2FwX3N0YXRlLmM6NTE5OiAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy01MjAtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MzQtICovXFxubW0vc3dhcF9zdGF0ZS5jOjUzNTpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbm1tL3N3YXBfc3RhdGUuYy01MzYtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NjYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02NzItXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo2NzM6XFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG5tbS9zd2FwX3N0YXRlLmMtNjc0LVxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTcwND1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcxMy1cXHRcXHRcXHRyZXR1cm4gZm9saW87XFxubW0vc3dhcF9zdGF0ZS5jOjcxNDpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XFxubW0vc3dhcF9zdGF0ZS5jLTcxNS1cXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTg0ND12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODg5LSAqICAgICAuLi5cXHRcXHRcXHRcXHRzd2Fwb2ZmK3N3YXBvblxcbm1tL3N3YXBmaWxlLmM6MTg5MDogKiAgICAgc3dhcF9jYWNoZV9hbGxvY19mb2xpbygpXFxubW0vc3dhcGZpbGUuYy0xODkxLSAqICAgICAgIC8vIGNoZWNrIHN3YXBfbWFwXFxuLS1cXG5tbS96c3dhcC5jPTEwMDU9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTAyMS1cXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL3pzd2FwLmM6MTAyMjpcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG5tbS96c3dhcC5jLTEwMjMtXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDozNS45NjA0MzY0NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTc0NjYzMzE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU3dhcCBDYWNoZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwIGNhY2hlIGFsbG9jYXRpb24gZHVyaW5nIHBhZ2UgZmF1bHRzLiBgc3dhcGluX3N5bmNgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgZm9yIGZhdWx0IGhhbmRsaW5nLiBJbnRlcmVzdGluZyB0aGF0IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24ndCBzdGF0aWM7IGl0J3MgZXhwb3J0ZWQgaW50ZXJuYWxseSB2aWEgYG1tL3N3YXAuaGAuIFRoYXQgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG5vdCBqdXN0IHN0cmljdGx5IGxpbWl0ZWQgdG8gdGhlIGZpbGUgd2hlcmUgaXQncyBkZWZpbmVkLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp1c2FnZSogcGF0dGVybnMgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaW1lIHRvIGRpZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHdoYXQgZXhhY3RseSBpcyBjYWxsaW5nIGBzd2FwaW5fc3luY2AgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjQxLjcwNzA3MjMzNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MTExODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4NDQ9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00OTM1LVxcdFxcdGlmIChkYXRhX3JhY2Uoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NZTkNIUk9OT1VTX0lPKSlcXG5tbS9tZW1vcnkuYzo0OTM2OlxcdFxcdFxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbm1tL21lbW9yeS5jLTQ5MzctXFx0XFx0XFx0XFx0XFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXFxuLS1cXG5tbS9zaG1lbS5jPTIyNDg9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMjYyLVxcdG1wb2wgPSBzaG1lbV9nZXRfcGdvZmZfcG9saWN5KGluZm8sIGluZGV4LCBvcmRlciwgXFx1MDAyNmlseCk7XFxubW0vc2htZW0uYzoyMjYzOlxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIGdmcCwgQklUKG9yZGVyKSwgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3NobWVtLmMtMjI2NC1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXFxubW0vc3dhcC5oLTMzMy1cXHRcXHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG5tbS9zd2FwLmgtMzM1LVxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuLS1cXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwLmgtNDEzLVxcbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxcbm1tL3N3YXAuaC00MTUtXFx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY2Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjg4LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2ODk6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjkwLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwMy0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzA0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTcwNS1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjQxLjc1NjQ4OTM4N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjM0NDQyOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgYW5kIGl0cyBDYWxsZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSSd2ZSBjb25maXJtZWQgaXQncyBhIG5vbi1zdGF0aWMgc3ltYm9sLCBtZWFuaW5nIGl0J3MgZXhwbGljaXRseSBleHBvcnRlZCBpbiB0aGUgdm1saW51eC4gTm93LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGlkZW50aWZ5IGl0cyBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxlcnMgdG8gZXZhbHVhdGUgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3QuXG5cblRoZSBjb2RlIGl0c2VsZiwgd2l0aCBpdHMgY2hlY2sgZm9yIGJsb2NraW5nIGFsbG9jYXRpb25zLCBtYWtlcyBzZW5zZS4gSXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IGEgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBpbiBhIG1lbW9yeSBjZ3JvdXAgaWYgdGhlIG1lbW9yeSB1c2FnZSBpcyBhbHJlYWR5IG92ZXIgdGhlIFwiaGlnaFwiIHdhdGVybWFyaywgdW5sZXNzIGEgYmxvY2tpbmcgYWxsb2NhdGlvbiBpcyBiZWluZyBhdHRlbXB0ZWQuIFRoZSBsb29wIHRocm91Z2ggcGFyZW50IGNncm91cHMgaXMgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGZvciB0aGlzIGtpbmQgb2YgaGllcmFyY2hpY2FsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5OZXh0LCBJIGxvb2sgZm9yIHBsYWNlcyB0aGF0IHRvdWNoIG9yIGNhbGwgdGhpcyBmdW5jdGlvbi4gRnJvbSBpbml0aWFsIGluc3BlY3Rpb24sIEkgc2VlIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQuIGBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaGAgaXMgbGlrZWx5IHVzZWQgaW4gVEhQIGFub255bW91cyBmYXVsdHMgKGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWApIGFuZCB3aGVuIGFsbG9jYXRpbmcgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLlxuXG5JIGRpZCBhIGRlZXBlciBkaXZlIGFuZCBjb25maXJtZWQgbXkgaW5pdGlhbCBmaW5kaW5ncyB3ZXJlIGNvcnJlY3QuIE5vdyBJJ20gY2hlY2tpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgcG90ZW50aWFsIGluZGlyZWN0IGNhbGxlcnMuIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgaXMgVEhQLXNwZWNpZmljLCB3aGljaCBtZWFucyBpdHMgaW1wYWN0IGlzbid0IGFzIHdpZGVzcHJlYWQgYXMgZnVuY3Rpb25zIGxpa2UgYGRvX2Fub255bW91c19wYWdlYC4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGRlYWxzIHdpdGggc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCBhZ2FpbiBhIG1vcmUgdGFyZ2V0ZWQgYXJlYS5cblxuQSByZXZpZXcgb2YgdGhlIGNvbW1pdCBkaWZmcyBoZWxwcyBtZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGFsbCB0aGUgcGllY2VzIGZpdCB0b2dldGhlcjogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgaXMgdGhlIG9uZSB0aGF0IGNhbGxzIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAuIGBhbGxvY19hbm9uX2ZvbGlvYCBjYWxscyBgZG9fYW5vbnltb3VzX3BhZ2VgLiBgX19zd2FwX2NhY2hlX2FsbG9jYCAoY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCkgaXMgdXNlZCBpbiBzd2FwIGNhY2hlIG9wZXJhdGlvbnMuXG5cbkdpdmVuIHRoaXMsIEknbSBjb25maWRlbnQgbXkgXCJGb2N1c1N5bWJvbHNcIiBhcmU6XG4qICAgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgXG4qICAgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYFxuKiAgIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYFxuXG5Ob3cgdG8gdmVyaWZ5IGNvbmZpZyByZXF1aXJlbWVudHMsIHNpbmNlIHRoaXMgaXMgYWxsIGRlcGVuZGVudCBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0c9eWAuICBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBuZWVkcyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFPXlgLiAgQW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NgIHJlcXVpcmVzIGBDT05GSUdfU1dBUD15YC4gSSdsbCB3YW50IHRvIGVuc3VyZSB0aGVzZSBhcmUgZW5hYmxlZCBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZnVuY3Rpb25zIGFzIGludGVuZGVkLiBGaW5hbGx5LCBJJ2xsIGNoZWNrIHRoYXQgYE1FTUNHYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlncy4gIEknbGwgbG9vayBhdCB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMDo0OS45OTA5MzUwMDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQ5LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQ5OlxcdG1lbnVjb25maWcgQ0dST1VQU1xcbjEwNTA6XFx0XFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcbjEwNTE6XFx0XFx0c2VsZWN0IEtFUk5GU1xcbjEwNTI6XFx0XFx0aGVscFxcbjEwNTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3JcXG4xMDU0OlxcdFxcdCAgdXNlIHdpdGggcHJvY2VzcyBjb250cm9sIHN1YnN5c3RlbXMgc3VjaCBhcyBDcHVzZXRzLCBDRlMsIG1lbW9yeVxcbjEwNTU6XFx0XFx0ICBjb250cm9scyBvciBkZXZpY2UgaXNvbGF0aW9uLlxcbjEwNTY6XFx0XFx0ICBTZWVcXG4xMDU3OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcXHQoQ0ZTKVxcbjEwNTg6XFx0XFx0XFx0LSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS8gKGZlYXR1cmVzIGZvciBncm91cGluZywgaXNvbGF0aW9uXFxuMTA1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDYyOlxcdFxcbjEwNjM6XFx0aWYgQ0dST1VQU1xcbjEwNjQ6XFx0XFxuMTA2NTpcXHRjb25maWcgUEFHRV9DT1VOVEVSXFxuMTA2NjpcXHRcXHRib29sXFxuMTA2NzpcXHRcXG4xMDY4OlxcdGNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbjEwNjk6XFx0XFx0Ym9vbCBcXFwiRmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFxcXCJcXG4xMDcwOlxcdFxcdGhlbHBcXG4xMDcxOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgXFxcImZhdm9yZHlubW9kc1xcXCIgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcXG4xMDcyOlxcdFxcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxcbjEwNzM6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDc0OlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3NzpcXHRcXG4xMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIwOjQ5Ljk5MTA2NDkzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTEwMTg4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFN5c3RlbSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgc3lzdGVtIGlzIHB1dCB0b2dldGhlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDR1JPVVBTYCBpcyBlbmFibGVkLCB0aGVuIGl0J3Mgd3JhcHBpbmcgdXAgYGNvbmZpZyBNRU1DR2AuIFRoaXMgbWVhbnMgYENHUk9VUFNgIGFuZCBgTUVNQ0dgIGFyZSB0aWdodGx5IGNvdXBsZWQsIHdoaWNoIGlzbid0IHN1cnByaXNpbmcuIEkgYWxzbyBzZWUgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGluIHRoZSBtaXggaGVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBTV0FQYCDigJMgY2FuJ3QgZm9yZ2V0IGFib3V0IHN3YXAgc3BhY2UuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhIGJpdCBiZXR0ZXIuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBzcGVjaWZpY2FsbHkgY2hlY2sgaWYgYFNXQVBgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHNlZSBpZiBpdCByZWxpZXMgb24gYW55IG9mIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgb3IgaWYgaXQgY2FuIGxpdmUgaW5kZXBlbmRlbnRseS4gR290dGEgZ2V0IHRoZSBhcmNoaXRlY3R1cmUgbWFwcGVkIG91dCBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6NTYuOTAxMjU2MDUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI2ODI3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjA6NTYuOTQ5NTM0NjI1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNzcxNTA4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgZXhhbWluaW5nIHRoYXQgcXVlc3Rpb246XG5cbioqQW5hbHl6aW5nIFNXQVAncyBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYFNXQVBgIGluIGBtbS9LY29uZmlnYCBkZXBlbmRzIG9uLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbiBhbmQgY2hlY2sgdGhlIEtjb25maWcgZmlsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGVuIGFuZCB3aHkgYFNXQVBgIGdldHMgaW5jbHVkZWQgb3IgZXhjbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTE4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjE6MDEuMTI2Njg4NDQ4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTE6XFx0XFxuICAxMjpcXHRtZW51Y29uZmlnIFNXQVBcXG4gIDEzOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTU1VIFxcdTAwMjZcXHUwMDI2IEJMT0NLIFxcdTAwMjZcXHUwMDI2ICFBUkNIX05PX1NXQVBcXG4gIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydFxcbiAgMTg6XFx0XFx0ICBmb3Igc28gY2FsbGVkIHN3YXAgZGV2aWNlcyBvciBzd2FwIGZpbGVzIGluIHlvdXIga2VybmVsIHRoYXQgYXJlXFxuICAxOTpcXHRcXHQgIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHZpcnR1YWwgbWVtb3J5IHRoYW4gdGhlIGFjdHVhbCBSQU0gcHJlc2VudFxcbiAgMjA6XFx0XFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMTowMS4xMjY3ODc5NzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc2Njk2MzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c3VhbCBzdXNwZWN0cywgYE1NVWAgYW5kIGBCTE9DS2AsIGFyZSBwcmVzZW50LiBTdGFuZGFyZC4gTGV0J3MgZGlnIGludG8gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpYCBpcyBiZWluZyBpbnRyb2R1Y2VkLiBUaGUgZ29hbCBoZXJlIGlzIHByZXR0eSBjbGVhcjogdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyB3aXRoaW4gYSBtZW1jZyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gVGhpcyBtZWFucyB3ZSdyZSB0YWxraW5nIGFib3V0IFRIUHMgYW5kIHRoZSBzd2FwIGNhY2hlIHNwZWNpZmljYWxseSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgc2NlbmFyaW9zIHdpdGggbm9uLWJsb2NraW5nIEdGUCBtYXNrcy5cblxuRXNzZW50aWFsbHksIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmZsdWVuY2UgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBkZWNpc2lvbnMgd2hlbiBoYW5kbGluZyB0aGluZ3MgbGlrZSBhbm9ueW1vdXMgUE1EIGZhdWx0cywgbXVsdGktc2l6ZSBUSFAgZmF1bHRzLCBhbmQgc3dhcC1jYWNoZSBhbGxvY2F0aW9ucy4gSWYgYG1lbW9yeS5oaWdoYCBpcyBicmVhY2hlZCwgdGhlIGZhbGxiYWNrIHN0cmF0ZWd5IHdpbGwgYmUgdG8gdXNlIHNtYWxsZXIgb3JkZXJzLCBvciBldmVuIG9yZGVyLTAgYWxsb2NhdGlvbnMuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJIHNlZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzOiBgbW0vbWVtY29udHJvbC5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQncyByZWFzb25hYmxlLCBpdCBoaXRzIHRoZSByZWxldmFudCBwaWVjZXMuXG5cbkFscmlnaHQsIGFmdGVyIHRoaXMgcXVpY2sgcmV2aWV3LCBldmVyeXRoaW5nIGxvb2tzIGNvbnNpc3RlbnQgYW5kIGluIG9yZGVyLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCdzIGEgY2xlYW4gaW1wbGVtZW50YXRpb24gb2YgYW4gaW1wb3J0YW50IHBvbGljeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NjAsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjE6MDQuODkzNzUzMTk4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMzE1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hcIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBmb3IgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiAoVEhQIGFuZCBzd2FwIGNhY2hlKSB1bmRlciBtZW1jZyBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudC4gSXQgaW50cm9kdWNlcyBfX21lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoKCkgdG8gcHJldmVudCBub24tYmxvY2tpbmcgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMgZnJvbSBieXBhc3NpbmcgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZywgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIGluIGFub255bW91cyBwYWdlIGZhdWx0cyBhbmQgc3dhcC1pbiBmYXVsdHMuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG1tIGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaFwiLFxuICAgIFwiZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGZvciBsYXJnZSBmb2xpbyBhbGxvY2F0aW9uIChUSFAgYW5kIHN3YXAgY2FjaGUpIHVuZGVyIG1lbWNnIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50LiBJdCBpbnRyb2R1Y2VzIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goKSB0byBwcmV2ZW50IG5vbi1ibG9ja2luZyBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucyBmcm9tIGJ5cGFzc2luZyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLCBmYWxsaW5nIGJhY2sgdG8gc21hbGxlciBvcmRlcnMgaW4gYW5vbnltb3VzIHBhZ2UgZmF1bHRzIGFuZCBzd2FwLWluIGZhdWx0cy4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbW0gbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6MjE6MDQuOTcwNzkzMzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1NzE5Mjg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjIxOjA0Ljk3MTI2MzQ1NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MDU2NzE4Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGNncm91cCBjaGVjayAoYG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCkgdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyBieSBmYWxsaW5nIGJhY2sgZnJvbSBsYXJnZSBmb2xpb3MgdG8gb3JkZXItMCBhbGxvY2F0aW9ucyB3aGVuIGFsbG9jYXRpbmcgbm9uLWJsb2NraW5nIGZvbGlvcyBhYm92ZSB0aGUgdGhyZXNob2xkLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGFuZCByZWFkcyBgcGFnZV9jb3VudGVyYCB2YWx1ZXMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBubyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgYW5kIGZvbGlvIGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgdW5jaGFuZ2VkIChhbm9ueW1vdXMgcGFnZXMvZm9saW9zIGNvbnRpbnVlIHRvIGJlIHplcm9lZCBiZWZvcmUgbWFwcGluZykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiwgcmVmY291bnRpbmcsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciBsb2NrZGVwIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4vTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzA0Yzg1NTE3NzA0NjdiNWQyMGViMDc1YzVhNjc0YTFjMDFmN2VmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjE5OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggNDZiZjcyNGNhZTdhZi4uZGVmZWYwZDNkNzEwYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk0MSw2ICs5NDEsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuIH1cbiBcbitib29sIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4rXG4rLyoqXG4rICogbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2ggLSB3b3VsZCBhIGxhcmdlIGZvbGlvIGVzY2FwZSBtZW1vcnkuaGlnaD9cbisgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4rICogQGdmcDogZ2ZwIG1hc2sgdGhlIGZvbGlvIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgY2hhcmdlZCB3aXRoXG4rICpcbisgKiBTZWUgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpLlxuKyAqXG4rICogVGhlIHRhc2sncyBvdmVyLWhpZ2ggZGVidCBpcyBtb3JlIHRoYW4gYSBmYXN0IHBhdGggaGVyZSwgaXQgYWxzbyBzY29wZXNcbisgKiB0aGUgY2hlY2sgdG8gdGhlIGNhc2UgdGhhdCBpcyBicm9rZW4uICBUaGUgZGVidCBpcyBzZXR0bGVkIGFuZCBjbGVhcmVkIG9uXG4rICogZXZlcnkgcmV0dXJuIHRvIHVzZXJzcGFjZSwgc28gYSB0YXNrIGZhdWx0aW5nIGxhcmdlIGZvbGlvcyBmcm9tIGFcbisgKiB1c2Vyc3BhY2UgbG9vcCBhbHdheXMgZmluZHMgaXQgemVybyBhbmQga2VlcHMgZ2V0dGluZyB0aGVtIC0gbWVtb3J5LmhpZ2hcbisgKiBpcyBlbmZvcmNlZCBmb3IgaXQgb24gdGhlIHdheSBvdXQuICBPbmx5IGEgbG9vcCB0aGF0IHN0YXlzIGluIHRoZSBrZXJuZWwsXG4rICogd2hlcmUgbm90aGluZyB0aHJvdHRsZXMgYXQgYWxsLCBhY2NydWVzIGRlYnQgYW5kIHJlYWNoZXMgdGhlIGNvdW50ZXJzLlxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCBmYWxsIGJhY2sgdG8gYSBzbWFsbGVyIG9yZGVyLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdGlmIChsaWtlbHkoIWN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2gobW0sIGdmcCk7XG4rfVxuK1xuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4gdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbkBAIC0xMzkwLDYgKzE0MTcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKFxuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sIHN0cnVjdCBtZW1fY2dyb3VwICpvb21fZG9tYWluKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNzE0MGExMDMxZmIyZS4uMDU5NTE5NDY1YjI0NCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMzU1LDYgKzEzNTUsMTggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbitcdC8qXG4rXHQgKiBBIFRIUCBjaGFyZ2VkIHdpdGggYSBnZnAgdGhhdCBjYW5ub3QgYmxvY2sgZXNjYXBlcyB0aGUgbWVtb3J5LmhpZ2hcbitcdCAqIHRocm90dGxpbmcgaW4gdHJ5X2NoYXJnZV9tZW1jZygpLiAgRG9uJ3QgaGFuZCBvdXQgb25lIHdoaWxlIHRoZVxuK1x0ICogY2dyb3VwIGlzIGFscmVhZHkgYWJvdmUgbWVtb3J5LmhpZ2g6IHRoZSBvcmRlci0wIGZhbGxiYWNrIGlzIGNoYXJnZWRcbitcdCAqIHdpdGggYSBibG9ja2luZyBnZnAgYW5kIHRocm90dGxlcyBhcyBkb2N1bWVudGVkLlxuK1x0ICovXG4rXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4rXHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XG4rXHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkciBcdTAwMjYgSFBBR0VfUE1EX01BU0spO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpbykpIHtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDE0NjBjYmE1MzU4OGUuLmRkN2E2MmMzZGFjYjIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI1ODcsNiArMjU4Nyw2MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4gXHRyZXR1cm4gcGVuYWx0eV9qaWZmaWVzICogbnJfcGFnZXMgLyBNRU1DR19DSEFSR0VfQkFUQ0g7XG4gfVxuIFxuKy8qKlxuKyAqIF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2ggLSB3b3VsZCBhIGxhcmdlIGZvbGlvIGVzY2FwZSBtZW1vcnkuaGlnaD9cbisgKiBAbW06IG1tIHRoZSBmb2xpbyB3b3VsZCBiZSBjaGFyZ2VkIGFnYWluc3QsIG1heSBiZSBOVUxMXG4rICogQGdmcDogZ2ZwIG1hc2sgdGhlIGZvbGlvIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgY2hhcmdlZCB3aXRoXG4rICpcbisgKiBtZW1vcnkuaGlnaCBpcyBlbmZvcmNlZCBvbiByZXR1cm4gdG8gdXNlcnNwYWNlLCBvciBzeW5jaHJvbm91c2x5IGluXG4rICogdHJ5X2NoYXJnZV9tZW1jZygpIC0gYnV0IHRoZSBzeW5jaHJvbm91cyBwYXRoIGlzIGdhdGVkIG9uIHRoZSBjaGFyZ2UgZ2ZwXG4rICogYWxsb3dpbmcgYmxvY2tpbmcuICBMYXJnZSBmb2xpb3MgYXJlIGNoYXJnZWQgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLFxuKyAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGJsb2NraW5nIHVubGVzcyB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgYXNrcyBmb3IgZGlyZWN0XG4rICogY29tcGFjdGlvbiwgc28gdGhvc2UgY2hhcmdlcyBlc2NhcGUgdGhyb3R0bGluZyBlbnRpcmVseTogYSBmYXVsdCBsb29wIHRoYXRcbisgKiBkb2VzIG5vdCByZXR1cm4gdG8gdXNlcnNwYWNlIGluYmV0d2VlbiAtIHRoZSBwb3B1bGF0ZSBsb29wIG9mIG1sb2NrKCkgb3JcbisgKiBNQURWX1BPUFVMQVRFXyosIGFueSBHVVAtZHJpdmVuIHBvcHVsYXRpb24gLSBjYW4gZ3JvdyB1c2FnZSBmcm9tXG4rICogbWVtb3J5LmhpZ2ggYWxsIHRoZSB3YXkgdXAgdG8gbWVtb3J5Lm1heCB3aXRoIG5vIHJlY2xhaW0gYW5kIG5vIGRlbGF5LlxuKyAqXG4rICogQWJvdmUgbWVtb3J5LmhpZ2ggdGhlIGNncm91cCBpcyBzdXBwb3NlZCB0byBiZSB1bmRlciByZWNsYWltIHByZXNzdXJlLCBzb1xuKyAqIHJlZnVzZSB0aGUgbGFyZ2UgZm9saW8gaW5zdGVhZC4gIENhbGxlcnMgZmFsbCBiYWNrIHRvIG9yZGVyLTAsIHdoaWNoIGlzXG4rICogY2hhcmdlZCB3aXRoIGEgYmxvY2tpbmcgZ2ZwIGFuZCB0aHJvdHRsZWQgYXMgZG9jdW1lbnRlZC5cbisgKlxuKyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBzbmFwc2hvdCBvZiB0aGUgY291bnRlcnM7IGEgc3RhbGUgcmVzdWx0IG9ubHkgY29zdHMgb25lXG4rICogbGFyZ2UgZm9saW8gZWl0aGVyIHdheS5cbisgKlxuKyAqIENhbGxlcnMgc2hvdWxkIHVzZSBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCgpLCB3aGljaCBrZWVwcyB0aGVcbisgKiBjb3VudGVyIGxvb2t1cCBvZmYgdGhlIGZhdWx0IHBhdGggdW5sZXNzIHRoZSB0YXNrIGhhcyBhY3R1YWxseSBjaGFyZ2VkXG4rICogYWJvdmUgbWVtb3J5LmhpZ2ggYmVmb3JlLlxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCBmYWxsIGJhY2sgdG8gYSBzbWFsbGVyIG9yZGVyLlxuKyAqL1xuK2Jvb2wgX19tZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKml0ZXI7XG4rXHRib29sIG92ZXJfaGlnaCA9IGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIEEgY2hhcmdlIHRoYXQgY2FuIGJsb2NrIGlzIHRocm90dGxlZCBieSB0cnlfY2hhcmdlX21lbWNnKCkgaXRzZWxmLFxuK1x0ICogdGhlcmUgaXMgbm8gcmVhc29uIHRvIGdpdmUgdXAgdGhlIGxhcmdlIGZvbGlvIGZvciBpdC5cbitcdCAqL1xuK1x0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGl0ZXIgPSBtZW1jZzsgaXRlcjsgaXRlciA9IHBhcmVudF9tZW1fY2dyb3VwKGl0ZXIpKSB7XG4rXHRcdGlmIChwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZpdGVyLVx1MDAzZW1lbW9yeSkgXHUwMDNlXG4rXHRcdCAgICBSRUFEX09OQ0UoaXRlci1cdTAwM2VtZW1vcnkuaGlnaCkpIHtcbitcdFx0XHRvdmVyX2hpZ2ggPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRyZXR1cm4gb3Zlcl9oaWdoO1xuK31cbitcbiAvKlxuICAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxuICAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDkyNjI3NmQ0MTkyMDIuLmIyOGZjY2M4NjIxNmIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC01MzIxLDYgKzUzMjEsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xuIFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xuK1xuK1x0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG4rXHRpZiAobWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2godm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG4rXHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuK1x0XHRnb3RvIGZhbGxiYWNrO1xuK1x0fVxuK1xuIFx0d2hpbGUgKG9yZGVycykge1xuIFx0XHRhZGRyID0gQUxJR05fRE9XTih2bWYtXHUwMDNlYWRkcmVzcywgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4gXHRcdGZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKGdmcCwgb3JkZXIsIHZtYSwgYWRkcik7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA2MjVjMTg1YTFjYTRkLi5hMjM1YzlhZWNhZjE4IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC00NDAsOSArNDQwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0ICogTGltaXQgVEhQIGdmcC4gVGhlIGxpbWl0YXRpb24gaXMgYSBuby1vcCBmb3IgdHlwaWNhbFxuIFx0ICogR0ZQX0hJR0hVU0VSX01PVkFCTEUgYnV0IG1hdHRlcnMgZm9yIHNobWVtLlxuIFx0ICovXG4tXHRpZiAob3JkZXIpXG4rXHRpZiAob3JkZXIpIHtcbiBcdFx0Z2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKHZtYV90aHBfZ2ZwX21hc2sodm1hKSwgZ2ZwKTtcbiBcbitcdFx0LypcbitcdFx0ICogVGhpcyBnZnAgbWF5IG5vdCBhbGxvdyBibG9ja2luZywgaW4gd2hpY2ggY2FzZSB0aGUgY2hhcmdlXG4rXHRcdCAqIGJlbG93IGVzY2FwZXMgdGhlIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgaW5cbitcdFx0ICogdHJ5X2NoYXJnZV9tZW1jZygpLiAgQWJvdmUgbWVtb3J5LmhpZ2gsIGhhdmUgdGhlIGNhbGxlclxuK1x0XHQgKiByZXRyeSB3aXRoIGEgc21hbGxlciBvcmRlciwgZG93biB0byBvcmRlci0wLCB3aGljaCBpc1xuK1x0XHQgKiBjaGFyZ2VkIHdpdGggdGhlIGNhbGxlcidzIGJsb2NraW5nIGdmcCBhbmQgdGhyb3R0bGVkIGFzXG4rXHRcdCAqIGRvY3VtZW50ZWQuICBPbmx5IGZhdWx0IGNvbnRleHQgaXMgdGhyb3R0bGVkIGhlcmU7IHRoZVxuK1x0XHQgKiByZWFkYWhlYWQgYW5kIHpzd2FwIHdyaXRlYmFjayBjYWxsZXJzIGhhdmUgbm8gQHZtZiBhbmQgYXJlXG4rXHRcdCAqIG5vdCB0aGUgb25lcyB0byBob2xkIGJhY2suXG4rXHRcdCAqL1xuK1x0XHRpZiAodm1mIFx1MDAyNlx1MDAyNiBtZW1fY2dyb3VwX2xhcmdlX2ZvbGlvX292ZXJfaGlnaCh2bWEtXHUwMDNldm1fbW0sIGdmcCkpXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHR9XG4rXG4gXHRpZiAobXBvbCB8fCAhdm1mKSB7XG4gXHRcdGZvbGlvID0gZm9saW9fYWxsb2NfbXBvbChnZnAsIG9yZGVyLCBtcG9sLCBpbHgsIG51bWFfbm9kZV9pZCgpKTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMTowNC45NzEyNjQ0OTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTcwNTY2OTU1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIGZvciBtZW1jZyBgbWVtb3J5LmhpZ2hgIFRocm90dGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBvYmplY3RpdmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCB3aGljaCBtb2RpZmllcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGBtZW1vcnkuaGlnaGAgdGhyb3R0bGluZyBmb3IgbGFyZ2UgZm9saW9zIChUSFAvbVRIUCkgd2l0aGluIG1lbW9yeSBjZ3JvdXBzLCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyB1c2luZyBgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGluIHNldmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMsIGluY2x1ZGluZyBgaHVnZV9tZW1vcnkuY2AsIGBtZW1vcnkuY2AsIGFuZCBgc3dhcF9zdGF0ZS5jYC4gRXNzZW50aWFsbHksIGlmIGEgbWVtY2cgaXMgYWJvdmUgaXRzIGBtZW1vcnkuaGlnaGAgbGltaXQgYW5kIHRoZSBhbGxvY2F0aW9uIGNhbid0IGJsb2NrLCB0aGUgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbiBmYWxscyBiYWNrIHRvIG9yZGVyLTAsIHVzaW5nIGJsb2NraW5nIEdGUCwgYWxsb3dpbmcgZm9yIHByb3BlciB0aHJvdHRsaW5nLlxuXG5OZXh0LCBJIG1ldGhvZGljYWxseSB3ZW50IHRocm91Z2ggdGhlIGNydWNpYWwgYXJlYXMgd2hlcmUgS01TQU4gd291bGQgYmUgcmVsZXZhbnQuIEkgY2hlY2tlZCBmb3IgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YgYm91bmRzIGNoZWNrcyBvciBsb2dpYyBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gTm9uZSBvZiB0aGVzZSB2dWxuZXJhYmlsaXRpZXMgYXJlIHByZXNlbnQuXG5cbkkgdGhlbiBzY3J1dGluaXplZCB0aGUgYF9fbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgIGZ1bmN0aW9uIGFuZCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzIHRvIGVuc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXMgd2VyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgdGhhdCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYmVpbmcgcmVhZC4gYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCwgYGl0ZXItXHUwMDNlbWVtb3J5YCwgYGl0ZXItXHUwMDNlbWVtb3J5LmhpZ2hgLCBgdm1hLVx1MDAzZXZtX21tYCwgYGdmcGAgYXJlIGFsbCBhY2NvdW50ZWQgZm9yIGFuZCBjaGVja2VkLiBUaGUgb3JkZXItMCBmb2xpbyBmYWxsYmFjayBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgcGFnZSBpc3N1ZXMgYXMgdGhvc2UgZm9saW9zIGFyZSBhbHdheXMgemVyb2VkIGJlZm9yZSBiZWluZyBtYXBwZWQuIEkgY29uZmlybWVkIHRoZXJlIGFyZSBubyBpbmZvIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5Db25zaWRlcmluZyBLTVNBTidzIHB1cnBvc2UsIHdoaWNoIGlzIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIGdpdmVuIHRoYXQgdGhlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBBbGwgZXhpc3RpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gdGhlIGNvcnJlY3QgZmFsbGJhY2sgcGF0aCBpbiBzcGVjaWZpYyBjYXNlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgY29kZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgaXQncyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY0LCJPdXRwdXRUb2tlbnMiOjI1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNToyMToyMi4wMjc5NjMwNzFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZW1vcnkgY2dyb3VwIGNoZWNrIChgbWVtX2Nncm91cF9sYXJnZV9mb2xpb19vdmVyX2hpZ2hgKSB0byBlbmZvcmNlIGBtZW1vcnkuaGlnaGAgbGltaXRzIGJ5IGZhbGxpbmcgYmFjayBmcm9tIGxhcmdlIGZvbGlvcyB0byBvcmRlci0wIGFsbG9jYXRpb25zIHdoZW4gYWxsb2NhdGluZyBub24tYmxvY2tpbmcgZm9saW9zIGFib3ZlIHRoZSB0aHJlc2hvbGQuXFxuXFxuVGhlIGNoYW5nZXMgb25seSBhbHRlciBhbGxvY2F0aW9uIG9yZGVyIGZhbGxiYWNrIGhldXJpc3RpY3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWVtb3J5LmNgLCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBhZGQgYSBoZWxwZXIgaW4gYG1tL21lbWNvbnRyb2wuY2AgdGhhdCBjaGVja3MgYGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaGAgYW5kIHJlYWRzIGBwYWdlX2NvdW50ZXJgIHZhbHVlcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIG5vIG1lbW9yeSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBhbmQgZm9saW8gaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGFyZSB1bmNoYW5nZWQgKGFub255bW91cyBwYWdlcy9mb2xpb3MgY29udGludWUgdG8gYmUgemVyb2VkIGJlZm9yZSBtYXBwaW5nKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuLCByZWZjb3VudGluZywgTlVMTCBkZXJlZmVyZW5jZXMsIG9yIGxvY2tkZXAgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTi9MT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGNncm91cCBjaGVjayAoYG1lbV9jZ3JvdXBfbGFyZ2VfZm9saW9fb3Zlcl9oaWdoYCkgdG8gZW5mb3JjZSBgbWVtb3J5LmhpZ2hgIGxpbWl0cyBieSBmYWxsaW5nIGJhY2sgZnJvbSBsYXJnZSBmb2xpb3MgdG8gb3JkZXItMCBhbGxvY2F0aW9ucyB3aGVuIGFsbG9jYXRpbmcgbm9uLWJsb2NraW5nIGZvbGlvcyBhYm92ZSB0aGUgdGhyZXNob2xkLlxcblxcblRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYWxsb2NhdGlvbiBvcmRlciBmYWxsYmFjayBoZXVyaXN0aWNzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21lbW9yeS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYWRkIGEgaGVscGVyIGluIGBtbS9tZW1jb250cm9sLmNgIHRoYXQgY2hlY2tzIGBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGFuZCByZWFkcyBgcGFnZV9jb3VudGVyYCB2YWx1ZXMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLCBubyBtZW1vcnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgYW5kIGZvbGlvIGluaXRpYWxpemF0aW9uIHNlbWFudGljcyBhcmUgdW5jaGFuZ2VkIChhbm9ueW1vdXMgcGFnZXMvZm9saW9zIGNvbnRpbnVlIHRvIGJlIHplcm9lZCBiZWZvcmUgbWFwcGluZykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiwgcmVmY291bnRpbmcsIE5VTEwgZGVyZWZlcmVuY2VzLCBvciBsb2NrZGVwIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4vTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[1] Phase: Succeeded StartedAt: 2026-09-15 05:21:32 +0000 UTC FinishedAt: 2026-09-15 05:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 05:21:32 +0000 UTC FinishedAt: 2026-09-15 05:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2] Phase: Succeeded StartedAt: 2026-09-15 05:21:32 +0000 UTC FinishedAt: 2026-09-15 09:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 05:21:32 +0000 UTC FinishedAt: 2026-09-15 09:21:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","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-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 05:21:32 +0000 UTC FinishedAt: 2026-09-15 05:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 05:21:32 +0000 UTC FinishedAt: 2026-09-15 05:21:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"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-workflowlmlpr/series-workflowlmlpr-convert-artifact-4095953951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 05:21:42 +0000 UTC FinishedAt: 2026-09-15 05:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 05:21:42 +0000 UTC FinishedAt: 2026-09-15 05:37:51 +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:*a92c2cb8-2735-4ea7-a98c-3d384fd2386e,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-workflowlmlpr/series-workflowlmlpr-convert-artifact-4095953951/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": "512c78fa-efb8-4dc8-89f0-11b2ad487224", "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-workflowlmlpr/series-workflowlmlpr-build-action-3043737125/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 05:21:42 +0000 UTC FinishedAt: 2026-09-15 05:37:41 +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:*a92c2cb8-2735-4ea7-a98c-3d384fd2386e,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-workflowlmlpr/series-workflowlmlpr-convert-artifact-4095953951/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": "512c78fa-efb8-4dc8-89f0-11b2ad487224", "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-workflowlmlpr/series-workflowlmlpr-build-action-3043737125/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 05:37:51 +0000 UTC FinishedAt: 2026-09-15 05:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 05:37:51 +0000 UTC FinishedAt: 2026-09-15 05:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 05:37:51 +0000 UTC FinishedAt: 2026-09-15 05:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 05:37:51 +0000 UTC FinishedAt: 2026-09-15 05:37:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","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-workflowlmlpr/series-workflowlmlpr-convert-artifact-265007278/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 05:38:01 +0000 UTC FinishedAt: 2026-09-15 05:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 05:38:01 +0000 UTC FinishedAt: 2026-09-15 05:39:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*512c78fa-efb8-4dc8-89f0-11b2ad487224,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-workflowlmlpr/series-workflowlmlpr-build-action-3043737125/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-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 05:39:56 +0000 UTC FinishedAt: 2026-09-15 05:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 05:39:56 +0000 UTC FinishedAt: 2026-09-15 05:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 05:39:56 +0000 UTC FinishedAt: 2026-09-15 05:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 05:39:56 +0000 UTC FinishedAt: 2026-09-15 05:56:14 +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:*a92c2cb8-2735-4ea7-a98c-3d384fd2386e,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-workflowlmlpr/series-workflowlmlpr-convert-artifact-265007278/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": "539641c8-edd4-436b-b745-03d1ccfc183a", "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-workflowlmlpr/series-workflowlmlpr-build-action-805595074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 05:39:56 +0000 UTC FinishedAt: 2026-09-15 05:56:04 +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:*a92c2cb8-2735-4ea7-a98c-3d384fd2386e,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-workflowlmlpr/series-workflowlmlpr-convert-artifact-265007278/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": "539641c8-edd4-436b-b745-03d1ccfc183a", "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-workflowlmlpr/series-workflowlmlpr-build-action-805595074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 05:56:14 +0000 UTC FinishedAt: 2026-09-15 05:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 05:56:14 +0000 UTC FinishedAt: 2026-09-15 05:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 05:56:14 +0000 UTC FinishedAt: 2026-09-15 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 05:56:14 +0000 UTC FinishedAt: 2026-09-15 05:58:20 +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:*539641c8-edd4-436b-b745-03d1ccfc183a,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-workflowlmlpr/series-workflowlmlpr-build-action-805595074/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-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 09:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 09:21:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"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:*512c78fa-efb8-4dc8-89f0-11b2ad487224,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*539641c8-edd4-436b-b745-03d1ccfc183a,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-workflowlmlpr/series-workflowlmlpr-build-action-3043737125/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-workflowlmlpr/series-workflowlmlpr-build-action-805595074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 05:58:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 05:58:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"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-workflowlmlpr/series-workflowlmlpr-convert-artifact-3802753875/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 05:58:30 +0000 UTC FinishedAt: 2026-09-15 05:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 05:58:40 +0000 UTC FinishedAt: 2026-09-15 09:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmlpr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_large_folio_over_high","do_huge_pmd_anonymous_page","swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"4be482a0-787d-4579-983b-a64f5ea7314d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 05:58:40 +0000 UTC FinishedAt: 2026-09-15 09:21:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*512c78fa-efb8-4dc8-89f0-11b2ad487224,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*539641c8-edd4-436b-b745-03d1ccfc183a,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-workflowlmlpr/series-workflowlmlpr-build-action-3043737125/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-workflowlmlpr/series-workflowlmlpr-build-action-805595074/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-workflowlmlpr/series-workflowlmlpr-convert-artifact-3802753875/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,}