Name: series-workflowc445n Phase: Succeeded StartedAt: 2026-08-17 07:21:21 +0000 UTC FinishedAt: 2026-08-17 11:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[0] Phase: Succeeded StartedAt: 2026-08-17 07:21:21 +0000 UTC FinishedAt: 2026-08-17 08:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 07:21:21 +0000 UTC FinishedAt: 2026-08-17 08:04:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "f7b93e92-140e-4f6f-a839-ea46a8cf3ae7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_allowable_huge_orders", "__thp_vma_allowable_orders", "hugepage_madvise", "khugepaged_enter_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzJiMzNDssCiAgICAmIzM0O19fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAgICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaW5jb3JyZWN0bHkgdXNlZCBgdm1hLVx1MDAzZXZtX2ZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBgdm1fZmxhZ3NgLiBUaGlzIGNhdXNlZCBpc3N1ZXMgd2hlbiBgdm1fZmxhZ3NgIHdlcmUgdXBkYXRlZCAoZS5nLiwgdmlhIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCkgYnV0IHRoZSBWTUEmIzM5O3MgZmxhZ3MgaGFkIG5vdCB5ZXQgYmVlbiBjb21taXR0ZWQsIHByZXZlbnRpbmcgYGtodWdlcGFnZWRgIGZyb20gcHJvcGVybHkgdHJhY2tpbmcgYW5kIGNvbGxhcHNpbmcgc2htZW0gVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBsb2dpYywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZTMwYzFiYThlMjMyZGE3NWVhNjc5MzU4Y2Q0ZWI3ZjA1YTNkNDYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDI6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5pbmRleCA1NjYzZGZmNTMxODZlLi4zMjEwMTdlMGZkNjMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMjcsMTMgJiM0MzsxMjcsMTMgQEAgaW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xuJiM0MztcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzQzO1x0XHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xuIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi1cdFx0XHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLCBwZ29mZl90IGluZGV4LFxuJiM0MztcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uNzBmNTdkNzAwNzM5MSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xODcsNyAmIzQzOzE4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKi9cbiBcdGlmICghaW5fcGYgXHUwMDI2XHUwMDI2IHNobWVtX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUpKVxuIFx0XHRyZXR1cm4gb3JkZXJzIFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSksXG4tXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsXG4gXHRcdFx0XHRcdFx0ICAgZm9yY2VkX2NvbGxhcHNlKTtcbiBcbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjZmMWFkNTQ1NmFjYTMgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMTgzNCwxMiAmIzQzOzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4mIzQzO1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjNDM7XHRcdHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcbiBcdHVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwO1xuIFx0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7XG4gXG4gXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXG5AQCAtMjQzMCw2ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLVx1MDAzZXZtYSA6IE5VTEw7XG4mIzQzO1x0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDA7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICpmYXVsdF9tbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgZXJyb3I7XG5AQCAtMjUwNyw3ICYjNDM7MjUwNyw4IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0fVxuIFxuIFx0LyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi9cbi1cdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCBpbmRleCwgd3JpdGVfZW5kLCBmYWxzZSk7XG4mIzQzO1x0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIHZtX2ZsYWdzLCBpbmRleCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XG4gXHRpZiAob3JkZXJzIFx1MDAzZSAwKSB7XG4gXHRcdGdmcF90IGh1Z2VfZ2ZwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7LAogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluY29ycmVjdGx5IHVzZWQgYHZtYS1cdTAwM2V2bV9mbGFnc2AgaW5zdGVhZCBvZiB0aGUgZXhwbGljaXRseSBwYXNzZWQgYHZtX2ZsYWdzYC4gVGhpcyBjYXVzZWQgaXNzdWVzIHdoZW4gYHZtX2ZsYWdzYCB3ZXJlIHVwZGF0ZWQgKGUuZy4sIHZpYSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWApIGJ1dCB0aGUgVk1BJiMzOTtzIGZsYWdzIGhhZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLCBwcmV2ZW50aW5nIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA4OjAyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IDU2NjNkZmY1MzE4NmUuLjMyMTAxN2UwZmQ2MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKQEAgLTEyNywxMyAmIzQzOzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU0hNRU0pCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCXBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiBib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCwKLQkJCQlsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCwKJiM0MzsJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLjcwZjU3ZDcwMDczOTEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTg3LDcgJiM0MzsxODcsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqLwogCWlmICghaW5fcGYgJmFtcDsmYW1wOyBzaG1lbV9maWxlKHZtYS0mZ3Q7dm1fZmlsZSkpCiAJCXJldHVybiBvcmRlcnMgJmFtcDsgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLSZndDt2bV9maWxlKSwKLQkJCQkJCSAgIHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiYjNDM7CQkJCQkJICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiAJCQkJCQkgICBmb3JjZWRfY29sbGFwc2UpOwogCiAJaWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjZmMWFkNTQ1NmFjYTMgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTgzNCwxMiAmIzQzOzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKQogfQogCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLAomIzQzOwkJcGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpOwogCXVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTsKLQl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJdW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7CiAKIAlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSAmYW1wOyZhbXA7IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKQpAQCAtMjQzMCw2ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQlnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLSZndDt2bWEgOiBOVUxMOwomIzQzOwl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJc3RydWN0IG1tX3N0cnVjdCAqZmF1bHRfbW07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlpbnQgZXJyb3I7CkBAIC0yNTA3LDcgJiM0MzsyNTA3LDggQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJfQogCiAJLyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi8KLQlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpOwomIzQzOwlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LAomIzQzOwkJCQkJICAgICB3cml0ZV9lbmQsIGZhbHNlKTsKIAlpZiAob3JkZXJzICZndDsgMCkgewogCQlnZnBfdCBodWdlX2dmcDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gbW9kaWZ5IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhhdCBpdCBub3cgdGFrZXMgYHZtX2ZsYWdzYCBhcyBhbiBhcmd1bWVudCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gZXh0cmFjdGluZyBpdCBmcm9tIHRoZSBgdm1hYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHdlJiMzOTtyZSBleHBsaWNpdGx5IHBhc3NpbmcgdGhlIGZsYWdzIG5vdy4KCkkgc2VlIHRoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIHVzZXMgYHZtYSA/IHZtYS0mZ3Q7dm1fZmxhZ3MgOiAwYC4gQWgsIGhhbmcgb24sIGxldCBtZSBkb3VibGUtY2hlY2sgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIE9rYXksIHllcywgaXQgZ2V0cyBgdm1hYCBmcm9tIGB2bWZgLCBhbmQgdGhlbiBjb3JyZWN0bHkgcHVsbHMgb3V0IGB2bV9mbGFnc2AgdXNpbmcgdGhlIHRlcm5hcnkgb3BlcmF0b3I6CgpgYGBjCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZiA/IHZtZi0mZ3Q7dm1hIDogTlVMTDsKJiM0MzsJdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS0mZ3Q7dm1fZmxhZ3MgOiAwOwpgYGAKCkFuZCB0aGVuLCBpdCBwYXNzZXMgYHZtX2ZsYWdzYCBkb3duIHRoZSBsaW5lLiBJIGFtIGZvbGxvd2luZyB0aGlzIHBhdGguIEluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIHRoZSBgdm1fZmxhZ3NgIGFyZSBleHBsaWNpdGx5IHBhc3NlZC4gR3JlYXQuCgpCdXQsIHdhaXQuLi4gbGV0IG1lIHJlLWNoZWNrIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIEFoLCBJIHNlZSBpdCBub3cuCgpgYGBjCiAJaWYgKCFpbl9wZiAmYW1wOyZhbXA7IHNobWVtX2ZpbGUodm1hLSZndDt2bV9maWxlKSkKIAkJcmV0dXJuIG9yZGVycyAmYW1wOyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtJmd0O3ZtX2ZpbGUpLAotCQkJCQkJICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCwKJiM0MzsJCQkJCQkgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCwKIAkJCQkJCSAgIGZvcmNlZF9jb2xsYXBzZSk7CmBgYAoKT2theSwgaXQgKmFscmVhZHkqIHJlY2VpdmVzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQhIFRoaXMgc2ltcGxpZmllcyB0aGUgY2hhbmdlIGFuZCBtYWtlcyB0aGUgY29kZSBtb3JlIGV4cGxpY2l0IGFuZCByZWFkYWJsZSBieSByZW1vdmluZyB0aGUgaW1wbGljaXQgdXNlIG9mIGB2bWEtJmd0O3ZtX2ZsYWdzYC4gR29vZC4gVGhpcyBpcyBhIHNvbGlkLCBjbGVhbiBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk4LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk5OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDAtXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJc3N1ZXMgd2l0aCBIdWdlIFBhZ2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYW5kIEkgc2VlIGl0IHRha2VzIGB2bV9mbGFnc190IHZtX2ZsYWdzYCBhcyBhbiBhcmd1bWVudC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QuIEhvd2V2ZXIsIGl0JiMzOTtzIGhpdHRpbmcgbWUgdGhhdCBwcmV2aW91c2x5LCBzcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdhcyBncmFiYmluZyB0aGUgYHZtX2ZsYWdzYCBkaXJlY3RseSBmcm9tIGB2bWEtJmd0O3ZtX2ZsYWdzYC4gVGhhdCBzZWVtcyBhIGxpdHRsZS4uLiByaXNreSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4gVGhlIGlzc3VlIGlzLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgICpjb3VsZCogYmUgY2FsbGVkIHdpdGggYSBgdm1fZmxhZ3NgIHZhbHVlIHRoYXQmIzM5O3MgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB0aGUgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpYyBgdm1hYCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCEgVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgcHJldHR5IGduYXJseSBhbGxvY2F0aW9uIGlzc3VlcyBpZiB3ZSYjMzk7cmUgbm90IGNhcmVmdWwuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB3aGVyZSBlbHNlIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdXNlZC4gSSBoYWQgYmV0dGVyIGdvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzIwPXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MzpcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQ0LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIyLVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlZXAgRGl2ZSBpbnRvIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIFRoaXMgdmFyaWFibGUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIHdpdGhpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250cm9scyB3aGljaCBvcmRlciBvZiBodWdlIHBhZ2VzIGFyZSBjb25zaWRlcmVkIHZhbGlkIHdpdGhpbiBhIHBhcnRpY3VsYXIgVk1BIGNvbnRleHQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjaGVja3MgYXJlIGluY29ycG9yYXRlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhcmNoaXRlY3R1cmUgbGltaXRhdGlvbnMgYXQgdGhpcyBwb2ludCwgb3IgbW9yZSBhYnN0cmFjdCBtZW1vcnkgbWFuYWdlbWVudCBjb25zdHJhaW50cz8gVGhpcyBsaWtlbHkgZGljdGF0ZXMgdGhlIGluaXRpYWwgc2l6ZSwgYW5kIGFueSBzdWJzZXF1ZW50IHNwbGl0dGluZyBvciBtZXJnaW5nIHRoYXQgbWlnaHQgYmUgZG9uZS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyB0aWVzIGludG8gbnVtYSBhd2FyZW5lc3M7IHRoZSBvcmRlciBzZWxlY3Rpb24gbWF5IGFsc28gYmUgaW5mbHVlbmNlZCBieSB0aGUgcGh5c2ljYWwgbWVtb3J5IGxheW91dC4gVGhlcmUgY291bGQgYmUgYSBoaWVyYXJjaHkgaW52b2x2ZWQsIG9yIGEgc2V0IG9mIHByaW9yaXRpZXMgYmFzZWQgb24gc3lzdGVtIHBhcmFtZXRlcnMgb3IgdXNlciBwcmVmZXJlbmNlcy4KCk15IGFpbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhlIGFsbG93ZWQgb3JkZXJzLiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgaW5mbHVlbmNpbmcgdGhlIGRlY2lzaW9uIHByb2Nlc3MgYW5kIGhvdyB0aGlzIGRlY2lzaW9uIGNhbiBiZSBtb2RpZmllZC4gSSYjMzk7bSBpbWFnaW5pbmcgYSBjb21wbGV4IGZsb3cgY2hhcnQgaGVyZSwgc3RhcnRpbmcgZnJvbSBpbml0aWFsIGNvbmRpdGlvbnMsIGFuZCBicmFuY2hpbmcgb2ZmIGJhc2VkIG9uIHZhcmlvdXMgY3JpdGVyaWEuIFdoYXQgYXJlIHRoZSBrZXkgZmFjdG9ycyB0aGF0IGxlYWQgdG8gZGlmZmVyZW50IGFsbG93YWJsZSBvcmRlciBjaG9pY2VzPyBJcyB0aGVyZSBhIGRlYnVnIGZsYWcgb3IgdHJhY2UgcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgPyBUaGF0IHdvdWxkIGJlIHVzZWZ1bC4gVWx0aW1hdGVseSwgYSBkZWVwIGRpdmUgaW50byB0aGlzIHZhcmlhYmxlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGtlcm5lbCYjMzk7cyBvdmVyYWxsIHN0cmF0ZWd5IGZvciBUSFAgYWxsb2NhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFZNQXMgYW5kIHRoZSBwcm9jZXNzJiMzOTtzIG1lbW9yeSBmb290cHJpbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xNDU5PXN0YXRpYyBpbnQgc2hvd19zbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3Ni1cdHNlcV9wcmludGYobSwgXCYjMzQ7VEhQZWxpZ2libGU6ICAgICU4dVxcblwmIzM0OyxcbmZzL3Byb2MvdGFza19tbXUuYzoxNDc3Olx0XHQgICAhIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX1NNQVBTLFxuZnMvcHJvYy90YXNrX21tdS5jLTE0NzgtXHRcdFx0XHRcdCAgICAgIFRIUF9PUkRFUlNfQUxMKSk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTA0LSNkZWZpbmUgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXIpIFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDU6XHQoISF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHlwZSwgQklUKG9yZGVyKSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDYtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzA0LS8qKlxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzA1OiAqIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyAtIGRldGVybWluZSBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3Igdm1hXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDYtICogQHZtYTogIHRoZSB2bSBhcmVhIHRvIGNoZWNrXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzE5PXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMyMDp1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMyMS1cdFx0XHRcdCAgICAgICB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MzpcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQ0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02MTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYyNC1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYyNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjI2LVx0XHRcdFx0XHR2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTk1LVx0XHQgKiBFbmZvcmNlIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMgYXMgbmVjZXNzYXJ5LiBBbm9ueW1vdXMgdm1hc1xubW0vaHVnZV9tZW1vcnkuYzoxOTY6XHRcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLlxubW0vaHVnZV9tZW1vcnkuYy0xOTctXHRcdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz01NzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01ODQtXG5tbS9raHVnZXBhZ2VkLmM6NTg1Olx0cmV0dXJuIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MsIG9yZGVycyk7XG5tbS9raHVnZXBhZ2VkLmMtNTg2LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMDk5LVx0XHRyZXR1cm4gU0NBTl9BRERSRVNTX1JBTkdFO1xubW0va2h1Z2VwYWdlZC5jOjExMDA6XHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgdHlwZSwgQklUKG9yZGVyKSkpXG5tbS9raHVnZXBhZ2VkLmMtMTEwMS1cdFx0cmV0dXJuIFNDQU5fVk1BX0NIRUNLO1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMTA1LVx0ICpcbm1tL2todWdlcGFnZWQuYzoxMTA2Olx0ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkgbWF5IHJldHVybiB0cnVlIGZvciBxdWFsaWZpZWQgZmlsZVxubW0va2h1Z2VwYWdlZC5jLTExMDctXHQgKiB2bWFzLlxuLS1cbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDgyNC1cdCAqL1xubW0vbWVtb3J5LmM6NDgyNTpcdG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcbm1tL21lbW9yeS5jLTQ4MjYtXHRcdFx0XHRcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcbi0tXG5tbS9tZW1vcnkuYz01MzAyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTMyNC1cdCAqL1xubW0vbWVtb3J5LmM6NTMyNTpcdG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcbm1tL21lbW9yeS5jLTUzMjYtXHRcdFx0XHRcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGlzY3JlcGFuY2llcyBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AuIEl0IHNlZW1zIGxpa2UgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgbWlnaHQgYmUgY2FsbGluZyBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB3aXRoIGEgYHZtX2ZsYWdzYCBhcmd1bWVudCB0aGF0ICpjb3VsZCogZGlmZmVyIGZyb20gdGhlIGB2bWEtJmd0O3ZtX2ZsYWdzYCBhc3NvY2lhdGVkIHdpdGggdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIG9yIG92ZXJhbGwgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbiBiZWZvcmUgSSBnbyBmdXJ0aGVyLiBMZXQmIzM5O3MgZGlnIGludG8gYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB0aGVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRob3NlIGZsYWdzIG1pZ2h0IGRpdmVyZ2UgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFyZSBmb3Igb3VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCB0byBmdWxseSByZWFzb24gYWJvdXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9NTM4PXZvaWQgX19raHVnZXBhZ2VkX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL2todWdlcGFnZWQuYy01NzMtICovXG5tbS9raHVnZXBhZ2VkLmM6NTc0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01NzUtXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxuLS1cbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5MC17XG5tbS9raHVnZXBhZ2VkLmM6NTkxOlx0cmV0dXJuIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xubW0va2h1Z2VwYWdlZC5jLTU5Mi19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE2MTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NDEtXG5tbS9raHVnZXBhZ2VkLmM6MTY0MjpcdGVuYWJsZWRfb3JkZXJzID0gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xubW0va2h1Z2VwYWdlZC5jLTE2NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgT3JkZXIgQ29sbGFwc2luZyBMb2dpYyoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHBvcHBpbmcgdXAgYXMgYSBzdWJyb3V0aW5lIHdpdGhpbiBgY29sbGFwc2VfcG9zc2libGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcHJvYmFibHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBiZWhhdmlvciBvZiB0aGUgYWxnb3JpdGhtLiBTbywgSSBuZWVkIHRvIHpvb20gaW4gYW5kIGV4YW1pbmUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGNvbGxhcHNlX3Bvc3NpYmxlYCB0byBzZWUgaG93IGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGl0cyBpbnB1dCBhbmQgb3V0cHV0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgaXMgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBwcmlvcml0eSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3Bvc3NpYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz01Mzg9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU3My0gKi9cbm1tL2todWdlcGFnZWQuYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU3NS1cdFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cbm1tL2todWdlcGFnZWQuYzo1ODg6c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTg5LVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcbm1tL2todWdlcGFnZWQuYy01OTAte1xubW0va2h1Z2VwYWdlZC5jOjU5MTpcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcbm1tL2todWdlcGFnZWQuYy01OTItfVxuLS1cbm1tL2todWdlcGFnZWQuYz01OTQ9dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTk3LVx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9WTV9IVUdFUEFHRSwgdm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjYgaHVnZXBhZ2VfZW5hYmxlZCgpXG5tbS9raHVnZXBhZ2VkLmM6NTk4Olx0ICAgIFx1MDAyNlx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXG5tbS9raHVnZXBhZ2VkLmMtNTk5LVx0XHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVx1MDAzZXZtX21tKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYxMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTY0MS1cbm1tL2todWdlcGFnZWQuYzoxNjQyOlx0ZW5hYmxlZF9vcmRlcnMgPSBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHR2YV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtMTY0My1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjg1Mz1zdGF0aWMgdm9pZCBjb2xsYXBzZV9zY2FuX21tX3Nsb3QodW5zaWduZWQgaW50IHByb2dyZXNzX21heCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjg5OC1cdFx0fVxubW0va2h1Z2VwYWdlZC5jOjI4OTk6XHRcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9LSFVHRVBBR0VEKSkge1xubW0va2h1Z2VwYWdlZC5jLTI5MDAtXHRcdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MmIzQzOyYjNDM7O1xuLS1cbm1tL2todWdlcGFnZWQuYz0zMTk0PWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjA2LVxubW0va2h1Z2VwYWdlZC5jOjMyMDc6XHRpZiAoIWNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFKSlcbm1tL2todWdlcGFnZWQuYy0zMjA4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAmIzM5O3MgQXJndW1lbnQqKgoKUmlnaHQsICp0aGF0JiMzOTtzKiBpdCEgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhY2NlcHRzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQuIEV4Y2VsbGVudC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIGFuZCBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgdXRpbGl6aW5nIHRob3NlIGB2bV9mbGFnc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGZsYWcgY29tYmluYXRpb25zLiBJcyBpdCB1c2luZyB0aGVtIGZvciBhbGxvY2F0aW9uIGhpbnRzPyBQcm90ZWN0aW9uIHNldHRpbmdzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZmxhZyBpbnRlcnByZXRhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIFZNQS4gVGhpcyBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBhcmd1bWVudCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBjb2RlLi4uIExldCYjMzk7cyBjaGVjayBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE1PWV4dGVybiB2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjE2OmV4dGVybiB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMTctXHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9Mzg9c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00MC19XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Mi1cdFx0XHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXHRcdHJldHVybiByZXQ7XG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTE1MzItXG4tLVxubW0va2h1Z2VwYWdlZC5jPTQ1MD1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDYxLVx0XHQgKi9cbm1tL2todWdlcGFnZWQuYzo0NjI6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTtcbm1tL2todWdlcGFnZWQuYy00NjMtXHRcdGJyZWFrO1xuLS1cbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5My1cbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01OTUtXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL3ZtYS5jPTg4OT1zdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxuLS1cbm1tL3ZtYS5jLTEwNzMtXHR2bWFfc2V0X2ZsYWdzX21hc2sodm1nLVx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcbm1tL3ZtYS5jOjEwNzQ6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTA3NS1cdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTE5NS1cdGlmICh2bWctXHUwMDNldGFyZ2V0IFx1MDAyNlx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XG5tbS92bWEuYzoxMTk2Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTE5Ny1cdFx0dm1nLVx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XG4tLVxubW0vdm1hLmM9MjYzND1zdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4tLVxubW0vdm1hLmMtMjY5MS1cdC8qXG5tbS92bWEuYzoyNjkyOlx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcbm1tL3ZtYS5jLTI2OTMtXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXG4tLVxubW0vdm1hLmMtMjY5NS1cdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxubW0vdm1hLmM6MjY5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMjY5Ny1cdCp2bWFwID0gdm1hO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaD0xODE9c3RhdGljIGlubGluZSBib29sIG1wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYilcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg1LVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjE4NjpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg3LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVEhQIEJ1ZyBpbiBzaG1lbSBhbmQga2h1Z2VwYWdlZCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCksIHNwZWNpZmljYWxseSB3aGVuIHRoZXkgaW50ZXJhY3Qgd2l0aCBga2h1Z2VwYWdlZGAgYW5kIHNoYXJlZCBtZW1vcnkgKGBzaG1lbWApLiBJJiMzOTt2ZSBub3RpY2VkIGEgcG90ZW50aWFsIGlzc3VlIGluIGhvdyBgdm1fZmxhZ3NgIGFyZSBoYW5kbGVkIGFjcm9zcyB2YXJpb3VzIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQuCgpUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBjYW4gYmUgY2FsbGVkIHdpdGggKmRpZmZlcmVudCogYHZtX2ZsYWdzYCB0aGFuIHdoYXQmIzM5O3MgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoYHZtYWApLiBGb3IgaW5zdGFuY2UsIGBodWdlcGFnZV9tYWR2aXNlYCBwYXNzZXMgdGhlICpuZXcqIGB2bV9mbGFnc2AgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBiZWZvcmUgdXBkYXRpbmcgYHZtYS0mZ3Q7dm1fZmxhZ3NgLiBUaGlzIG5ldyBzZXQgb2YgZmxhZ3MsIGNydWNpYWxseSwgcmVwcmVzZW50cyB0aGUgKmludGVuZGVkKiBzdGF0ZSBhZnRlciBhIGNoYW5nZSBsaWtlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYC4KClRoZSBjYWxsIGNoYWluIGlzIGNsZWFyOiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIC0mZ3Q7IGBjb2xsYXBzZV9wb3NzaWJsZWAgLSZndDsgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgLSZndDsgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgLSZndDsgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gVGhpcyBsYXN0IGZ1bmN0aW9uLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCB0aGVuIGNhbGxzIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgICppZiogdGhlIGB2bWFgIGNvcnJlc3BvbmRzIHRvIGEgYHNobWVtYCBmaWxlLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB1c2VkIGB2bWEtJmd0O3ZtX2ZsYWdzYCB0byBkZXRlcm1pbmUgaWYgVEhQIHdhcyBhbGxvd2VkLCBpbnN0ZWFkIG9mIHRoZSAqbmV3KiBgdm1fZmxhZ3NgIHRoYXQgd2FzIHBhc3NlZCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcuCgpUaGlzIGNyZWF0ZXMgYSBzY2VuYXJpbyB3aGVyZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgaXMgY2FsbGVkIG9uIGEgYHNobWVtYCBWTUEuIFRoZSBuZXcgYHZtX2ZsYWdzYCB3b3VsZCBnZXQgYFZNX0hVR0VQQUdFYCBzZXQgYnkgYGh1Z2VwYWdlX21hZHZpc2VgLCBidXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2Agd291bGQgdXNlIHRoZSAqb2xkKiBgdm1hLSZndDt2bV9mbGFnc2AsIHdoaWNoIHdvdWxkbiYjMzk7dCBoYXZlIGBWTV9IVUdFUEFHRWAgc2V0LiBUaHVzLCBUSFAgc3VwcG9ydCB3b3VsZCBhcHBlYXIgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIFZNQS4KCkNvbnNlcXVlbnRseSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBtaWdodCBmYWlsIHRvIGVudGVyIHRoZSBWTUEgaW50byBga2h1Z2VwYWdlZGAuIFRoaXMgd291bGQgbWVhbiBraHVnZXBhZ2VkIHdvdWxkIG5vdCBjb2xsYXBzZSB0aGUgc2htZW0gVk1BIGFmdGVyIGBNQURWX0hVR0VQQUdFYCB1bnRpbCBzb21ldGhpbmcgZWxzZSB0cmlnZ2VyZWQgaXQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgZmxhdyB0aGF0IGNvdWxkIHByZXZlbnQgVEhQIGZyb20gZnVuY3Rpb25pbmcgY29ycmVjdGx5IG9uIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBpbiBzcGVjaWZpYyBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDk5PWNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTAtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MTE6aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVx0XHQgICAgIGludCBhZHZpY2UpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgdW5tYXBfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxMjpzdGF0aWMgaW5saW5lIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzEzLVx0XHRcdFx0ICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDktXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cdFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcbi0tXG5tbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDE4LVx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG5tbS9tYWR2aXNlLmM6MTQxOTpcdFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgXHUwMDI2bmV3X2ZsYWdzLCBiZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTQyMC1cdFx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtodWdlcGFnZWQgSW50ZXJhY3Rpb24gQnVnKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGxvb2tzIGxpa2UgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gbWlnaHQgYmUgcHJlc2VudCB3aGVuIHVzaW5nIGBNQURWX0hVR0VQQUdFYCBvbiBzaGFyZWQgbWVtb3J5IChzaG1lbSkgVk1BcyBhbmQgdGhlIGtlcm5lbCYjMzk7cyBga2h1Z2VwYWdlZGAgbWVjaGFuaXNtLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSBgaHVnZXBhZ2VfbWFkdmlzZWAgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCwgd2hpY2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY3JpdGljYWwgcGFydCBpcyB3aGF0IGhhcHBlbnMgKmluc2lkZSogYGh1Z2VwYWdlX21hZHZpc2VgLgoKSSBjb25maXJtZWQgdGhhdCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgLiBOb3csIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgd2l0aCB1cGRhdGVkIGB2bV9mbGFnc2AuIElmIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgICpzdWJzZXF1ZW50bHkqIHJlYWRzIHRoZSBvbGQgYHZtYS0mZ3Q7dm1fZmxhZ3NgLCBpdCB3b24mIzM5O3Qgc2VlIGBWTV9IVUdFUEFHRWAgc2V0LgoKTG9va2luZyBiYWNrLCBpZiBgaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzYCBpcyBub3Qgc2V0IGFuZCBgaHVnZV9zaG1lbV9vcmRlcnNfbWFkdmlzZWAgaXMsICBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCAqZG9lcyogY2hlY2sgYHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSlgLiAgQ3J1Y2lhbGx5LCBgdm1hX3RocF9kaXNhYmxlZGAgdGFrZXMgYHZtX2ZsYWdzYC4gT2theSwgbG9va2luZyBhdCB0aGUgY29kZSwgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaW4gYG1tL3NobWVtLmNgLCAqYmVmb3JlKiB0aGUgcGF0Y2gsIGl0IGV4dHJhY3RzIGB2bV9mbGFnc2AgZnJvbSBgdm1hLSZndDt2bV9mbGFnc2AuIFRodXMsIGBpZiAodm1fZmxhZ3MgJmFtcDsgVk1fSFVHRVBBR0UpYCAqd291bGQqIGJlIGZhbHNlISBUaGVyZWZvcmUsIHRoZSBgbWFza2Agd291bGQgKm5vdCogaW5jbHVkZSBgaHVnZV9zaG1lbV9vcmRlcnNfbWFkdmlzZWAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgcmV0dXJuaW5nIDAuICBUaGF0IG1lYW5zIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbmV2ZXIgZ2V0cyB0aGUgVk1BIHJlZ2lzdGVyZWQgd2l0aCBraHVnZXBhZ2VkLgoKSW4gZWZmZWN0LCB0aGlzIG1lYW5zIHRoYXQgYXBwbHlpbmcgYE1BRFZfSFVHRVBBR0VgIG9uIGEgc2htZW0gVk1BIG1pZ2h0IG5vdCBhY3R1YWxseSB0cmlnZ2VyIGtodWdlcGFnZWQgcHJvY2Vzc2luZyAqYmVjYXVzZSogb2YgdGhlIHRpbWluZyBvZiB0aGUgZmxhZyB1cGRhdGUuIEl0IGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgYnVnLgoKVGhlIGtleSBub3cgaXMgd2hldGhlciB0aGlzIGNvZGVwYXRoIGlzIHJlYWNoYWJsZS4gWWVzLCBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgb24gYSBzaG1lbSBWTUEgKmlzKiByZWFjaGFibGUsIGFuZCBga2h1Z2VwYWdlZGAgaXMgcnVubmluZywgc28gaXTigJlzIGRlZmluaXRlbHkgYSB2YWxpZCBhcmVhIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9uczogIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBjaGVja2luZyB0aGUgcmlnaHQgY29kZSBzZWN0aW9ucywgZXNwZWNpYWxseSBpbiB0aG9zZS4KTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hpY2ggb2YgdGhvc2UgYXJlIHN0YXRpYyBhbmQgd2hpY2ggYXJlIG5vdC4gT2sgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhcmUgYWxsIGV4cG9ydGVkLCBub3Qgc3RhdGljLiBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMzI9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtI2Vsc2VcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzNS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4OC1cdGlmICghaW5fcGYgXHUwMDI2XHUwMDI2IHNobWVtX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUpKVxubW0vaHVnZV9tZW1vcnkuYzoxODk6XHRcdHJldHVybiBvcmRlcnMgXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVx0XHRcdFx0XHRcdCAgIHZtYSwgdm1fZmxhZ3MsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuLS1cbm1tL3NobWVtLmM9MTgxOT1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpXG4tLVxubW0vc2htZW0uYy0xODM1LVxubW0vc2htZW0uYzoxODM2OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5tbS9zaG1lbS5jLTE4MzctXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL3NobWVtLmM9MjQyNz1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1MDktXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xubW0vc2htZW0uYzoyNTEwOlx0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIHZtX2ZsYWdzLCBpbmRleCxcbm1tL3NobWVtLmMtMjUxMS1cdFx0XHRcdFx0ICAgICB3cml0ZV9lbmQsIGZhbHNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGNvdmVyZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBmb3IgdGhpcyBzZXR1cCB0byBmdW5jdGlvbiBvcHRpbWFsbHksIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBleHBsaWNpdGx5IGRlZmluZSBhIGNvdXBsZSBvZiBrZXkgb3B0aW9ucy4gVGhlIGZpcnN0IGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGFsd2F5cyBsaWtlIHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhlc2Ugc2V0dGluZ3MuIFRoZW4sIHRoZXJlJiMzOTtzIGBDT05GSUdfU0hNRU1gLiBXaGlsZSBpdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGVzcGVjaWFsbHkgaW4gYSBzY2VuYXJpbyBsaWtlIHRoaXMsIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBJdCBqdXN0IG1ha2VzIHRoaW5ncyBjbGVhbmVyIGFuZCBtb3JlIHByZWRpY3RhYmxlLCBhbmQgSSBjYW4gYmUgc3VyZSBub3RoaW5nIHdlaXJkIGlzIGdvaW5nIG9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gYmUgY2VydGFpbi4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxOTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIG9uIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgU2hhcmVkIE1lbW9yeSBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpSaWdodCwgc28gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHNldHRpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEhvd2V2ZXIsIGJhc2VkIG9uIGV4cGVyaWVuY2UgSSBzdHJvbmdseSBzdXNwZWN0IHNoYXJlZCBtZW1vcnkgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIEkga25vdyB0aGF0IGBTSE1FTWAgaXMgdmVyeSBsaWtlbHkgYW4gZXNzZW50aWFsIGNvbXBvbmVudCBpbiBvdXIgc2V0dXAuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvZiBUSFAgYW5kIHNoYXJlZCBtZW1vcnksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBsYXJnZSBwYWdlcyBhcmUgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gTXkgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9zaG1lbS5jYC4gTGV0JiMzOTtzIGhhdmUgYSBsb29rIGF0IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdpdGhpbiB0aGF0IG1vZHVsZS4gVGhpcyBmdW5jdGlvbiBob2xkcyB0aGUga2V5LCBiZWNhdXNlIGl0IHNob3VsZCBzcGVsbCBvdXQgZXhhY3RseSB3aGljaCBodWdlIHBhZ2Ugb3JkZXJzIGFyZSBzdXBwb3J0ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyB3aGVuIHVzaW5nIHNoYXJlZCBtZW1vcnkuIFRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIHZpdGFsIGRldGFpbHMgb24gYW55IGxpbWl0YXRpb25zIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIEkgbmVlZCB0byBjb25zaWRlciB3aGVuIGZpbmUtdHVuaW5nIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xODgtXHRpZiAoIWluX3BmIFx1MDAyNlx1MDAyNiBzaG1lbV9maWxlKHZtYS1cdTAwM2V2bV9maWxlKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MTg5Olx0XHRyZXR1cm4gb3JkZXJzIFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSksXG5tbS9odWdlX21lbW9yeS5jLTE5MC1cdFx0XHRcdFx0XHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbi0tXG5tbS9zaG1lbS5jPTE4MTk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmMtMTgzNS1cbm1tL3NobWVtLmM6MTgzNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxubW0vc2htZW0uYy0xODM3LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5tbS9zaG1lbS5jPTI0Mjc9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yNTA5LVx0LyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi9cbm1tL3NobWVtLmM6MjUxMDpcdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCB2bV9mbGFncywgaW5kZXgsXG5tbS9zaG1lbS5jLTI1MTEtXHRcdFx0XHRcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRIUCBhbmQgU2htZW0gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEkmIzM5O20gZHJvcHBpbmcgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBhcyBpdCYjMzk7cyB0b28gZ2VuZXJpYzsgYGh1Z2VwYWdlX21hZHZpc2VgIGlzIGEgYmV0dGVyIGZpdC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXkgYXJlIHN0YXRpYy4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2A/IE5vcGUsIGl0JiMzOTtzIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhgLiBHb29kLiBOZXh0LCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgPyBBbHNvIGV4cG9ydGVkLCBmb3VuZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBgaHVnZXBhZ2VfbWFkdmlzZWA/IFllcCwgYWxzbyBleHBvcnRlZCBpbiB0aGUgc2FtZSBoZWFkZXIgZmlsZS4gRmluYWxseSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCwgd2hpY2ggaXMgaW4gYGluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oYC4gU28gZmFyLCBzbyBnb29kLgoKTGV0JiMzOTtzIGNoZWNrIGBodWdlcGFnZV9tYWR2aXNlYCBvbmUgbW9yZSB0aW1lLiBJdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBpcyBhbHNvIGV4cG9ydGVkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluIGBtbS9zaG1lbS5jYDoKYGBgYwp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLAoJCXBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKYGBgClllcywgaXQmIzM5O3Mgbm90IHN0YXRpYy4gU28sIHRoZSBrZXkgc3ltYm9scyBhcmUgY29uZmlybWVkIGFzOgpgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYApgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgCmBodWdlcGFnZV9tYWR2aXNlYApga2h1Z2VwYWdlZF9lbnRlcl92bWFgCgpHaXZlbiB0aGlzLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFNITUVNYC4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGJ1ZyBpbiBob3cgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaGFuZGxlcyBgdm1fZmxhZ3NgLiBJdCBpbmNvcnJlY3RseSB1c2VkIHRoZSBWTUEmIzM5O3MgZmxhZ3MgaW5zdGVhZCBvZiB0aGUgZXhwbGljaXRseSBwYXNzZWQgb25lcywgd2hpY2ggY2F1c2VkIHByb2JsZW1zIHdoZW4gYHZtX2ZsYWdzYCB3ZXJlIHVwZGF0ZWQgKGxpa2Ugd2l0aCBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWApLiBUaGlzIGNvdWxkIGJsb2NrIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMgYmVjYXVzZSB0aGUgVk1BIGZsYWdzIHdlcmUgbm90IHVwZGF0ZWQgcHJvcGVybHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBzaG1lbV9nZXRfZm9saW9fZ2ZwYCBpcyBzdGF0aWMuClllcCwgYHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCAuLi4pYApTbyB3ZSBzaG91bGRuJiMzOTt0IGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzLgoKQW5kIGNvbmZpcm0sIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgbm90IHN0YXRpYy4gT2theSwgYWxsIHRoZSBrZXkgZWxlbWVudHMgYXJlIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0xNT1leHRlcm4gdm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoxNjpleHRlcm4gdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTE3LVx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDAtfVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDItXHRcdFx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTU4OD1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxubW0va2h1Z2VwYWdlZC5jOjU5NDp2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU5NS1cdFx0XHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTE4MT1zdGF0aWMgaW5saW5lIGJvb2wgbXBvbF9lcXVhbChzdHJ1Y3QgbWVtcG9saWN5ICphLCBzdHJ1Y3QgbWVtcG9saWN5ICpiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODUtXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6MTg2OnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODctXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk0MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBTdGF0aWMgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIHNvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBUaW1lIHRvIGNvbmZpcm0gdGhhdC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBodWdlcGFnZV9tYWR2aXNlYCBpc24mIzM5O3Qgc3RhdGljIGVpdGhlci4gR290dGEgbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgYXJlIHByb3Blcmx5IGV4cG9zZWQsIGdpdmVuIHRoZWlyIHJvbGVzIGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJiMzOTtzIGh1Z2VwYWdlIG1hbmFnZW1lbnQuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIGJlY2F1c2UgdGhlc2UgZGVjbGFyYXRpb25zLCBvciBsYWNrIHRoZXJlb2YsIGNhbiBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IGRpZmZlcmVudCBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbS4gV2UgY2FuJiMzOTt0IGhhdmUgYW55IG9mIHRoZXNlIGFzc3VtcHRpb25zIGJyZWFrIGRvd24gZHVlIHRvIHN0YXRpYyBzY29wZSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBodWdlcGFnZV9tYWR2aXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ5OT1jaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEwLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTExOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MDI9c3RhdGljIGlubGluZSBib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTEtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTI6c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMy1cdFx0XHRcdCAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxuLS1cbm1tL2todWdlcGFnZWQuYz00MzQ9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDQ5LVxubW0va2h1Z2VwYWdlZC5jOjQ1MDppbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy00NTEtXHRcdCAgICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTE4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBIdWdlIFBhZ2UgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IGBodWdlcGFnZV9tYWR2aXNlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIHNvbWUgbWVudGFsIGZsYWdzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICpjaGFuZ2VzKiwgbm90IGEgZml4ZWQgY29uc3RhbnQuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGRvZXNuJiMzOTt0IHNoYXJlIHRoYXQgc3RhdGljIGNoYXJhY3RlcmlzdGljLiBVbmRlcnN0YW5kaW5nIGlmIHRoYXQgb25lIGlzIHZhcmlhYmxlIG9yIG5vdCwgaXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gc2NoZW1lLiBOZWVkIHRvIHZlcmlmeSB0aGF0JiMzOTtzIHRoZSBjYXNlLiBHb3R0YSBzb2xpZGlmeSB0aGF0IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTYyCgkJCQkJCQlvdXRwdXQ6IDIwOQoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgKmlzbiYjMzk7dCogYSBzdGF0aWMgdmFsdWUsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlciBhcyBJIGRlbHZlIGludG8gdGhpcy4KClRoZSBrZXkgYXNwZWN0cyBoZXJlIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgdGhlIGFmb3JlbWVudGlvbmVkIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IHRoaXMgY2hhbmdlIHRvdWNoZXMuCgpUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgU0hNRU1gLgoKRXNzZW50aWFsbHksIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGlzIGEgZml4IGZvciBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBjb3JyZWN0cyBhbiBpbmNvcnJlY3QgdXNlIG9mIGB2bWEtJmd0O3ZtX2ZsYWdzYCB3aXRoaW4gYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIHVzaW5nIGluc3RlYWQgdGhlIHByb3ZpZGVkIGB2bV9mbGFnc2AuIFRoaXMgZml4ZXMgdGhlIHByb2JsZW1zIHRoYXQgY2FuIGFyaXNlIHdoZW4gYHZtX2ZsYWdzYCBhcmUgdXBkYXRlZCB0aHJvdWdoIG1lY2hhbmlzbXMgbGlrZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgYW5kIHRoZSBWTUEmIzM5O3MgZmxhZ3MgaGF2ZW4mIzM5O3QgYmVlbiBmdWxseSBzeW5jaHJvbml6ZWQsIHByZXZlbnRpbmcgYGtodWdlcGFnZWRgIGZyb20gb3BlcmF0aW5nIGVmZmVjdGl2ZWx5IG9uIHNoYXJlZCBtZW1vcnkgVk1Bcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNvcnJlY3Rpb24gcmlnaHQgaW4gdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBsb2dpYywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQmIzM5O3MgdGhlIGtpbmQgb2Ygc3VidGxlIGVkZ2UgY2FzZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSYjMzk7cyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSYjMzk7cyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA4OjAyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IDU2NjNkZmY1MzE4NmUuLjMyMTAxN2UwZmQ2MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKQEAgLTEyNywxMyAmIzQzOzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU0hNRU0pCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCXBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiBib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCwKLQkJCQlsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCwKJiM0MzsJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLjcwZjU3ZDcwMDczOTEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTg3LDcgJiM0MzsxODcsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqLwogCWlmICghaW5fcGYgJmFtcDsmYW1wOyBzaG1lbV9maWxlKHZtYS0mZ3Q7dm1fZmlsZSkpCiAJCXJldHVybiBvcmRlcnMgJmFtcDsgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLSZndDt2bV9maWxlKSwKLQkJCQkJCSAgIHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiYjNDM7CQkJCQkJICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiAJCQkJCQkgICBmb3JjZWRfY29sbGFwc2UpOwogCiAJaWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjZmMWFkNTQ1NmFjYTMgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTgzNCwxMiAmIzQzOzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKQogfQogCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLAomIzQzOwkJcGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpOwogCXVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTsKLQl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJdW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7CiAKIAlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSAmYW1wOyZhbXA7IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKQpAQCAtMjQzMCw2ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQlnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLSZndDt2bWEgOiBOVUxMOwomIzQzOwl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJc3RydWN0IG1tX3N0cnVjdCAqZmF1bHRfbW07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlpbnQgZXJyb3I7CkBAIC0yNTA3LDcgJiM0MzsyNTA3LDggQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJfQogCiAJLyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi8KLQlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpOwomIzQzOwlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LAomIzQzOwkJCQkJICAgICB3cml0ZV9lbmQsIGZhbHNlKTsKIAlpZiAob3JkZXJzICZndDsgMCkgewogCQlnZnBfdCBodWdlX2dmcDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGB2bV9mbGFnc190IHZtX2ZsYWdzYCBhcmd1bWVudCBpbiBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgYG1tL3NobWVtLmNgLiBUaGUgaWRlYSBpcyB0aGF0IHRoZSBjYWxsZXJzIGFyZSBub3cgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGlzIGB2bV9mbGFnc2AgdmFsdWUuCgpJIHdhcyBqdXN0IGxvb2tpbmcgYXQgYG1tL3NobWVtLmNgIGFuZCByZW1lbWJlciBob3cgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2Agd2FzIHdvcmtpbmc6IGl0IHdhcyBwcmV2aW91c2x5IGNhbGN1bGF0aW5nIGB2bV9mbGFnc2AgZnJvbSB0aGUgYHZtYWAgaWYgaXQgZXhpc3RlZC4gVGhlIGNoYW5nZSBlbGltaW5hdGVzIHRoaXMgaW50ZXJuYWwgY2FsY3VsYXRpb24gYW5kIHJlbGllcyBvbiBhIHBhc3NlZC1pbiB2YWx1ZS4KCk5vdywgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGRvaW5nIHRoZSBwYXNzaW5nLCBhbmQgaW4gYG1tL3NobWVtLmNgLCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgc3RpbGwgZG9pbmcgdGhlIGNhbGN1bGF0aW9uIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGZ1bmN0aW9uLgoKV2FpdCBhIHNlY29uZCwgbGV0IG1lIHpvb20gaW4gb24gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBhZ2FpbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEl0IGlzIHBhc3NpbmcgYHZtX2ZsYWdzYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGB2bV9mbGFnc2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZC4gSXMgaXQgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiwgb3IgZG9lcyBpdCBpbml0aWFsaXplIGl0IGxvY2FsbHk/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBpdHNlbGYgdG8gYmUgc3VyZS4gQWxyaWdodCwgdGltZSB0byBvcGVuIHVwIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTMKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXJndW1lbnQgUmVmYWN0b3JpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIHRha2luZyBgdm1fZmxhZ3NfdCB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQuIFRoYXQgbWVhbnMgYHZtX2ZsYWdzYCBpcyBiZWluZyBwYXNzZWQgZG93biwgd2hpY2ggaXMgdGhlIGNydXggb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgaXQmIzM5O3Mgc2ltcGx5IHBhc3NpbmcgYHZtX2ZsYWdzYCBleHBsaWNpdGx5LiBQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgZXh0cmFjdGluZyBpdCBmcm9tIGB2bWEtJmd0O3ZtX2ZsYWdzYCBpbnNpZGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AuCgpUaGlzIGNoYW5nZSBsaWtlbHkgYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHVzYWdlOiBtYXliZSBjYWxsZXJzIG5vdyBjYW4gcGFzcyBtb2RpZmllZCBgdm1fZmxhZ3NgLCBoYW5kbGUgY2FzZXMgd2hlcmUgYHZtYWAgbWlnaHQgYmUgTlVMTCBidXQgYHZtX2ZsYWdzYCBpcyBzdGlsbCBrbm93biwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgdGhvdWdoLiBJIG5lZWQgdG8gY29uZmlybSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgaW50cm9kdWN0aW9uIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW55d2hlcmUuIFNjYW5uaW5nIGBtbS9zaG1lbS5jYCwgSSBzZWUgYHZtX2ZsYWdzYCBpcyBpbml0aWFsaXplZCB0byBgdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDBgLCBzbyBpdCYjMzk7cyBoYW5kbGVkLiBTaW1pbGFybHksIG92ZXIgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgdm1fZmxhZ3NgIGlzIGFuIGFyZ3VtZW50LiBJdCYjMzk7cyBzYWZlLgoKVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb24gYXJndW1lbnRzLCBhIGNsZWFuZXIgd2F5IHRvIHBhc3MgdGhlIGZsYWdzIGFyb3VuZC4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbnkgaW5mb3JtYXRpb24gbGVha3Mgb3Igc2VuZHMgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBzYWZlLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgZnVuY3Rpb24gdG8gdGFrZSBgdm1fZmxhZ3NgIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIGB2bWFgIHBvaW50ZXIgaW5zaWRlIHRoZSBmdW5jdGlvbi4gQWxsIHBhc3NlZCBgdm1fZmxhZ3NgIHZhbHVlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDBgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjoyNS4zMzY2NjA0NzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1NTk0Mzc4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwiaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgZnVuY3Rpb24gdG8gdGFrZSBgdm1fZmxhZ3NgIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIGB2bWFgIHBvaW50ZXIgaW5zaWRlIHRoZSBmdW5jdGlvbi4gQWxsIHBhc3NlZCBgdm1fZmxhZ3NgIHZhbHVlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYHZtYSA/IHZtYS1cXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXFx1MDAzZXZtX2ZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBgdm1fZmxhZ3NgLiBUaGlzIGNhdXNlZCBpc3N1ZXMgd2hlbiBgdm1fZmxhZ3NgIHdlcmUgdXBkYXRlZCAoZS5nLiwgdmlhIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCkgYnV0IHRoZSBWTUEncyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6MjUuMzM2NjY0NDc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1OTc2OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwODowMjoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcXG5pbmRleCA1NjYzZGZmNTMxODZlLi4zMjEwMTdlMGZkNjMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbkBAIC0xMjcsMTMgKzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7XFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbitcXHRcXHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xcbiBib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi1cXHRcXHRcXHRcXHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLCBwZ29mZl90IGluZGV4LFxcbitcXHRcXHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi43MGY1N2Q3MDA3MzkxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTE4Nyw3ICsxODcsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpbl9wZiBcXHUwMDI2XFx1MDAyNiBzaG1lbV9maWxlKHZtYS1cXHUwMDNldm1fZmlsZSkpXFxuIFxcdFxcdHJldHVybiBvcmRlcnMgXFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXFx1MDAzZXZtX2ZpbGUpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgZm9yY2VkX2NvbGxhcHNlKTtcXG4gXFxuIFxcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmYxYWQ1NDU2YWNhMyAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0xODM0LDEyICsxODM0LDExIEBAIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcXG4rXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVxcdTAwM2V2bV9mbGFncyA6IDA7XFxuIFxcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xcbiBcXG4gXFx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8ICh2bWEgXFx1MDAyNlxcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXFxuQEAgLTI0MzAsNiArMjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRcXHRnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLVxcdTAwM2V2bWEgOiBOVUxMO1xcbitcXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVxcdTAwM2V2bV9mbGFncyA6IDA7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKmZhdWx0X21tO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRpbnQgZXJyb3I7XFxuQEAgLTI1MDcsNyArMjUwNyw4IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xcbi1cXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xcbitcXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHdyaXRlX2VuZCwgZmFsc2UpO1xcbiBcXHRpZiAob3JkZXJzIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRnZnBfdCBodWdlX2dmcDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAyOjI2Ljc1MzI5NDU4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjQwODQ5Mjk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIixcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJodWdlcGFnZV9tYWR2aXNlXCIsXG4gICAgXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluY29ycmVjdGx5IHVzZWQgYHZtYS1cXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSdzIGZsYWdzIGhhZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLCBwcmV2ZW50aW5nIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZTMwYzFiYThlMjMyZGE3NWVhNjc5MzU4Y2Q0ZWI3ZjA1YTNkNDYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDI6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbmluZGV4IDU2NjNkZmY1MzE4NmUuLjMyMTAxN2UwZmQ2MzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuQEAgLTEyNywxMyArMTI3LDEzIEBAIGludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuLVx0XHRcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKTtcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4rXHRcdHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7XG4gYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuLVx0XHRcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCxcbitcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uNzBmNTdkNzAwNzM5MSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xODcsNyArMTg3LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqL1xuIFx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG4gXHRcdHJldHVybiBvcmRlcnMgXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSxcbi1cdFx0XHRcdFx0XHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuK1x0XHRcdFx0XHRcdCAgIHZtYSwgdm1fZmxhZ3MsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuIFx0XHRcdFx0XHRcdCAgIGZvcmNlZF9jb2xsYXBzZSk7XG4gXG4gXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkge1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi42ZjFhZDU0NTZhY2EzIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTE4MzQsMTIgKzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuK1x0XHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4gXHR1bnNpZ25lZCBsb25nIHdpdGhpbl9zaXplX29yZGVycyA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc193aXRoaW5fc2l6ZSk7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbiBcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xuIFxuIFx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8ICh2bWEgXHUwMDI2XHUwMDI2IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKVxuQEAgLTI0MzAsNiArMjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLVx1MDAzZXZtYSA6IE5VTEw7XG4rXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKmZhdWx0X21tO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCBlcnJvcjtcbkBAIC0yNTA3LDcgKzI1MDcsOCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdH1cbiBcbiBcdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXG4tXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xuK1x0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIHZtX2ZsYWdzLCBpbmRleCxcbitcdFx0XHRcdFx0ICAgICB3cml0ZV9lbmQsIGZhbHNlKTtcbiBcdGlmIChvcmRlcnMgXHUwMDNlIDApIHtcbiBcdFx0Z2ZwX3QgaHVnZV9nZnA7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjoyNi43NTMyOTYwNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzgyNDI5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIG1vZGlmeSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoYXQgaXQgbm93IHRha2VzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQgZGlyZWN0bHksIHJhdGhlciB0aGFuIGV4dHJhY3RpbmcgaXQgZnJvbSB0aGUgYHZtYWAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyB3ZSdyZSBleHBsaWNpdGx5IHBhc3NpbmcgdGhlIGZsYWdzIG5vdy5cblxuSSBzZWUgdGhhdCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgdXNlcyBgdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMGAuIEFoLCBoYW5nIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBpdCdzIGJlaW5nIHVzZWQuIE9rYXksIHllcywgaXQgZ2V0cyBgdm1hYCBmcm9tIGB2bWZgLCBhbmQgdGhlbiBjb3JyZWN0bHkgcHVsbHMgb3V0IGB2bV9mbGFnc2AgdXNpbmcgdGhlIHRlcm5hcnkgb3BlcmF0b3I6XG5cbmBgYGNcblx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYgPyB2bWYtXHUwMDNldm1hIDogTlVMTDtcbitcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwO1xuYGBgXG5cbkFuZCB0aGVuLCBpdCBwYXNzZXMgYHZtX2ZsYWdzYCBkb3duIHRoZSBsaW5lLiBJIGFtIGZvbGxvd2luZyB0aGlzIHBhdGguIEluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIHRoZSBgdm1fZmxhZ3NgIGFyZSBleHBsaWNpdGx5IHBhc3NlZC4gR3JlYXQuXG5cbkJ1dCwgd2FpdC4uLiBsZXQgbWUgcmUtY2hlY2sgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gQWgsIEkgc2VlIGl0IG5vdy5cblxuYGBgY1xuIFx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG4gXHRcdHJldHVybiBvcmRlcnMgXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSxcbi1cdFx0XHRcdFx0XHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuK1x0XHRcdFx0XHRcdCAgIHZtYSwgdm1fZmxhZ3MsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuIFx0XHRcdFx0XHRcdCAgIGZvcmNlZF9jb2xsYXBzZSk7XG5gYGBcblxuT2theSwgaXQgKmFscmVhZHkqIHJlY2VpdmVzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQhIFRoaXMgc2ltcGxpZmllcyB0aGUgY2hhbmdlIGFuZCBtYWtlcyB0aGUgY29kZSBtb3JlIGV4cGxpY2l0IGFuZCByZWFkYWJsZSBieSByZW1vdmluZyB0aGUgaW1wbGljaXQgdXNlIG9mIGB2bWEtXHUwMDNldm1fZmxhZ3NgLiBHb29kLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6MzQuNTM1NzI4OTA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTAxNTMwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk4LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5OTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIyLVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjozNi4xODU4ODY1NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM5OTAwNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIHdpdGggSHVnZSBQYWdlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgSSBzZWUgaXQgdGFrZXMgYHZtX2ZsYWdzX3Qgdm1fZmxhZ3NgIGFzIGFuIGFyZ3VtZW50LiBUaGF0J3MgZ29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3QuIEhvd2V2ZXIsIGl0J3MgaGl0dGluZyBtZSB0aGF0IHByZXZpb3VzbHksIHNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB3YXMgZ3JhYmJpbmcgdGhlIGB2bV9mbGFnc2AgZGlyZWN0bHkgZnJvbSBgdm1hLVx1MDAzZXZtX2ZsYWdzYC4gVGhhdCBzZWVtcyBhIGxpdHRsZS4uLiByaXNreSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4gVGhlIGlzc3VlIGlzLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgICpjb3VsZCogYmUgY2FsbGVkIHdpdGggYSBgdm1fZmxhZ3NgIHZhbHVlIHRoYXQncyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmljIGB2bWFgIHdlJ3JlIHRhbGtpbmcgYWJvdXQhIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSBnbmFybHkgYWxsb2NhdGlvbiBpc3N1ZXMgaWYgd2UncmUgbm90IGNhcmVmdWwuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB3aGVyZSBlbHNlIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdXNlZC4gSSBoYWQgYmV0dGVyIGdvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NDAuMzI1Nzg5NjY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTI4NTE2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDAtXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMjA9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQzOlxcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0NC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NDIuNjE4NjQ4ODYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMzk4MDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB6ZXJvaW5nIGluIG9uIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIHZhcmlhYmxlIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSB3aXRoaW4gdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgd2hpY2ggb3JkZXIgb2YgaHVnZSBwYWdlcyBhcmUgY29uc2lkZXJlZCB2YWxpZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIFZNQSBjb250ZXh0LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgaW5jb3Jwb3JhdGVkPyBBcmUgd2UgZGVhbGluZyB3aXRoIGFyY2hpdGVjdHVyZSBsaW1pdGF0aW9ucyBhdCB0aGlzIHBvaW50LCBvciBtb3JlIGFic3RyYWN0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0cmFpbnRzPyBUaGlzIGxpa2VseSBkaWN0YXRlcyB0aGUgaW5pdGlhbCBzaXplLCBhbmQgYW55IHN1YnNlcXVlbnQgc3BsaXR0aW5nIG9yIG1lcmdpbmcgdGhhdCBtaWdodCBiZSBkb25lLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgdGllcyBpbnRvIG51bWEgYXdhcmVuZXNzOyB0aGUgb3JkZXIgc2VsZWN0aW9uIG1heSBhbHNvIGJlIGluZmx1ZW5jZWQgYnkgdGhlIHBoeXNpY2FsIG1lbW9yeSBsYXlvdXQuIFRoZXJlIGNvdWxkIGJlIGEgaGllcmFyY2h5IGludm9sdmVkLCBvciBhIHNldCBvZiBwcmlvcml0aWVzIGJhc2VkIG9uIHN5c3RlbSBwYXJhbWV0ZXJzIG9yIHVzZXIgcHJlZmVyZW5jZXMuXG5cbk15IGFpbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhlIGFsbG93ZWQgb3JkZXJzLiBTcGVjaWZpY2FsbHksIHdoYXQncyBpbmZsdWVuY2luZyB0aGUgZGVjaXNpb24gcHJvY2VzcyBhbmQgaG93IHRoaXMgZGVjaXNpb24gY2FuIGJlIG1vZGlmaWVkLiBJJ20gaW1hZ2luaW5nIGEgY29tcGxleCBmbG93IGNoYXJ0IGhlcmUsIHN0YXJ0aW5nIGZyb20gaW5pdGlhbCBjb25kaXRpb25zLCBhbmQgYnJhbmNoaW5nIG9mZiBiYXNlZCBvbiB2YXJpb3VzIGNyaXRlcmlhLiBXaGF0IGFyZSB0aGUga2V5IGZhY3RvcnMgdGhhdCBsZWFkIHRvIGRpZmZlcmVudCBhbGxvd2FibGUgb3JkZXIgY2hvaWNlcz8gSXMgdGhlcmUgYSBkZWJ1ZyBmbGFnIG9yIHRyYWNlIHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYD8gVGhhdCB3b3VsZCBiZSB1c2VmdWwuIFVsdGltYXRlbHksIGEgZGVlcCBkaXZlIGludG8gdGhpcyB2YXJpYWJsZSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBrZXJuZWwncyBvdmVyYWxsIHN0cmF0ZWd5IGZvciBUSFAgYWxsb2NhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFZNQXMgYW5kIHRoZSBwcm9jZXNzJ3MgbWVtb3J5IGZvb3RwcmludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAyOjQ2LjA1MjYzMjA0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0NTM1NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTQ1OT1zdGF0aWMgaW50IHNob3dfc21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3Ni1cXHRzZXFfcHJpbnRmKG0sIFxcXCJUSFBlbGlnaWJsZTogICAgJTh1XFxcXG5cXFwiLFxcbmZzL3Byb2MvdGFza19tbXUuYzoxNDc3OlxcdFxcdCAgICEhdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX1NNQVBTLFxcbmZzL3Byb2MvdGFza19tbXUuYy0xNDc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIFRIUF9PUkRFUlNfQUxMKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD05Nz1lbnVtIHR2YV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNC0jZGVmaW5lIHRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVyKSBcXFxcXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTA1OlxcdCghIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBCSVQob3JkZXIpKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk4LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5OTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwNC0vKipcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMDU6ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzIC0gZGV0ZXJtaW5lIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciB2bWFcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDYtICogQHZtYTogIHRoZSB2bSBhcmVhIHRvIGNoZWNrXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTk9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMyMDp1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMjEtXFx0XFx0XFx0XFx0ICAgICAgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQzOlxcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0NC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02MTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjI0LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYyNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYyNi1cXHRcXHRcXHRcXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5NS1cXHRcXHQgKiBFbmZvcmNlIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMgYXMgbmVjZXNzYXJ5LiBBbm9ueW1vdXMgdm1hc1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk2OlxcdFxcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk3LVxcdFxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTU3ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTg0LVxcbm1tL2todWdlcGFnZWQuYzo1ODU6XFx0cmV0dXJuIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MsIG9yZGVycyk7XFxubW0va2h1Z2VwYWdlZC5jLTU4Ni19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwOTktXFx0XFx0cmV0dXJuIFNDQU5fQUREUkVTU19SQU5HRTtcXG5tbS9raHVnZXBhZ2VkLmM6MTEwMDpcXHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHR5cGUsIEJJVChvcmRlcikpKVxcbm1tL2todWdlcGFnZWQuYy0xMTAxLVxcdFxcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTA1LVxcdCAqXFxubW0va2h1Z2VwYWdlZC5jOjExMDY6XFx0ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkgbWF5IHJldHVybiB0cnVlIGZvciBxdWFsaWZpZWQgZmlsZVxcbm1tL2todWdlcGFnZWQuYy0xMTA3LVxcdCAqIHZtYXMuXFxuLS1cXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgyNC1cXHQgKi9cXG5tbS9tZW1vcnkuYzo0ODI1OlxcdG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIFRWQV9QQUdFRkFVTFQsXFxubW0vbWVtb3J5LmMtNDgyNi1cXHRcXHRcXHRcXHRcXHQgIEJJVChQTURfT1JERVIpIC0gMSk7XFxuLS1cXG5tbS9tZW1vcnkuYz01MzAyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzI0LVxcdCAqL1xcbm1tL21lbW9yeS5jOjUzMjU6XFx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcXG5tbS9tZW1vcnkuYy01MzI2LVxcdFxcdFxcdFxcdFxcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NDcuNTE3MTcyMDg1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MzUxMDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGlzY3JlcGFuY2llcyBpbiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgLiBJdCBzZWVtcyBsaWtlIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIG1pZ2h0IGJlIGNhbGxpbmcgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2Agd2l0aCBhIGB2bV9mbGFnc2AgYXJndW1lbnQgdGhhdCAqY291bGQqIGRpZmZlciBmcm9tIHRoZSBgdm1hLVx1MDAzZXZtX2ZsYWdzYCBhc3NvY2lhdGVkIHdpdGggdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkuIFRoYXQncyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgb3Igb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uIGJlZm9yZSBJIGdvIGZ1cnRoZXIuIExldCdzIGRpZyBpbnRvIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB0aGVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRob3NlIGZsYWdzIG1pZ2h0IGRpdmVyZ2UgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFyZSBmb3Igb3VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCB0byBmdWxseSByZWFzb24gYWJvdXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MzYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjo1MC45MTA2ODUwMjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQ0MDQ5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfcG9zc2libGVfb3JkZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz01Mzg9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTczLSAqL1xcbm1tL2todWdlcGFnZWQuYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy01NzUtXFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTg4PXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU5MC17XFxubW0va2h1Z2VwYWdlZC5jOjU5MTpcXHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxubW0va2h1Z2VwYWdlZC5jLTU5Mi19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTYxMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjQxLVxcbm1tL2todWdlcGFnZWQuYzoxNjQyOlxcdGVuYWJsZWRfb3JkZXJzID0gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTY0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NTIuMzg1MDk2ODU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzAwMzU1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBPcmRlciBDb2xsYXBzaW5nIExvZ2ljKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbiwgYW5kIGl0J3MgcG9wcGluZyB1cCBhcyBhIHN1YnJvdXRpbmUgd2l0aGluIGBjb2xsYXBzZV9wb3NzaWJsZWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHByb2JhYmx5IGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgYmVoYXZpb3Igb2YgdGhlIGFsZ29yaXRobS4gU28sIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGNvbGxhcHNlX3Bvc3NpYmxlYCB0byBzZWUgaG93IGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGl0cyBpbnB1dCBhbmQgb3V0cHV0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBpcyBjYWxsZWQuIFRoYXQncyB0aGUgcHJpb3JpdHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NTYuNzU1MTM0NzY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0MjI0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3Bvc3NpYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz01Mzg9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTczLSAqL1xcbm1tL2todWdlcGFnZWQuYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy01NzUtXFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTg3LVxcbm1tL2todWdlcGFnZWQuYzo1ODg6c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcXG5tbS9raHVnZXBhZ2VkLmMtNTkwLXtcXG5tbS9raHVnZXBhZ2VkLmM6NTkxOlxcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG5tbS9raHVnZXBhZ2VkLmMtNTkyLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz01OTQ9dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01OTctXFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9WTV9IVUdFUEFHRSwgdm1hLVxcdTAwM2V2bV9tbSkgXFx1MDAyNlxcdTAwMjYgaHVnZXBhZ2VfZW5hYmxlZCgpXFxubW0va2h1Z2VwYWdlZC5jOjU5ODpcXHQgICAgXFx1MDAyNlxcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxcbm1tL2todWdlcGFnZWQuYy01OTktXFx0XFx0X19raHVnZXBhZ2VkX2VudGVyKHZtYS1cXHUwMDNldm1fbW0pO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE2MTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY0MS1cXG5tbS9raHVnZXBhZ2VkLmM6MTY0MjpcXHRlbmFibGVkX29yZGVycyA9IGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxubW0va2h1Z2VwYWdlZC5jLTE2NDMtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjg1Mz1zdGF0aWMgdm9pZCBjb2xsYXBzZV9zY2FuX21tX3Nsb3QodW5zaWduZWQgaW50IHByb2dyZXNzX21heCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODk4LVxcdFxcdH1cXG5tbS9raHVnZXBhZ2VkLmM6Mjg5OTpcXHRcXHRpZiAoIWNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKSB7XFxubW0va2h1Z2VwYWdlZC5jLTI5MDAtXFx0XFx0XFx0Y2MtXFx1MDAzZXByb2dyZXNzKys7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE5ND1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjA2LVxcbm1tL2todWdlcGFnZWQuYzozMjA3OlxcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFKSlcXG5tbS9raHVnZXBhZ2VkLmMtMzIwOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NTguMTk5MzYzMzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4Mjc4MjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgJ3MgQXJndW1lbnQqKlxuXG5SaWdodCwgKnRoYXQncyogaXQhIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYWNjZXB0cyBgdm1fZmxhZ3NgIGFzIGFuIGFyZ3VtZW50LiBFeGNlbGxlbnQuIFRoYXQncyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgc2VlIGV4YWN0bHkgaG93IGl0J3MgdXRpbGl6aW5nIHRob3NlIGB2bV9mbGFnc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGZsYWcgY29tYmluYXRpb25zLiBJcyBpdCB1c2luZyB0aGVtIGZvciBhbGxvY2F0aW9uIGhpbnRzPyBQcm90ZWN0aW9uIHNldHRpbmdzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZmxhZyBpbnRlcnByZXRhdGlvbiBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgVk1BLiBUaGlzIGNvdWxkIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiBMZXQncyBzZWUgaG93IHRoYXQgYXJndW1lbnQgaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgY29kZS4uLiBMZXQncyBjaGVjayBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzowMi43ODIxNDg0MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzkyOTExNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTU9ZXh0ZXJuIHZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjE2OmV4dGVybiB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTE3LVxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00MC19XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQyLVxcdFxcdFxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cXHRcXHRyZXR1cm4gcmV0O1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzMTpcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMi1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz00NTA9aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDYxLVxcdFxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0NjI6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xcbm1tL2todWdlcGFnZWQuYy00NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTg4PXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU5My1cXG5tbS9raHVnZXBhZ2VkLmM6NTk0OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU5NS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcXG4tLVxcbm1tL3ZtYS5jLTEwNzMtXFx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cXHUwMDNldGFyZ2V0LCBzdGlja3lfZmxhZ3MpO1xcbm1tL3ZtYS5jOjEwNzQ6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVxcdTAwM2V0YXJnZXQsIHZtZy1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTEwNzUtXFx0dm1nLVxcdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xcbi0tXFxubW0vdm1hLmM9MTE0MD1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9uZXdfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4tLVxcbm1tL3ZtYS5jLTExOTUtXFx0aWYgKHZtZy1cXHUwMDNldGFyZ2V0IFxcdTAwMjZcXHUwMDI2ICF2bWFfZXhwYW5kKHZtZykpIHtcXG5tbS92bWEuYzoxMTk2OlxcdFxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMTk3LVxcdFxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbi0tXFxubW0vdm1hLmMtMjY5MS1cXHQvKlxcbm1tL3ZtYS5jOjI2OTI6XFx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcXG5tbS92bWEuYy0yNjkzLVxcdCAqIGNhbGwgY292ZXJzIHRoZSBub24tbWVyZ2UgY2FzZS5cXG4tLVxcbm1tL3ZtYS5jLTI2OTUtXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxubW0vdm1hLmM6MjY5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIG1hcC1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTI2OTctXFx0KnZtYXAgPSB2bWE7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBtcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg1LVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaDoxODY6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODctXFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzowNC4yMjE0NDQ4NTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyNTU1NzY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFRIUCBCdWcgaW4gc2htZW0gYW5kIGtodWdlcGFnZWQgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgc3BlY2lmaWNhbGx5IHdoZW4gdGhleSBpbnRlcmFjdCB3aXRoIGBraHVnZXBhZ2VkYCBhbmQgc2hhcmVkIG1lbW9yeSAoYHNobWVtYCkuIEkndmUgbm90aWNlZCBhIHBvdGVudGlhbCBpc3N1ZSBpbiBob3cgYHZtX2ZsYWdzYCBhcmUgaGFuZGxlZCBhY3Jvc3MgdmFyaW91cyBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkLlxuXG5UaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBjYW4gYmUgY2FsbGVkIHdpdGggKmRpZmZlcmVudCogYHZtX2ZsYWdzYCB0aGFuIHdoYXQncyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChgdm1hYCkuIEZvciBpbnN0YW5jZSwgYGh1Z2VwYWdlX21hZHZpc2VgIHBhc3NlcyB0aGUgKm5ldyogYHZtX2ZsYWdzYCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGJlZm9yZSB1cGRhdGluZyBgdm1hLVx1MDAzZXZtX2ZsYWdzYC4gVGhpcyBuZXcgc2V0IG9mIGZsYWdzLCBjcnVjaWFsbHksIHJlcHJlc2VudHMgdGhlICppbnRlbmRlZCogc3RhdGUgYWZ0ZXIgYSBjaGFuZ2UgbGlrZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAuXG5cblRoZSBjYWxsIGNoYWluIGlzIGNsZWFyOiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIC1cdTAwM2UgYGNvbGxhcHNlX3Bvc3NpYmxlYCAtXHUwMDNlIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIC1cdTAwM2UgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgLVx1MDAzZSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIGxhc3QgZnVuY3Rpb24sIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIHRoZW4gY2FsbHMgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgKmlmKiB0aGUgYHZtYWAgY29ycmVzcG9uZHMgdG8gYSBgc2htZW1gIGZpbGUuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB1c2VkIGB2bWEtXHUwMDNldm1fZmxhZ3NgIHRvIGRldGVybWluZSBpZiBUSFAgd2FzIGFsbG93ZWQsIGluc3RlYWQgb2YgdGhlICpuZXcqIGB2bV9mbGFnc2AgdGhhdCB3YXMgcGFzc2VkIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1Zy5cblxuVGhpcyBjcmVhdGVzIGEgc2NlbmFyaW8gd2hlcmUgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGlzIGNhbGxlZCBvbiBhIGBzaG1lbWAgVk1BLiBUaGUgbmV3IGB2bV9mbGFnc2Agd291bGQgZ2V0IGBWTV9IVUdFUEFHRWAgc2V0IGJ5IGBodWdlcGFnZV9tYWR2aXNlYCwgYnV0IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdvdWxkIHVzZSB0aGUgKm9sZCogYHZtYS1cdTAwM2V2bV9mbGFnc2AsIHdoaWNoIHdvdWxkbid0IGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQuIFRodXMsIFRIUCBzdXBwb3J0IHdvdWxkIGFwcGVhciB0byBiZSBkaXNhYmxlZCBpbiB0aGUgVk1BLlxuXG5Db25zZXF1ZW50bHksIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbWlnaHQgZmFpbCB0byBlbnRlciB0aGUgVk1BIGludG8gYGtodWdlcGFnZWRgLiBUaGlzIHdvdWxkIG1lYW4ga2h1Z2VwYWdlZCB3b3VsZCBub3QgY29sbGFwc2UgdGhlIHNobWVtIFZNQSBhZnRlciBgTUFEVl9IVUdFUEFHRWAgdW50aWwgc29tZXRoaW5nIGVsc2UgdHJpZ2dlcmVkIGl0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLiBJdCdzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBmbGF3IHRoYXQgY291bGQgcHJldmVudCBUSFAgZnJvbSBmdW5jdGlvbmluZyBjb3JyZWN0bHkgb24gc2hhcmVkIG1lbW9yeSByZWdpb25zIGluIHNwZWNpZmljIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyNiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzoxNS40NzcwMjM5NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzIwNjU2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2VfbWFkdmlzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTk9Y2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEwLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMTppbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MDI9c3RhdGljIGlubGluZSBib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTI6c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTMtXFx0XFx0XFx0XFx0ICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQ5LVxcbm1tL2todWdlcGFnZWQuYzo0NTA6aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cXHRcXHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDE4LVxcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxcbm1tL21hZHZpc2UuYzoxNDE5OlxcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFxcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTQyMC1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjE2LjkwOTA5NDMwNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk4MjM4MjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2h1Z2VwYWdlZCBJbnRlcmFjdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGxvb2tzIGxpa2UgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gbWlnaHQgYmUgcHJlc2VudCB3aGVuIHVzaW5nIGBNQURWX0hVR0VQQUdFYCBvbiBzaGFyZWQgbWVtb3J5IChzaG1lbSkgVk1BcyBhbmQgdGhlIGtlcm5lbCdzIGBraHVnZXBhZ2VkYCBtZWNoYW5pc20uICBTcGVjaWZpY2FsbHksIEkgc2VlIGBodWdlcGFnZV9tYWR2aXNlYCBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHdoYXQgaGFwcGVucyAqaW5zaWRlKiBgaHVnZXBhZ2VfbWFkdmlzZWAuXG5cbkkgY29uZmlybWVkIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gd2l0aGluIGBodWdlcGFnZV9tYWR2aXNlYC4gTm93LCB0aGUgaXNzdWUgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIHdpdGggdXBkYXRlZCBgdm1fZmxhZ3NgLiBJZiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCAqc3Vic2VxdWVudGx5KiByZWFkcyB0aGUgb2xkIGB2bWEtXHUwMDNldm1fZmxhZ3NgLCBpdCB3b24ndCBzZWUgYFZNX0hVR0VQQUdFYCBzZXQuXG5cbkxvb2tpbmcgYmFjaywgaWYgYGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5c2AgaXMgbm90IHNldCBhbmQgYGh1Z2Vfc2htZW1fb3JkZXJzX21hZHZpc2VgIGlzLCAgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgKmRvZXMqIGNoZWNrIGB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIHNobWVtX2h1Z2VfZm9yY2UpYC4gIENydWNpYWxseSwgYHZtYV90aHBfZGlzYWJsZWRgIHRha2VzIGB2bV9mbGFnc2AuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluIGBtbS9zaG1lbS5jYCwgKmJlZm9yZSogdGhlIHBhdGNoLCBpdCBleHRyYWN0cyBgdm1fZmxhZ3NgIGZyb20gYHZtYS1cdTAwM2V2bV9mbGFnc2AuIFRodXMsIGBpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0hVR0VQQUdFKWAgKndvdWxkKiBiZSBmYWxzZSEgVGhlcmVmb3JlLCB0aGUgYG1hc2tgIHdvdWxkICpub3QqIGluY2x1ZGUgYGh1Z2Vfc2htZW1fb3JkZXJzX21hZHZpc2VgLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHJldHVybmluZyAwLiAgVGhhdCBtZWFucyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG5ldmVyIGdldHMgdGhlIFZNQSByZWdpc3RlcmVkIHdpdGgga2h1Z2VwYWdlZC5cblxuSW4gZWZmZWN0LCB0aGlzIG1lYW5zIHRoYXQgYXBwbHlpbmcgYE1BRFZfSFVHRVBBR0VgIG9uIGEgc2htZW0gVk1BIG1pZ2h0IG5vdCBhY3R1YWxseSB0cmlnZ2VyIGtodWdlcGFnZWQgcHJvY2Vzc2luZyAqYmVjYXVzZSogb2YgdGhlIHRpbWluZyBvZiB0aGUgZmxhZyB1cGRhdGUuIEl0IGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgYnVnLlxuXG5UaGUga2V5IG5vdyBpcyB3aGV0aGVyIHRoaXMgY29kZXBhdGggaXMgcmVhY2hhYmxlLiBZZXMsIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNobWVtIFZNQSAqaXMqIHJlYWNoYWJsZSwgYW5kIGBraHVnZXBhZ2VkYCBpcyBydW5uaW5nLCBzbyBpdOKAmXMgZGVmaW5pdGVseSBhIHZhbGlkIGFyZWEgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmdW5jdGlvbnM6ICBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYHNobWVtX2dldF9mb2xpb19nZnBgLCBgaHVnZXBhZ2VfbWFkdmlzZWAsIGFuZCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBJIG5lZWQgdG8gZW5zdXJlIEknbSBjaGVja2luZyB0aGUgcmlnaHQgY29kZSBzZWN0aW9ucywgZXNwZWNpYWxseSBpbiB0aG9zZS5cbkxldCBtZSBxdWlja2x5IGNoZWNrIHdoaWNoIG9mIHRob3NlIGFyZSBzdGF0aWMgYW5kIHdoaWNoIGFyZSBub3QuIE9rIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgaHVnZXBhZ2VfbWFkdmlzZWAgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYXJlIGFsbCBleHBvcnRlZCwgbm90IHN0YXRpYy4gYHNobWVtX2dldF9mb2xpb19nZnBgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDM6MjkuODkxNDc4NzEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5MjA3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTI4LSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEyOTp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMy0jZWxzZVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEyMT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODgtXFx0aWYgKCFpbl9wZiBcXHUwMDI2XFx1MDAyNiBzaG1lbV9maWxlKHZtYS1cXHUwMDNldm1fZmlsZSkpXFxubW0vaHVnZV9tZW1vcnkuYzoxODk6XFx0XFx0cmV0dXJuIG9yZGVycyBcXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cXHUwMDNldm1fZmlsZSksXFxubW0vaHVnZV9tZW1vcnkuYy0xOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsXFxuLS1cXG5tbS9zaG1lbS5jPTE4MTk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vc2htZW0uYy0xODM1LVxcbm1tL3NobWVtLmM6MTgzNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbm1tL3NobWVtLmMtMTgzNy1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL3NobWVtLmM9MjQyNz1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjUwOS1cXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xcbm1tL3NobWVtLmM6MjUxMDpcXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LFxcbm1tL3NobWVtLmMtMjUxMS1cXHRcXHRcXHRcXHRcXHQgICAgIHdyaXRlX2VuZCwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzozMS4zNDA2OTEyMTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTU0MzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGNvdmVyZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBmb3IgdGhpcyBzZXR1cCB0byBmdW5jdGlvbiBvcHRpbWFsbHksIEknbSBnb2luZyB0byB3YW50IHRvIGV4cGxpY2l0bHkgZGVmaW5lIGEgY291cGxlIG9mIGtleSBvcHRpb25zLiBUaGUgZmlyc3QgaXMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSB0aGVzZSBzZXR0aW5ncy4gVGhlbiwgdGhlcmUncyBgQ09ORklHX1NITUVNYC4gV2hpbGUgaXQncyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGl0J3MgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIHNjZW5hcmlvIGxpa2UgdGhpcywgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuIEl0IGp1c3QgbWFrZXMgdGhpbmdzIGNsZWFuZXIgYW5kIG1vcmUgcHJlZGljdGFibGUsIGFuZCBJIGNhbiBiZSBzdXJlIG5vdGhpbmcgd2VpcmQgaXMgZ29pbmcgb24uIExldCdzIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgc3RhdHVzIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIGNlcnRhaW4uIFRoYXQncyB0aGUgcHJpb3JpdHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjM2LjMxMDIzODU0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDY1ODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTgtXFxubW0vS2NvbmZpZzo4NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODYwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY1LVxcbm1tL0tjb25maWc6ODY2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjctXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODc0LVxcbm1tL0tjb25maWc6ODc1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MS1cXG5tbS9LY29uZmlnOjg5MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDEtXFxubW0vS2NvbmZpZzo5MDI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDktXFxubW0vS2NvbmZpZzo5MTA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE3LVxcbm1tL0tjb25maWc6OTE4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE5LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI3PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzYtXFxubW0vS2NvbmZpZzo5Mzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzOC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ1LVxcbm1tL0tjb25maWc6OTQ2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUzLVxcbm1tL0tjb25maWc6OTU0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTUtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MS1cXG5tbS9LY29uZmlnOjk2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2My1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjM3Ljc4NDkwMzE5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI1ODYwNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIG9uIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgU2hhcmVkIE1lbW9yeSBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBzbyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBIb3dldmVyLCBiYXNlZCBvbiBleHBlcmllbmNlIEkgc3Ryb25nbHkgc3VzcGVjdCBzaGFyZWQgbWVtb3J5IGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGludm9sdmVkLiBJIGtub3cgdGhhdCBgU0hNRU1gIGlzIHZlcnkgbGlrZWx5IGFuIGVzc2VudGlhbCBjb21wb25lbnQgaW4gb3VyIHNldHVwLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvZiBUSFAgYW5kIHNoYXJlZCBtZW1vcnksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBsYXJnZSBwYWdlcyBhcmUgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gTXkgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9zaG1lbS5jYC4gTGV0J3MgaGF2ZSBhIGxvb2sgYXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2Agd2l0aGluIHRoYXQgbW9kdWxlLiBUaGlzIGZ1bmN0aW9uIGhvbGRzIHRoZSBrZXksIGJlY2F1c2UgaXQgc2hvdWxkIHNwZWxsIG91dCBleGFjdGx5IHdoaWNoIGh1Z2UgcGFnZSBvcmRlcnMgYXJlIHN1cHBvcnRlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHdoZW4gdXNpbmcgc2hhcmVkIG1lbW9yeS4gVGhhdCdsbCBnaXZlIG1lIHRoZSB2aXRhbCBkZXRhaWxzIG9uIGFueSBsaW1pdGF0aW9ucyBvciBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBJIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBmaW5lLXR1bmluZyB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxOTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzo0MC45MTA3NjY2MzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjIxNDk5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMjY9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMzI9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzNS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE4OC1cXHRpZiAoIWluX3BmIFxcdTAwMjZcXHUwMDI2IHNobWVtX2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlKSlcXG5tbS9odWdlX21lbW9yeS5jOjE4OTpcXHRcXHRyZXR1cm4gb3JkZXJzIFxcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVxcdTAwM2V2bV9maWxlKSxcXG5tbS9odWdlX21lbW9yeS5jLTE5MC1cXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcXG4tLVxcbm1tL3NobWVtLmM9MTgxOT1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9zaG1lbS5jLTE4MzUtXFxubW0vc2htZW0uYzoxODM2OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxubW0vc2htZW0uYy0xODM3LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxubW0vc2htZW0uYz0yNDI3PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTA5LVxcdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXFxubW0vc2htZW0uYzoyNTEwOlxcdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCB2bV9mbGFncywgaW5kZXgsXFxubW0vc2htZW0uYy0yNTExLVxcdFxcdFxcdFxcdFxcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjQzLjAzMjkyMTUyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE1NjkwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRIUCBhbmQgU2htZW0gRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEknbSBkcm9wcGluZyBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIGFzIGl0J3MgdG9vIGdlbmVyaWM7IGBodWdlcGFnZV9tYWR2aXNlYCBpcyBhIGJldHRlciBmaXQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXkgYXJlIHN0YXRpYy4gQWxyaWdodCwgbGV0J3Mgc2VlLiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYD8gTm9wZSwgaXQncyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYC4gR29vZC4gTmV4dCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYD8gQWxzbyBleHBvcnRlZCwgZm91bmQgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gYGh1Z2VwYWdlX21hZHZpc2VgPyBZZXAsIGFsc28gZXhwb3J0ZWQgaW4gdGhlIHNhbWUgaGVhZGVyIGZpbGUuIEZpbmFsbHksIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAsIHdoaWNoIGlzIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGAuIFNvIGZhciwgc28gZ29vZC5cblxuTGV0J3MgY2hlY2sgYGh1Z2VwYWdlX21hZHZpc2VgIG9uZSBtb3JlIHRpbWUuIEl0J3MgZGVmaW5lZCBpbiBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgaXMgYWxzbyBleHBvcnRlZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluIGBtbS9zaG1lbS5jYDpcbmBgYGNcbnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG5cdFx0cGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuYGBgXG5ZZXMsIGl0J3Mgbm90IHN0YXRpYy4gU28sIHRoZSBrZXkgc3ltYm9scyBhcmUgY29uZmlybWVkIGFzOlxuYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2BcbmBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2BcbmBodWdlcGFnZV9tYWR2aXNlYFxuYGtodWdlcGFnZWRfZW50ZXJfdm1hYFxuXG5HaXZlbiB0aGlzLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFNITUVNYC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIGluIGhvdyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBoYW5kbGVzIGB2bV9mbGFnc2AuIEl0IGluY29ycmVjdGx5IHVzZWQgdGhlIFZNQSdzIGZsYWdzIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIG9uZXMsIHdoaWNoIGNhdXNlZCBwcm9ibGVtcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChsaWtlIHdpdGggYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKS4gVGhpcyBjb3VsZCBibG9jayBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzIGJlY2F1c2UgdGhlIFZNQSBmbGFncyB3ZXJlIG5vdCB1cGRhdGVkIHByb3Blcmx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIGlzIHN0YXRpYy5cblllcCwgYHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCAuLi4pYFxuU28gd2Ugc2hvdWxkbid0IGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzLlxuXG5BbmQgY29uZmlybSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBub3Qgc3RhdGljLiBPa2F5LCBhbGwgdGhlIGtleSBlbGVtZW50cyBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzo1Mi4zNDg2MTQ3MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA0NDQzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0xNT1leHRlcm4gdm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MTY6ZXh0ZXJuIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMTctXFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9Mzg9c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQwLX1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDItXFx0XFx0XFx0XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxcbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaD0xODE9c3RhdGljIGlubGluZSBib29sIG1wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODUtXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjE4NjpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4Ny1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjUzLjcyOTA2NDExNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM5MDAzOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBTdGF0aWMgRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgc28gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gVGltZSB0byBjb25maXJtIHRoYXQuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXNuJ3Qgc3RhdGljIGVpdGhlci4gR290dGEgbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgYXJlIHByb3Blcmx5IGV4cG9zZWQsIGdpdmVuIHRoZWlyIHJvbGVzIGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJ3MgaHVnZXBhZ2UgbWFuYWdlbWVudC4gSSdtIGRvdWJsZS1jaGVja2luZyBiZWNhdXNlIHRoZXNlIGRlY2xhcmF0aW9ucywgb3IgbGFjayB0aGVyZW9mLCBjYW4gaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBkaWZmZXJlbnQgbW9kdWxlcyBpbnRlcmFjdCB3aXRoIHRoZSB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0uIFdlIGNhbid0IGhhdmUgYW55IG9mIHRoZXNlIGFzc3VtcHRpb25zIGJyZWFrIGRvd24gZHVlIHRvIHN0YXRpYyBzY29wZSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDM6NTcuNTY4MDcwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNTk3MjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaHVnZXBhZ2VfbWFkdmlzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTk9Y2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEwLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMTppbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MDI9c3RhdGljIGlubGluZSBib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTI6c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTMtXFx0XFx0XFx0XFx0ICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQ5LVxcbm1tL2todWdlcGFnZWQuYzo0NTA6aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cXHRcXHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzo1OS4wODQwNDc2OTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxNjI2NzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBIdWdlIFBhZ2UgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHRoYXQgYGh1Z2VwYWdlX21hZHZpc2VgIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBzb21lIG1lbnRhbCBmbGFncy4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICpjaGFuZ2VzKiwgbm90IGEgZml4ZWQgY29uc3RhbnQuIE5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZG9lc24ndCBzaGFyZSB0aGF0IHN0YXRpYyBjaGFyYWN0ZXJpc3RpYy4gVW5kZXJzdGFuZGluZyBpZiB0aGF0IG9uZSBpcyB2YXJpYWJsZSBvciBub3QsIGlzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBncmFzcGluZyB0aGUgZHluYW1pYyBhbGxvY2F0aW9uIHNjaGVtZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCdzIHRoZSBjYXNlLiBHb3R0YSBzb2xpZGlmeSB0aGF0IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTE4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDEuOTAwMzE4ODQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzMTA2Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDAtXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDMuMzMzNDI5ODc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTI5MTQyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCAqaXNuJ3QqIGEgc3RhdGljIHZhbHVlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgYXMgSSBkZWx2ZSBpbnRvIHRoaXMuXG5cblRoZSBrZXkgYXNwZWN0cyBoZXJlIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgdGhlIGFmb3JlbWVudGlvbmVkIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IHRoaXMgY2hhbmdlIHRvdWNoZXMuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTSE1FTWAuXG5cbkVzc2VudGlhbGx5LCB3aGF0J3MgaGFwcGVuaW5nIGlzIGEgZml4IGZvciBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBjb3JyZWN0cyBhbiBpbmNvcnJlY3QgdXNlIG9mIGB2bWEtXHUwMDNldm1fZmxhZ3NgIHdpdGhpbiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgdXNpbmcgaW5zdGVhZCB0aGUgcHJvdmlkZWQgYHZtX2ZsYWdzYC4gVGhpcyBmaXhlcyB0aGUgcHJvYmxlbXMgdGhhdCBjYW4gYXJpc2Ugd2hlbiBgdm1fZmxhZ3NgIGFyZSB1cGRhdGVkIHRocm91Z2ggbWVjaGFuaXNtcyBsaWtlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBhbmQgdGhlIFZNQSdzIGZsYWdzIGhhdmVuJ3QgYmVlbiBmdWxseSBzeW5jaHJvbml6ZWQsIHByZXZlbnRpbmcgYGtodWdlcGFnZWRgIGZyb20gb3BlcmF0aW5nIGVmZmVjdGl2ZWx5IG9uIHNoYXJlZCBtZW1vcnkgVk1Bcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNvcnJlY3Rpb24gcmlnaHQgaW4gdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBsb2dpYywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQncyB0aGUga2luZCBvZiBzdWJ0bGUgZWRnZSBjYXNlIHRoYXQgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYyLCJPdXRwdXRUb2tlbnMiOjIwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNDowOS4wODYzNDYzMzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQzODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwiaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXFx1MDAzZXZtX2ZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBgdm1fZmxhZ3NgLiBUaGlzIGNhdXNlZCBpc3N1ZXMgd2hlbiBgdm1fZmxhZ3NgIHdlcmUgdXBkYXRlZCAoZS5nLiwgdmlhIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCkgYnV0IHRoZSBWTUEncyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIixcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJodWdlcGFnZV9tYWR2aXNlXCIsXG4gICAgXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluY29ycmVjdGx5IHVzZWQgYHZtYS1cXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSdzIGZsYWdzIGhhZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLCBwcmV2ZW50aW5nIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNDowOS4xNjE3OTA0NzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM0Mjk4Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDkuMTYyMjU5NzQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1NzMzODI1MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXFx1MDAzZXZtX2ZsYWdzIDogMGApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA4OjAyOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5pbmRleCA1NjYzZGZmNTMxODZlLi4zMjEwMTdlMGZkNjMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMjcsMTMgKzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxuIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi1cdFx0XHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7XG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuK1x0XHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xuIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi1cdFx0XHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHBnb2ZmX3QgaW5kZXgsXG4rXHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLjcwZjU3ZDcwMDczOTEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTg3LDcgKzE4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKi9cbiBcdGlmICghaW5fcGYgXHUwMDI2XHUwMDI2IHNobWVtX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUpKVxuIFx0XHRyZXR1cm4gb3JkZXJzIFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSksXG4tXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbitcdFx0XHRcdFx0XHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbiBcdFx0XHRcdFx0XHQgICBmb3JjZWRfY29sbGFwc2UpO1xuIFxuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmYxYWQ1NDU2YWNhMyAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0xODM0LDEyICsxODM0LDExIEBAIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuLVx0XHRcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbitcdFx0cGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpO1xuIFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDA7XG4gXHR1bnNpZ25lZCBpbnQgZ2xvYmFsX29yZGVycztcbiBcbiBcdGlmICh0aHBfZGlzYWJsZWRfYnlfaHcoKSB8fCAodm1hIFx1MDAyNlx1MDAyNiB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIHNobWVtX2h1Z2VfZm9yY2UpKSlcbkBAIC0yNDMwLDYgKzI0MjksNyBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0Z2ZwX3QgZ2ZwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdm1fZmF1bHRfdCAqZmF1bHRfdHlwZSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZiA/IHZtZi1cdTAwM2V2bWEgOiBOVUxMO1xuK1x0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDA7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICpmYXVsdF9tbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgZXJyb3I7XG5AQCAtMjUwNyw3ICsyNTA3LDggQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHR9XG4gXG4gXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xuLVx0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIGluZGV4LCB3cml0ZV9lbmQsIGZhbHNlKTtcbitcdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCB2bV9mbGFncywgaW5kZXgsXG4rXHRcdFx0XHRcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XG4gXHRpZiAob3JkZXJzIFx1MDAzZSAwKSB7XG4gXHRcdGdmcF90IGh1Z2VfZ2ZwO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDkuMTYyMjYwOTA2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODgyNDk0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgYHZtX2ZsYWdzX3Qgdm1fZmxhZ3NgIGFyZ3VtZW50IGluIGBpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCBgbW0vc2htZW0uY2AuIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGNhbGxlcnMgYXJlIG5vdyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHRoaXMgYHZtX2ZsYWdzYCB2YWx1ZS5cblxuSSB3YXMganVzdCBsb29raW5nIGF0IGBtbS9zaG1lbS5jYCBhbmQgcmVtZW1iZXIgaG93IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdhcyB3b3JraW5nOiBpdCB3YXMgcHJldmlvdXNseSBjYWxjdWxhdGluZyBgdm1fZmxhZ3NgIGZyb20gdGhlIGB2bWFgIGlmIGl0IGV4aXN0ZWQuIFRoZSBjaGFuZ2UgZWxpbWluYXRlcyB0aGlzIGludGVybmFsIGNhbGN1bGF0aW9uIGFuZCByZWxpZXMgb24gYSBwYXNzZWQtaW4gdmFsdWUuXG5cbk5vdywgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGRvaW5nIHRoZSBwYXNzaW5nLCBhbmQgaW4gYG1tL3NobWVtLmNgLCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgc3RpbGwgZG9pbmcgdGhlIGNhbGN1bGF0aW9uIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGZ1bmN0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgem9vbSBpbiBvbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFnYWluIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSXQgaXMgcGFzc2luZyBgdm1fZmxhZ3NgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYHZtX2ZsYWdzYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkLiBJcyBpdCBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uLCBvciBkb2VzIGl0IGluaXRpYWxpemUgaXQgbG9jYWxseT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGl0c2VsZiB0byBiZSBzdXJlLiBBbHJpZ2h0LCB0aW1lIHRvIG9wZW4gdXAgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNDoxNS4xNTA1MTI4NDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ5MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA0OjE1LjE5NDk2OTY2NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzAxMDg5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXJndW1lbnQgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyB0YWtpbmcgYHZtX2ZsYWdzX3Qgdm1fZmxhZ3NgIGFzIGFuIGFyZ3VtZW50LiBUaGF0IG1lYW5zIGB2bV9mbGFnc2AgaXMgYmVpbmcgcGFzc2VkIGRvd24sIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UuIFRoaXMgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgaXQncyBzaW1wbHkgcGFzc2luZyBgdm1fZmxhZ3NgIGV4cGxpY2l0bHkuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBleHRyYWN0aW5nIGl0IGZyb20gYHZtYS1cdTAwM2V2bV9mbGFnc2AgaW5zaWRlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLlxuXG5UaGlzIGNoYW5nZSBsaWtlbHkgYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHVzYWdlOiBtYXliZSBjYWxsZXJzIG5vdyBjYW4gcGFzcyBtb2RpZmllZCBgdm1fZmxhZ3NgLCBoYW5kbGUgY2FzZXMgd2hlcmUgYHZtYWAgbWlnaHQgYmUgTlVMTCBidXQgYHZtX2ZsYWdzYCBpcyBzdGlsbCBrbm93biwgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRob3VnaC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUncyBubyBzdWJ0bGUgaW50cm9kdWN0aW9uIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW55d2hlcmUuIFNjYW5uaW5nIGBtbS9zaG1lbS5jYCwgSSBzZWUgYHZtX2ZsYWdzYCBpcyBpbml0aWFsaXplZCB0byBgdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMGAsIHNvIGl0J3MgaGFuZGxlZC4gU2ltaWxhcmx5LCBvdmVyIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYHZtX2ZsYWdzYCBpcyBhbiBhcmd1bWVudC4gSXQncyBzYWZlLlxuXG5UaGlzIGlzIGp1c3QgYSByZWZhY3RvcmluZyBvZiBmdW5jdGlvbiBhcmd1bWVudHMsIGEgY2xlYW5lciB3YXkgdG8gcGFzcyB0aGUgZmxhZ3MgYXJvdW5kLiBUaGVyZSdzIG5vIHdheSB0aGlzIGludHJvZHVjZXMgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIHNlbmRzIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gSXQgaXMgc2FmZS4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5MywiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MjQuODk2MDYyODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgZnVuY3Rpb24gdG8gdGFrZSBgdm1fZmxhZ3NgIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIGB2bWFgIHBvaW50ZXIgaW5zaWRlIHRoZSBmdW5jdGlvbi4gQWxsIHBhc3NlZCBgdm1fZmxhZ3NgIHZhbHVlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYHZtYSA/IHZtYS1cXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXFx1MDAzZXZtX2ZsYWdzIDogMGApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc445n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 07:21:21 +0000 UTC FinishedAt: 2026-08-17 08:04:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "f7b93e92-140e-4f6f-a839-ea46a8cf3ae7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_allowable_huge_orders", "__thp_vma_allowable_orders", "hugepage_madvise", "khugepaged_enter_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzJiMzNDssCiAgICAmIzM0O19fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAgICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaW5jb3JyZWN0bHkgdXNlZCBgdm1hLVx1MDAzZXZtX2ZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBgdm1fZmxhZ3NgLiBUaGlzIGNhdXNlZCBpc3N1ZXMgd2hlbiBgdm1fZmxhZ3NgIHdlcmUgdXBkYXRlZCAoZS5nLiwgdmlhIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCkgYnV0IHRoZSBWTUEmIzM5O3MgZmxhZ3MgaGFkIG5vdCB5ZXQgYmVlbiBjb21taXR0ZWQsIHByZXZlbnRpbmcgYGtodWdlcGFnZWRgIGZyb20gcHJvcGVybHkgdHJhY2tpbmcgYW5kIGNvbGxhcHNpbmcgc2htZW0gVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBsb2dpYywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZTMwYzFiYThlMjMyZGE3NWVhNjc5MzU4Y2Q0ZWI3ZjA1YTNkNDYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDI6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5pbmRleCA1NjYzZGZmNTMxODZlLi4zMjEwMTdlMGZkNjMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMjcsMTMgJiM0MzsxMjcsMTMgQEAgaW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xuJiM0MztcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzQzO1x0XHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xuIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi1cdFx0XHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbiYjNDM7XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLCBwZ29mZl90IGluZGV4LFxuJiM0MztcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uNzBmNTdkNzAwNzM5MSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xODcsNyAmIzQzOzE4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKi9cbiBcdGlmICghaW5fcGYgXHUwMDI2XHUwMDI2IHNobWVtX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUpKVxuIFx0XHRyZXR1cm4gb3JkZXJzIFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSksXG4tXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsXG4gXHRcdFx0XHRcdFx0ICAgZm9yY2VkX2NvbGxhcHNlKTtcbiBcbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjZmMWFkNTQ1NmFjYTMgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMTgzNCwxMiAmIzQzOzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4mIzQzO1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjNDM7XHRcdHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcbiBcdHVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwO1xuIFx0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7XG4gXG4gXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXG5AQCAtMjQzMCw2ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLVx1MDAzZXZtYSA6IE5VTEw7XG4mIzQzO1x0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDA7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICpmYXVsdF9tbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgZXJyb3I7XG5AQCAtMjUwNyw3ICYjNDM7MjUwNyw4IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0fVxuIFxuIFx0LyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi9cbi1cdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCBpbmRleCwgd3JpdGVfZW5kLCBmYWxzZSk7XG4mIzQzO1x0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIHZtX2ZsYWdzLCBpbmRleCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XG4gXHRpZiAob3JkZXJzIFx1MDAzZSAwKSB7XG4gXHRcdGdmcF90IGh1Z2VfZ2ZwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7LAogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluY29ycmVjdGx5IHVzZWQgYHZtYS1cdTAwM2V2bV9mbGFnc2AgaW5zdGVhZCBvZiB0aGUgZXhwbGljaXRseSBwYXNzZWQgYHZtX2ZsYWdzYC4gVGhpcyBjYXVzZWQgaXNzdWVzIHdoZW4gYHZtX2ZsYWdzYCB3ZXJlIHVwZGF0ZWQgKGUuZy4sIHZpYSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWApIGJ1dCB0aGUgVk1BJiMzOTtzIGZsYWdzIGhhZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLCBwcmV2ZW50aW5nIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA4OjAyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IDU2NjNkZmY1MzE4NmUuLjMyMTAxN2UwZmQ2MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKQEAgLTEyNywxMyAmIzQzOzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU0hNRU0pCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCXBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiBib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCwKLQkJCQlsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCwKJiM0MzsJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLjcwZjU3ZDcwMDczOTEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTg3LDcgJiM0MzsxODcsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqLwogCWlmICghaW5fcGYgJmFtcDsmYW1wOyBzaG1lbV9maWxlKHZtYS0mZ3Q7dm1fZmlsZSkpCiAJCXJldHVybiBvcmRlcnMgJmFtcDsgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLSZndDt2bV9maWxlKSwKLQkJCQkJCSAgIHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiYjNDM7CQkJCQkJICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiAJCQkJCQkgICBmb3JjZWRfY29sbGFwc2UpOwogCiAJaWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjZmMWFkNTQ1NmFjYTMgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTgzNCwxMiAmIzQzOzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKQogfQogCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLAomIzQzOwkJcGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpOwogCXVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTsKLQl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJdW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7CiAKIAlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSAmYW1wOyZhbXA7IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKQpAQCAtMjQzMCw2ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQlnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLSZndDt2bWEgOiBOVUxMOwomIzQzOwl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJc3RydWN0IG1tX3N0cnVjdCAqZmF1bHRfbW07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlpbnQgZXJyb3I7CkBAIC0yNTA3LDcgJiM0MzsyNTA3LDggQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJfQogCiAJLyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi8KLQlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpOwomIzQzOwlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LAomIzQzOwkJCQkJICAgICB3cml0ZV9lbmQsIGZhbHNlKTsKIAlpZiAob3JkZXJzICZndDsgMCkgewogCQlnZnBfdCBodWdlX2dmcDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gbW9kaWZ5IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhhdCBpdCBub3cgdGFrZXMgYHZtX2ZsYWdzYCBhcyBhbiBhcmd1bWVudCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gZXh0cmFjdGluZyBpdCBmcm9tIHRoZSBgdm1hYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHdlJiMzOTtyZSBleHBsaWNpdGx5IHBhc3NpbmcgdGhlIGZsYWdzIG5vdy4KCkkgc2VlIHRoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIHVzZXMgYHZtYSA/IHZtYS0mZ3Q7dm1fZmxhZ3MgOiAwYC4gQWgsIGhhbmcgb24sIGxldCBtZSBkb3VibGUtY2hlY2sgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIE9rYXksIHllcywgaXQgZ2V0cyBgdm1hYCBmcm9tIGB2bWZgLCBhbmQgdGhlbiBjb3JyZWN0bHkgcHVsbHMgb3V0IGB2bV9mbGFnc2AgdXNpbmcgdGhlIHRlcm5hcnkgb3BlcmF0b3I6CgpgYGBjCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZiA/IHZtZi0mZ3Q7dm1hIDogTlVMTDsKJiM0MzsJdm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS0mZ3Q7dm1fZmxhZ3MgOiAwOwpgYGAKCkFuZCB0aGVuLCBpdCBwYXNzZXMgYHZtX2ZsYWdzYCBkb3duIHRoZSBsaW5lLiBJIGFtIGZvbGxvd2luZyB0aGlzIHBhdGguIEluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIHRoZSBgdm1fZmxhZ3NgIGFyZSBleHBsaWNpdGx5IHBhc3NlZC4gR3JlYXQuCgpCdXQsIHdhaXQuLi4gbGV0IG1lIHJlLWNoZWNrIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIEFoLCBJIHNlZSBpdCBub3cuCgpgYGBjCiAJaWYgKCFpbl9wZiAmYW1wOyZhbXA7IHNobWVtX2ZpbGUodm1hLSZndDt2bV9maWxlKSkKIAkJcmV0dXJuIG9yZGVycyAmYW1wOyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtJmd0O3ZtX2ZpbGUpLAotCQkJCQkJICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCwKJiM0MzsJCQkJCQkgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCwKIAkJCQkJCSAgIGZvcmNlZF9jb2xsYXBzZSk7CmBgYAoKT2theSwgaXQgKmFscmVhZHkqIHJlY2VpdmVzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQhIFRoaXMgc2ltcGxpZmllcyB0aGUgY2hhbmdlIGFuZCBtYWtlcyB0aGUgY29kZSBtb3JlIGV4cGxpY2l0IGFuZCByZWFkYWJsZSBieSByZW1vdmluZyB0aGUgaW1wbGljaXQgdXNlIG9mIGB2bWEtJmd0O3ZtX2ZsYWdzYC4gR29vZC4gVGhpcyBpcyBhIHNvbGlkLCBjbGVhbiBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk4LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk5OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDAtXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJc3N1ZXMgd2l0aCBIdWdlIFBhZ2UgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYW5kIEkgc2VlIGl0IHRha2VzIGB2bV9mbGFnc190IHZtX2ZsYWdzYCBhcyBhbiBhcmd1bWVudC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QuIEhvd2V2ZXIsIGl0JiMzOTtzIGhpdHRpbmcgbWUgdGhhdCBwcmV2aW91c2x5LCBzcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdhcyBncmFiYmluZyB0aGUgYHZtX2ZsYWdzYCBkaXJlY3RseSBmcm9tIGB2bWEtJmd0O3ZtX2ZsYWdzYC4gVGhhdCBzZWVtcyBhIGxpdHRsZS4uLiByaXNreSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4gVGhlIGlzc3VlIGlzLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgICpjb3VsZCogYmUgY2FsbGVkIHdpdGggYSBgdm1fZmxhZ3NgIHZhbHVlIHRoYXQmIzM5O3MgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB0aGUgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpYyBgdm1hYCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCEgVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgcHJldHR5IGduYXJseSBhbGxvY2F0aW9uIGlzc3VlcyBpZiB3ZSYjMzk7cmUgbm90IGNhcmVmdWwuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB3aGVyZSBlbHNlIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdXNlZC4gSSBoYWQgYmV0dGVyIGdvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzIwPXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MzpcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQ0LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIyLVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlZXAgRGl2ZSBpbnRvIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIFRoaXMgdmFyaWFibGUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIHdpdGhpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250cm9scyB3aGljaCBvcmRlciBvZiBodWdlIHBhZ2VzIGFyZSBjb25zaWRlcmVkIHZhbGlkIHdpdGhpbiBhIHBhcnRpY3VsYXIgVk1BIGNvbnRleHQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjaGVja3MgYXJlIGluY29ycG9yYXRlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhcmNoaXRlY3R1cmUgbGltaXRhdGlvbnMgYXQgdGhpcyBwb2ludCwgb3IgbW9yZSBhYnN0cmFjdCBtZW1vcnkgbWFuYWdlbWVudCBjb25zdHJhaW50cz8gVGhpcyBsaWtlbHkgZGljdGF0ZXMgdGhlIGluaXRpYWwgc2l6ZSwgYW5kIGFueSBzdWJzZXF1ZW50IHNwbGl0dGluZyBvciBtZXJnaW5nIHRoYXQgbWlnaHQgYmUgZG9uZS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyB0aWVzIGludG8gbnVtYSBhd2FyZW5lc3M7IHRoZSBvcmRlciBzZWxlY3Rpb24gbWF5IGFsc28gYmUgaW5mbHVlbmNlZCBieSB0aGUgcGh5c2ljYWwgbWVtb3J5IGxheW91dC4gVGhlcmUgY291bGQgYmUgYSBoaWVyYXJjaHkgaW52b2x2ZWQsIG9yIGEgc2V0IG9mIHByaW9yaXRpZXMgYmFzZWQgb24gc3lzdGVtIHBhcmFtZXRlcnMgb3IgdXNlciBwcmVmZXJlbmNlcy4KCk15IGFpbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhlIGFsbG93ZWQgb3JkZXJzLiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgaW5mbHVlbmNpbmcgdGhlIGRlY2lzaW9uIHByb2Nlc3MgYW5kIGhvdyB0aGlzIGRlY2lzaW9uIGNhbiBiZSBtb2RpZmllZC4gSSYjMzk7bSBpbWFnaW5pbmcgYSBjb21wbGV4IGZsb3cgY2hhcnQgaGVyZSwgc3RhcnRpbmcgZnJvbSBpbml0aWFsIGNvbmRpdGlvbnMsIGFuZCBicmFuY2hpbmcgb2ZmIGJhc2VkIG9uIHZhcmlvdXMgY3JpdGVyaWEuIFdoYXQgYXJlIHRoZSBrZXkgZmFjdG9ycyB0aGF0IGxlYWQgdG8gZGlmZmVyZW50IGFsbG93YWJsZSBvcmRlciBjaG9pY2VzPyBJcyB0aGVyZSBhIGRlYnVnIGZsYWcgb3IgdHJhY2UgcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgPyBUaGF0IHdvdWxkIGJlIHVzZWZ1bC4gVWx0aW1hdGVseSwgYSBkZWVwIGRpdmUgaW50byB0aGlzIHZhcmlhYmxlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGtlcm5lbCYjMzk7cyBvdmVyYWxsIHN0cmF0ZWd5IGZvciBUSFAgYWxsb2NhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFZNQXMgYW5kIHRoZSBwcm9jZXNzJiMzOTtzIG1lbW9yeSBmb290cHJpbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xNDU5PXN0YXRpYyBpbnQgc2hvd19zbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3Ni1cdHNlcV9wcmludGYobSwgXCYjMzQ7VEhQZWxpZ2libGU6ICAgICU4dVxcblwmIzM0OyxcbmZzL3Byb2MvdGFza19tbXUuYzoxNDc3Olx0XHQgICAhIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX1NNQVBTLFxuZnMvcHJvYy90YXNrX21tdS5jLTE0NzgtXHRcdFx0XHRcdCAgICAgIFRIUF9PUkRFUlNfQUxMKSk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTA0LSNkZWZpbmUgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXIpIFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDU6XHQoISF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHlwZSwgQklUKG9yZGVyKSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDYtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzA0LS8qKlxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzA1OiAqIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyAtIGRldGVybWluZSBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3Igdm1hXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDYtICogQHZtYTogIHRoZSB2bSBhcmVhIHRvIGNoZWNrXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzE5PXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMyMDp1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMyMS1cdFx0XHRcdCAgICAgICB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MzpcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQ0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02MTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYyNC1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYyNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjI2LVx0XHRcdFx0XHR2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTk1LVx0XHQgKiBFbmZvcmNlIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMgYXMgbmVjZXNzYXJ5LiBBbm9ueW1vdXMgdm1hc1xubW0vaHVnZV9tZW1vcnkuYzoxOTY6XHRcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLlxubW0vaHVnZV9tZW1vcnkuYy0xOTctXHRcdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYz01NzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01ODQtXG5tbS9raHVnZXBhZ2VkLmM6NTg1Olx0cmV0dXJuIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MsIG9yZGVycyk7XG5tbS9raHVnZXBhZ2VkLmMtNTg2LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMDk5LVx0XHRyZXR1cm4gU0NBTl9BRERSRVNTX1JBTkdFO1xubW0va2h1Z2VwYWdlZC5jOjExMDA6XHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgdHlwZSwgQklUKG9yZGVyKSkpXG5tbS9raHVnZXBhZ2VkLmMtMTEwMS1cdFx0cmV0dXJuIFNDQU5fVk1BX0NIRUNLO1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMTA1LVx0ICpcbm1tL2todWdlcGFnZWQuYzoxMTA2Olx0ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkgbWF5IHJldHVybiB0cnVlIGZvciBxdWFsaWZpZWQgZmlsZVxubW0va2h1Z2VwYWdlZC5jLTExMDctXHQgKiB2bWFzLlxuLS1cbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDgyNC1cdCAqL1xubW0vbWVtb3J5LmM6NDgyNTpcdG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcbm1tL21lbW9yeS5jLTQ4MjYtXHRcdFx0XHRcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcbi0tXG5tbS9tZW1vcnkuYz01MzAyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTMyNC1cdCAqL1xubW0vbWVtb3J5LmM6NTMyNTpcdG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcbm1tL21lbW9yeS5jLTUzMjYtXHRcdFx0XHRcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGlzY3JlcGFuY2llcyBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AuIEl0IHNlZW1zIGxpa2UgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgbWlnaHQgYmUgY2FsbGluZyBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB3aXRoIGEgYHZtX2ZsYWdzYCBhcmd1bWVudCB0aGF0ICpjb3VsZCogZGlmZmVyIGZyb20gdGhlIGB2bWEtJmd0O3ZtX2ZsYWdzYCBhc3NvY2lhdGVkIHdpdGggdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIG9yIG92ZXJhbGwgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbiBiZWZvcmUgSSBnbyBmdXJ0aGVyLiBMZXQmIzM5O3MgZGlnIGludG8gYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB0aGVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRob3NlIGZsYWdzIG1pZ2h0IGRpdmVyZ2UgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFyZSBmb3Igb3VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCB0byBmdWxseSByZWFzb24gYWJvdXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9NTM4PXZvaWQgX19raHVnZXBhZ2VkX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL2todWdlcGFnZWQuYy01NzMtICovXG5tbS9raHVnZXBhZ2VkLmM6NTc0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01NzUtXHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxuLS1cbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5MC17XG5tbS9raHVnZXBhZ2VkLmM6NTkxOlx0cmV0dXJuIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xubW0va2h1Z2VwYWdlZC5jLTU5Mi19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE2MTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2NDEtXG5tbS9raHVnZXBhZ2VkLmM6MTY0MjpcdGVuYWJsZWRfb3JkZXJzID0gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xubW0va2h1Z2VwYWdlZC5jLTE2NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgT3JkZXIgQ29sbGFwc2luZyBMb2dpYyoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHBvcHBpbmcgdXAgYXMgYSBzdWJyb3V0aW5lIHdpdGhpbiBgY29sbGFwc2VfcG9zc2libGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcHJvYmFibHkga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBiZWhhdmlvciBvZiB0aGUgYWxnb3JpdGhtLiBTbywgSSBuZWVkIHRvIHpvb20gaW4gYW5kIGV4YW1pbmUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGNvbGxhcHNlX3Bvc3NpYmxlYCB0byBzZWUgaG93IGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGl0cyBpbnB1dCBhbmQgb3V0cHV0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgaXMgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBwcmlvcml0eSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX3Bvc3NpYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz01Mzg9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU3My0gKi9cbm1tL2todWdlcGFnZWQuYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU3NS1cdFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cbm1tL2todWdlcGFnZWQuYzo1ODg6c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTg5LVx0XHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcbm1tL2todWdlcGFnZWQuYy01OTAte1xubW0va2h1Z2VwYWdlZC5jOjU5MTpcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcbm1tL2todWdlcGFnZWQuYy01OTItfVxuLS1cbm1tL2todWdlcGFnZWQuYz01OTQ9dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTk3LVx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9WTV9IVUdFUEFHRSwgdm1hLVx1MDAzZXZtX21tKSBcdTAwMjZcdTAwMjYgaHVnZXBhZ2VfZW5hYmxlZCgpXG5tbS9raHVnZXBhZ2VkLmM6NTk4Olx0ICAgIFx1MDAyNlx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXG5tbS9raHVnZXBhZ2VkLmMtNTk5LVx0XHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVx1MDAzZXZtX21tKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYxMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTY0MS1cbm1tL2todWdlcGFnZWQuYzoxNjQyOlx0ZW5hYmxlZF9vcmRlcnMgPSBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHR2YV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtMTY0My1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjg1Mz1zdGF0aWMgdm9pZCBjb2xsYXBzZV9zY2FuX21tX3Nsb3QodW5zaWduZWQgaW50IHByb2dyZXNzX21heCxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjg5OC1cdFx0fVxubW0va2h1Z2VwYWdlZC5jOjI4OTk6XHRcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIFRWQV9LSFVHRVBBR0VEKSkge1xubW0va2h1Z2VwYWdlZC5jLTI5MDAtXHRcdFx0Y2MtXHUwMDNlcHJvZ3Jlc3MmIzQzOyYjNDM7O1xuLS1cbm1tL2todWdlcGFnZWQuYz0zMTk0PWludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjA2LVxubW0va2h1Z2VwYWdlZC5jOjMyMDc6XHRpZiAoIWNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFKSlcbm1tL2todWdlcGFnZWQuYy0zMjA4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAmIzM5O3MgQXJndW1lbnQqKgoKUmlnaHQsICp0aGF0JiMzOTtzKiBpdCEgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhY2NlcHRzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQuIEV4Y2VsbGVudC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIGFuZCBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgdXRpbGl6aW5nIHRob3NlIGB2bV9mbGFnc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGZsYWcgY29tYmluYXRpb25zLiBJcyBpdCB1c2luZyB0aGVtIGZvciBhbGxvY2F0aW9uIGhpbnRzPyBQcm90ZWN0aW9uIHNldHRpbmdzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZmxhZyBpbnRlcnByZXRhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIFZNQS4gVGhpcyBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBhcmd1bWVudCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBjb2RlLi4uIExldCYjMzk7cyBjaGVjayBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE1PWV4dGVybiB2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjE2OmV4dGVybiB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMTctXHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9Mzg9c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00MC19XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Mi1cdFx0XHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXHRcdHJldHVybiByZXQ7XG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTE1MzItXG4tLVxubW0va2h1Z2VwYWdlZC5jPTQ1MD1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDYxLVx0XHQgKi9cbm1tL2todWdlcGFnZWQuYzo0NjI6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTtcbm1tL2todWdlcGFnZWQuYy00NjMtXHRcdGJyZWFrO1xuLS1cbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5My1cbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01OTUtXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL3ZtYS5jPTg4OT1zdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxuLS1cbm1tL3ZtYS5jLTEwNzMtXHR2bWFfc2V0X2ZsYWdzX21hc2sodm1nLVx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcbm1tL3ZtYS5jOjEwNzQ6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTA3NS1cdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTE5NS1cdGlmICh2bWctXHUwMDNldGFyZ2V0IFx1MDAyNlx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XG5tbS92bWEuYzoxMTk2Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTE5Ny1cdFx0dm1nLVx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XG4tLVxubW0vdm1hLmM9MjYzND1zdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4tLVxubW0vdm1hLmMtMjY5MS1cdC8qXG5tbS92bWEuYzoyNjkyOlx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcbm1tL3ZtYS5jLTI2OTMtXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXG4tLVxubW0vdm1hLmMtMjY5NS1cdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxubW0vdm1hLmM6MjY5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMjY5Ny1cdCp2bWFwID0gdm1hO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaD0xODE9c3RhdGljIGlubGluZSBib29sIG1wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYilcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg1LVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjE4NjpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg3LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVEhQIEJ1ZyBpbiBzaG1lbSBhbmQga2h1Z2VwYWdlZCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCksIHNwZWNpZmljYWxseSB3aGVuIHRoZXkgaW50ZXJhY3Qgd2l0aCBga2h1Z2VwYWdlZGAgYW5kIHNoYXJlZCBtZW1vcnkgKGBzaG1lbWApLiBJJiMzOTt2ZSBub3RpY2VkIGEgcG90ZW50aWFsIGlzc3VlIGluIGhvdyBgdm1fZmxhZ3NgIGFyZSBoYW5kbGVkIGFjcm9zcyB2YXJpb3VzIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQuCgpUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBjYW4gYmUgY2FsbGVkIHdpdGggKmRpZmZlcmVudCogYHZtX2ZsYWdzYCB0aGFuIHdoYXQmIzM5O3MgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoYHZtYWApLiBGb3IgaW5zdGFuY2UsIGBodWdlcGFnZV9tYWR2aXNlYCBwYXNzZXMgdGhlICpuZXcqIGB2bV9mbGFnc2AgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBiZWZvcmUgdXBkYXRpbmcgYHZtYS0mZ3Q7dm1fZmxhZ3NgLiBUaGlzIG5ldyBzZXQgb2YgZmxhZ3MsIGNydWNpYWxseSwgcmVwcmVzZW50cyB0aGUgKmludGVuZGVkKiBzdGF0ZSBhZnRlciBhIGNoYW5nZSBsaWtlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYC4KClRoZSBjYWxsIGNoYWluIGlzIGNsZWFyOiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIC0mZ3Q7IGBjb2xsYXBzZV9wb3NzaWJsZWAgLSZndDsgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgLSZndDsgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgLSZndDsgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gVGhpcyBsYXN0IGZ1bmN0aW9uLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCB0aGVuIGNhbGxzIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgICppZiogdGhlIGB2bWFgIGNvcnJlc3BvbmRzIHRvIGEgYHNobWVtYCBmaWxlLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB1c2VkIGB2bWEtJmd0O3ZtX2ZsYWdzYCB0byBkZXRlcm1pbmUgaWYgVEhQIHdhcyBhbGxvd2VkLCBpbnN0ZWFkIG9mIHRoZSAqbmV3KiBgdm1fZmxhZ3NgIHRoYXQgd2FzIHBhc3NlZCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBidWcuCgpUaGlzIGNyZWF0ZXMgYSBzY2VuYXJpbyB3aGVyZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgaXMgY2FsbGVkIG9uIGEgYHNobWVtYCBWTUEuIFRoZSBuZXcgYHZtX2ZsYWdzYCB3b3VsZCBnZXQgYFZNX0hVR0VQQUdFYCBzZXQgYnkgYGh1Z2VwYWdlX21hZHZpc2VgLCBidXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2Agd291bGQgdXNlIHRoZSAqb2xkKiBgdm1hLSZndDt2bV9mbGFnc2AsIHdoaWNoIHdvdWxkbiYjMzk7dCBoYXZlIGBWTV9IVUdFUEFHRWAgc2V0LiBUaHVzLCBUSFAgc3VwcG9ydCB3b3VsZCBhcHBlYXIgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIFZNQS4KCkNvbnNlcXVlbnRseSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBtaWdodCBmYWlsIHRvIGVudGVyIHRoZSBWTUEgaW50byBga2h1Z2VwYWdlZGAuIFRoaXMgd291bGQgbWVhbiBraHVnZXBhZ2VkIHdvdWxkIG5vdCBjb2xsYXBzZSB0aGUgc2htZW0gVk1BIGFmdGVyIGBNQURWX0hVR0VQQUdFYCB1bnRpbCBzb21ldGhpbmcgZWxzZSB0cmlnZ2VyZWQgaXQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgZmxhdyB0aGF0IGNvdWxkIHByZXZlbnQgVEhQIGZyb20gZnVuY3Rpb25pbmcgY29ycmVjdGx5IG9uIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBpbiBzcGVjaWZpYyBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDk5PWNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTAtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MTE6aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVx0XHQgICAgIGludCBhZHZpY2UpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgdW5tYXBfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxMjpzdGF0aWMgaW5saW5lIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzEzLVx0XHRcdFx0ICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDktXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cdFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcbi0tXG5tbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDE4LVx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG5tbS9tYWR2aXNlLmM6MTQxOTpcdFx0ZXJyb3IgPSBodWdlcGFnZV9tYWR2aXNlKHZtYSwgXHUwMDI2bmV3X2ZsYWdzLCBiZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTQyMC1cdFx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtodWdlcGFnZWQgSW50ZXJhY3Rpb24gQnVnKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGxvb2tzIGxpa2UgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gbWlnaHQgYmUgcHJlc2VudCB3aGVuIHVzaW5nIGBNQURWX0hVR0VQQUdFYCBvbiBzaGFyZWQgbWVtb3J5IChzaG1lbSkgVk1BcyBhbmQgdGhlIGtlcm5lbCYjMzk7cyBga2h1Z2VwYWdlZGAgbWVjaGFuaXNtLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSBgaHVnZXBhZ2VfbWFkdmlzZWAgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCwgd2hpY2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY3JpdGljYWwgcGFydCBpcyB3aGF0IGhhcHBlbnMgKmluc2lkZSogYGh1Z2VwYWdlX21hZHZpc2VgLgoKSSBjb25maXJtZWQgdGhhdCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgLiBOb3csIHRoZSBpc3N1ZSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgd2l0aCB1cGRhdGVkIGB2bV9mbGFnc2AuIElmIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgICpzdWJzZXF1ZW50bHkqIHJlYWRzIHRoZSBvbGQgYHZtYS0mZ3Q7dm1fZmxhZ3NgLCBpdCB3b24mIzM5O3Qgc2VlIGBWTV9IVUdFUEFHRWAgc2V0LgoKTG9va2luZyBiYWNrLCBpZiBgaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzYCBpcyBub3Qgc2V0IGFuZCBgaHVnZV9zaG1lbV9vcmRlcnNfbWFkdmlzZWAgaXMsICBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCAqZG9lcyogY2hlY2sgYHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSlgLiAgQ3J1Y2lhbGx5LCBgdm1hX3RocF9kaXNhYmxlZGAgdGFrZXMgYHZtX2ZsYWdzYC4gT2theSwgbG9va2luZyBhdCB0aGUgY29kZSwgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaW4gYG1tL3NobWVtLmNgLCAqYmVmb3JlKiB0aGUgcGF0Y2gsIGl0IGV4dHJhY3RzIGB2bV9mbGFnc2AgZnJvbSBgdm1hLSZndDt2bV9mbGFnc2AuIFRodXMsIGBpZiAodm1fZmxhZ3MgJmFtcDsgVk1fSFVHRVBBR0UpYCAqd291bGQqIGJlIGZhbHNlISBUaGVyZWZvcmUsIHRoZSBgbWFza2Agd291bGQgKm5vdCogaW5jbHVkZSBgaHVnZV9zaG1lbV9vcmRlcnNfbWFkdmlzZWAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgcmV0dXJuaW5nIDAuICBUaGF0IG1lYW5zIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbmV2ZXIgZ2V0cyB0aGUgVk1BIHJlZ2lzdGVyZWQgd2l0aCBraHVnZXBhZ2VkLgoKSW4gZWZmZWN0LCB0aGlzIG1lYW5zIHRoYXQgYXBwbHlpbmcgYE1BRFZfSFVHRVBBR0VgIG9uIGEgc2htZW0gVk1BIG1pZ2h0IG5vdCBhY3R1YWxseSB0cmlnZ2VyIGtodWdlcGFnZWQgcHJvY2Vzc2luZyAqYmVjYXVzZSogb2YgdGhlIHRpbWluZyBvZiB0aGUgZmxhZyB1cGRhdGUuIEl0IGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgYnVnLgoKVGhlIGtleSBub3cgaXMgd2hldGhlciB0aGlzIGNvZGVwYXRoIGlzIHJlYWNoYWJsZS4gWWVzLCBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgb24gYSBzaG1lbSBWTUEgKmlzKiByZWFjaGFibGUsIGFuZCBga2h1Z2VwYWdlZGAgaXMgcnVubmluZywgc28gaXTigJlzIGRlZmluaXRlbHkgYSB2YWxpZCBhcmVhIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9uczogIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBjaGVja2luZyB0aGUgcmlnaHQgY29kZSBzZWN0aW9ucywgZXNwZWNpYWxseSBpbiB0aG9zZS4KTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hpY2ggb2YgdGhvc2UgYXJlIHN0YXRpYyBhbmQgd2hpY2ggYXJlIG5vdC4gT2sgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhcmUgYWxsIGV4cG9ydGVkLCBub3Qgc3RhdGljLiBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMzI9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtI2Vsc2VcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzNS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4OC1cdGlmICghaW5fcGYgXHUwMDI2XHUwMDI2IHNobWVtX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUpKVxubW0vaHVnZV9tZW1vcnkuYzoxODk6XHRcdHJldHVybiBvcmRlcnMgXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVx0XHRcdFx0XHRcdCAgIHZtYSwgdm1fZmxhZ3MsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuLS1cbm1tL3NobWVtLmM9MTgxOT1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpXG4tLVxubW0vc2htZW0uYy0xODM1LVxubW0vc2htZW0uYzoxODM2OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5tbS9zaG1lbS5jLTE4MzctXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbm1tL3NobWVtLmM9MjQyNz1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1MDktXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xubW0vc2htZW0uYzoyNTEwOlx0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIHZtX2ZsYWdzLCBpbmRleCxcbm1tL3NobWVtLmMtMjUxMS1cdFx0XHRcdFx0ICAgICB3cml0ZV9lbmQsIGZhbHNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGNvdmVyZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBmb3IgdGhpcyBzZXR1cCB0byBmdW5jdGlvbiBvcHRpbWFsbHksIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBleHBsaWNpdGx5IGRlZmluZSBhIGNvdXBsZSBvZiBrZXkgb3B0aW9ucy4gVGhlIGZpcnN0IGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGFsd2F5cyBsaWtlIHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhlc2Ugc2V0dGluZ3MuIFRoZW4sIHRoZXJlJiMzOTtzIGBDT05GSUdfU0hNRU1gLiBXaGlsZSBpdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGVzcGVjaWFsbHkgaW4gYSBzY2VuYXJpbyBsaWtlIHRoaXMsIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBJdCBqdXN0IG1ha2VzIHRoaW5ncyBjbGVhbmVyIGFuZCBtb3JlIHByZWRpY3RhYmxlLCBhbmQgSSBjYW4gYmUgc3VyZSBub3RoaW5nIHdlaXJkIGlzIGdvaW5nIG9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gYmUgY2VydGFpbi4gVGhhdCYjMzk7cyB0aGUgcHJpb3JpdHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxOTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIG9uIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgU2hhcmVkIE1lbW9yeSBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpSaWdodCwgc28gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHNldHRpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEhvd2V2ZXIsIGJhc2VkIG9uIGV4cGVyaWVuY2UgSSBzdHJvbmdseSBzdXNwZWN0IHNoYXJlZCBtZW1vcnkgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIEkga25vdyB0aGF0IGBTSE1FTWAgaXMgdmVyeSBsaWtlbHkgYW4gZXNzZW50aWFsIGNvbXBvbmVudCBpbiBvdXIgc2V0dXAuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvZiBUSFAgYW5kIHNoYXJlZCBtZW1vcnksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBsYXJnZSBwYWdlcyBhcmUgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gTXkgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9zaG1lbS5jYC4gTGV0JiMzOTtzIGhhdmUgYSBsb29rIGF0IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdpdGhpbiB0aGF0IG1vZHVsZS4gVGhpcyBmdW5jdGlvbiBob2xkcyB0aGUga2V5LCBiZWNhdXNlIGl0IHNob3VsZCBzcGVsbCBvdXQgZXhhY3RseSB3aGljaCBodWdlIHBhZ2Ugb3JkZXJzIGFyZSBzdXBwb3J0ZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyB3aGVuIHVzaW5nIHNoYXJlZCBtZW1vcnkuIFRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIHZpdGFsIGRldGFpbHMgb24gYW55IGxpbWl0YXRpb25zIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIEkgbmVlZCB0byBjb25zaWRlciB3aGVuIGZpbmUtdHVuaW5nIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xODgtXHRpZiAoIWluX3BmIFx1MDAyNlx1MDAyNiBzaG1lbV9maWxlKHZtYS1cdTAwM2V2bV9maWxlKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MTg5Olx0XHRyZXR1cm4gb3JkZXJzIFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSksXG5tbS9odWdlX21lbW9yeS5jLTE5MC1cdFx0XHRcdFx0XHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbi0tXG5tbS9zaG1lbS5jPTE4MTk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmMtMTgzNS1cbm1tL3NobWVtLmM6MTgzNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxubW0vc2htZW0uYy0xODM3LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5tbS9zaG1lbS5jPTI0Mjc9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yNTA5LVx0LyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi9cbm1tL3NobWVtLmM6MjUxMDpcdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCB2bV9mbGFncywgaW5kZXgsXG5tbS9zaG1lbS5jLTI1MTEtXHRcdFx0XHRcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRIUCBhbmQgU2htZW0gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEkmIzM5O20gZHJvcHBpbmcgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBhcyBpdCYjMzk7cyB0b28gZ2VuZXJpYzsgYGh1Z2VwYWdlX21hZHZpc2VgIGlzIGEgYmV0dGVyIGZpdC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXkgYXJlIHN0YXRpYy4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2A/IE5vcGUsIGl0JiMzOTtzIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhgLiBHb29kLiBOZXh0LCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgPyBBbHNvIGV4cG9ydGVkLCBmb3VuZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBgaHVnZXBhZ2VfbWFkdmlzZWA/IFllcCwgYWxzbyBleHBvcnRlZCBpbiB0aGUgc2FtZSBoZWFkZXIgZmlsZS4gRmluYWxseSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCwgd2hpY2ggaXMgaW4gYGluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oYC4gU28gZmFyLCBzbyBnb29kLgoKTGV0JiMzOTtzIGNoZWNrIGBodWdlcGFnZV9tYWR2aXNlYCBvbmUgbW9yZSB0aW1lLiBJdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9raHVnZXBhZ2VkLmNgIGFuZCBpcyBhbHNvIGV4cG9ydGVkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluIGBtbS9zaG1lbS5jYDoKYGBgYwp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLAoJCXBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKYGBgClllcywgaXQmIzM5O3Mgbm90IHN0YXRpYy4gU28sIHRoZSBrZXkgc3ltYm9scyBhcmUgY29uZmlybWVkIGFzOgpgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYApgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgCmBodWdlcGFnZV9tYWR2aXNlYApga2h1Z2VwYWdlZF9lbnRlcl92bWFgCgpHaXZlbiB0aGlzLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFNITUVNYC4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGJ1ZyBpbiBob3cgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaGFuZGxlcyBgdm1fZmxhZ3NgLiBJdCBpbmNvcnJlY3RseSB1c2VkIHRoZSBWTUEmIzM5O3MgZmxhZ3MgaW5zdGVhZCBvZiB0aGUgZXhwbGljaXRseSBwYXNzZWQgb25lcywgd2hpY2ggY2F1c2VkIHByb2JsZW1zIHdoZW4gYHZtX2ZsYWdzYCB3ZXJlIHVwZGF0ZWQgKGxpa2Ugd2l0aCBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWApLiBUaGlzIGNvdWxkIGJsb2NrIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMgYmVjYXVzZSB0aGUgVk1BIGZsYWdzIHdlcmUgbm90IHVwZGF0ZWQgcHJvcGVybHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBzaG1lbV9nZXRfZm9saW9fZ2ZwYCBpcyBzdGF0aWMuClllcCwgYHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCAuLi4pYApTbyB3ZSBzaG91bGRuJiMzOTt0IGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzLgoKQW5kIGNvbmZpcm0sIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgbm90IHN0YXRpYy4gT2theSwgYWxsIHRoZSBrZXkgZWxlbWVudHMgYXJlIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0xNT1leHRlcm4gdm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoxNjpleHRlcm4gdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTE3LVx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDAtfVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDItXHRcdFx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTU4OD1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxubW0va2h1Z2VwYWdlZC5jOjU5NDp2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU5NS1cdFx0XHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTE4MT1zdGF0aWMgaW5saW5lIGJvb2wgbXBvbF9lcXVhbChzdHJ1Y3QgbWVtcG9saWN5ICphLCBzdHJ1Y3QgbWVtcG9saWN5ICpiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODUtXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6MTg2OnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODctXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk0MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBTdGF0aWMgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIHNvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBUaW1lIHRvIGNvbmZpcm0gdGhhdC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBodWdlcGFnZV9tYWR2aXNlYCBpc24mIzM5O3Qgc3RhdGljIGVpdGhlci4gR290dGEgbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgYXJlIHByb3Blcmx5IGV4cG9zZWQsIGdpdmVuIHRoZWlyIHJvbGVzIGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJiMzOTtzIGh1Z2VwYWdlIG1hbmFnZW1lbnQuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIGJlY2F1c2UgdGhlc2UgZGVjbGFyYXRpb25zLCBvciBsYWNrIHRoZXJlb2YsIGNhbiBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IGRpZmZlcmVudCBtb2R1bGVzIGludGVyYWN0IHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbS4gV2UgY2FuJiMzOTt0IGhhdmUgYW55IG9mIHRoZXNlIGFzc3VtcHRpb25zIGJyZWFrIGRvd24gZHVlIHRvIHN0YXRpYyBzY29wZSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBodWdlcGFnZV9tYWR2aXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ5OT1jaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEwLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTExOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190ICp2bV9mbGFncyxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxMi1cdFx0ICAgICBpbnQgYWR2aWNlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MDI9c3RhdGljIGlubGluZSBib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTEtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTI6c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMy1cdFx0XHRcdCAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxuLS1cbm1tL2todWdlcGFnZWQuYz00MzQ9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDQ5LVxubW0va2h1Z2VwYWdlZC5jOjQ1MDppbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy00NTEtXHRcdCAgICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTE4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBIdWdlIFBhZ2UgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IGBodWdlcGFnZV9tYWR2aXNlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIHNvbWUgbWVudGFsIGZsYWdzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICpjaGFuZ2VzKiwgbm90IGEgZml4ZWQgY29uc3RhbnQuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGRvZXNuJiMzOTt0IHNoYXJlIHRoYXQgc3RhdGljIGNoYXJhY3RlcmlzdGljLiBVbmRlcnN0YW5kaW5nIGlmIHRoYXQgb25lIGlzIHZhcmlhYmxlIG9yIG5vdCwgaXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gc2NoZW1lLiBOZWVkIHRvIHZlcmlmeSB0aGF0JiMzOTtzIHRoZSBjYXNlLiBHb3R0YSBzb2xpZGlmeSB0aGF0IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Vuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTYyCgkJCQkJCQlvdXRwdXQ6IDIwOQoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgKmlzbiYjMzk7dCogYSBzdGF0aWMgdmFsdWUsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlciBhcyBJIGRlbHZlIGludG8gdGhpcy4KClRoZSBrZXkgYXNwZWN0cyBoZXJlIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgdGhlIGFmb3JlbWVudGlvbmVkIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IHRoaXMgY2hhbmdlIHRvdWNoZXMuCgpUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgU0hNRU1gLgoKRXNzZW50aWFsbHksIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGlzIGEgZml4IGZvciBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBjb3JyZWN0cyBhbiBpbmNvcnJlY3QgdXNlIG9mIGB2bWEtJmd0O3ZtX2ZsYWdzYCB3aXRoaW4gYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIHVzaW5nIGluc3RlYWQgdGhlIHByb3ZpZGVkIGB2bV9mbGFnc2AuIFRoaXMgZml4ZXMgdGhlIHByb2JsZW1zIHRoYXQgY2FuIGFyaXNlIHdoZW4gYHZtX2ZsYWdzYCBhcmUgdXBkYXRlZCB0aHJvdWdoIG1lY2hhbmlzbXMgbGlrZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgYW5kIHRoZSBWTUEmIzM5O3MgZmxhZ3MgaGF2ZW4mIzM5O3QgYmVlbiBmdWxseSBzeW5jaHJvbml6ZWQsIHByZXZlbnRpbmcgYGtodWdlcGFnZWRgIGZyb20gb3BlcmF0aW5nIGVmZmVjdGl2ZWx5IG9uIHNoYXJlZCBtZW1vcnkgVk1Bcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNvcnJlY3Rpb24gcmlnaHQgaW4gdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBsb2dpYywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQmIzM5O3MgdGhlIGtpbmQgb2Ygc3VidGxlIGVkZ2UgY2FzZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSYjMzk7cyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2VfbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSYjMzk7cyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA4OjAyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IDU2NjNkZmY1MzE4NmUuLjMyMTAxN2UwZmQ2MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKQEAgLTEyNywxMyAmIzQzOzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfU0hNRU0pCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywKJiM0MzsJCXBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7CiBib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCwKLQkJCQlsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpCiYjNDM7CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCwKJiM0MzsJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLjcwZjU3ZDcwMDczOTEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTg3LDcgJiM0MzsxODcsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqLwogCWlmICghaW5fcGYgJmFtcDsmYW1wOyBzaG1lbV9maWxlKHZtYS0mZ3Q7dm1fZmlsZSkpCiAJCXJldHVybiBvcmRlcnMgJmFtcDsgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLSZndDt2bV9maWxlKSwKLQkJCQkJCSAgIHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiYjNDM7CQkJCQkJICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsCiAJCQkJCQkgICBmb3JjZWRfY29sbGFwc2UpOwogCiAJaWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjZmMWFkNTQ1NmFjYTMgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTgzNCwxMiAmIzQzOzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKQogfQogCiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LAotCQkJCWxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSkKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLAomIzQzOwkJcGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpOwogCXVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTsKLQl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJdW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7CiAKIAlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSAmYW1wOyZhbXA7IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKQpAQCAtMjQzMCw2ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQlnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLSZndDt2bWEgOiBOVUxMOwomIzQzOwl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDA7CiAJc3RydWN0IG1tX3N0cnVjdCAqZmF1bHRfbW07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlpbnQgZXJyb3I7CkBAIC0yNTA3LDcgJiM0MzsyNTA3LDggQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJfQogCiAJLyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi8KLQlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpOwomIzQzOwlvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LAomIzQzOwkJCQkJICAgICB3cml0ZV9lbmQsIGZhbHNlKTsKIAlpZiAob3JkZXJzICZndDsgMCkgewogCQlnZnBfdCBodWdlX2dmcDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGB2bV9mbGFnc190IHZtX2ZsYWdzYCBhcmd1bWVudCBpbiBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgYG1tL3NobWVtLmNgLiBUaGUgaWRlYSBpcyB0aGF0IHRoZSBjYWxsZXJzIGFyZSBub3cgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGlzIGB2bV9mbGFnc2AgdmFsdWUuCgpJIHdhcyBqdXN0IGxvb2tpbmcgYXQgYG1tL3NobWVtLmNgIGFuZCByZW1lbWJlciBob3cgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2Agd2FzIHdvcmtpbmc6IGl0IHdhcyBwcmV2aW91c2x5IGNhbGN1bGF0aW5nIGB2bV9mbGFnc2AgZnJvbSB0aGUgYHZtYWAgaWYgaXQgZXhpc3RlZC4gVGhlIGNoYW5nZSBlbGltaW5hdGVzIHRoaXMgaW50ZXJuYWwgY2FsY3VsYXRpb24gYW5kIHJlbGllcyBvbiBhIHBhc3NlZC1pbiB2YWx1ZS4KCk5vdywgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGRvaW5nIHRoZSBwYXNzaW5nLCBhbmQgaW4gYG1tL3NobWVtLmNgLCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgc3RpbGwgZG9pbmcgdGhlIGNhbGN1bGF0aW9uIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGZ1bmN0aW9uLgoKV2FpdCBhIHNlY29uZCwgbGV0IG1lIHpvb20gaW4gb24gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBhZ2FpbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEl0IGlzIHBhc3NpbmcgYHZtX2ZsYWdzYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGB2bV9mbGFnc2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZC4gSXMgaXQgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiwgb3IgZG9lcyBpdCBpbml0aWFsaXplIGl0IGxvY2FsbHk/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBpdHNlbGYgdG8gYmUgc3VyZS4gQWxyaWdodCwgdGltZSB0byBvcGVuIHVwIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTMKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXJndW1lbnQgUmVmYWN0b3JpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIHRha2luZyBgdm1fZmxhZ3NfdCB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQuIFRoYXQgbWVhbnMgYHZtX2ZsYWdzYCBpcyBiZWluZyBwYXNzZWQgZG93biwgd2hpY2ggaXMgdGhlIGNydXggb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgaXQmIzM5O3Mgc2ltcGx5IHBhc3NpbmcgYHZtX2ZsYWdzYCBleHBsaWNpdGx5LiBQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgZXh0cmFjdGluZyBpdCBmcm9tIGB2bWEtJmd0O3ZtX2ZsYWdzYCBpbnNpZGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AuCgpUaGlzIGNoYW5nZSBsaWtlbHkgYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHVzYWdlOiBtYXliZSBjYWxsZXJzIG5vdyBjYW4gcGFzcyBtb2RpZmllZCBgdm1fZmxhZ3NgLCBoYW5kbGUgY2FzZXMgd2hlcmUgYHZtYWAgbWlnaHQgYmUgTlVMTCBidXQgYHZtX2ZsYWdzYCBpcyBzdGlsbCBrbm93biwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgdGhvdWdoLiBJIG5lZWQgdG8gY29uZmlybSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgaW50cm9kdWN0aW9uIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW55d2hlcmUuIFNjYW5uaW5nIGBtbS9zaG1lbS5jYCwgSSBzZWUgYHZtX2ZsYWdzYCBpcyBpbml0aWFsaXplZCB0byBgdm1hID8gdm1hLSZndDt2bV9mbGFncyA6IDBgLCBzbyBpdCYjMzk7cyBoYW5kbGVkLiBTaW1pbGFybHksIG92ZXIgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgdm1fZmxhZ3NgIGlzIGFuIGFyZ3VtZW50LiBJdCYjMzk7cyBzYWZlLgoKVGhpcyBpcyBqdXN0IGEgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb24gYXJndW1lbnRzLCBhIGNsZWFuZXIgd2F5IHRvIHBhc3MgdGhlIGZsYWdzIGFyb3VuZC4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbnkgaW5mb3JtYXRpb24gbGVha3Mgb3Igc2VuZHMgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBzYWZlLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgZnVuY3Rpb24gdG8gdGFrZSBgdm1fZmxhZ3NgIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIGB2bWFgIHBvaW50ZXIgaW5zaWRlIHRoZSBmdW5jdGlvbi4gQWxsIHBhc3NlZCBgdm1fZmxhZ3NgIHZhbHVlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDBgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjoyNS4zMzY2NjA0NzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1NTk0Mzc4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwiaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgZnVuY3Rpb24gdG8gdGFrZSBgdm1fZmxhZ3NgIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIGB2bWFgIHBvaW50ZXIgaW5zaWRlIHRoZSBmdW5jdGlvbi4gQWxsIHBhc3NlZCBgdm1fZmxhZ3NgIHZhbHVlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYHZtYSA/IHZtYS1cXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXFx1MDAzZXZtX2ZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBgdm1fZmxhZ3NgLiBUaGlzIGNhdXNlZCBpc3N1ZXMgd2hlbiBgdm1fZmxhZ3NgIHdlcmUgdXBkYXRlZCAoZS5nLiwgdmlhIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCkgYnV0IHRoZSBWTUEncyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6MjUuMzM2NjY0NDc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1OTc2OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwODowMjoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcXG5pbmRleCA1NjYzZGZmNTMxODZlLi4zMjEwMTdlMGZkNjMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbkBAIC0xMjcsMTMgKzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7XFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbitcXHRcXHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xcbiBib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi1cXHRcXHRcXHRcXHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLCBwZ29mZl90IGluZGV4LFxcbitcXHRcXHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi43MGY1N2Q3MDA3MzkxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTE4Nyw3ICsxODcsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpbl9wZiBcXHUwMDI2XFx1MDAyNiBzaG1lbV9maWxlKHZtYS1cXHUwMDNldm1fZmlsZSkpXFxuIFxcdFxcdHJldHVybiBvcmRlcnMgXFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXFx1MDAzZXZtX2ZpbGUpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgZm9yY2VkX2NvbGxhcHNlKTtcXG4gXFxuIFxcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmYxYWQ1NDU2YWNhMyAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0xODM0LDEyICsxODM0LDExIEBAIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcXG4rXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuK1xcdFxcdHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVxcdTAwM2V2bV9mbGFncyA6IDA7XFxuIFxcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xcbiBcXG4gXFx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8ICh2bWEgXFx1MDAyNlxcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXFxuQEAgLTI0MzAsNiArMjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRcXHRnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLVxcdTAwM2V2bWEgOiBOVUxMO1xcbitcXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVxcdTAwM2V2bV9mbGFncyA6IDA7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKmZhdWx0X21tO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRpbnQgZXJyb3I7XFxuQEAgLTI1MDcsNyArMjUwNyw4IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xcbi1cXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xcbitcXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHdyaXRlX2VuZCwgZmFsc2UpO1xcbiBcXHRpZiAob3JkZXJzIFxcdTAwM2UgMCkge1xcbiBcXHRcXHRnZnBfdCBodWdlX2dmcDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAyOjI2Ljc1MzI5NDU4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjQwODQ5Mjk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIixcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJodWdlcGFnZV9tYWR2aXNlXCIsXG4gICAgXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluY29ycmVjdGx5IHVzZWQgYHZtYS1cXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSdzIGZsYWdzIGhhZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLCBwcmV2ZW50aW5nIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZTMwYzFiYThlMjMyZGE3NWVhNjc5MzU4Y2Q0ZWI3ZjA1YTNkNDYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDI6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbmluZGV4IDU2NjNkZmY1MzE4NmUuLjMyMTAxN2UwZmQ2MzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuQEAgLTEyNywxMyArMTI3LDEzIEBAIGludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuLVx0XHRcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKTtcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4rXHRcdHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7XG4gYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuLVx0XHRcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCxcbitcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uNzBmNTdkNzAwNzM5MSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xODcsNyArMTg3LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqL1xuIFx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG4gXHRcdHJldHVybiBvcmRlcnMgXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSxcbi1cdFx0XHRcdFx0XHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuK1x0XHRcdFx0XHRcdCAgIHZtYSwgdm1fZmxhZ3MsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuIFx0XHRcdFx0XHRcdCAgIGZvcmNlZF9jb2xsYXBzZSk7XG4gXG4gXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkge1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi42ZjFhZDU0NTZhY2EzIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTE4MzQsMTIgKzE4MzQsMTEgQEAgYm9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuK1x0XHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4gXHR1bnNpZ25lZCBsb25nIHdpdGhpbl9zaXplX29yZGVycyA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc193aXRoaW5fc2l6ZSk7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbiBcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xuIFxuIFx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8ICh2bWEgXHUwMDI2XHUwMDI2IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKVxuQEAgLTI0MzAsNiArMjQyOSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRnZnBfdCBnZnAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB2bV9mYXVsdF90ICpmYXVsdF90eXBlKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mID8gdm1mLVx1MDAzZXZtYSA6IE5VTEw7XG4rXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKmZhdWx0X21tO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCBlcnJvcjtcbkBAIC0yNTA3LDcgKzI1MDcsOCBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdH1cbiBcbiBcdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXG4tXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xuK1x0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIHZtX2ZsYWdzLCBpbmRleCxcbitcdFx0XHRcdFx0ICAgICB3cml0ZV9lbmQsIGZhbHNlKTtcbiBcdGlmIChvcmRlcnMgXHUwMDNlIDApIHtcbiBcdFx0Z2ZwX3QgaHVnZV9nZnA7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjoyNi43NTMyOTYwNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzgyNDI5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIG1vZGlmeSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoYXQgaXQgbm93IHRha2VzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQgZGlyZWN0bHksIHJhdGhlciB0aGFuIGV4dHJhY3RpbmcgaXQgZnJvbSB0aGUgYHZtYWAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyB3ZSdyZSBleHBsaWNpdGx5IHBhc3NpbmcgdGhlIGZsYWdzIG5vdy5cblxuSSBzZWUgdGhhdCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgdXNlcyBgdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMGAuIEFoLCBoYW5nIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBpdCdzIGJlaW5nIHVzZWQuIE9rYXksIHllcywgaXQgZ2V0cyBgdm1hYCBmcm9tIGB2bWZgLCBhbmQgdGhlbiBjb3JyZWN0bHkgcHVsbHMgb3V0IGB2bV9mbGFnc2AgdXNpbmcgdGhlIHRlcm5hcnkgb3BlcmF0b3I6XG5cbmBgYGNcblx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYgPyB2bWYtXHUwMDNldm1hIDogTlVMTDtcbitcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwO1xuYGBgXG5cbkFuZCB0aGVuLCBpdCBwYXNzZXMgYHZtX2ZsYWdzYCBkb3duIHRoZSBsaW5lLiBJIGFtIGZvbGxvd2luZyB0aGlzIHBhdGguIEluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIHRoZSBgdm1fZmxhZ3NgIGFyZSBleHBsaWNpdGx5IHBhc3NlZC4gR3JlYXQuXG5cbkJ1dCwgd2FpdC4uLiBsZXQgbWUgcmUtY2hlY2sgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gQWgsIEkgc2VlIGl0IG5vdy5cblxuYGBgY1xuIFx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG4gXHRcdHJldHVybiBvcmRlcnMgXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cdTAwM2V2bV9maWxlKSxcbi1cdFx0XHRcdFx0XHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuK1x0XHRcdFx0XHRcdCAgIHZtYSwgdm1fZmxhZ3MsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxuIFx0XHRcdFx0XHRcdCAgIGZvcmNlZF9jb2xsYXBzZSk7XG5gYGBcblxuT2theSwgaXQgKmFscmVhZHkqIHJlY2VpdmVzIGB2bV9mbGFnc2AgYXMgYW4gYXJndW1lbnQhIFRoaXMgc2ltcGxpZmllcyB0aGUgY2hhbmdlIGFuZCBtYWtlcyB0aGUgY29kZSBtb3JlIGV4cGxpY2l0IGFuZCByZWFkYWJsZSBieSByZW1vdmluZyB0aGUgaW1wbGljaXQgdXNlIG9mIGB2bWEtXHUwMDNldm1fZmxhZ3NgLiBHb29kLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6MzQuNTM1NzI4OTA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTAxNTMwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk4LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5OTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIyLVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjozNi4xODU4ODY1NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM5OTAwNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIHdpdGggSHVnZSBQYWdlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgSSBzZWUgaXQgdGFrZXMgYHZtX2ZsYWdzX3Qgdm1fZmxhZ3NgIGFzIGFuIGFyZ3VtZW50LiBUaGF0J3MgZ29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3QuIEhvd2V2ZXIsIGl0J3MgaGl0dGluZyBtZSB0aGF0IHByZXZpb3VzbHksIHNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB3YXMgZ3JhYmJpbmcgdGhlIGB2bV9mbGFnc2AgZGlyZWN0bHkgZnJvbSBgdm1hLVx1MDAzZXZtX2ZsYWdzYC4gVGhhdCBzZWVtcyBhIGxpdHRsZS4uLiByaXNreSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4gVGhlIGlzc3VlIGlzLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgICpjb3VsZCogYmUgY2FsbGVkIHdpdGggYSBgdm1fZmxhZ3NgIHZhbHVlIHRoYXQncyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIHRoZSBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmljIGB2bWFgIHdlJ3JlIHRhbGtpbmcgYWJvdXQhIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSBnbmFybHkgYWxsb2NhdGlvbiBpc3N1ZXMgaWYgd2UncmUgbm90IGNhcmVmdWwuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB3aGVyZSBlbHNlIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgdXNlZC4gSSBoYWQgYmV0dGVyIGdvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NDAuMzI1Nzg5NjY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTI4NTE2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDAtXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMjA9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQzOlxcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0NC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NDIuNjE4NjQ4ODYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMzk4MDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB6ZXJvaW5nIGluIG9uIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIHZhcmlhYmxlIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSB3aXRoaW4gdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgd2hpY2ggb3JkZXIgb2YgaHVnZSBwYWdlcyBhcmUgY29uc2lkZXJlZCB2YWxpZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIFZNQSBjb250ZXh0LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgaW5jb3Jwb3JhdGVkPyBBcmUgd2UgZGVhbGluZyB3aXRoIGFyY2hpdGVjdHVyZSBsaW1pdGF0aW9ucyBhdCB0aGlzIHBvaW50LCBvciBtb3JlIGFic3RyYWN0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0cmFpbnRzPyBUaGlzIGxpa2VseSBkaWN0YXRlcyB0aGUgaW5pdGlhbCBzaXplLCBhbmQgYW55IHN1YnNlcXVlbnQgc3BsaXR0aW5nIG9yIG1lcmdpbmcgdGhhdCBtaWdodCBiZSBkb25lLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgdGllcyBpbnRvIG51bWEgYXdhcmVuZXNzOyB0aGUgb3JkZXIgc2VsZWN0aW9uIG1heSBhbHNvIGJlIGluZmx1ZW5jZWQgYnkgdGhlIHBoeXNpY2FsIG1lbW9yeSBsYXlvdXQuIFRoZXJlIGNvdWxkIGJlIGEgaGllcmFyY2h5IGludm9sdmVkLCBvciBhIHNldCBvZiBwcmlvcml0aWVzIGJhc2VkIG9uIHN5c3RlbSBwYXJhbWV0ZXJzIG9yIHVzZXIgcHJlZmVyZW5jZXMuXG5cbk15IGFpbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhlIGFsbG93ZWQgb3JkZXJzLiBTcGVjaWZpY2FsbHksIHdoYXQncyBpbmZsdWVuY2luZyB0aGUgZGVjaXNpb24gcHJvY2VzcyBhbmQgaG93IHRoaXMgZGVjaXNpb24gY2FuIGJlIG1vZGlmaWVkLiBJJ20gaW1hZ2luaW5nIGEgY29tcGxleCBmbG93IGNoYXJ0IGhlcmUsIHN0YXJ0aW5nIGZyb20gaW5pdGlhbCBjb25kaXRpb25zLCBhbmQgYnJhbmNoaW5nIG9mZiBiYXNlZCBvbiB2YXJpb3VzIGNyaXRlcmlhLiBXaGF0IGFyZSB0aGUga2V5IGZhY3RvcnMgdGhhdCBsZWFkIHRvIGRpZmZlcmVudCBhbGxvd2FibGUgb3JkZXIgY2hvaWNlcz8gSXMgdGhlcmUgYSBkZWJ1ZyBmbGFnIG9yIHRyYWNlIHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYD8gVGhhdCB3b3VsZCBiZSB1c2VmdWwuIFVsdGltYXRlbHksIGEgZGVlcCBkaXZlIGludG8gdGhpcyB2YXJpYWJsZSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBrZXJuZWwncyBvdmVyYWxsIHN0cmF0ZWd5IGZvciBUSFAgYWxsb2NhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFZNQXMgYW5kIHRoZSBwcm9jZXNzJ3MgbWVtb3J5IGZvb3RwcmludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAyOjQ2LjA1MjYzMjA0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0NTM1NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTQ1OT1zdGF0aWMgaW50IHNob3dfc21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3Ni1cXHRzZXFfcHJpbnRmKG0sIFxcXCJUSFBlbGlnaWJsZTogICAgJTh1XFxcXG5cXFwiLFxcbmZzL3Byb2MvdGFza19tbXUuYzoxNDc3OlxcdFxcdCAgICEhdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX1NNQVBTLFxcbmZzL3Byb2MvdGFza19tbXUuYy0xNDc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIFRIUF9PUkRFUlNfQUxMKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD05Nz1lbnVtIHR2YV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNC0jZGVmaW5lIHRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVyKSBcXFxcXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTA1OlxcdCghIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBCSVQob3JkZXIpKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk4LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5OTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwMC1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwNC0vKipcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMDU6ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzIC0gZGV0ZXJtaW5lIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciB2bWFcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDYtICogQHZtYTogIHRoZSB2bSBhcmVhIHRvIGNoZWNrXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTk9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMyMDp1bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMjEtXFx0XFx0XFx0XFx0ICAgICAgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQzOlxcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0NC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02MTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjI0LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYyNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYyNi1cXHRcXHRcXHRcXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5NS1cXHRcXHQgKiBFbmZvcmNlIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMgYXMgbmVjZXNzYXJ5LiBBbm9ueW1vdXMgdm1hc1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk2OlxcdFxcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk3LVxcdFxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTU3ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTg0LVxcbm1tL2todWdlcGFnZWQuYzo1ODU6XFx0cmV0dXJuIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MsIG9yZGVycyk7XFxubW0va2h1Z2VwYWdlZC5jLTU4Ni19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwOTktXFx0XFx0cmV0dXJuIFNDQU5fQUREUkVTU19SQU5HRTtcXG5tbS9raHVnZXBhZ2VkLmM6MTEwMDpcXHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHR5cGUsIEJJVChvcmRlcikpKVxcbm1tL2todWdlcGFnZWQuYy0xMTAxLVxcdFxcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTA1LVxcdCAqXFxubW0va2h1Z2VwYWdlZC5jOjExMDY6XFx0ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkgbWF5IHJldHVybiB0cnVlIGZvciBxdWFsaWZpZWQgZmlsZVxcbm1tL2todWdlcGFnZWQuYy0xMTA3LVxcdCAqIHZtYXMuXFxuLS1cXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgyNC1cXHQgKi9cXG5tbS9tZW1vcnkuYzo0ODI1OlxcdG9yZGVycyA9IHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIFRWQV9QQUdFRkFVTFQsXFxubW0vbWVtb3J5LmMtNDgyNi1cXHRcXHRcXHRcXHRcXHQgIEJJVChQTURfT1JERVIpIC0gMSk7XFxuLS1cXG5tbS9tZW1vcnkuYz01MzAyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzI0LVxcdCAqL1xcbm1tL21lbW9yeS5jOjUzMjU6XFx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcXG5tbS9tZW1vcnkuYy01MzI2LVxcdFxcdFxcdFxcdFxcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NDcuNTE3MTcyMDg1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MzUxMDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGlzY3JlcGFuY2llcyBpbiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgLiBJdCBzZWVtcyBsaWtlIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIG1pZ2h0IGJlIGNhbGxpbmcgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2Agd2l0aCBhIGB2bV9mbGFnc2AgYXJndW1lbnQgdGhhdCAqY291bGQqIGRpZmZlciBmcm9tIHRoZSBgdm1hLVx1MDAzZXZtX2ZsYWdzYCBhc3NvY2lhdGVkIHdpdGggdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkuIFRoYXQncyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgb3Igb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uIGJlZm9yZSBJIGdvIGZ1cnRoZXIuIExldCdzIGRpZyBpbnRvIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB0aGVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRob3NlIGZsYWdzIG1pZ2h0IGRpdmVyZ2UgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFyZSBmb3Igb3VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCB0byBmdWxseSByZWFzb24gYWJvdXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MzYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMjo1MC45MTA2ODUwMjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQ0MDQ5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfcG9zc2libGVfb3JkZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz01Mzg9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTczLSAqL1xcbm1tL2todWdlcGFnZWQuYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy01NzUtXFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTg4PXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU5MC17XFxubW0va2h1Z2VwYWdlZC5jOjU5MTpcXHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxubW0va2h1Z2VwYWdlZC5jLTU5Mi19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTYxMj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjQxLVxcbm1tL2todWdlcGFnZWQuYzoxNjQyOlxcdGVuYWJsZWRfb3JkZXJzID0gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTY0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NTIuMzg1MDk2ODU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzAwMzU1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBPcmRlciBDb2xsYXBzaW5nIExvZ2ljKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbiwgYW5kIGl0J3MgcG9wcGluZyB1cCBhcyBhIHN1YnJvdXRpbmUgd2l0aGluIGBjb2xsYXBzZV9wb3NzaWJsZWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHByb2JhYmx5IGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgYmVoYXZpb3Igb2YgdGhlIGFsZ29yaXRobS4gU28sIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGNvbGxhcHNlX3Bvc3NpYmxlYCB0byBzZWUgaG93IGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGl0cyBpbnB1dCBhbmQgb3V0cHV0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBpcyBjYWxsZWQuIFRoYXQncyB0aGUgcHJpb3JpdHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NTYuNzU1MTM0NzY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0MjI0MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3Bvc3NpYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz01Mzg9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTczLSAqL1xcbm1tL2todWdlcGFnZWQuYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy01NzUtXFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTg3LVxcbm1tL2todWdlcGFnZWQuYzo1ODg6c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcXG5tbS9raHVnZXBhZ2VkLmMtNTkwLXtcXG5tbS9raHVnZXBhZ2VkLmM6NTkxOlxcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG5tbS9raHVnZXBhZ2VkLmMtNTkyLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz01OTQ9dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01OTctXFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9WTV9IVUdFUEFHRSwgdm1hLVxcdTAwM2V2bV9tbSkgXFx1MDAyNlxcdTAwMjYgaHVnZXBhZ2VfZW5hYmxlZCgpXFxubW0va2h1Z2VwYWdlZC5jOjU5ODpcXHQgICAgXFx1MDAyNlxcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxcbm1tL2todWdlcGFnZWQuYy01OTktXFx0XFx0X19raHVnZXBhZ2VkX2VudGVyKHZtYS1cXHUwMDNldm1fbW0pO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE2MTI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTY0MS1cXG5tbS9raHVnZXBhZ2VkLmM6MTY0MjpcXHRlbmFibGVkX29yZGVycyA9IGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxubW0va2h1Z2VwYWdlZC5jLTE2NDMtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjg1Mz1zdGF0aWMgdm9pZCBjb2xsYXBzZV9zY2FuX21tX3Nsb3QodW5zaWduZWQgaW50IHByb2dyZXNzX21heCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODk4LVxcdFxcdH1cXG5tbS9raHVnZXBhZ2VkLmM6Mjg5OTpcXHRcXHRpZiAoIWNvbGxhcHNlX3Bvc3NpYmxlKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKSB7XFxubW0va2h1Z2VwYWdlZC5jLTI5MDAtXFx0XFx0XFx0Y2MtXFx1MDAzZXByb2dyZXNzKys7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE5ND1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjA2LVxcbm1tL2todWdlcGFnZWQuYzozMjA3OlxcdGlmICghY29sbGFwc2VfcG9zc2libGUodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFKSlcXG5tbS9raHVnZXBhZ2VkLmMtMzIwOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDI6NTguMTk5MzYzMzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4Mjc4MjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgJ3MgQXJndW1lbnQqKlxuXG5SaWdodCwgKnRoYXQncyogaXQhIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYWNjZXB0cyBgdm1fZmxhZ3NgIGFzIGFuIGFyZ3VtZW50LiBFeGNlbGxlbnQuIFRoYXQncyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgc2VlIGV4YWN0bHkgaG93IGl0J3MgdXRpbGl6aW5nIHRob3NlIGB2bV9mbGFnc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGZsYWcgY29tYmluYXRpb25zLiBJcyBpdCB1c2luZyB0aGVtIGZvciBhbGxvY2F0aW9uIGhpbnRzPyBQcm90ZWN0aW9uIHNldHRpbmdzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZmxhZyBpbnRlcnByZXRhdGlvbiBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgVk1BLiBUaGlzIGNvdWxkIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiBMZXQncyBzZWUgaG93IHRoYXQgYXJndW1lbnQgaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgY29kZS4uLiBMZXQncyBjaGVjayBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzowMi43ODIxNDg0MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzkyOTExNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTU9ZXh0ZXJuIHZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjE2OmV4dGVybiB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTE3LVxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00MC19XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQyLVxcdFxcdFxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cXHRcXHRyZXR1cm4gcmV0O1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzMTpcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMi1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz00NTA9aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDYxLVxcdFxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo0NjI6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xcbm1tL2todWdlcGFnZWQuYy00NjMtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTg4PXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU5My1cXG5tbS9raHVnZXBhZ2VkLmM6NTk0OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU5NS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcXG4tLVxcbm1tL3ZtYS5jLTEwNzMtXFx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cXHUwMDNldGFyZ2V0LCBzdGlja3lfZmxhZ3MpO1xcbm1tL3ZtYS5jOjEwNzQ6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVxcdTAwM2V0YXJnZXQsIHZtZy1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTEwNzUtXFx0dm1nLVxcdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xcbi0tXFxubW0vdm1hLmM9MTE0MD1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9uZXdfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4tLVxcbm1tL3ZtYS5jLTExOTUtXFx0aWYgKHZtZy1cXHUwMDNldGFyZ2V0IFxcdTAwMjZcXHUwMDI2ICF2bWFfZXhwYW5kKHZtZykpIHtcXG5tbS92bWEuYzoxMTk2OlxcdFxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMTk3LVxcdFxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbi0tXFxubW0vdm1hLmMtMjY5MS1cXHQvKlxcbm1tL3ZtYS5jOjI2OTI6XFx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcXG5tbS92bWEuYy0yNjkzLVxcdCAqIGNhbGwgY292ZXJzIHRoZSBub24tbWVyZ2UgY2FzZS5cXG4tLVxcbm1tL3ZtYS5jLTI2OTUtXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxubW0vdm1hLmM6MjY5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIG1hcC1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTI2OTctXFx0KnZtYXAgPSB2bWE7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBtcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg1LVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaDoxODY6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODctXFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzowNC4yMjE0NDQ4NTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyNTU1NzY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFRIUCBCdWcgaW4gc2htZW0gYW5kIGtodWdlcGFnZWQgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgc3BlY2lmaWNhbGx5IHdoZW4gdGhleSBpbnRlcmFjdCB3aXRoIGBraHVnZXBhZ2VkYCBhbmQgc2hhcmVkIG1lbW9yeSAoYHNobWVtYCkuIEkndmUgbm90aWNlZCBhIHBvdGVudGlhbCBpc3N1ZSBpbiBob3cgYHZtX2ZsYWdzYCBhcmUgaGFuZGxlZCBhY3Jvc3MgdmFyaW91cyBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkLlxuXG5UaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBjYW4gYmUgY2FsbGVkIHdpdGggKmRpZmZlcmVudCogYHZtX2ZsYWdzYCB0aGFuIHdoYXQncyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChgdm1hYCkuIEZvciBpbnN0YW5jZSwgYGh1Z2VwYWdlX21hZHZpc2VgIHBhc3NlcyB0aGUgKm5ldyogYHZtX2ZsYWdzYCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGJlZm9yZSB1cGRhdGluZyBgdm1hLVx1MDAzZXZtX2ZsYWdzYC4gVGhpcyBuZXcgc2V0IG9mIGZsYWdzLCBjcnVjaWFsbHksIHJlcHJlc2VudHMgdGhlICppbnRlbmRlZCogc3RhdGUgYWZ0ZXIgYSBjaGFuZ2UgbGlrZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAuXG5cblRoZSBjYWxsIGNoYWluIGlzIGNsZWFyOiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIC1cdTAwM2UgYGNvbGxhcHNlX3Bvc3NpYmxlYCAtXHUwMDNlIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIC1cdTAwM2UgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgLVx1MDAzZSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIGxhc3QgZnVuY3Rpb24sIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIHRoZW4gY2FsbHMgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgKmlmKiB0aGUgYHZtYWAgY29ycmVzcG9uZHMgdG8gYSBgc2htZW1gIGZpbGUuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB1c2VkIGB2bWEtXHUwMDNldm1fZmxhZ3NgIHRvIGRldGVybWluZSBpZiBUSFAgd2FzIGFsbG93ZWQsIGluc3RlYWQgb2YgdGhlICpuZXcqIGB2bV9mbGFnc2AgdGhhdCB3YXMgcGFzc2VkIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1Zy5cblxuVGhpcyBjcmVhdGVzIGEgc2NlbmFyaW8gd2hlcmUgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGlzIGNhbGxlZCBvbiBhIGBzaG1lbWAgVk1BLiBUaGUgbmV3IGB2bV9mbGFnc2Agd291bGQgZ2V0IGBWTV9IVUdFUEFHRWAgc2V0IGJ5IGBodWdlcGFnZV9tYWR2aXNlYCwgYnV0IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdvdWxkIHVzZSB0aGUgKm9sZCogYHZtYS1cdTAwM2V2bV9mbGFnc2AsIHdoaWNoIHdvdWxkbid0IGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQuIFRodXMsIFRIUCBzdXBwb3J0IHdvdWxkIGFwcGVhciB0byBiZSBkaXNhYmxlZCBpbiB0aGUgVk1BLlxuXG5Db25zZXF1ZW50bHksIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbWlnaHQgZmFpbCB0byBlbnRlciB0aGUgVk1BIGludG8gYGtodWdlcGFnZWRgLiBUaGlzIHdvdWxkIG1lYW4ga2h1Z2VwYWdlZCB3b3VsZCBub3QgY29sbGFwc2UgdGhlIHNobWVtIFZNQSBhZnRlciBgTUFEVl9IVUdFUEFHRWAgdW50aWwgc29tZXRoaW5nIGVsc2UgdHJpZ2dlcmVkIGl0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLiBJdCdzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBmbGF3IHRoYXQgY291bGQgcHJldmVudCBUSFAgZnJvbSBmdW5jdGlvbmluZyBjb3JyZWN0bHkgb24gc2hhcmVkIG1lbW9yeSByZWdpb25zIGluIHNwZWNpZmljIHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyNiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzoxNS40NzcwMjM5NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzIwNjU2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2VfbWFkdmlzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTk9Y2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEwLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMTppbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MDI9c3RhdGljIGlubGluZSBib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTI6c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTMtXFx0XFx0XFx0XFx0ICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQ5LVxcbm1tL2todWdlcGFnZWQuYzo0NTA6aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cXHRcXHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzk9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDE4LVxcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxcbm1tL21hZHZpc2UuYzoxNDE5OlxcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFxcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTQyMC1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjE2LjkwOTA5NDMwNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk4MjM4MjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2h1Z2VwYWdlZCBJbnRlcmFjdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGxvb2tzIGxpa2UgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gbWlnaHQgYmUgcHJlc2VudCB3aGVuIHVzaW5nIGBNQURWX0hVR0VQQUdFYCBvbiBzaGFyZWQgbWVtb3J5IChzaG1lbSkgVk1BcyBhbmQgdGhlIGtlcm5lbCdzIGBraHVnZXBhZ2VkYCBtZWNoYW5pc20uICBTcGVjaWZpY2FsbHksIEkgc2VlIGBodWdlcGFnZV9tYWR2aXNlYCBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHdoYXQgaGFwcGVucyAqaW5zaWRlKiBgaHVnZXBhZ2VfbWFkdmlzZWAuXG5cbkkgY29uZmlybWVkIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gd2l0aGluIGBodWdlcGFnZV9tYWR2aXNlYC4gTm93LCB0aGUgaXNzdWUgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIHdpdGggdXBkYXRlZCBgdm1fZmxhZ3NgLiBJZiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCAqc3Vic2VxdWVudGx5KiByZWFkcyB0aGUgb2xkIGB2bWEtXHUwMDNldm1fZmxhZ3NgLCBpdCB3b24ndCBzZWUgYFZNX0hVR0VQQUdFYCBzZXQuXG5cbkxvb2tpbmcgYmFjaywgaWYgYGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5c2AgaXMgbm90IHNldCBhbmQgYGh1Z2Vfc2htZW1fb3JkZXJzX21hZHZpc2VgIGlzLCAgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgKmRvZXMqIGNoZWNrIGB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIHNobWVtX2h1Z2VfZm9yY2UpYC4gIENydWNpYWxseSwgYHZtYV90aHBfZGlzYWJsZWRgIHRha2VzIGB2bV9mbGFnc2AuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluIGBtbS9zaG1lbS5jYCwgKmJlZm9yZSogdGhlIHBhdGNoLCBpdCBleHRyYWN0cyBgdm1fZmxhZ3NgIGZyb20gYHZtYS1cdTAwM2V2bV9mbGFnc2AuIFRodXMsIGBpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0hVR0VQQUdFKWAgKndvdWxkKiBiZSBmYWxzZSEgVGhlcmVmb3JlLCB0aGUgYG1hc2tgIHdvdWxkICpub3QqIGluY2x1ZGUgYGh1Z2Vfc2htZW1fb3JkZXJzX21hZHZpc2VgLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHJldHVybmluZyAwLiAgVGhhdCBtZWFucyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG5ldmVyIGdldHMgdGhlIFZNQSByZWdpc3RlcmVkIHdpdGgga2h1Z2VwYWdlZC5cblxuSW4gZWZmZWN0LCB0aGlzIG1lYW5zIHRoYXQgYXBwbHlpbmcgYE1BRFZfSFVHRVBBR0VgIG9uIGEgc2htZW0gVk1BIG1pZ2h0IG5vdCBhY3R1YWxseSB0cmlnZ2VyIGtodWdlcGFnZWQgcHJvY2Vzc2luZyAqYmVjYXVzZSogb2YgdGhlIHRpbWluZyBvZiB0aGUgZmxhZyB1cGRhdGUuIEl0IGlzIGluZGVlZCBhIGZ1bmN0aW9uYWwgYnVnLlxuXG5UaGUga2V5IG5vdyBpcyB3aGV0aGVyIHRoaXMgY29kZXBhdGggaXMgcmVhY2hhYmxlLiBZZXMsIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNobWVtIFZNQSAqaXMqIHJlYWNoYWJsZSwgYW5kIGBraHVnZXBhZ2VkYCBpcyBydW5uaW5nLCBzbyBpdOKAmXMgZGVmaW5pdGVseSBhIHZhbGlkIGFyZWEgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmdW5jdGlvbnM6ICBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYHNobWVtX2dldF9mb2xpb19nZnBgLCBgaHVnZXBhZ2VfbWFkdmlzZWAsIGFuZCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBJIG5lZWQgdG8gZW5zdXJlIEknbSBjaGVja2luZyB0aGUgcmlnaHQgY29kZSBzZWN0aW9ucywgZXNwZWNpYWxseSBpbiB0aG9zZS5cbkxldCBtZSBxdWlja2x5IGNoZWNrIHdoaWNoIG9mIHRob3NlIGFyZSBzdGF0aWMgYW5kIHdoaWNoIGFyZSBub3QuIE9rIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgaHVnZXBhZ2VfbWFkdmlzZWAgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYXJlIGFsbCBleHBvcnRlZCwgbm90IHN0YXRpYy4gYHNobWVtX2dldF9mb2xpb19nZnBgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDM6MjkuODkxNDc4NzEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5MjA3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTI4LSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEyOTp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMy0jZWxzZVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMzQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEyMT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODgtXFx0aWYgKCFpbl9wZiBcXHUwMDI2XFx1MDAyNiBzaG1lbV9maWxlKHZtYS1cXHUwMDNldm1fZmlsZSkpXFxubW0vaHVnZV9tZW1vcnkuYzoxODk6XFx0XFx0cmV0dXJuIG9yZGVycyBcXHUwMDI2IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhmaWxlX2lub2RlKHZtYS1cXHUwMDNldm1fZmlsZSksXFxubW0vaHVnZV9tZW1vcnkuYy0xOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm1hLCB2bV9mbGFncywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsXFxuLS1cXG5tbS9zaG1lbS5jPTE4MTk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vc2htZW0uYy0xODM1LVxcbm1tL3NobWVtLmM6MTgzNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbm1tL3NobWVtLmMtMTgzNy1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL3NobWVtLmM9MjQyNz1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjUwOS1cXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xcbm1tL3NobWVtLmM6MjUxMDpcXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgdm1fZmxhZ3MsIGluZGV4LFxcbm1tL3NobWVtLmMtMjUxMS1cXHRcXHRcXHRcXHRcXHQgICAgIHdyaXRlX2VuZCwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzozMS4zNDA2OTEyMTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTU0MzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGNvdmVyZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBmb3IgdGhpcyBzZXR1cCB0byBmdW5jdGlvbiBvcHRpbWFsbHksIEknbSBnb2luZyB0byB3YW50IHRvIGV4cGxpY2l0bHkgZGVmaW5lIGEgY291cGxlIG9mIGtleSBvcHRpb25zLiBUaGUgZmlyc3QgaXMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSB0aGVzZSBzZXR0aW5ncy4gVGhlbiwgdGhlcmUncyBgQ09ORklHX1NITUVNYC4gV2hpbGUgaXQncyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGl0J3MgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBhIHNjZW5hcmlvIGxpa2UgdGhpcywgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuIEl0IGp1c3QgbWFrZXMgdGhpbmdzIGNsZWFuZXIgYW5kIG1vcmUgcHJlZGljdGFibGUsIGFuZCBJIGNhbiBiZSBzdXJlIG5vdGhpbmcgd2VpcmQgaXMgZ29pbmcgb24uIExldCdzIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgc3RhdHVzIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRvIGJlIGNlcnRhaW4uIFRoYXQncyB0aGUgcHJpb3JpdHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIxMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjM2LjMxMDIzODU0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDY1ODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTgtXFxubW0vS2NvbmZpZzo4NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODYwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY1LVxcbm1tL0tjb25maWc6ODY2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjctXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODc0LVxcbm1tL0tjb25maWc6ODc1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MS1cXG5tbS9LY29uZmlnOjg5MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDEtXFxubW0vS2NvbmZpZzo5MDI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDktXFxubW0vS2NvbmZpZzo5MTA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE3LVxcbm1tL0tjb25maWc6OTE4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE5LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI3PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzYtXFxubW0vS2NvbmZpZzo5Mzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzOC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ1LVxcbm1tL0tjb25maWc6OTQ2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUzLVxcbm1tL0tjb25maWc6OTU0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTUtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MS1cXG5tbS9LY29uZmlnOjk2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2My1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjM3Ljc4NDkwMzE5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI1ODYwNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIG9uIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgU2hhcmVkIE1lbW9yeSBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBzbyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBIb3dldmVyLCBiYXNlZCBvbiBleHBlcmllbmNlIEkgc3Ryb25nbHkgc3VzcGVjdCBzaGFyZWQgbWVtb3J5IGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGludm9sdmVkLiBJIGtub3cgdGhhdCBgU0hNRU1gIGlzIHZlcnkgbGlrZWx5IGFuIGVzc2VudGlhbCBjb21wb25lbnQgaW4gb3VyIHNldHVwLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvZiBUSFAgYW5kIHNoYXJlZCBtZW1vcnksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBsYXJnZSBwYWdlcyBhcmUgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gTXkgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9zaG1lbS5jYC4gTGV0J3MgaGF2ZSBhIGxvb2sgYXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2Agd2l0aGluIHRoYXQgbW9kdWxlLiBUaGlzIGZ1bmN0aW9uIGhvbGRzIHRoZSBrZXksIGJlY2F1c2UgaXQgc2hvdWxkIHNwZWxsIG91dCBleGFjdGx5IHdoaWNoIGh1Z2UgcGFnZSBvcmRlcnMgYXJlIHN1cHBvcnRlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHdoZW4gdXNpbmcgc2hhcmVkIG1lbW9yeS4gVGhhdCdsbCBnaXZlIG1lIHRoZSB2aXRhbCBkZXRhaWxzIG9uIGFueSBsaW1pdGF0aW9ucyBvciBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBJIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBmaW5lLXR1bmluZyB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxOTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzo0MC45MTA3NjY2MzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjIxNDk5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMjY9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMzI9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzNS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncywgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE4OC1cXHRpZiAoIWluX3BmIFxcdTAwMjZcXHUwMDI2IHNobWVtX2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlKSlcXG5tbS9odWdlX21lbW9yeS5jOjE4OTpcXHRcXHRyZXR1cm4gb3JkZXJzIFxcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVxcdTAwM2V2bV9maWxlKSxcXG5tbS9odWdlX21lbW9yeS5jLTE5MC1cXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcXG4tLVxcbm1tL3NobWVtLmM9MTgxOT1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9zaG1lbS5jLTE4MzUtXFxubW0vc2htZW0uYzoxODM2OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxubW0vc2htZW0uYy0xODM3LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxubW0vc2htZW0uYz0yNDI3PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTA5LVxcdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXFxubW0vc2htZW0uYzoyNTEwOlxcdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCB2bV9mbGFncywgaW5kZXgsXFxubW0vc2htZW0uYy0yNTExLVxcdFxcdFxcdFxcdFxcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjQzLjAzMjkyMTUyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE1NjkwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRIUCBhbmQgU2htZW0gRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEknbSBkcm9wcGluZyBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIGFzIGl0J3MgdG9vIGdlbmVyaWM7IGBodWdlcGFnZV9tYWR2aXNlYCBpcyBhIGJldHRlciBmaXQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXkgYXJlIHN0YXRpYy4gQWxyaWdodCwgbGV0J3Mgc2VlLiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYD8gTm9wZSwgaXQncyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYC4gR29vZC4gTmV4dCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYD8gQWxzbyBleHBvcnRlZCwgZm91bmQgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gYGh1Z2VwYWdlX21hZHZpc2VgPyBZZXAsIGFsc28gZXhwb3J0ZWQgaW4gdGhlIHNhbWUgaGVhZGVyIGZpbGUuIEZpbmFsbHksIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAsIHdoaWNoIGlzIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGAuIFNvIGZhciwgc28gZ29vZC5cblxuTGV0J3MgY2hlY2sgYGh1Z2VwYWdlX21hZHZpc2VgIG9uZSBtb3JlIHRpbWUuIEl0J3MgZGVmaW5lZCBpbiBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgaXMgYWxzbyBleHBvcnRlZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluIGBtbS9zaG1lbS5jYDpcbmBgYGNcbnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG5cdFx0cGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuYGBgXG5ZZXMsIGl0J3Mgbm90IHN0YXRpYy4gU28sIHRoZSBrZXkgc3ltYm9scyBhcmUgY29uZmlybWVkIGFzOlxuYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2BcbmBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2BcbmBodWdlcGFnZV9tYWR2aXNlYFxuYGtodWdlcGFnZWRfZW50ZXJfdm1hYFxuXG5HaXZlbiB0aGlzLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFNITUVNYC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIGluIGhvdyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBoYW5kbGVzIGB2bV9mbGFnc2AuIEl0IGluY29ycmVjdGx5IHVzZWQgdGhlIFZNQSdzIGZsYWdzIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIG9uZXMsIHdoaWNoIGNhdXNlZCBwcm9ibGVtcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChsaWtlIHdpdGggYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKS4gVGhpcyBjb3VsZCBibG9jayBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzIGJlY2F1c2UgdGhlIFZNQSBmbGFncyB3ZXJlIG5vdCB1cGRhdGVkIHByb3Blcmx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIGlzIHN0YXRpYy5cblllcCwgYHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCAuLi4pYFxuU28gd2Ugc2hvdWxkbid0IGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzLlxuXG5BbmQgY29uZmlybSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBub3Qgc3RhdGljLiBPa2F5LCBhbGwgdGhlIGtleSBlbGVtZW50cyBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzo1Mi4zNDg2MTQ3MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA0NDQzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0xNT1leHRlcm4gdm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MTY6ZXh0ZXJuIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMTctXFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9Mzg9c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQwLX1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDItXFx0XFx0XFx0XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODg9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkzLVxcbm1tL2todWdlcGFnZWQuYzo1OTQ6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9raHVnZXBhZ2VkLmMtNTk1LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaD0xODE9c3RhdGljIGlubGluZSBib29sIG1wb2xfZXF1YWwoc3RydWN0IG1lbXBvbGljeSAqYSwgc3RydWN0IG1lbXBvbGljeSAqYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0xODUtXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjE4NjpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4Ny1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjAzOjUzLjcyOTA2NDExNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM5MDAzOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBTdGF0aWMgRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgc28gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gVGltZSB0byBjb25maXJtIHRoYXQuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXNuJ3Qgc3RhdGljIGVpdGhlci4gR290dGEgbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgYXJlIHByb3Blcmx5IGV4cG9zZWQsIGdpdmVuIHRoZWlyIHJvbGVzIGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJ3MgaHVnZXBhZ2UgbWFuYWdlbWVudC4gSSdtIGRvdWJsZS1jaGVja2luZyBiZWNhdXNlIHRoZXNlIGRlY2xhcmF0aW9ucywgb3IgbGFjayB0aGVyZW9mLCBjYW4gaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBkaWZmZXJlbnQgbW9kdWxlcyBpbnRlcmFjdCB3aXRoIHRoZSB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0uIFdlIGNhbid0IGhhdmUgYW55IG9mIHRoZXNlIGFzc3VtcHRpb25zIGJyZWFrIGRvd24gZHVlIHRvIHN0YXRpYyBzY29wZSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDM6NTcuNTY4MDcwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNTk3MjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaHVnZXBhZ2VfbWFkdmlzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTk9Y2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEwLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjUxMTppbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03MDI9c3RhdGljIGlubGluZSBib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTI6c3RhdGljIGlubGluZSBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTMtXFx0XFx0XFx0XFx0ICAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsIGludCBhZHZpY2UpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDM0PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNDQ5LVxcbm1tL2todWdlcGFnZWQuYzo0NTA6aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cXHRcXHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowMzo1OS4wODQwNDc2OTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxNjI2NzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBIdWdlIFBhZ2UgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHRoYXQgYGh1Z2VwYWdlX21hZHZpc2VgIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBzb21lIG1lbnRhbCBmbGFncy4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICpjaGFuZ2VzKiwgbm90IGEgZml4ZWQgY29uc3RhbnQuIE5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZG9lc24ndCBzaGFyZSB0aGF0IHN0YXRpYyBjaGFyYWN0ZXJpc3RpYy4gVW5kZXJzdGFuZGluZyBpZiB0aGF0IG9uZSBpcyB2YXJpYWJsZSBvciBub3QsIGlzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBncmFzcGluZyB0aGUgZHluYW1pYyBhbGxvY2F0aW9uIHNjaGVtZS4gTmVlZCB0byB2ZXJpZnkgdGhhdCdzIHRoZSBjYXNlLiBHb3R0YSBzb2xpZGlmeSB0aGF0IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTE4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDEuOTAwMzE4ODQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzMTA2Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTk6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDAtXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDMuMzMzNDI5ODc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTI5MTQyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCAqaXNuJ3QqIGEgc3RhdGljIHZhbHVlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgYXMgSSBkZWx2ZSBpbnRvIHRoaXMuXG5cblRoZSBrZXkgYXNwZWN0cyBoZXJlIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgdGhlIGFmb3JlbWVudGlvbmVkIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IHRoaXMgY2hhbmdlIHRvdWNoZXMuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBTSE1FTWAuXG5cbkVzc2VudGlhbGx5LCB3aGF0J3MgaGFwcGVuaW5nIGlzIGEgZml4IGZvciBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgYnVnLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBjb3JyZWN0cyBhbiBpbmNvcnJlY3QgdXNlIG9mIGB2bWEtXHUwMDNldm1fZmxhZ3NgIHdpdGhpbiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgdXNpbmcgaW5zdGVhZCB0aGUgcHJvdmlkZWQgYHZtX2ZsYWdzYC4gVGhpcyBmaXhlcyB0aGUgcHJvYmxlbXMgdGhhdCBjYW4gYXJpc2Ugd2hlbiBgdm1fZmxhZ3NgIGFyZSB1cGRhdGVkIHRocm91Z2ggbWVjaGFuaXNtcyBsaWtlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBhbmQgdGhlIFZNQSdzIGZsYWdzIGhhdmVuJ3QgYmVlbiBmdWxseSBzeW5jaHJvbml6ZWQsIHByZXZlbnRpbmcgYGtodWdlcGFnZWRgIGZyb20gb3BlcmF0aW5nIGVmZmVjdGl2ZWx5IG9uIHNoYXJlZCBtZW1vcnkgVk1Bcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNvcnJlY3Rpb24gcmlnaHQgaW4gdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBsb2dpYywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZCBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSXQncyB0aGUga2luZCBvZiBzdWJ0bGUgZWRnZSBjYXNlIHRoYXQgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYyLCJPdXRwdXRUb2tlbnMiOjIwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNDowOS4wODYzNDYzMzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQzODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwiaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpbmNvcnJlY3RseSB1c2VkIGB2bWEtXFx1MDAzZXZtX2ZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBgdm1fZmxhZ3NgLiBUaGlzIGNhdXNlZCBpc3N1ZXMgd2hlbiBgdm1fZmxhZ3NgIHdlcmUgdXBkYXRlZCAoZS5nLiwgdmlhIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCkgYnV0IHRoZSBWTUEncyBmbGFncyBoYWQgbm90IHlldCBiZWVuIGNvbW1pdHRlZCwgcHJldmVudGluZyBga2h1Z2VwYWdlZGAgZnJvbSBwcm9wZXJseSB0cmFja2luZyBhbmQgY29sbGFwc2luZyBzaG1lbSBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIixcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJodWdlcGFnZV9tYWR2aXNlXCIsXG4gICAgXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGluY29ycmVjdGx5IHVzZWQgYHZtYS1cXHUwMDNldm1fZmxhZ3NgIGluc3RlYWQgb2YgdGhlIGV4cGxpY2l0bHkgcGFzc2VkIGB2bV9mbGFnc2AuIFRoaXMgY2F1c2VkIGlzc3VlcyB3aGVuIGB2bV9mbGFnc2Agd2VyZSB1cGRhdGVkIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgKSBidXQgdGhlIFZNQSdzIGZsYWdzIGhhZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLCBwcmV2ZW50aW5nIGBraHVnZXBhZ2VkYCBmcm9tIHByb3Blcmx5IHRyYWNraW5nIGFuZCBjb2xsYXBzaW5nIHNobWVtIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNDowOS4xNjE3OTA0NzZaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM0Mjk4Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDkuMTYyMjU5NzQ2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1NzMzODI1MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXFx1MDAzZXZtX2ZsYWdzIDogMGApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmUzMGMxYmE4ZTIzMmRhNzVlYTY3OTM1OGNkNGViN2YwNWEzZDQ2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA4OjAyOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG5pbmRleCA1NjYzZGZmNTMxODZlLi4zMjEwMTdlMGZkNjMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMjcsMTMgKzEyNywxMyBAQCBpbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxuIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi1cdFx0XHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSk7XG4rXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuK1x0XHRwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpO1xuIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi1cdFx0XHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbitcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIHBnb2ZmX3QgaW5kZXgsXG4rXHRcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLjcwZjU3ZDcwMDczOTEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTg3LDcgKzE4Nyw3IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKi9cbiBcdGlmICghaW5fcGYgXHUwMDI2XHUwMDI2IHNobWVtX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUpKVxuIFx0XHRyZXR1cm4gb3JkZXJzIFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXHUwMDNldm1fZmlsZSksXG4tXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbitcdFx0XHRcdFx0XHQgICB2bWEsIHZtX2ZsYWdzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbiBcdFx0XHRcdFx0XHQgICBmb3JjZWRfY29sbGFwc2UpO1xuIFxuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmYxYWQ1NDU2YWNhMyAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0xODM0LDEyICsxODM0LDExIEBAIGJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuLVx0XHRcdFx0bG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbitcdFx0cGdvZmZfdCBpbmRleCwgbG9mZl90IHdyaXRlX2VuZCwgYm9vbCBzaG1lbV9odWdlX2ZvcmNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpO1xuIFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDA7XG4gXHR1bnNpZ25lZCBpbnQgZ2xvYmFsX29yZGVycztcbiBcbiBcdGlmICh0aHBfZGlzYWJsZWRfYnlfaHcoKSB8fCAodm1hIFx1MDAyNlx1MDAyNiB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIHNobWVtX2h1Z2VfZm9yY2UpKSlcbkBAIC0yNDMwLDYgKzI0MjksNyBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0Z2ZwX3QgZ2ZwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdm1fZmF1bHRfdCAqZmF1bHRfdHlwZSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZiA/IHZtZi1cdTAwM2V2bWEgOiBOVUxMO1xuK1x0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cdTAwM2V2bV9mbGFncyA6IDA7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICpmYXVsdF9tbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgZXJyb3I7XG5AQCAtMjUwNyw3ICsyNTA3LDggQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHR9XG4gXG4gXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xuLVx0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIGluZGV4LCB3cml0ZV9lbmQsIGZhbHNlKTtcbitcdG9yZGVycyA9IHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhpbm9kZSwgdm1hLCB2bV9mbGFncywgaW5kZXgsXG4rXHRcdFx0XHRcdCAgICAgd3JpdGVfZW5kLCBmYWxzZSk7XG4gXHRpZiAob3JkZXJzIFx1MDAzZSAwKSB7XG4gXHRcdGdmcF90IGh1Z2VfZ2ZwO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MDkuMTYyMjYwOTA2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODgyNDk0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgYHZtX2ZsYWdzX3Qgdm1fZmxhZ3NgIGFyZ3VtZW50IGluIGBpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCBgbW0vc2htZW0uY2AuIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGNhbGxlcnMgYXJlIG5vdyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHRoaXMgYHZtX2ZsYWdzYCB2YWx1ZS5cblxuSSB3YXMganVzdCBsb29raW5nIGF0IGBtbS9zaG1lbS5jYCBhbmQgcmVtZW1iZXIgaG93IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHdhcyB3b3JraW5nOiBpdCB3YXMgcHJldmlvdXNseSBjYWxjdWxhdGluZyBgdm1fZmxhZ3NgIGZyb20gdGhlIGB2bWFgIGlmIGl0IGV4aXN0ZWQuIFRoZSBjaGFuZ2UgZWxpbWluYXRlcyB0aGlzIGludGVybmFsIGNhbGN1bGF0aW9uIGFuZCByZWxpZXMgb24gYSBwYXNzZWQtaW4gdmFsdWUuXG5cbk5vdywgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGRvaW5nIHRoZSBwYXNzaW5nLCBhbmQgaW4gYG1tL3NobWVtLmNgLCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgc3RpbGwgZG9pbmcgdGhlIGNhbGN1bGF0aW9uIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGZ1bmN0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgem9vbSBpbiBvbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFnYWluIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSXQgaXMgcGFzc2luZyBgdm1fZmxhZ3NgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYHZtX2ZsYWdzYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcGFzc2VkLiBJcyBpdCBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uLCBvciBkb2VzIGl0IGluaXRpYWxpemUgaXQgbG9jYWxseT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGl0c2VsZiB0byBiZSBzdXJlLiBBbHJpZ2h0LCB0aW1lIHRvIG9wZW4gdXAgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNDoxNS4xNTA1MTI4NDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ5MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA0OjE1LjE5NDk2OTY2NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzAxMDg5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXJndW1lbnQgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyB0YWtpbmcgYHZtX2ZsYWdzX3Qgdm1fZmxhZ3NgIGFzIGFuIGFyZ3VtZW50LiBUaGF0IG1lYW5zIGB2bV9mbGFnc2AgaXMgYmVpbmcgcGFzc2VkIGRvd24sIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UuIFRoaXMgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgaXQncyBzaW1wbHkgcGFzc2luZyBgdm1fZmxhZ3NgIGV4cGxpY2l0bHkuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBleHRyYWN0aW5nIGl0IGZyb20gYHZtYS1cdTAwM2V2bV9mbGFnc2AgaW5zaWRlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLlxuXG5UaGlzIGNoYW5nZSBsaWtlbHkgYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHVzYWdlOiBtYXliZSBjYWxsZXJzIG5vdyBjYW4gcGFzcyBtb2RpZmllZCBgdm1fZmxhZ3NgLCBoYW5kbGUgY2FzZXMgd2hlcmUgYHZtYWAgbWlnaHQgYmUgTlVMTCBidXQgYHZtX2ZsYWdzYCBpcyBzdGlsbCBrbm93biwgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRob3VnaC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUncyBubyBzdWJ0bGUgaW50cm9kdWN0aW9uIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW55d2hlcmUuIFNjYW5uaW5nIGBtbS9zaG1lbS5jYCwgSSBzZWUgYHZtX2ZsYWdzYCBpcyBpbml0aWFsaXplZCB0byBgdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMGAsIHNvIGl0J3MgaGFuZGxlZC4gU2ltaWxhcmx5LCBvdmVyIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYHZtX2ZsYWdzYCBpcyBhbiBhcmd1bWVudC4gSXQncyBzYWZlLlxuXG5UaGlzIGlzIGp1c3QgYSByZWZhY3RvcmluZyBvZiBmdW5jdGlvbiBhcmd1bWVudHMsIGEgY2xlYW5lciB3YXkgdG8gcGFzcyB0aGUgZmxhZ3MgYXJvdW5kLiBUaGVyZSdzIG5vIHdheSB0aGlzIGludHJvZHVjZXMgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIHNlbmRzIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gSXQgaXMgc2FmZS4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5MywiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDQ6MjQuODk2MDYyODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgZnVuY3Rpb24gdG8gdGFrZSBgdm1fZmxhZ3NgIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IHJhdGhlciB0aGFuIGRlcml2aW5nIGl0IGZyb20gdGhlIGB2bWFgIHBvaW50ZXIgaW5zaWRlIHRoZSBmdW5jdGlvbi4gQWxsIHBhc3NlZCBgdm1fZmxhZ3NgIHZhbHVlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCB2aWEgYHZtYSA/IHZtYS1cXHUwMDNldm1fZmxhZ3MgOiAwYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGZ1bmN0aW9uIHRvIHRha2UgYHZtX2ZsYWdzYCBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCByYXRoZXIgdGhhbiBkZXJpdmluZyBpdCBmcm9tIHRoZSBgdm1hYCBwb2ludGVyIGluc2lkZSB0aGUgZnVuY3Rpb24uIEFsbCBwYXNzZWQgYHZtX2ZsYWdzYCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlaXRoZXIgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdmlhIGB2bWEgPyB2bWEtXFx1MDAzZXZtX2ZsYWdzIDogMGApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc445n[1] Phase: Succeeded StartedAt: 2026-08-17 08:04:36 +0000 UTC FinishedAt: 2026-08-17 08:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 08:04:36 +0000 UTC FinishedAt: 2026-08-17 08:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2] Phase: Succeeded StartedAt: 2026-08-17 08:04:36 +0000 UTC FinishedAt: 2026-08-17 11:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 08:04:36 +0000 UTC FinishedAt: 2026-08-17 11:57:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","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-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 08:04:36 +0000 UTC FinishedAt: 2026-08-17 08:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 08:04:36 +0000 UTC FinishedAt: 2026-08-17 08:04:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"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-workflowc445n/series-workflowc445n-convert-artifact-3775343363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 08:04:46 +0000 UTC FinishedAt: 2026-08-17 08:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 08:04:46 +0000 UTC FinishedAt: 2026-08-17 08:25:34 +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:*0945a45a-ee6a-4a18-a629-a7a1457a481d,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-workflowc445n/series-workflowc445n-convert-artifact-3775343363/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": "890fce62-3957-4af8-ad23-f9a10b2d6850", "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-workflowc445n/series-workflowc445n-build-action-1866062705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 08:04:46 +0000 UTC FinishedAt: 2026-08-17 08:25:24 +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:*0945a45a-ee6a-4a18-a629-a7a1457a481d,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-workflowc445n/series-workflowc445n-convert-artifact-3775343363/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": "890fce62-3957-4af8-ad23-f9a10b2d6850", "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-workflowc445n/series-workflowc445n-build-action-1866062705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 08:25:34 +0000 UTC FinishedAt: 2026-08-17 08:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 08:25:34 +0000 UTC FinishedAt: 2026-08-17 08:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 08:25:34 +0000 UTC FinishedAt: 2026-08-17 08:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 08:25:34 +0000 UTC FinishedAt: 2026-08-17 08:25:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","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-workflowc445n/series-workflowc445n-convert-artifact-4015416250/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 08:25:44 +0000 UTC FinishedAt: 2026-08-17 08:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 08:25:44 +0000 UTC FinishedAt: 2026-08-17 08:27:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*890fce62-3957-4af8-ad23-f9a10b2d6850,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-workflowc445n/series-workflowc445n-build-action-1866062705/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-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 08:27:57 +0000 UTC FinishedAt: 2026-08-17 08:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:27:57 +0000 UTC FinishedAt: 2026-08-17 08:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 08:27:57 +0000 UTC FinishedAt: 2026-08-17 08:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 08:27:57 +0000 UTC FinishedAt: 2026-08-17 08:48:29 +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:*0945a45a-ee6a-4a18-a629-a7a1457a481d,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-workflowc445n/series-workflowc445n-convert-artifact-4015416250/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": "16433bda-116c-48b0-8ee0-16dc155cdb0a", "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-workflowc445n/series-workflowc445n-build-action-2189759006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 08:27:57 +0000 UTC FinishedAt: 2026-08-17 08:48:19 +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:*0945a45a-ee6a-4a18-a629-a7a1457a481d,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-workflowc445n/series-workflowc445n-convert-artifact-4015416250/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": "16433bda-116c-48b0-8ee0-16dc155cdb0a", "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-workflowc445n/series-workflowc445n-build-action-2189759006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 08:48:29 +0000 UTC FinishedAt: 2026-08-17 08:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 08:48:29 +0000 UTC FinishedAt: 2026-08-17 08:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 08:48:29 +0000 UTC FinishedAt: 2026-08-17 08:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 08:48:29 +0000 UTC FinishedAt: 2026-08-17 08:50:18 +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:*16433bda-116c-48b0-8ee0-16dc155cdb0a,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-workflowc445n/series-workflowc445n-build-action-2189759006/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-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 11:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 11:57:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"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:*890fce62-3957-4af8-ad23-f9a10b2d6850,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*16433bda-116c-48b0-8ee0-16dc155cdb0a,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-workflowc445n/series-workflowc445n-build-action-1866062705/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-workflowc445n/series-workflowc445n-build-action-2189759006/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 08:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 08:50:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"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-workflowc445n/series-workflowc445n-convert-artifact-256064495/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 08:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 08:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:50:28 +0000 UTC FinishedAt: 2026-08-17 08:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 08:50:38 +0000 UTC FinishedAt: 2026-08-17 11:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc445n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_allowable_huge_orders","__thp_vma_allowable_orders","hugepage_madvise","khugepaged_enter_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"f7b93e92-140e-4f6f-a839-ea46a8cf3ae7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 08:50:38 +0000 UTC FinishedAt: 2026-08-17 11:57:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*890fce62-3957-4af8-ad23-f9a10b2d6850,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*16433bda-116c-48b0-8ee0-16dc155cdb0a,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-workflowc445n/series-workflowc445n-build-action-1866062705/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-workflowc445n/series-workflowc445n-build-action-2189759006/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-workflowc445n/series-workflowc445n-convert-artifact-256064495/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,}