Name: series-workflowj76f2 Phase: Succeeded StartedAt: 2026-07-08 06:56:11 +0000 UTC FinishedAt: 2026-07-08 11:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[0] Phase: Succeeded StartedAt: 2026-07-08 06:56:11 +0000 UTC FinishedAt: 2026-07-08 07:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 06:56:11 +0000 UTC FinishedAt: 2026-07-08 07:19:56 +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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "e4e745bf-0314-428c-87bd-ae1866248bc4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "thp_underused", "deferred_split_scan", "map_anon_folio_pte_nopf" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhwX3VuZGVydXNlZCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDssCiAgICAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoZW4gbWFwcGVkIGFuZCBzY2FsaW5nIHRoZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBmb2xpbyBzaXplIGluIHRocF91bmRlcnVzZWQoKS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBzaHJpbmtpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNzoxOTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZWEwNDQ1ZDZjMTdmMDEuLmEwOTgwMWI0NDIxZDQzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MjAsMjQgJiM0Mzs0NDIwLDI4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpbnQgbnVtX3plcm9fcGFnZXMgPSAwLCBudW1fZmlsbGVkX3BhZ2VzID0gMDtcbiYjNDM7XHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF9wdGVzX25vbmU7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiYjNDM7XHRtYXhfcHRlc19ub25lID0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lICogbnJfcGFnZXMgLyBIUEFHRV9QTURfTlI7XG4mIzQzO1xuJiM0MztcdGlmIChtYXhfcHRlc19ub25lIFx1MDAzZT0gbnJfcGFnZXMgLSAxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChwYWdlc19pZGVudGljYWwoZm9saW9fcGFnZShmb2xpbywgaSksIFpFUk9fUEFHRSgwKSkpIHtcbi1cdFx0XHRpZiAoJiM0MzsmIzQzO251bV96ZXJvX3BhZ2VzIFx1MDAzZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7bnVtX3plcm9fcGFnZXMgXHUwMDNlIG1heF9wdGVzX25vbmUpXG4gXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEFub3RoZXIgcGF0aCBmb3IgZWFybHkgZXhpdCBvbmNlIHRoZSBudW1iZXJcbiBcdFx0XHQgKiBvZiBub24temVybyBmaWxsZWQgcGFnZXMgZXhjZWVkcyB0aHJlc2hvbGQuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKCYjNDM7JiM0MztudW1fZmlsbGVkX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBucl9wYWdlcyAtIG1heF9wdGVzX25vbmUpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA1Njg5YjdjZmY3NmMyMi4uMjY4MzY0NTJkZjYzZWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC01MjQ2LDYgJiM0Mzs1MjQ2LDggQEAgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuIFx0Zm9saW9fYWRkX2xydV92bWEoZm9saW8sIHZtYSk7XG4gXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgZW50cnksIG5yX3BhZ2VzKTtcbiBcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2UoTlVMTCwgdm1hLCBhZGRyLCBwdGUsIG5yX3BhZ2VzKTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4mIzQzO1x0XHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RocF91bmRlcnVzZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7LAogICAgJiMzNDttYXBfYW5vbl9mb2xpb19wdGVfbm9wZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGRlZmVycmVkIHNwbGl0dGluZyBvZiBtdWx0aS1zaXplIFRIUHMgKG1USFApIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGVuIG1hcHBlZCBhbmQgc2NhbGluZyB0aGUga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgZm9saW8gc2l6ZSBpbiB0aHBfdW5kZXJ1c2VkKCkuIFRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgc2hyaW5raW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAwNzoxOTowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi5hMDk4MDFiNDQyMWQ0MyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC00NDIwLDI0ICYjNDM7NDQyMCwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgbnVtX3plcm9fcGFnZXMgPSAwLCBudW1fZmlsbGVkX3BhZ2VzID0gMDsKJiM0MzsJaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZTsKIAlpbnQgaTsKIAotCWlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSkKJiM0MzsJbWF4X3B0ZXNfbm9uZSA9IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSAqIG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SOwomIzQzOwomIzQzOwlpZiAobWF4X3B0ZXNfbm9uZSAmZ3Q7PSBucl9wYWdlcyAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiAJCXJldHVybiBmYWxzZTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkgewotCQkJaWYgKCYjNDM7JiM0MztudW1femVyb19wYWdlcyAmZ3Q7IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSkKJiM0MzsJCQlpZiAoJiM0MzsmIzQzO251bV96ZXJvX3BhZ2VzICZndDsgbWF4X3B0ZXNfbm9uZSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBBbm90aGVyIHBhdGggZm9yIGVhcmx5IGV4aXQgb25jZSB0aGUgbnVtYmVyCiAJCQkgKiBvZiBub24temVybyBmaWxsZWQgcGFnZXMgZXhjZWVkcyB0aHJlc2hvbGQuCiAJCQkgKi8KLQkJCWlmICgmIzQzOyYjNDM7bnVtX2ZpbGxlZF9wYWdlcyAmZ3Q7PSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpCiYjNDM7CQkJaWYgKCYjNDM7JiM0MztudW1fZmlsbGVkX3BhZ2VzICZndDs9IG5yX3BhZ2VzIC0gbWF4X3B0ZXNfbm9uZSkKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDU2ODliN2NmZjc2YzIyLi4yNjgzNjQ1MmRmNjNlYiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUyNDYsNiAmIzQzOzUyNDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsCiAJZm9saW9fYWRkX2xydV92bWEoZm9saW8sIHZtYSk7CiAJc2V0X3B0ZXModm1hLSZndDt2bV9tbSwgYWRkciwgcHRlLCBlbnRyeSwgbnJfcGFnZXMpOwogCXVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2UoTlVMTCwgdm1hLCBhZGRyLCBwdGUsIG5yX3BhZ2VzKTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQomIzQzOwkJZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcHRlX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyB0d28gY3J1Y2lhbCBhcmVhcyBvZiBtZW1vcnkgbWFuYWdlbWVudDogYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdW5kZXJzdGFuZGluZyBleGFjdGx5ICpob3cqIHRoZXNlIG1vZHVsZXMgYXJlIGJlaW5nIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHRocF91bmRlcnVzZWRgIGluIGBtbS9odWdlX21lbW9yeS5jYCBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIHNwb3RsaWdodC4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgdGhpcyBmdW5jdGlvbiAqZG9lcyog4oCTIGl0cyBjb3JlIHB1cnBvc2UsIGl0cyBhbGdvcml0aG0g4oCTIGFuZCB0aGVuIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgY29udGV4dCBpcyBwYXJhbW91bnQuIFdoZXJlIGlzIGl0IGJlaW5nIGludm9rZWQ/IFdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzIHdpdGhpbiBpdD8KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBmaXJtIGhhbmRsZSBvbiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgIGluIGBtbS9tZW1vcnkuY2AuIEp1c3QgbGlrZSB3aXRoIGB0aHBfdW5kZXJ1c2VkYCwgSeKAmWxsIG5lZWQgYSBkZWVwIGRpdmUgaW50byBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCYjMzk7cyB0aGUgZnVuY3Rpb24mIzM5O3MgcmVzcG9uc2liaWxpdHk/IFdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgaXRzIGV4ZWN1dGlvbj8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBtYXBwaW5nIHByb2Nlc3M/IFRoZSAmIzM0O25vcGYmIzM0OyBzdWZmaXggc3VnZ2VzdHMgaXQgbWlnaHQgYmUgYSBub24tcGFnZSBmYXVsdGluZyB2ZXJzaW9uLiBXaGF0IGRvZXMgdGhhdCBpbXBseSBpbiB0aGlzIGNvbnRleHQ/IEFnYWluLCBJIG5lZWQgdG8gY2hhcnQgaXRzIGNhbGxzLCB1bnJhdmVsaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgbWVtb3J5IHN1YnN5c3RlbS4gSSBuZWVkIHRvIGNvbm5lY3QgdGhlIGRvdHMgYmV0d2VlbiB0aG9zZSBjYWxscyBhbmQgdGhlIGNoYW5nZXMgaW4gdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RocF91bmRlcnVzZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NDExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMDpzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0MjEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMS1cdFx0XHRcdGdvdG8gbmV4dDtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwMjpcdFx0XHR1bmRlcnVzZWQgPSB0aHBfdW5kZXJ1c2VkKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMy1cdFx0XHRpZiAoIXVuZGVydXNlZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTYtXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjQ1MTc6XHRcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXG5tbS9odWdlX21lbW9yeS5jLTQ1MTgtXHRcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xuLS1cbm1tL3Ztc3RhdC5jPTExODg9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTQxMi1cdFtJKFRIUF9ERUZFUlJFRF9TUExJVF9QQUdFKV1cdFx0PSBcJiMzNDt0aHBfZGVmZXJyZWRfc3BsaXRfcGFnZVwmIzM0Oyxcbm1tL3Ztc3RhdC5jOjE0MTM6XHRbSShUSFBfVU5ERVJVU0VEX1NQTElUX1BBR0UpXVx0XHQ9IFwmIzM0O3RocF91bmRlcnVzZWRfc3BsaXRfcGFnZVwmIzM0Oyxcbm1tL3Ztc3RhdC5jLTE0MTQtXHRbSShUSFBfU1BMSVRfUE1EKV1cdFx0XHQ9IFwmIzM0O3RocF9zcGxpdF9wbWRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBEZXRhaWxzKioKCkFscmlnaHQsIHNvIGB0aHBfdW5kZXJ1c2VkYCBpcyB0cmlnZ2VyZWQgZnJvbSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgc29tZSBraW5kIG9mIGRlZmVycmVkIHNwbGl0dGluZyBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGhlcmUuIEl04oCZcyBsaWtlbHkgcmVsYXRlZCB0byBvcHRpbWl6aW5nIG1lbW9yeSB1c2FnZSBvciBtYW5hZ2luZyBwYWdlIGZhdWx0cyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCgpOb3csIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAuLi4gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgbWFwcGluZyBhbm9ueW1vdXMgZm9saW9zLCBhbmQgdGhlIGBub3BmYCBzdWZmaXggbGlrZWx5IHNpZ25pZmllcyDigJxubyBwYWdlIGZhdWx04oCdLiBPa2F5LCB0aGF0JiMzOTtzIGluIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBgdGhwX3VuZGVydXNlZGAsIGFuZCB0aGlzIG1hcHBpbmcgZnVuY3Rpb24uIEkga25vdyBob3cgYW5vbnltb3VzIG1lbW9yeSB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgbW0vbWVtb3J5LmNgIGFuZCBjaGVjayBob3cgaXQgdGllcyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGlzIGBub3BmYCBtYXBwaW5nIGlzIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBmb3IgcGVyZm9ybWFuY2U/IFRvIGF2b2lkIGRlYWRsb2Nrcz8gV2hhdCYjMzk7cyB0aGUgdGhyZWFkL2NvbnRleHQgaW52b2x2ZWQgaGVyZT8gR290dGEgY2hlY2sgb3V0IHRoYXQgY29kZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xMjc5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNDQwLVx0XHRwbWRfcG9wdWxhdGUobW0sIHBtZCwgcG1kX3BndGFibGUoX3BtZCkpO1xubW0va2h1Z2VwYWdlZC5jOjE0NDE6XHRcdG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKGZvbGlvLCBwdGUsIHZtYSwgc3RhcnRfYWRkcixcbm1tL2todWdlcGFnZWQuYy0xNDQyLVx0XHRcdFx0XHQgIC8qdWZmZF93cD0qLyBmYWxzZSk7XG4tLVxubW0vbWVtb3J5LmM9NTE0MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUyMjktXG5tbS9tZW1vcnkuYzo1MjMwOnZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbm1tL21lbW9yeS5jLTUyMzEtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmM9NTI1Mz1zdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbi0tXG5tbS9tZW1vcnkuYy01MjU3LVxubW0vbWVtb3J5LmM6NTI1ODpcdG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKGZvbGlvLCBwdGUsIHZtYSwgYWRkciwgdWZmZF93cCk7XG5tbS9tZW1vcnkuYy01MjU5LVx0YWRkX21tX2NvdW50ZXIodm1hLVx1MDAzZXZtX21tLCBNTV9BTk9OUEFHRVMsIDFMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkgc2VlIHRoaXMgY2hhaW4gb2YgZXZlbnRzIHVuZm9sZGluZzoKCioqVHJhY2luZyB0aGUgTWVtb3J5IE1hcHBpbmcgUHJvY2VzcyoqCgpSaWdodCwgc28gYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBpcyBiZWluZyB1c2VkLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBjb2xsYXBzZV9odWdlX3BhZ2VgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCAqYW5kKiBgbWFwX2Fub25fZm9saW9fcHRlX3BmYCBpbiBgbW0vbWVtb3J5LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3ZSYjMzk7dmUgZ290IHR3byBlbnRyeSBwb2ludHMgdXRpbGl6aW5nIHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSBpcyBpbnRlcmVzdGluZy4mIzM0OyBgY29sbGFwc2VfaHVnZV9wYWdlYCBzdWdnZXN0cyBpdCBpcyByZWxhdGVkIHRvIGtlcm5lbCBodWdlIHBhZ2VzLCBJIHdvdWxkIGV4cGVjdC4gVGhlIHNlY29uZCwgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZmAsIGxvb2tzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBwYWdlIGZhdWx0cyBpbiBnZW5lcmFsLCBnaXZlbiB0aGUgbmFtZS4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24sIGl0IGxvb2tzIGxpa2UgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZmAgaXMgdGhlIG1vcmUgd2lkZWx5IHVzZWQgZnVuY3Rpb24gYmV0d2VlbiB0aGUgdHdvLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0IG9uZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2Fub25fZm9saW9fcHRlX3BmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTUyMzA9dm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuLS1cbm1tL21lbW9yeS5jLTUyNTItXG5tbS9tZW1vcnkuYzo1MjUzOnN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxubW0vbWVtb3J5LmMtNTI1NC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCB1ZmZkX3dwKVxuLS1cbm1tL21lbW9yeS5jPTUyNjk9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM2MC1cdH1cbm1tL21lbW9yeS5jOjUzNjE6XHRtYXBfYW5vbl9mb2xpb19wdGVfcGYoZm9saW8sIHZtZi1cdTAwM2VwdGUsIHZtYSwgYWRkcixcbm1tL21lbW9yeS5jLTUzNjItXHRcdFx0ICAgICAgdm1mX29yaWdfcHRlX3VmZmRfd3Aodm1mKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFub255bW91cyBQYWdlIEZhdWx0IEhhbmRsZXIqKgoKT2theSwgc28gYGRvX2Fub255bW91c19wYWdlYCBpcyB0aGUgY29yZSBoYW5kbGVyIGZvciBhbm9ueW1vdXMgcGFnZSBmYXVsdHMuIFRoZSBjcnV4IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBpbnNlcnRpb24gb2YgYGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkgZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTtgIHdpdGhpbiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLiBSaWdodCwgdGhhdCBtZWFucyB3aGVuZXZlciBhIGxhcmdlLCBhbm9ueW1vdXMgZm9saW8gaXMgbWFwcGVkIOKAkyB3aGV0aGVyIHRocm91Z2ggYSBwYWdlIGZhdWx0IG9yIHZpYSBraHVnZXBhZ2VkIOKAkyBpdCYjMzk7cyBpbW1lZGlhdGVseSBzbGF0ZWQgZm9yIGRlZmVycmVkIHNwbGl0dGluZy4gV2FpdCBhIG1pbnV0ZSwgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBpcyB1dGlsaXplZCBpbiBib3RoIHNjZW5hcmlvcywgaXNuJiMzOTt0IGl0PyBHb3R0YSBrZWVwIHRoYXQgc3RyYWlnaHQuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGB0aHBfdW5kZXJ1c2VkYCBjaGFuZ2VzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBzY2FsaW5nLiBBaCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzY2FsaW5nIGBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVgIGJ5IGBucl9wYWdlcyAvIEhQQUdFX1BNRF9OUmAuIFRoaXMgYWRqdXN0bWVudCBtdXN0IGJlIHRvIGFjY29tbW9kYXRlIG1USFAgKG11bHRpLXNpemUgVEhQKSB3aXRoaW4gdGhlIGRlZmVycmVkIHNwbGl0IHNocmlua2VyLiBTZWVtcyBsb2dpY2FsIGFuZCBjZXJ0YWlubHkgcmVhY2hhYmxlIGluIHRoZSBjb2RlIHBhdGguCgpBbHJpZ2h0LCBzZWVtcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuIFRoaXMgY2xlYXJseSBsZXZlcmFnZXMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZm9yIHRoZSBwcmVjaXNlIFRIUCBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgY29yZSBpZGVhIGlzIHByZXR0eSBjbGVhcjogd2UgbmVlZCB0byBlbmFibGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gcmVhbCBkZWJhdGUgdGhlcmUg4oCTIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBhcmUgZ2VuZXJhbGx5IHdlbGwtdW5kZXJzdG9vZCwgZXNwZWNpYWxseSBmb3IgdGhlIHdvcmtsb2FkcyB3ZSYjMzk7cmUgcnVubmluZy4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzIGFib3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBhbnkgbnVhbmNlcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG1USFA/IElzIHRoZXJlIGEgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIG51YW5jZSB0aGF0IHdlIHNob3VsZCBzcGVjaWZpY2FsbHkgYWRkcmVzcz8gSSBrbm93IHRoZXJlIGFyZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgbVRIUCAobXVsdGlzaXplZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBpcyBzb21ldGhpbmcgdGhhdCBvZmZlcnMgZGlmZmVyZW50IHRyYWRlb2ZmcyBhbmQgbWF5IGJlIG1vcmUgYmVuZWZpY2lhbCBpbiBjZXJ0YWluIHNwZWNpZmljIHNjZW5hcmlvcy4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHRob3NlIGRldGFpbHMsIGFuZCByZXZpZXcgYW55IGFzc29jaWF0ZWQgY29uZmlncywgdG8gZW5zdXJlIHdlJiMzOTtyZSBkZXBsb3lpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHNldHVwIGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gaWRlbnRpZnkgYW55IHNwZWNpZmljIGFkanVzdG1lbnRzIG9yIHR3ZWFrcyBuZWVkZWQgdG8gZnVsbHkgbGV2ZXJhZ2UgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZvciBvdXIgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qVEhQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODIxPWNvbmZpZyBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCXG4tLVxubW0vS2NvbmZpZy04MjMtXG5tbS9LY29uZmlnOjgyNDpjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxubW0vS2NvbmZpZy04MjUtXHRkZWZfYm9vbCBuXG4tLVxubW0vS2NvbmZpZz05ODA9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk4MS1cbm1tL0tjb25maWc6OTgyOmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05ODMtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVlcCBEaXZlIG9uIGBkZWZlcnJlZF9zcGxpdF9jb3VudGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcGxheSByZWdhcmRpbmcgYGRlZmVycmVkX3NwbGl0X2NvdW50YCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGVsZW1lbnRzIGFyZSBiZWhhdmluZyBhcyBleHBlY3RlZCBpbiB0aGUgY3VycmVudCBwaXBlbGluZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGFyZSBvcHRpbWl6ZWQgYW5kIGFsaWduZWQgd2l0aCBvdXIgcGVyZm9ybWFuY2UgZ29hbHMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBhbnl0aGluZyBmZWVscyBvZmYg4oCTIGFueSByZWdyZXNzaW9ucywgdW5leHBlY3RlZCBiZWhhdmlvcnMsIG9yIGFyZWFzIGZvciBpbW1lZGlhdGUgaW1wcm92ZW1lbnQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBhcyB0aGlzIHdpbGwgZWZmZWN0IGFsbCB0aGUgbGF0ZXIgcHJvY2Vzc2luZyBzdGFnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz03ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtNzUtXHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG5tbS9odWdlX21lbW9yeS5jOjc2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTc3LVx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz05NTY9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk3MS1cdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcbm1tL2h1Z2VfbWVtb3J5LmM6OTcyOlx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2Nhbjtcbm1tL2h1Z2VfbWVtb3J5LmMtOTczLVx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDMxND1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDMyNi0gKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxubW0vaHVnZV9tZW1vcnkuYzo0MzI3OiAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkmIzM5O3MgdW5sb2NrZWRcbm1tL2h1Z2VfbWVtb3J5LmMtNDMyOC0gKiBvbi1zdGFjayBsaXN0LlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ1MT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0NzYtXG5tbS9odWdlX21lbW9yeS5jOjQ0Nzc6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ3OC1cdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS9taWdyYXRlLmM9MTgwNT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbi0tXG5tbS9taWdyYXRlLmMtMTg1MS1cdFx0XHQgKiBPbmx5IGNoZWNrIGl0IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbm1tL21pZ3JhdGUuYzoxODUyOlx0XHRcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXG5tbS9taWdyYXRlLmMtMTg1My1cdFx0XHQgKiBsb2NhbCBsaXN0IGFuZCByZW1vdmluZyBpdCBjYW4gY2F1c2UgdGhlIGxvY2FsIGxpc3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkyOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluJiMzOTtzIGdvaW5nIGludG8gYW5hbHlzaXMgbW9kZS4gSXQmIzM5O3MgdG91Y2hpbmcgYHRocF91bmRlcnVzZWRgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IGBkZWZlcnJlZF9zcGxpdF9zY2FuYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAsIGFuZCBJJiMzOTttIGluc3RhbnRseSB0aGlua2luZyBhYm91dCBob3cgdGhhdCByZWxhdGVzIHRvIGBtYXBfYW5vbl9mb2xpb19wdGVfcGZgIGFuZCBgY29sbGFwc2VfaHVnZV9wYWdlYC4gTXkgaW5pdGlhbCBmb2N1cywgYmFzZWQgb24gdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb24gYHRocF91bmRlcnVzZWRgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLgoKV2FpdCBhIG1pbnV0ZSwgYHRocF91bmRlcnVzZWRgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgYXJlIGRlY2xhcmVkIHN0YXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBkaWcgZGVlcGVyLiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLCBob3dldmVyLCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIEFscmlnaHQsIGxldCYjMzk7cyB1cGRhdGUgbXkgbWVudGFsICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IGxpc3Qgd2l0aCBgdGhwX3VuZGVydXNlZGAsIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCwgYW5kIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAuCgpIbW0sIGV2ZW4gdGhvdWdoIGB0aHBfdW5kZXJ1c2VkYCBpcyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGEgcmVsZXZhbnQgcG9pbnQgb2YgY2hhbmdlIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4gQmV5b25kIHRoZSBkaXJlY3QgZnVuY3Rpb25zLCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU2AgaXMgYWxzbyByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzZWUgaG93IHRob3NlIG9wdGlvbnMgYXJlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvZGUgSSYjMzk7bSBhbmFseXppbmcuIEdvdHRhIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTYKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgb3ZlciBhbmQgdGhlIHZlcmRpY3QgaXMgY2xlYXI6IHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBUaGUgY2hhbmdlcyBhcmUgc29saWQsIHRoZXkgYWRkcmVzcyBhIGtub3duIGlzc3VlLCBhbmQgSSBjYW4gc2VlIGhvdyB0aGV5JiMzOTtyZSByZWFjaGFibGUgd2l0aGluIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZS4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGRpdmVzIGludG8gaG93IHdlIGhhbmRsZSB0aGUgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkuIEl0JiMzOTtzIGFkZGluZyBtVEhQcyB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgb25jZSB0aGV54oCZcmUgbWFwcGVkLCBhbmQg4oCTIGltcG9ydGFudGx5IOKAkyBpdOKAmXMgZHluYW1pY2FsbHkgYWRqdXN0aW5nIHRoZSBga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lYCB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgd2l0aGluIGB0aHBfdW5kZXJ1c2VkKClgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHRocF91bmRlcnVzZWRgIHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGljdGF0ZXMgaG93IFRIUHMgYXJlIHNocnVuayB0byByZWNsYWltIHNwYWNlLgoKSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGB0aHBfdW5kZXJ1c2VkYCwgYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBhbmQgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBhcyBJIGludmVzdGlnYXRlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyB0d2Vhay4gVGhlc2Ugc3ltYm9scyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3VidGxlIGludGVycGxheSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IGltcGFjdGZ1bCBjaGFuZ2UgdG8gVEhQIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IGl0IGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhwX3VuZGVydXNlZCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDssCiAgICAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoZW4gbWFwcGVkIGFuZCBzY2FsaW5nIHRoZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBmb2xpbyBzaXplIGluIHRocF91bmRlcnVzZWQoKS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBzaHJpbmtpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhwX3VuZGVydXNlZCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDssCiAgICAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoZW4gbWFwcGVkIGFuZCBzY2FsaW5nIHRoZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBmb2xpbyBzaXplIGluIHRocF91bmRlcnVzZWQoKS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBzaHJpbmtpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOTowNC40NjY2OTYyMTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI2MDU4NDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MDQuNDY2NzA1NTkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzYwMTQ3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDc6MTk6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYTA5ODAxYjQ0MjFkNDMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQyMCwyNCArNDQyMCwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4gc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGludCBudW1femVyb19wYWdlcyA9IDAsIG51bV9maWxsZWRfcGFnZXMgPSAwO1xcbitcXHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcXG4rXFx0bWF4X3B0ZXNfbm9uZSA9IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSAqIG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SO1xcbitcXG4rXFx0aWYgKG1heF9wdGVzX25vbmUgXFx1MDAzZT0gbnJfcGFnZXMgLSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG4gXFx0XFx0aWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkge1xcbi1cXHRcXHRcXHRpZiAoKytudW1femVyb19wYWdlcyBcXHUwMDNlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG4rXFx0XFx0XFx0aWYgKCsrbnVtX3plcm9fcGFnZXMgXFx1MDAzZSBtYXhfcHRlc19ub25lKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogQW5vdGhlciBwYXRoIGZvciBlYXJseSBleGl0IG9uY2UgdGhlIG51bWJlclxcbiBcXHRcXHRcXHQgKiBvZiBub24temVybyBmaWxsZWQgcGFnZXMgZXhjZWVkcyB0aHJlc2hvbGQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoKytudW1fZmlsbGVkX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUiAtIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG4rXFx0XFx0XFx0aWYgKCsrbnVtX2ZpbGxlZF9wYWdlcyBcXHUwMDNlPSBucl9wYWdlcyAtIG1heF9wdGVzX25vbmUpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA1Njg5YjdjZmY3NmMyMi4uMjY4MzY0NTJkZjYzZWIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MjQ2LDYgKzUyNDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXFxuIFxcdGZvbGlvX2FkZF9scnVfdm1hKGZvbGlvLCB2bWEpO1xcbiBcXHRzZXRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIGVudHJ5LCBucl9wYWdlcyk7XFxuIFxcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2UoTlVMTCwgdm1hLCBhZGRyLCBwdGUsIG5yX3BhZ2VzKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbitcXHRcXHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MDUuMjAzODE5OTk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyMzQ1MTAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNzoxOTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYTA5ODAxYjQ0MjFkNDMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQyMCwyNCArNDQyMCwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IG51bV96ZXJvX3BhZ2VzID0gMCwgbnVtX2ZpbGxlZF9wYWdlcyA9IDA7XG4rXHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxuK1x0bWF4X3B0ZXNfbm9uZSA9IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSAqIG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SO1xuK1xuK1x0aWYgKG1heF9wdGVzX25vbmUgXHUwMDNlPSBucl9wYWdlcyAtIDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4gXHRcdGlmIChwYWdlc19pZGVudGljYWwoZm9saW9fcGFnZShmb2xpbywgaSksIFpFUk9fUEFHRSgwKSkpIHtcbi1cdFx0XHRpZiAoKytudW1femVyb19wYWdlcyBcdTAwM2Uga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxuK1x0XHRcdGlmICgrK251bV96ZXJvX3BhZ2VzIFx1MDAzZSBtYXhfcHRlc19ub25lKVxuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBbm90aGVyIHBhdGggZm9yIGVhcmx5IGV4aXQgb25jZSB0aGUgbnVtYmVyXG4gXHRcdFx0ICogb2Ygbm9uLXplcm8gZmlsbGVkIHBhZ2VzIGV4Y2VlZHMgdGhyZXNob2xkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICgrK251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG4rXHRcdFx0aWYgKCsrbnVtX2ZpbGxlZF9wYWdlcyBcdTAwM2U9IG5yX3BhZ2VzIC0gbWF4X3B0ZXNfbm9uZSlcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDU2ODliN2NmZjc2YzIyLi4yNjgzNjQ1MmRmNjNlYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTUyNDYsNiArNTI0Niw4IEBAIHZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbiBcdGZvbGlvX2FkZF9scnVfdm1hKGZvbGlvLCB2bWEpO1xuIFx0c2V0X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIGVudHJ5LCBucl9wYWdlcyk7XG4gXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKE5VTEwsIHZtYSwgYWRkciwgcHRlLCBucl9wYWdlcyk7XG4rXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4rXHRcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MDUuMjAzODIyODY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5NDQ3NTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIHR3byBjcnVjaWFsIGFyZWFzIG9mIG1lbW9yeSBtYW5hZ2VtZW50OiBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIGBtbS9tZW1vcnkuY2AuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGV4YWN0bHkgKmhvdyogdGhlc2UgbW9kdWxlcyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGB0aHBfdW5kZXJ1c2VkYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzcG90bGlnaHQuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoaXMgZnVuY3Rpb24gKmRvZXMqIOKAkyBpdHMgY29yZSBwdXJwb3NlLCBpdHMgYWxnb3JpdGhtIOKAkyBhbmQgdGhlbiB0cmFjZSBpdHMgY2FsbCBncmFwaC4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIGNvbnRleHQgaXMgcGFyYW1vdW50LiBXaGVyZSBpcyBpdCBiZWluZyBpbnZva2VkPyBXaGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyB3aXRoaW4gaXQ/XG5cbk5leHQsIEkgbmVlZCB0byBnZXQgYSBmaXJtIGhhbmRsZSBvbiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgIGluIGBtbS9tZW1vcnkuY2AuIEp1c3QgbGlrZSB3aXRoIGB0aHBfdW5kZXJ1c2VkYCwgSeKAmWxsIG5lZWQgYSBkZWVwIGRpdmUgaW50byBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCdzIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5PyBXaGF0IHNjZW5hcmlvcyB0cmlnZ2VyIGl0cyBleGVjdXRpb24/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgbWFwcGluZyBwcm9jZXNzPyBUaGUgXCJub3BmXCIgc3VmZml4IHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGEgbm9uLXBhZ2UgZmF1bHRpbmcgdmVyc2lvbi4gV2hhdCBkb2VzIHRoYXQgaW1wbHkgaW4gdGhpcyBjb250ZXh0PyBBZ2FpbiwgSSBuZWVkIHRvIGNoYXJ0IGl0cyBjYWxscywgdW5yYXZlbGluZyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIG1lbW9yeSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBjb25uZWN0IHRoZSBkb3RzIGJldHdlZW4gdGhvc2UgY2FsbHMgYW5kIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjEyLjU5ODMwMDkzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzQ3MjMzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGhwX3VuZGVydXNlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00NDExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDE5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMDpzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00NDIxLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTAxLVxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MDI6XFx0XFx0XFx0dW5kZXJ1c2VkID0gdGhwX3VuZGVydXNlZChmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTAzLVxcdFxcdFxcdGlmICghdW5kZXJ1c2VkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE2LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTE3OlxcdFxcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXFxubW0vaHVnZV9tZW1vcnkuYy00NTE4LVxcdFxcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xcbi0tXFxubW0vdm1zdGF0LmM9MTE4OD1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTE0MTItXFx0W0koVEhQX0RFRkVSUkVEX1NQTElUX1BBR0UpXVxcdFxcdD0gXFxcInRocF9kZWZlcnJlZF9zcGxpdF9wYWdlXFxcIixcXG5tbS92bXN0YXQuYzoxNDEzOlxcdFtJKFRIUF9VTkRFUlVTRURfU1BMSVRfUEFHRSldXFx0XFx0PSBcXFwidGhwX3VuZGVydXNlZF9zcGxpdF9wYWdlXFxcIixcXG5tbS92bXN0YXQuYy0xNDE0LVxcdFtJKFRIUF9TUExJVF9QTUQpXVxcdFxcdFxcdD0gXFxcInRocF9zcGxpdF9wbWRcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOToxMi45MzMwMzMxMjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMwMTU2OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGV0YWlscyoqXG5cbkFscmlnaHQsIHNvIGB0aHBfdW5kZXJ1c2VkYCBpcyB0cmlnZ2VyZWQgZnJvbSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBzb21lIGtpbmQgb2YgZGVmZXJyZWQgc3BsaXR0aW5nIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gaGVyZS4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIG9wdGltaXppbmcgbWVtb3J5IHVzYWdlIG9yIG1hbmFnaW5nIHBhZ2UgZmF1bHRzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy5cblxuTm93LCBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbWFwcGluZyBhbm9ueW1vdXMgZm9saW9zLCBhbmQgdGhlIGBub3BmYCBzdWZmaXggbGlrZWx5IHNpZ25pZmllcyDigJxubyBwYWdlIGZhdWx04oCdLiBPa2F5LCB0aGF0J3MgaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGB0aHBfdW5kZXJ1c2VkYCwgYW5kIHRoaXMgbWFwcGluZyBmdW5jdGlvbi4gSSBrbm93IGhvdyBhbm9ueW1vdXMgbWVtb3J5IHdvcmtzLCBzbyBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG1tL21lbW9yeS5jYCBhbmQgY2hlY2sgaG93IGl0IHRpZXMgaW50byB0aGUgd2hvbGUgcGljdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhpcyBgbm9wZmAgbWFwcGluZyBpcyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXMgaXQgZm9yIHBlcmZvcm1hbmNlPyBUbyBhdm9pZCBkZWFkbG9ja3M/IFdoYXQncyB0aGUgdGhyZWFkL2NvbnRleHQgaW52b2x2ZWQgaGVyZT8gR290dGEgY2hlY2sgb3V0IHRoYXQgY29kZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOToxNi42NjMxOTUwNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTA4NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTI3OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNDQwLVxcdFxcdHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwbWRfcGd0YWJsZShfcG1kKSk7XFxubW0va2h1Z2VwYWdlZC5jOjE0NDE6XFx0XFx0bWFwX2Fub25fZm9saW9fcHRlX25vcGYoZm9saW8sIHB0ZSwgdm1hLCBzdGFydF9hZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xNDQyLVxcdFxcdFxcdFxcdFxcdCAgLyp1ZmZkX3dwPSovIGZhbHNlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTUxNDE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUyMjktXFxubW0vbWVtb3J5LmM6NTIzMDp2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXFxubW0vbWVtb3J5LmMtNTIzMS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmM9NTI1Mz1zdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG4tLVxcbm1tL21lbW9yeS5jLTUyNTctXFxubW0vbWVtb3J5LmM6NTI1ODpcXHRtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihmb2xpbywgcHRlLCB2bWEsIGFkZHIsIHVmZmRfd3ApO1xcbm1tL21lbW9yeS5jLTUyNTktXFx0YWRkX21tX2NvdW50ZXIodm1hLVxcdTAwM2V2bV9tbSwgTU1fQU5PTlBBR0VTLCAxTCBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjE2Ljc5MjExMTU1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQ1MTE4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEkgc2VlIHRoaXMgY2hhaW4gb2YgZXZlbnRzIHVuZm9sZGluZzpcblxuKipUcmFjaW5nIHRoZSBNZW1vcnkgTWFwcGluZyBQcm9jZXNzKipcblxuUmlnaHQsIHNvIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAgaXMgYmVpbmcgdXNlZCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBjb2xsYXBzZV9odWdlX3BhZ2VgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCAqYW5kKiBgbWFwX2Fub25fZm9saW9fcHRlX3BmYCBpbiBgbW0vbWVtb3J5LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3ZSd2ZSBnb3QgdHdvIGVudHJ5IHBvaW50cyB1dGlsaXppbmcgdGhpcyBmdW5jdGlvbiwgYnV0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtIGlzIGludGVyZXN0aW5nLlwiIGBjb2xsYXBzZV9odWdlX3BhZ2VgIHN1Z2dlc3RzIGl0IGlzIHJlbGF0ZWQgdG8ga2VybmVsIGh1Z2UgcGFnZXMsIEkgd291bGQgZXhwZWN0LiBUaGUgc2Vjb25kLCBgbWFwX2Fub25fZm9saW9fcHRlX3BmYCwgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIHBhZ2UgZmF1bHRzIGluIGdlbmVyYWwsIGdpdmVuIHRoZSBuYW1lLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gd2hhdCdzIGdvaW5nIG9uLCBpdCBsb29rcyBsaWtlIGBtYXBfYW5vbl9mb2xpb19wdGVfcGZgIGlzIHRoZSBtb3JlIHdpZGVseSB1c2VkIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHR3bywgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGF0IG9uZSB0byBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjIwLjUxNjYyNTc3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3OTU4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2Fub25fZm9saW9fcHRlX3BmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz01MjMwPXZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG4tLVxcbm1tL21lbW9yeS5jLTUyNTItXFxubW0vbWVtb3J5LmM6NTI1MzpzdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG5tbS9tZW1vcnkuYy01MjU0LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgdWZmZF93cClcXG4tLVxcbm1tL21lbW9yeS5jPTUyNjk9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzYwLVxcdH1cXG5tbS9tZW1vcnkuYzo1MzYxOlxcdG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZihmb2xpbywgdm1mLVxcdTAwM2VwdGUsIHZtYSwgYWRkcixcXG5tbS9tZW1vcnkuYy01MzYyLVxcdFxcdFxcdCAgICAgIHZtZl9vcmlnX3B0ZV91ZmZkX3dwKHZtZikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOToyMC42Mjk0MjkzNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyNTQyMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQW5vbnltb3VzIFBhZ2UgRmF1bHQgSGFuZGxlcioqXG5cbk9rYXksIHNvIGBkb19hbm9ueW1vdXNfcGFnZWAgaXMgdGhlIGNvcmUgaGFuZGxlciBmb3IgYW5vbnltb3VzIHBhZ2UgZmF1bHRzLiBUaGUgY3J1eCBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW5zZXJ0aW9uIG9mIGBpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7YCB3aXRoaW4gYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYC4gUmlnaHQsIHRoYXQgbWVhbnMgd2hlbmV2ZXIgYSBsYXJnZSwgYW5vbnltb3VzIGZvbGlvIGlzIG1hcHBlZCDigJMgd2hldGhlciB0aHJvdWdoIGEgcGFnZSBmYXVsdCBvciB2aWEga2h1Z2VwYWdlZCDigJMgaXQncyBpbW1lZGlhdGVseSBzbGF0ZWQgZm9yIGRlZmVycmVkIHNwbGl0dGluZy4gV2FpdCBhIG1pbnV0ZSwgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBpcyB1dGlsaXplZCBpbiBib3RoIHNjZW5hcmlvcywgaXNuJ3QgaXQ/IEdvdHRhIGtlZXAgdGhhdCBzdHJhaWdodC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGB0aHBfdW5kZXJ1c2VkYCBjaGFuZ2VzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBzY2FsaW5nLiBBaCwgaXQgbG9va3MgbGlrZSBpdCdzIHNjYWxpbmcgYGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZWAgYnkgYG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SYC4gVGhpcyBhZGp1c3RtZW50IG11c3QgYmUgdG8gYWNjb21tb2RhdGUgbVRIUCAobXVsdGktc2l6ZSBUSFApIHdpdGhpbiB0aGUgZGVmZXJyZWQgc3BsaXQgc2hyaW5rZXIuIFNlZW1zIGxvZ2ljYWwgYW5kIGNlcnRhaW5seSByZWFjaGFibGUgaW4gdGhlIGNvZGUgcGF0aC5cblxuQWxyaWdodCwgc2VlbXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiBUaGlzIGNsZWFybHkgbGV2ZXJhZ2VzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZvciB0aGUgcHJlY2lzZSBUSFAgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjI1LjQyMTk3ODkxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1NzkyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODY0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODc2LVxcbm1tL0tjb25maWc6ODc3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NzgtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODg1LVxcbm1tL0tjb25maWc6ODg2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODg3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkwMi1cXG5tbS9LY29uZmlnOjkwMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTA0LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTI4LVxcbm1tL0tjb25maWc6OTI5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTMwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTM4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05NDctXFxubW0vS2NvbmZpZzo5NDg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTk0OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk3Mi1cXG5tbS9LY29uZmlnOjk3MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk3NC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjI1LjczNzc4MjAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY4MzE0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGlkZWEgaXMgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIHRvIGVuYWJsZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBObyByZWFsIGRlYmF0ZSB0aGVyZSDigJMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIGFyZSBnZW5lcmFsbHkgd2VsbC11bmRlcnN0b29kLCBlc3BlY2lhbGx5IGZvciB0aGUgd29ya2xvYWRzIHdlJ3JlIHJ1bm5pbmcuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcyBhYm91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhbmQgYW55IG51YW5jZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG1USFA/IElzIHRoZXJlIGEgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIG51YW5jZSB0aGF0IHdlIHNob3VsZCBzcGVjaWZpY2FsbHkgYWRkcmVzcz8gSSBrbm93IHRoZXJlIGFyZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgbVRIUCAobXVsdGlzaXplZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBpcyBzb21ldGhpbmcgdGhhdCBvZmZlcnMgZGlmZmVyZW50IHRyYWRlb2ZmcyBhbmQgbWF5IGJlIG1vcmUgYmVuZWZpY2lhbCBpbiBjZXJ0YWluIHNwZWNpZmljIHNjZW5hcmlvcy4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHRob3NlIGRldGFpbHMsIGFuZCByZXZpZXcgYW55IGFzc29jaWF0ZWQgY29uZmlncywgdG8gZW5zdXJlIHdlJ3JlIGRlcGxveWluZyB0aGUgbW9zdCBlZmZpY2llbnQgc2V0dXAgZm9yIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBpZGVudGlmeSBhbnkgc3BlY2lmaWMgYWRqdXN0bWVudHMgb3IgdHdlYWtzIG5lZWRlZCB0byBmdWxseSBsZXZlcmFnZSB0cmFuc3BhcmVudCBodWdlcGFnZXMgZm9yIG91ciBuZWVkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjI5Ljg4NDYxNzA2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNjM5MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZy4qVEhQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyMT1jb25maWcgQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQlxcbi0tXFxubW0vS2NvbmZpZy04MjMtXFxubW0vS2NvbmZpZzo4MjQ6Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG5tbS9LY29uZmlnLTgyNS1cXHRkZWZfYm9vbCBuXFxuLS1cXG5tbS9LY29uZmlnPTk4MD1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTk4MS1cXG5tbS9LY29uZmlnOjk4Mjpjb25maWcgVEhQX1NXQVBcXG5tbS9LY29uZmlnLTk4My1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjMwLjAyNzI2MjI0NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI4NjE3Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIG9uIGBkZWZlcnJlZF9zcGxpdF9jb3VudGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBwdWxsIHVwIHRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXkgcmVnYXJkaW5nIGBkZWZlcnJlZF9zcGxpdF9jb3VudGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBlbGVtZW50cyBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgaW4gdGhlIGN1cnJlbnQgcGlwZWxpbmUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBhcmUgb3B0aW1pemVkIGFuZCBhbGlnbmVkIHdpdGggb3VyIHBlcmZvcm1hbmNlIGdvYWxzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYW55dGhpbmcgZmVlbHMgb2ZmIOKAkyBhbnkgcmVncmVzc2lvbnMsIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBvciBhcmVhcyBmb3IgaW1tZWRpYXRlIGltcHJvdmVtZW50LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgYXMgdGhpcyB3aWxsIGVmZmVjdCBhbGwgdGhlIGxhdGVyIHByb2Nlc3Npbmcgc3RhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MzIuNzU1ODgzODQzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgwNzk1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmZXJyZWRfc3BsaXRfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz03ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTc1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxubW0vaHVnZV9tZW1vcnkuYzo3NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz05NTY9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTcxLVxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XFxubW0vaHVnZV9tZW1vcnkuYzo5NzI6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxubW0vaHVnZV9tZW1vcnkuYy05NzMtXFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MzE0PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzMjYtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG5tbS9odWdlX21lbW9yeS5jOjQzMjc6ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSdzIHVubG9ja2VkXFxubW0vaHVnZV9tZW1vcnkuYy00MzI4LSAqIG9uLXN0YWNrIGxpc3QuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0NTE9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NzYtXFxubW0vaHVnZV9tZW1vcnkuYzo0NDc3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy00NDc4LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9taWdyYXRlLmM9MTgwNT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODUxLVxcdFxcdFxcdCAqIE9ubHkgY2hlY2sgaXQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0Llxcbm1tL21pZ3JhdGUuYzoxODUyOlxcdFxcdFxcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXFxubW0vbWlncmF0ZS5jLTE4NTMtXFx0XFx0XFx0ICogbG9jYWwgbGlzdCBhbmQgcmVtb3ZpbmcgaXQgY2FuIGNhdXNlIHRoZSBsb2NhbCBsaXN0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjMyLjg5Mzk3MTY0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk2OTM0MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBSZWNlbnQgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluJ3MgZ29pbmcgaW50byBhbmFseXNpcyBtb2RlLiBJdCdzIHRvdWNoaW5nIGB0aHBfdW5kZXJ1c2VkYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBhIGZ1bmN0aW9uIGNhbGxlZCBieSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAuIEkgYWxzbyBzZWUgY2hhbmdlcyB0byBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLCBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCBob3cgdGhhdCByZWxhdGVzIHRvIGBtYXBfYW5vbl9mb2xpb19wdGVfcGZgIGFuZCBgY29sbGFwc2VfaHVnZV9wYWdlYC4gTXkgaW5pdGlhbCBmb2N1cywgYmFzZWQgb24gdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb24gYHRocF91bmRlcnVzZWRgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLlxuXG5XYWl0IGEgbWludXRlLCBgdGhwX3VuZGVydXNlZGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhcmUgZGVjbGFyZWQgc3RhdGljLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIGRpZyBkZWVwZXIuIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAsIGhvd2V2ZXIsIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uLiBBbHJpZ2h0LCBsZXQncyB1cGRhdGUgbXkgbWVudGFsIFwiZm9jdXMgc3ltYm9sc1wiIGxpc3Qgd2l0aCBgdGhwX3VuZGVydXNlZGAsIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCwgYW5kIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAuXG5cbkhtbSwgZXZlbiB0aG91Z2ggYHRocF91bmRlcnVzZWRgIGlzIHN0YXRpYywgaXQncyBzdGlsbCBhIHJlbGV2YW50IHBvaW50IG9mIGNoYW5nZSBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdC4gQmV5b25kIHRoZSBkaXJlY3QgZnVuY3Rpb25zLCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU2AgaXMgYWxzbyByZWxldmFudC4gSSdsbCBuZWVkIHRvIGxvb2sgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHRvIHNlZSBob3cgdGhvc2Ugb3B0aW9ucyBhcmUgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY29kZSBJJ20gYW5hbHl6aW5nLiBHb3R0YSBlbnN1cmUgSSdtIGdldHRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MzguNjkwOTA5MDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjU1MjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOTozOS4wOTM0NzEwNjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMDI0MTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEhQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBvdmVyIGFuZCB0aGUgdmVyZGljdCBpcyBjbGVhcjogd2UgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIFRoZSBjaGFuZ2VzIGFyZSBzb2xpZCwgdGhleSBhZGRyZXNzIGEga25vd24gaXNzdWUsIGFuZCBJIGNhbiBzZWUgaG93IHRoZXkncmUgcmVhY2hhYmxlIHdpdGhpbiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGRpdmVzIGludG8gaG93IHdlIGhhbmRsZSB0aGUgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkuIEl0J3MgYWRkaW5nIG1USFBzIHRvIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBvbmNlIHRoZXnigJlyZSBtYXBwZWQsIGFuZCDigJMgaW1wb3J0YW50bHkg4oCTIGl04oCZcyBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIGBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVgIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgZm9saW8gc2l6ZSB3aXRoaW4gYHRocF91bmRlcnVzZWQoKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBgdGhwX3VuZGVydXNlZGAgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaWN0YXRlcyBob3cgVEhQcyBhcmUgc2hydW5rIHRvIHJlY2xhaW0gc3BhY2UuXG5cbkknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGB0aHBfdW5kZXJ1c2VkYCwgYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBhbmQgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBhcyBJIGludmVzdGlnYXRlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyB0d2Vhay4gVGhlc2Ugc3ltYm9scyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3VidGxlIGludGVycGxheSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IGltcGFjdGZ1bCBjaGFuZ2UgdG8gVEhQIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IGl0IGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5NiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6NDQuNjAzNzE1NzcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTQ4OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowj76f2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 06:56:11 +0000 UTC FinishedAt: 2026-07-08 07:19:46 +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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "e4e745bf-0314-428c-87bd-ae1866248bc4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "thp_underused", "deferred_split_scan", "map_anon_folio_pte_nopf" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhwX3VuZGVydXNlZCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDssCiAgICAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoZW4gbWFwcGVkIGFuZCBzY2FsaW5nIHRoZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBmb2xpbyBzaXplIGluIHRocF91bmRlcnVzZWQoKS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBzaHJpbmtpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNzoxOTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZWEwNDQ1ZDZjMTdmMDEuLmEwOTgwMWI0NDIxZDQzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MjAsMjQgJiM0Mzs0NDIwLDI4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpbnQgbnVtX3plcm9fcGFnZXMgPSAwLCBudW1fZmlsbGVkX3BhZ2VzID0gMDtcbiYjNDM7XHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF9wdGVzX25vbmU7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiYjNDM7XHRtYXhfcHRlc19ub25lID0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lICogbnJfcGFnZXMgLyBIUEFHRV9QTURfTlI7XG4mIzQzO1xuJiM0MztcdGlmIChtYXhfcHRlc19ub25lIFx1MDAzZT0gbnJfcGFnZXMgLSAxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChwYWdlc19pZGVudGljYWwoZm9saW9fcGFnZShmb2xpbywgaSksIFpFUk9fUEFHRSgwKSkpIHtcbi1cdFx0XHRpZiAoJiM0MzsmIzQzO251bV96ZXJvX3BhZ2VzIFx1MDAzZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7bnVtX3plcm9fcGFnZXMgXHUwMDNlIG1heF9wdGVzX25vbmUpXG4gXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEFub3RoZXIgcGF0aCBmb3IgZWFybHkgZXhpdCBvbmNlIHRoZSBudW1iZXJcbiBcdFx0XHQgKiBvZiBub24temVybyBmaWxsZWQgcGFnZXMgZXhjZWVkcyB0aHJlc2hvbGQuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKCYjNDM7JiM0MztudW1fZmlsbGVkX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBucl9wYWdlcyAtIG1heF9wdGVzX25vbmUpXG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA1Njg5YjdjZmY3NmMyMi4uMjY4MzY0NTJkZjYzZWIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC01MjQ2LDYgJiM0Mzs1MjQ2LDggQEAgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuIFx0Zm9saW9fYWRkX2xydV92bWEoZm9saW8sIHZtYSk7XG4gXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSwgZW50cnksIG5yX3BhZ2VzKTtcbiBcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2UoTlVMTCwgdm1hLCBhZGRyLCBwdGUsIG5yX3BhZ2VzKTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4mIzQzO1x0XHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RocF91bmRlcnVzZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7LAogICAgJiMzNDttYXBfYW5vbl9mb2xpb19wdGVfbm9wZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGRlZmVycmVkIHNwbGl0dGluZyBvZiBtdWx0aS1zaXplIFRIUHMgKG1USFApIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGVuIG1hcHBlZCBhbmQgc2NhbGluZyB0aGUga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgZm9saW8gc2l6ZSBpbiB0aHBfdW5kZXJ1c2VkKCkuIFRoaXMgYWZmZWN0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBUSFAgc2hyaW5raW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAwNzoxOTowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGVhMDQ0NWQ2YzE3ZjAxLi5hMDk4MDFiNDQyMWQ0MyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC00NDIwLDI0ICYjNDM7NDQyMCwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgbnVtX3plcm9fcGFnZXMgPSAwLCBudW1fZmlsbGVkX3BhZ2VzID0gMDsKJiM0MzsJaW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZTsKIAlpbnQgaTsKIAotCWlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSkKJiM0MzsJbWF4X3B0ZXNfbm9uZSA9IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSAqIG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SOwomIzQzOwomIzQzOwlpZiAobWF4X3B0ZXNfbm9uZSAmZ3Q7PSBucl9wYWdlcyAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiAJCXJldHVybiBmYWxzZTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkgewotCQkJaWYgKCYjNDM7JiM0MztudW1femVyb19wYWdlcyAmZ3Q7IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSkKJiM0MzsJCQlpZiAoJiM0MzsmIzQzO251bV96ZXJvX3BhZ2VzICZndDsgbWF4X3B0ZXNfbm9uZSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBBbm90aGVyIHBhdGggZm9yIGVhcmx5IGV4aXQgb25jZSB0aGUgbnVtYmVyCiAJCQkgKiBvZiBub24temVybyBmaWxsZWQgcGFnZXMgZXhjZWVkcyB0aHJlc2hvbGQuCiAJCQkgKi8KLQkJCWlmICgmIzQzOyYjNDM7bnVtX2ZpbGxlZF9wYWdlcyAmZ3Q7PSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpCiYjNDM7CQkJaWYgKCYjNDM7JiM0MztudW1fZmlsbGVkX3BhZ2VzICZndDs9IG5yX3BhZ2VzIC0gbWF4X3B0ZXNfbm9uZSkKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDU2ODliN2NmZjc2YzIyLi4yNjgzNjQ1MmRmNjNlYiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUyNDYsNiAmIzQzOzUyNDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsCiAJZm9saW9fYWRkX2xydV92bWEoZm9saW8sIHZtYSk7CiAJc2V0X3B0ZXModm1hLSZndDt2bV9tbSwgYWRkciwgcHRlLCBlbnRyeSwgbnJfcGFnZXMpOwogCXVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2UoTlVMTCwgdm1hLCBhZGRyLCBwdGUsIG5yX3BhZ2VzKTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQomIzQzOwkJZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcHRlX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyB0d28gY3J1Y2lhbCBhcmVhcyBvZiBtZW1vcnkgbWFuYWdlbWVudDogYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdW5kZXJzdGFuZGluZyBleGFjdGx5ICpob3cqIHRoZXNlIG1vZHVsZXMgYXJlIGJlaW5nIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHRocF91bmRlcnVzZWRgIGluIGBtbS9odWdlX21lbW9yeS5jYCBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIHNwb3RsaWdodC4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgdGhpcyBmdW5jdGlvbiAqZG9lcyog4oCTIGl0cyBjb3JlIHB1cnBvc2UsIGl0cyBhbGdvcml0aG0g4oCTIGFuZCB0aGVuIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgY29udGV4dCBpcyBwYXJhbW91bnQuIFdoZXJlIGlzIGl0IGJlaW5nIGludm9rZWQ/IFdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzIHdpdGhpbiBpdD8KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBmaXJtIGhhbmRsZSBvbiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgIGluIGBtbS9tZW1vcnkuY2AuIEp1c3QgbGlrZSB3aXRoIGB0aHBfdW5kZXJ1c2VkYCwgSeKAmWxsIG5lZWQgYSBkZWVwIGRpdmUgaW50byBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCYjMzk7cyB0aGUgZnVuY3Rpb24mIzM5O3MgcmVzcG9uc2liaWxpdHk/IFdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgaXRzIGV4ZWN1dGlvbj8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBtYXBwaW5nIHByb2Nlc3M/IFRoZSAmIzM0O25vcGYmIzM0OyBzdWZmaXggc3VnZ2VzdHMgaXQgbWlnaHQgYmUgYSBub24tcGFnZSBmYXVsdGluZyB2ZXJzaW9uLiBXaGF0IGRvZXMgdGhhdCBpbXBseSBpbiB0aGlzIGNvbnRleHQ/IEFnYWluLCBJIG5lZWQgdG8gY2hhcnQgaXRzIGNhbGxzLCB1bnJhdmVsaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgbWVtb3J5IHN1YnN5c3RlbS4gSSBuZWVkIHRvIGNvbm5lY3QgdGhlIGRvdHMgYmV0d2VlbiB0aG9zZSBjYWxscyBhbmQgdGhlIGNoYW5nZXMgaW4gdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RocF91bmRlcnVzZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NDExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMDpzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0MjEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMS1cdFx0XHRcdGdvdG8gbmV4dDtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwMjpcdFx0XHR1bmRlcnVzZWQgPSB0aHBfdW5kZXJ1c2VkKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMy1cdFx0XHRpZiAoIXVuZGVydXNlZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTYtXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjQ1MTc6XHRcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXG5tbS9odWdlX21lbW9yeS5jLTQ1MTgtXHRcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xuLS1cbm1tL3Ztc3RhdC5jPTExODg9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTQxMi1cdFtJKFRIUF9ERUZFUlJFRF9TUExJVF9QQUdFKV1cdFx0PSBcJiMzNDt0aHBfZGVmZXJyZWRfc3BsaXRfcGFnZVwmIzM0Oyxcbm1tL3Ztc3RhdC5jOjE0MTM6XHRbSShUSFBfVU5ERVJVU0VEX1NQTElUX1BBR0UpXVx0XHQ9IFwmIzM0O3RocF91bmRlcnVzZWRfc3BsaXRfcGFnZVwmIzM0Oyxcbm1tL3Ztc3RhdC5jLTE0MTQtXHRbSShUSFBfU1BMSVRfUE1EKV1cdFx0XHQ9IFwmIzM0O3RocF9zcGxpdF9wbWRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBEZXRhaWxzKioKCkFscmlnaHQsIHNvIGB0aHBfdW5kZXJ1c2VkYCBpcyB0cmlnZ2VyZWQgZnJvbSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgc29tZSBraW5kIG9mIGRlZmVycmVkIHNwbGl0dGluZyBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGhlcmUuIEl04oCZcyBsaWtlbHkgcmVsYXRlZCB0byBvcHRpbWl6aW5nIG1lbW9yeSB1c2FnZSBvciBtYW5hZ2luZyBwYWdlIGZhdWx0cyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCgpOb3csIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAuLi4gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgbWFwcGluZyBhbm9ueW1vdXMgZm9saW9zLCBhbmQgdGhlIGBub3BmYCBzdWZmaXggbGlrZWx5IHNpZ25pZmllcyDigJxubyBwYWdlIGZhdWx04oCdLiBPa2F5LCB0aGF0JiMzOTtzIGluIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBgdGhwX3VuZGVydXNlZGAsIGFuZCB0aGlzIG1hcHBpbmcgZnVuY3Rpb24uIEkga25vdyBob3cgYW5vbnltb3VzIG1lbW9yeSB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgbW0vbWVtb3J5LmNgIGFuZCBjaGVjayBob3cgaXQgdGllcyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGlzIGBub3BmYCBtYXBwaW5nIGlzIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBmb3IgcGVyZm9ybWFuY2U/IFRvIGF2b2lkIGRlYWRsb2Nrcz8gV2hhdCYjMzk7cyB0aGUgdGhyZWFkL2NvbnRleHQgaW52b2x2ZWQgaGVyZT8gR290dGEgY2hlY2sgb3V0IHRoYXQgY29kZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xMjc5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xNDQwLVx0XHRwbWRfcG9wdWxhdGUobW0sIHBtZCwgcG1kX3BndGFibGUoX3BtZCkpO1xubW0va2h1Z2VwYWdlZC5jOjE0NDE6XHRcdG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKGZvbGlvLCBwdGUsIHZtYSwgc3RhcnRfYWRkcixcbm1tL2todWdlcGFnZWQuYy0xNDQyLVx0XHRcdFx0XHQgIC8qdWZmZF93cD0qLyBmYWxzZSk7XG4tLVxubW0vbWVtb3J5LmM9NTE0MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUyMjktXG5tbS9tZW1vcnkuYzo1MjMwOnZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbm1tL21lbW9yeS5jLTUyMzEtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmM9NTI1Mz1zdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbi0tXG5tbS9tZW1vcnkuYy01MjU3LVxubW0vbWVtb3J5LmM6NTI1ODpcdG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKGZvbGlvLCBwdGUsIHZtYSwgYWRkciwgdWZmZF93cCk7XG5tbS9tZW1vcnkuYy01MjU5LVx0YWRkX21tX2NvdW50ZXIodm1hLVx1MDAzZXZtX21tLCBNTV9BTk9OUEFHRVMsIDFMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkgc2VlIHRoaXMgY2hhaW4gb2YgZXZlbnRzIHVuZm9sZGluZzoKCioqVHJhY2luZyB0aGUgTWVtb3J5IE1hcHBpbmcgUHJvY2VzcyoqCgpSaWdodCwgc28gYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBpcyBiZWluZyB1c2VkLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBjb2xsYXBzZV9odWdlX3BhZ2VgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCAqYW5kKiBgbWFwX2Fub25fZm9saW9fcHRlX3BmYCBpbiBgbW0vbWVtb3J5LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3ZSYjMzk7dmUgZ290IHR3byBlbnRyeSBwb2ludHMgdXRpbGl6aW5nIHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSBpcyBpbnRlcmVzdGluZy4mIzM0OyBgY29sbGFwc2VfaHVnZV9wYWdlYCBzdWdnZXN0cyBpdCBpcyByZWxhdGVkIHRvIGtlcm5lbCBodWdlIHBhZ2VzLCBJIHdvdWxkIGV4cGVjdC4gVGhlIHNlY29uZCwgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZmAsIGxvb2tzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBwYWdlIGZhdWx0cyBpbiBnZW5lcmFsLCBnaXZlbiB0aGUgbmFtZS4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24sIGl0IGxvb2tzIGxpa2UgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZmAgaXMgdGhlIG1vcmUgd2lkZWx5IHVzZWQgZnVuY3Rpb24gYmV0d2VlbiB0aGUgdHdvLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0IG9uZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2Fub25fZm9saW9fcHRlX3BmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTUyMzA9dm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuLS1cbm1tL21lbW9yeS5jLTUyNTItXG5tbS9tZW1vcnkuYzo1MjUzOnN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxubW0vbWVtb3J5LmMtNTI1NC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCB1ZmZkX3dwKVxuLS1cbm1tL21lbW9yeS5jPTUyNjk9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM2MC1cdH1cbm1tL21lbW9yeS5jOjUzNjE6XHRtYXBfYW5vbl9mb2xpb19wdGVfcGYoZm9saW8sIHZtZi1cdTAwM2VwdGUsIHZtYSwgYWRkcixcbm1tL21lbW9yeS5jLTUzNjItXHRcdFx0ICAgICAgdm1mX29yaWdfcHRlX3VmZmRfd3Aodm1mKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFub255bW91cyBQYWdlIEZhdWx0IEhhbmRsZXIqKgoKT2theSwgc28gYGRvX2Fub255bW91c19wYWdlYCBpcyB0aGUgY29yZSBoYW5kbGVyIGZvciBhbm9ueW1vdXMgcGFnZSBmYXVsdHMuIFRoZSBjcnV4IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBpbnNlcnRpb24gb2YgYGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkgZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTtgIHdpdGhpbiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLiBSaWdodCwgdGhhdCBtZWFucyB3aGVuZXZlciBhIGxhcmdlLCBhbm9ueW1vdXMgZm9saW8gaXMgbWFwcGVkIOKAkyB3aGV0aGVyIHRocm91Z2ggYSBwYWdlIGZhdWx0IG9yIHZpYSBraHVnZXBhZ2VkIOKAkyBpdCYjMzk7cyBpbW1lZGlhdGVseSBzbGF0ZWQgZm9yIGRlZmVycmVkIHNwbGl0dGluZy4gV2FpdCBhIG1pbnV0ZSwgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBpcyB1dGlsaXplZCBpbiBib3RoIHNjZW5hcmlvcywgaXNuJiMzOTt0IGl0PyBHb3R0YSBrZWVwIHRoYXQgc3RyYWlnaHQuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGB0aHBfdW5kZXJ1c2VkYCBjaGFuZ2VzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBzY2FsaW5nLiBBaCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzY2FsaW5nIGBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVgIGJ5IGBucl9wYWdlcyAvIEhQQUdFX1BNRF9OUmAuIFRoaXMgYWRqdXN0bWVudCBtdXN0IGJlIHRvIGFjY29tbW9kYXRlIG1USFAgKG11bHRpLXNpemUgVEhQKSB3aXRoaW4gdGhlIGRlZmVycmVkIHNwbGl0IHNocmlua2VyLiBTZWVtcyBsb2dpY2FsIGFuZCBjZXJ0YWlubHkgcmVhY2hhYmxlIGluIHRoZSBjb2RlIHBhdGguCgpBbHJpZ2h0LCBzZWVtcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuIFRoaXMgY2xlYXJseSBsZXZlcmFnZXMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZm9yIHRoZSBwcmVjaXNlIFRIUCBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgY29yZSBpZGVhIGlzIHByZXR0eSBjbGVhcjogd2UgbmVlZCB0byBlbmFibGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gcmVhbCBkZWJhdGUgdGhlcmUg4oCTIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBhcmUgZ2VuZXJhbGx5IHdlbGwtdW5kZXJzdG9vZCwgZXNwZWNpYWxseSBmb3IgdGhlIHdvcmtsb2FkcyB3ZSYjMzk7cmUgcnVubmluZy4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzIGFib3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBhbnkgbnVhbmNlcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG1USFA/IElzIHRoZXJlIGEgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIG51YW5jZSB0aGF0IHdlIHNob3VsZCBzcGVjaWZpY2FsbHkgYWRkcmVzcz8gSSBrbm93IHRoZXJlIGFyZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgbVRIUCAobXVsdGlzaXplZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBpcyBzb21ldGhpbmcgdGhhdCBvZmZlcnMgZGlmZmVyZW50IHRyYWRlb2ZmcyBhbmQgbWF5IGJlIG1vcmUgYmVuZWZpY2lhbCBpbiBjZXJ0YWluIHNwZWNpZmljIHNjZW5hcmlvcy4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHRob3NlIGRldGFpbHMsIGFuZCByZXZpZXcgYW55IGFzc29jaWF0ZWQgY29uZmlncywgdG8gZW5zdXJlIHdlJiMzOTtyZSBkZXBsb3lpbmcgdGhlIG1vc3QgZWZmaWNpZW50IHNldHVwIGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gaWRlbnRpZnkgYW55IHNwZWNpZmljIGFkanVzdG1lbnRzIG9yIHR3ZWFrcyBuZWVkZWQgdG8gZnVsbHkgbGV2ZXJhZ2UgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZvciBvdXIgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qVEhQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODIxPWNvbmZpZyBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCXG4tLVxubW0vS2NvbmZpZy04MjMtXG5tbS9LY29uZmlnOjgyNDpjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxubW0vS2NvbmZpZy04MjUtXHRkZWZfYm9vbCBuXG4tLVxubW0vS2NvbmZpZz05ODA9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk4MS1cbm1tL0tjb25maWc6OTgyOmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05ODMtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVlcCBEaXZlIG9uIGBkZWZlcnJlZF9zcGxpdF9jb3VudGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcGxheSByZWdhcmRpbmcgYGRlZmVycmVkX3NwbGl0X2NvdW50YCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGVsZW1lbnRzIGFyZSBiZWhhdmluZyBhcyBleHBlY3RlZCBpbiB0aGUgY3VycmVudCBwaXBlbGluZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGFyZSBvcHRpbWl6ZWQgYW5kIGFsaWduZWQgd2l0aCBvdXIgcGVyZm9ybWFuY2UgZ29hbHMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBhbnl0aGluZyBmZWVscyBvZmYg4oCTIGFueSByZWdyZXNzaW9ucywgdW5leHBlY3RlZCBiZWhhdmlvcnMsIG9yIGFyZWFzIGZvciBpbW1lZGlhdGUgaW1wcm92ZW1lbnQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBhcyB0aGlzIHdpbGwgZWZmZWN0IGFsbCB0aGUgbGF0ZXIgcHJvY2Vzc2luZyBzdGFnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz03ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtNzUtXHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG5tbS9odWdlX21lbW9yeS5jOjc2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTc3LVx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz05NTY9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk3MS1cdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcbm1tL2h1Z2VfbWVtb3J5LmM6OTcyOlx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2Nhbjtcbm1tL2h1Z2VfbWVtb3J5LmMtOTczLVx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDMxND1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDMyNi0gKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxubW0vaHVnZV9tZW1vcnkuYzo0MzI3OiAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkmIzM5O3MgdW5sb2NrZWRcbm1tL2h1Z2VfbWVtb3J5LmMtNDMyOC0gKiBvbi1zdGFjayBsaXN0LlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ1MT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0NzYtXG5tbS9odWdlX21lbW9yeS5jOjQ0Nzc6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ3OC1cdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS9taWdyYXRlLmM9MTgwNT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbi0tXG5tbS9taWdyYXRlLmMtMTg1MS1cdFx0XHQgKiBPbmx5IGNoZWNrIGl0IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbm1tL21pZ3JhdGUuYzoxODUyOlx0XHRcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXG5tbS9taWdyYXRlLmMtMTg1My1cdFx0XHQgKiBsb2NhbCBsaXN0IGFuZCByZW1vdmluZyBpdCBjYW4gY2F1c2UgdGhlIGxvY2FsIGxpc3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkyOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluJiMzOTtzIGdvaW5nIGludG8gYW5hbHlzaXMgbW9kZS4gSXQmIzM5O3MgdG91Y2hpbmcgYHRocF91bmRlcnVzZWRgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IGBkZWZlcnJlZF9zcGxpdF9zY2FuYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIHRvIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAsIGFuZCBJJiMzOTttIGluc3RhbnRseSB0aGlua2luZyBhYm91dCBob3cgdGhhdCByZWxhdGVzIHRvIGBtYXBfYW5vbl9mb2xpb19wdGVfcGZgIGFuZCBgY29sbGFwc2VfaHVnZV9wYWdlYC4gTXkgaW5pdGlhbCBmb2N1cywgYmFzZWQgb24gdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb24gYHRocF91bmRlcnVzZWRgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLgoKV2FpdCBhIG1pbnV0ZSwgYHRocF91bmRlcnVzZWRgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgYXJlIGRlY2xhcmVkIHN0YXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBkaWcgZGVlcGVyLiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLCBob3dldmVyLCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIEFscmlnaHQsIGxldCYjMzk7cyB1cGRhdGUgbXkgbWVudGFsICYjMzQ7Zm9jdXMgc3ltYm9scyYjMzQ7IGxpc3Qgd2l0aCBgdGhwX3VuZGVydXNlZGAsIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCwgYW5kIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAuCgpIbW0sIGV2ZW4gdGhvdWdoIGB0aHBfdW5kZXJ1c2VkYCBpcyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGEgcmVsZXZhbnQgcG9pbnQgb2YgY2hhbmdlIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4gQmV5b25kIHRoZSBkaXJlY3QgZnVuY3Rpb25zLCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU2AgaXMgYWxzbyByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzZWUgaG93IHRob3NlIG9wdGlvbnMgYXJlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGNvZGUgSSYjMzk7bSBhbmFseXppbmcuIEdvdHRhIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTYKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgb3ZlciBhbmQgdGhlIHZlcmRpY3QgaXMgY2xlYXI6IHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLiBUaGUgY2hhbmdlcyBhcmUgc29saWQsIHRoZXkgYWRkcmVzcyBhIGtub3duIGlzc3VlLCBhbmQgSSBjYW4gc2VlIGhvdyB0aGV5JiMzOTtyZSByZWFjaGFibGUgd2l0aGluIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZS4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGRpdmVzIGludG8gaG93IHdlIGhhbmRsZSB0aGUgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkuIEl0JiMzOTtzIGFkZGluZyBtVEhQcyB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgb25jZSB0aGV54oCZcmUgbWFwcGVkLCBhbmQg4oCTIGltcG9ydGFudGx5IOKAkyBpdOKAmXMgZHluYW1pY2FsbHkgYWRqdXN0aW5nIHRoZSBga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lYCB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgd2l0aGluIGB0aHBfdW5kZXJ1c2VkKClgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHRocF91bmRlcnVzZWRgIHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGljdGF0ZXMgaG93IFRIUHMgYXJlIHNocnVuayB0byByZWNsYWltIHNwYWNlLgoKSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGB0aHBfdW5kZXJ1c2VkYCwgYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBhbmQgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBhcyBJIGludmVzdGlnYXRlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyB0d2Vhay4gVGhlc2Ugc3ltYm9scyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3VidGxlIGludGVycGxheSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IGltcGFjdGZ1bCBjaGFuZ2UgdG8gVEhQIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IGl0IGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhwX3VuZGVydXNlZCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDssCiAgICAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoZW4gbWFwcGVkIGFuZCBzY2FsaW5nIHRoZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBmb2xpbyBzaXplIGluIHRocF91bmRlcnVzZWQoKS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBzaHJpbmtpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhwX3VuZGVydXNlZCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDssCiAgICAmIzM0O21hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoZW4gbWFwcGVkIGFuZCBzY2FsaW5nIHRoZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBmb2xpbyBzaXplIGluIHRocF91bmRlcnVzZWQoKS4gVGhpcyBhZmZlY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFRIUCBzaHJpbmtpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOTowNC40NjY2OTYyMTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI2MDU4NDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MDQuNDY2NzA1NTkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzYwMTQ3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDc6MTk6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYTA5ODAxYjQ0MjFkNDMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQyMCwyNCArNDQyMCwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4gc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGludCBudW1femVyb19wYWdlcyA9IDAsIG51bV9maWxsZWRfcGFnZXMgPSAwO1xcbitcXHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcXG4rXFx0bWF4X3B0ZXNfbm9uZSA9IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSAqIG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SO1xcbitcXG4rXFx0aWYgKG1heF9wdGVzX25vbmUgXFx1MDAzZT0gbnJfcGFnZXMgLSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG4gXFx0XFx0aWYgKHBhZ2VzX2lkZW50aWNhbChmb2xpb19wYWdlKGZvbGlvLCBpKSwgWkVST19QQUdFKDApKSkge1xcbi1cXHRcXHRcXHRpZiAoKytudW1femVyb19wYWdlcyBcXHUwMDNlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG4rXFx0XFx0XFx0aWYgKCsrbnVtX3plcm9fcGFnZXMgXFx1MDAzZSBtYXhfcHRlc19ub25lKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogQW5vdGhlciBwYXRoIGZvciBlYXJseSBleGl0IG9uY2UgdGhlIG51bWJlclxcbiBcXHRcXHRcXHQgKiBvZiBub24temVybyBmaWxsZWQgcGFnZXMgZXhjZWVkcyB0aHJlc2hvbGQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoKytudW1fZmlsbGVkX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUiAtIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG4rXFx0XFx0XFx0aWYgKCsrbnVtX2ZpbGxlZF9wYWdlcyBcXHUwMDNlPSBucl9wYWdlcyAtIG1heF9wdGVzX25vbmUpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA1Njg5YjdjZmY3NmMyMi4uMjY4MzY0NTJkZjYzZWIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MjQ2LDYgKzUyNDYsOCBAQCB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXFxuIFxcdGZvbGlvX2FkZF9scnVfdm1hKGZvbGlvLCB2bWEpO1xcbiBcXHRzZXRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIGVudHJ5LCBucl9wYWdlcyk7XFxuIFxcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2UoTlVMTCwgdm1hLCBhZGRyLCBwdGUsIG5yX3BhZ2VzKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbitcXHRcXHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MDUuMjAzODE5OTk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyMzQ1MTAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YWQxZDdiNzI3Yzg0MjU1YWQ1NDhkMjMyNDg1NjRiOGFmYTgzODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNzoxOTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBlYTA0NDVkNmMxN2YwMS4uYTA5ODAxYjQ0MjFkNDMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQyMCwyNCArNDQyMCwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IG51bV96ZXJvX3BhZ2VzID0gMCwgbnVtX2ZpbGxlZF9wYWdlcyA9IDA7XG4rXHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X3B0ZXNfbm9uZTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxuK1x0bWF4X3B0ZXNfbm9uZSA9IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSAqIG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SO1xuK1xuK1x0aWYgKG1heF9wdGVzX25vbmUgXHUwMDNlPSBucl9wYWdlcyAtIDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4gXHRcdGlmIChwYWdlc19pZGVudGljYWwoZm9saW9fcGFnZShmb2xpbywgaSksIFpFUk9fUEFHRSgwKSkpIHtcbi1cdFx0XHRpZiAoKytudW1femVyb19wYWdlcyBcdTAwM2Uga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxuK1x0XHRcdGlmICgrK251bV96ZXJvX3BhZ2VzIFx1MDAzZSBtYXhfcHRlc19ub25lKVxuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBbm90aGVyIHBhdGggZm9yIGVhcmx5IGV4aXQgb25jZSB0aGUgbnVtYmVyXG4gXHRcdFx0ICogb2Ygbm9uLXplcm8gZmlsbGVkIHBhZ2VzIGV4Y2VlZHMgdGhyZXNob2xkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICgrK251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG4rXHRcdFx0aWYgKCsrbnVtX2ZpbGxlZF9wYWdlcyBcdTAwM2U9IG5yX3BhZ2VzIC0gbWF4X3B0ZXNfbm9uZSlcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDU2ODliN2NmZjc2YzIyLi4yNjgzNjQ1MmRmNjNlYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTUyNDYsNiArNTI0Niw4IEBAIHZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcbiBcdGZvbGlvX2FkZF9scnVfdm1hKGZvbGlvLCB2bWEpO1xuIFx0c2V0X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsIGVudHJ5LCBucl9wYWdlcyk7XG4gXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKE5VTEwsIHZtYSwgYWRkciwgcHRlLCBucl9wYWdlcyk7XG4rXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4rXHRcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MDUuMjAzODIyODY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5NDQ3NTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIHR3byBjcnVjaWFsIGFyZWFzIG9mIG1lbW9yeSBtYW5hZ2VtZW50OiBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIGBtbS9tZW1vcnkuY2AuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGV4YWN0bHkgKmhvdyogdGhlc2UgbW9kdWxlcyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGB0aHBfdW5kZXJ1c2VkYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzcG90bGlnaHQuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoaXMgZnVuY3Rpb24gKmRvZXMqIOKAkyBpdHMgY29yZSBwdXJwb3NlLCBpdHMgYWxnb3JpdGhtIOKAkyBhbmQgdGhlbiB0cmFjZSBpdHMgY2FsbCBncmFwaC4gVW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIGNvbnRleHQgaXMgcGFyYW1vdW50LiBXaGVyZSBpcyBpdCBiZWluZyBpbnZva2VkPyBXaGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyB3aXRoaW4gaXQ/XG5cbk5leHQsIEkgbmVlZCB0byBnZXQgYSBmaXJtIGhhbmRsZSBvbiBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgIGluIGBtbS9tZW1vcnkuY2AuIEp1c3QgbGlrZSB3aXRoIGB0aHBfdW5kZXJ1c2VkYCwgSeKAmWxsIG5lZWQgYSBkZWVwIGRpdmUgaW50byBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCdzIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5PyBXaGF0IHNjZW5hcmlvcyB0cmlnZ2VyIGl0cyBleGVjdXRpb24/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgbWFwcGluZyBwcm9jZXNzPyBUaGUgXCJub3BmXCIgc3VmZml4IHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGEgbm9uLXBhZ2UgZmF1bHRpbmcgdmVyc2lvbi4gV2hhdCBkb2VzIHRoYXQgaW1wbHkgaW4gdGhpcyBjb250ZXh0PyBBZ2FpbiwgSSBuZWVkIHRvIGNoYXJ0IGl0cyBjYWxscywgdW5yYXZlbGluZyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIG1lbW9yeSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBjb25uZWN0IHRoZSBkb3RzIGJldHdlZW4gdGhvc2UgY2FsbHMgYW5kIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjEyLjU5ODMwMDkzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzQ3MjMzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGhwX3VuZGVydXNlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00NDExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDE5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMDpzdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00NDIxLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTAxLVxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MDI6XFx0XFx0XFx0dW5kZXJ1c2VkID0gdGhwX3VuZGVydXNlZChmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTAzLVxcdFxcdFxcdGlmICghdW5kZXJ1c2VkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE2LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTE3OlxcdFxcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXFxubW0vaHVnZV9tZW1vcnkuYy00NTE4LVxcdFxcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xcbi0tXFxubW0vdm1zdGF0LmM9MTE4OD1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTE0MTItXFx0W0koVEhQX0RFRkVSUkVEX1NQTElUX1BBR0UpXVxcdFxcdD0gXFxcInRocF9kZWZlcnJlZF9zcGxpdF9wYWdlXFxcIixcXG5tbS92bXN0YXQuYzoxNDEzOlxcdFtJKFRIUF9VTkRFUlVTRURfU1BMSVRfUEFHRSldXFx0XFx0PSBcXFwidGhwX3VuZGVydXNlZF9zcGxpdF9wYWdlXFxcIixcXG5tbS92bXN0YXQuYy0xNDE0LVxcdFtJKFRIUF9TUExJVF9QTUQpXVxcdFxcdFxcdD0gXFxcInRocF9zcGxpdF9wbWRcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOToxMi45MzMwMzMxMjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMwMTU2OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGV0YWlscyoqXG5cbkFscmlnaHQsIHNvIGB0aHBfdW5kZXJ1c2VkYCBpcyB0cmlnZ2VyZWQgZnJvbSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGludGVyZXN0aW5nLiBUaGF0IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBzb21lIGtpbmQgb2YgZGVmZXJyZWQgc3BsaXR0aW5nIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gaGVyZS4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIG9wdGltaXppbmcgbWVtb3J5IHVzYWdlIG9yIG1hbmFnaW5nIHBhZ2UgZmF1bHRzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy5cblxuTm93LCBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbWFwcGluZyBhbm9ueW1vdXMgZm9saW9zLCBhbmQgdGhlIGBub3BmYCBzdWZmaXggbGlrZWx5IHNpZ25pZmllcyDigJxubyBwYWdlIGZhdWx04oCdLiBPa2F5LCB0aGF0J3MgaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGB0aHBfdW5kZXJ1c2VkYCwgYW5kIHRoaXMgbWFwcGluZyBmdW5jdGlvbi4gSSBrbm93IGhvdyBhbm9ueW1vdXMgbWVtb3J5IHdvcmtzLCBzbyBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG1tL21lbW9yeS5jYCBhbmQgY2hlY2sgaG93IGl0IHRpZXMgaW50byB0aGUgd2hvbGUgcGljdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhpcyBgbm9wZmAgbWFwcGluZyBpcyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXMgaXQgZm9yIHBlcmZvcm1hbmNlPyBUbyBhdm9pZCBkZWFkbG9ja3M/IFdoYXQncyB0aGUgdGhyZWFkL2NvbnRleHQgaW52b2x2ZWQgaGVyZT8gR290dGEgY2hlY2sgb3V0IHRoYXQgY29kZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOToxNi42NjMxOTUwNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTA4NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTI3OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNDQwLVxcdFxcdHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwbWRfcGd0YWJsZShfcG1kKSk7XFxubW0va2h1Z2VwYWdlZC5jOjE0NDE6XFx0XFx0bWFwX2Fub25fZm9saW9fcHRlX25vcGYoZm9saW8sIHB0ZSwgdm1hLCBzdGFydF9hZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xNDQyLVxcdFxcdFxcdFxcdFxcdCAgLyp1ZmZkX3dwPSovIGZhbHNlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTUxNDE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUyMjktXFxubW0vbWVtb3J5LmM6NTIzMDp2b2lkIG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsXFxubW0vbWVtb3J5LmMtNTIzMS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmM9NTI1Mz1zdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG4tLVxcbm1tL21lbW9yeS5jLTUyNTctXFxubW0vbWVtb3J5LmM6NTI1ODpcXHRtYXBfYW5vbl9mb2xpb19wdGVfbm9wZihmb2xpbywgcHRlLCB2bWEsIGFkZHIsIHVmZmRfd3ApO1xcbm1tL21lbW9yeS5jLTUyNTktXFx0YWRkX21tX2NvdW50ZXIodm1hLVxcdTAwM2V2bV9tbSwgTU1fQU5PTlBBR0VTLCAxTCBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjE2Ljc5MjExMTU1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQ1MTE4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEkgc2VlIHRoaXMgY2hhaW4gb2YgZXZlbnRzIHVuZm9sZGluZzpcblxuKipUcmFjaW5nIHRoZSBNZW1vcnkgTWFwcGluZyBQcm9jZXNzKipcblxuUmlnaHQsIHNvIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAgaXMgYmVpbmcgdXNlZCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBjb2xsYXBzZV9odWdlX3BhZ2VgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCAqYW5kKiBgbWFwX2Fub25fZm9saW9fcHRlX3BmYCBpbiBgbW0vbWVtb3J5LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3ZSd2ZSBnb3QgdHdvIGVudHJ5IHBvaW50cyB1dGlsaXppbmcgdGhpcyBmdW5jdGlvbiwgYnV0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtIGlzIGludGVyZXN0aW5nLlwiIGBjb2xsYXBzZV9odWdlX3BhZ2VgIHN1Z2dlc3RzIGl0IGlzIHJlbGF0ZWQgdG8ga2VybmVsIGh1Z2UgcGFnZXMsIEkgd291bGQgZXhwZWN0LiBUaGUgc2Vjb25kLCBgbWFwX2Fub25fZm9saW9fcHRlX3BmYCwgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIHBhZ2UgZmF1bHRzIGluIGdlbmVyYWwsIGdpdmVuIHRoZSBuYW1lLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gd2hhdCdzIGdvaW5nIG9uLCBpdCBsb29rcyBsaWtlIGBtYXBfYW5vbl9mb2xpb19wdGVfcGZgIGlzIHRoZSBtb3JlIHdpZGVseSB1c2VkIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHR3bywgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGF0IG9uZSB0byBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjIwLjUxNjYyNTc3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3OTU4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2Fub25fZm9saW9fcHRlX3BmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz01MjMwPXZvaWQgbWFwX2Fub25fZm9saW9fcHRlX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG4tLVxcbm1tL21lbW9yeS5jLTUyNTItXFxubW0vbWVtb3J5LmM6NTI1MzpzdGF0aWMgdm9pZCBtYXBfYW5vbl9mb2xpb19wdGVfcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3QgKnB0ZSxcXG5tbS9tZW1vcnkuYy01MjU0LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgdWZmZF93cClcXG4tLVxcbm1tL21lbW9yeS5jPTUyNjk9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzYwLVxcdH1cXG5tbS9tZW1vcnkuYzo1MzYxOlxcdG1hcF9hbm9uX2ZvbGlvX3B0ZV9wZihmb2xpbywgdm1mLVxcdTAwM2VwdGUsIHZtYSwgYWRkcixcXG5tbS9tZW1vcnkuYy01MzYyLVxcdFxcdFxcdCAgICAgIHZtZl9vcmlnX3B0ZV91ZmZkX3dwKHZtZikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOToyMC42Mjk0MjkzNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyNTQyMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQW5vbnltb3VzIFBhZ2UgRmF1bHQgSGFuZGxlcioqXG5cbk9rYXksIHNvIGBkb19hbm9ueW1vdXNfcGFnZWAgaXMgdGhlIGNvcmUgaGFuZGxlciBmb3IgYW5vbnltb3VzIHBhZ2UgZmF1bHRzLiBUaGUgY3J1eCBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgaW5zZXJ0aW9uIG9mIGBpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7YCB3aXRoaW4gYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYC4gUmlnaHQsIHRoYXQgbWVhbnMgd2hlbmV2ZXIgYSBsYXJnZSwgYW5vbnltb3VzIGZvbGlvIGlzIG1hcHBlZCDigJMgd2hldGhlciB0aHJvdWdoIGEgcGFnZSBmYXVsdCBvciB2aWEga2h1Z2VwYWdlZCDigJMgaXQncyBpbW1lZGlhdGVseSBzbGF0ZWQgZm9yIGRlZmVycmVkIHNwbGl0dGluZy4gV2FpdCBhIG1pbnV0ZSwgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBpcyB1dGlsaXplZCBpbiBib3RoIHNjZW5hcmlvcywgaXNuJ3QgaXQ/IEdvdHRhIGtlZXAgdGhhdCBzdHJhaWdodC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGB0aHBfdW5kZXJ1c2VkYCBjaGFuZ2VzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBzY2FsaW5nLiBBaCwgaXQgbG9va3MgbGlrZSBpdCdzIHNjYWxpbmcgYGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZWAgYnkgYG5yX3BhZ2VzIC8gSFBBR0VfUE1EX05SYC4gVGhpcyBhZGp1c3RtZW50IG11c3QgYmUgdG8gYWNjb21tb2RhdGUgbVRIUCAobXVsdGktc2l6ZSBUSFApIHdpdGhpbiB0aGUgZGVmZXJyZWQgc3BsaXQgc2hyaW5rZXIuIFNlZW1zIGxvZ2ljYWwgYW5kIGNlcnRhaW5seSByZWFjaGFibGUgaW4gdGhlIGNvZGUgcGF0aC5cblxuQWxyaWdodCwgc2VlbXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiBUaGlzIGNsZWFybHkgbGV2ZXJhZ2VzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYG1tL0tjb25maWdgIGZvciB0aGUgcHJlY2lzZSBUSFAgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjI1LjQyMTk3ODkxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1NzkyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0NjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODY0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NjktXFxubW0vS2NvbmZpZzo4NzA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODc2LVxcbm1tL0tjb25maWc6ODc3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NzgtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODg1LVxcbm1tL0tjb25maWc6ODg2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODg3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkwMi1cXG5tbS9LY29uZmlnOjkwMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTA0LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTItXFxubW0vS2NvbmZpZzo5MTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjAtXFxubW0vS2NvbmZpZzo5MjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTI4LVxcbm1tL0tjb25maWc6OTI5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTMwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTM4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05NDctXFxubW0vS2NvbmZpZzo5NDg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTk0OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU2LVxcbm1tL0tjb25maWc6OTU3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTY0LVxcbm1tL0tjb25maWc6OTY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk3Mi1cXG5tbS9LY29uZmlnOjk3MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk3NC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjI1LjczNzc4MjAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY4MzE0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGlkZWEgaXMgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIHRvIGVuYWJsZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBObyByZWFsIGRlYmF0ZSB0aGVyZSDigJMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIGFyZSBnZW5lcmFsbHkgd2VsbC11bmRlcnN0b29kLCBlc3BlY2lhbGx5IGZvciB0aGUgd29ya2xvYWRzIHdlJ3JlIHJ1bm5pbmcuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcyBhYm91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhbmQgYW55IG51YW5jZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG1USFA/IElzIHRoZXJlIGEgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIG51YW5jZSB0aGF0IHdlIHNob3VsZCBzcGVjaWZpY2FsbHkgYWRkcmVzcz8gSSBrbm93IHRoZXJlIGFyZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLCBhbmQgbVRIUCAobXVsdGlzaXplZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBpcyBzb21ldGhpbmcgdGhhdCBvZmZlcnMgZGlmZmVyZW50IHRyYWRlb2ZmcyBhbmQgbWF5IGJlIG1vcmUgYmVuZWZpY2lhbCBpbiBjZXJ0YWluIHNwZWNpZmljIHNjZW5hcmlvcy4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHRob3NlIGRldGFpbHMsIGFuZCByZXZpZXcgYW55IGFzc29jaWF0ZWQgY29uZmlncywgdG8gZW5zdXJlIHdlJ3JlIGRlcGxveWluZyB0aGUgbW9zdCBlZmZpY2llbnQgc2V0dXAgZm9yIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBpZGVudGlmeSBhbnkgc3BlY2lmaWMgYWRqdXN0bWVudHMgb3IgdHdlYWtzIG5lZWRlZCB0byBmdWxseSBsZXZlcmFnZSB0cmFuc3BhcmVudCBodWdlcGFnZXMgZm9yIG91ciBuZWVkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjI5Ljg4NDYxNzA2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNjM5MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZy4qVEhQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyMT1jb25maWcgQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQlxcbi0tXFxubW0vS2NvbmZpZy04MjMtXFxubW0vS2NvbmZpZzo4MjQ6Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG5tbS9LY29uZmlnLTgyNS1cXHRkZWZfYm9vbCBuXFxuLS1cXG5tbS9LY29uZmlnPTk4MD1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTk4MS1cXG5tbS9LY29uZmlnOjk4Mjpjb25maWcgVEhQX1NXQVBcXG5tbS9LY29uZmlnLTk4My1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjMwLjAyNzI2MjI0NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI4NjE3Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIG9uIGBkZWZlcnJlZF9zcGxpdF9jb3VudGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBwdWxsIHVwIHRoZSBjdXJyZW50IHN0YXRlIG9mIHBsYXkgcmVnYXJkaW5nIGBkZWZlcnJlZF9zcGxpdF9jb3VudGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBlbGVtZW50cyBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgaW4gdGhlIGN1cnJlbnQgcGlwZWxpbmUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBhcmUgb3B0aW1pemVkIGFuZCBhbGlnbmVkIHdpdGggb3VyIHBlcmZvcm1hbmNlIGdvYWxzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYW55dGhpbmcgZmVlbHMgb2ZmIOKAkyBhbnkgcmVncmVzc2lvbnMsIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBvciBhcmVhcyBmb3IgaW1tZWRpYXRlIGltcHJvdmVtZW50LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgYXMgdGhpcyB3aWxsIGVmZmVjdCBhbGwgdGhlIGxhdGVyIHByb2Nlc3Npbmcgc3RhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MzIuNzU1ODgzODQzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgwNzk1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmZXJyZWRfc3BsaXRfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz03ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTc1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxubW0vaHVnZV9tZW1vcnkuYzo3NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNzctXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz05NTY9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTcxLVxcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XFxubW0vaHVnZV9tZW1vcnkuYzo5NzI6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxubW0vaHVnZV9tZW1vcnkuYy05NzMtXFx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MzE0PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzMjYtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG5tbS9odWdlX21lbW9yeS5jOjQzMjc6ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSdzIHVubG9ja2VkXFxubW0vaHVnZV9tZW1vcnkuYy00MzI4LSAqIG9uLXN0YWNrIGxpc3QuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0NTE9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NzYtXFxubW0vaHVnZV9tZW1vcnkuYzo0NDc3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy00NDc4LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9taWdyYXRlLmM9MTgwNT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODUxLVxcdFxcdFxcdCAqIE9ubHkgY2hlY2sgaXQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0Llxcbm1tL21pZ3JhdGUuYzoxODUyOlxcdFxcdFxcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXFxubW0vbWlncmF0ZS5jLTE4NTMtXFx0XFx0XFx0ICogbG9jYWwgbGlzdCBhbmQgcmVtb3ZpbmcgaXQgY2FuIGNhdXNlIHRoZSBsb2NhbCBsaXN0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA3OjE5OjMyLjg5Mzk3MTY0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk2OTM0MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYSBSZWNlbnQgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluJ3MgZ29pbmcgaW50byBhbmFseXNpcyBtb2RlLiBJdCdzIHRvdWNoaW5nIGB0aHBfdW5kZXJ1c2VkYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBhIGZ1bmN0aW9uIGNhbGxlZCBieSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAuIEkgYWxzbyBzZWUgY2hhbmdlcyB0byBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLCBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCBob3cgdGhhdCByZWxhdGVzIHRvIGBtYXBfYW5vbl9mb2xpb19wdGVfcGZgIGFuZCBgY29sbGFwc2VfaHVnZV9wYWdlYC4gTXkgaW5pdGlhbCBmb2N1cywgYmFzZWQgb24gdGhlc2UgZnVuY3Rpb24gbmFtZXMsIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb24gYHRocF91bmRlcnVzZWRgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgbWFwX2Fub25fZm9saW9fcHRlX25vcGZgLlxuXG5XYWl0IGEgbWludXRlLCBgdGhwX3VuZGVydXNlZGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhcmUgZGVjbGFyZWQgc3RhdGljLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIGRpZyBkZWVwZXIuIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAsIGhvd2V2ZXIsIGlzICpub3QqIHN0YXRpYywgc28gdGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uLiBBbHJpZ2h0LCBsZXQncyB1cGRhdGUgbXkgbWVudGFsIFwiZm9jdXMgc3ltYm9sc1wiIGxpc3Qgd2l0aCBgdGhwX3VuZGVydXNlZGAsIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCwgYW5kIGBtYXBfYW5vbl9mb2xpb19wdGVfbm9wZmAuXG5cbkhtbSwgZXZlbiB0aG91Z2ggYHRocF91bmRlcnVzZWRgIGlzIHN0YXRpYywgaXQncyBzdGlsbCBhIHJlbGV2YW50IHBvaW50IG9mIGNoYW5nZSBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdC4gQmV5b25kIHRoZSBkaXJlY3QgZnVuY3Rpb25zLCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9mIGNvdXJzZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU2AgaXMgYWxzbyByZWxldmFudC4gSSdsbCBuZWVkIHRvIGxvb2sgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHRvIHNlZSBob3cgdGhvc2Ugb3B0aW9ucyBhcmUgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY29kZSBJJ20gYW5hbHl6aW5nLiBHb3R0YSBlbnN1cmUgSSdtIGdldHRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6MzguNjkwOTA5MDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjU1MjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNzoxOTozOS4wOTM0NzEwNjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMDI0MTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEhQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBvdmVyIGFuZCB0aGUgdmVyZGljdCBpcyBjbGVhcjogd2UgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQuIFRoZSBjaGFuZ2VzIGFyZSBzb2xpZCwgdGhleSBhZGRyZXNzIGEga25vd24gaXNzdWUsIGFuZCBJIGNhbiBzZWUgaG93IHRoZXkncmUgcmVhY2hhYmxlIHdpdGhpbiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGRpdmVzIGludG8gaG93IHdlIGhhbmRsZSB0aGUgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIG11bHRpLXNpemUgVEhQcyAobVRIUCkuIEl0J3MgYWRkaW5nIG1USFBzIHRvIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBvbmNlIHRoZXnigJlyZSBtYXBwZWQsIGFuZCDigJMgaW1wb3J0YW50bHkg4oCTIGl04oCZcyBkeW5hbWljYWxseSBhZGp1c3RpbmcgdGhlIGBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVgIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgZm9saW8gc2l6ZSB3aXRoaW4gYHRocF91bmRlcnVzZWQoKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBgdGhwX3VuZGVydXNlZGAgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaWN0YXRlcyBob3cgVEhQcyBhcmUgc2hydW5rIHRvIHJlY2xhaW0gc3BhY2UuXG5cbkknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGB0aHBfdW5kZXJ1c2VkYCwgYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBhbmQgYG1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmYCBhcyBJIGludmVzdGlnYXRlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyB0d2Vhay4gVGhlc2Ugc3ltYm9scyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3VidGxlIGludGVycGxheSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IGltcGFjdGZ1bCBjaGFuZ2UgdG8gVEhQIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IGl0IGluIGRldGFpbCB0byBhc3Nlc3MgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5NiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDc6MTk6NDQuNjAzNzE1NzcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTQ4OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRocF91bmRlcnVzZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgICBcIm1hcF9hbm9uX2ZvbGlvX3B0ZV9ub3BmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBkZWZlcnJlZCBzcGxpdHRpbmcgb2YgbXVsdGktc2l6ZSBUSFBzIChtVEhQKSBieSBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hlbiBtYXBwZWQgYW5kIHNjYWxpbmcgdGhlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGZvbGlvIHNpemUgaW4gdGhwX3VuZGVydXNlZCgpLiBUaGlzIGFmZmVjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgVEhQIHNocmlua2luZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowj76f2[1] Phase: Succeeded StartedAt: 2026-07-08 07:19:56 +0000 UTC FinishedAt: 2026-07-08 07:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 07:19:56 +0000 UTC FinishedAt: 2026-07-08 07:19:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2] Phase: Succeeded StartedAt: 2026-07-08 07:19:56 +0000 UTC FinishedAt: 2026-07-08 11:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:19:56 +0000 UTC FinishedAt: 2026-07-08 11:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:19:56 +0000 UTC FinishedAt: 2026-07-08 07:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:19:56 +0000 UTC FinishedAt: 2026-07-08 07:20:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj76f2/series-workflowj76f2-convert-artifact-2562762179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:20:29 +0000 UTC FinishedAt: 2026-07-08 07:48:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:20:29 +0000 UTC FinishedAt: 2026-07-08 07:48:18 +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:*f347c0b5-4a7f-4466-9edf-1588b4dfdf09,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-workflowj76f2/series-workflowj76f2-convert-artifact-2562762179/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": "dfd28d8f-6a8d-4f20-9815-155bb9e72782", "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-workflowj76f2/series-workflowj76f2-build-action-3323207729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:20:29 +0000 UTC FinishedAt: 2026-07-08 07:48:08 +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:*f347c0b5-4a7f-4466-9edf-1588b4dfdf09,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-workflowj76f2/series-workflowj76f2-convert-artifact-2562762179/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": "dfd28d8f-6a8d-4f20-9815-155bb9e72782", "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-workflowj76f2/series-workflowj76f2-build-action-3323207729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:48:18 +0000 UTC FinishedAt: 2026-07-08 07:48:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:48:18 +0000 UTC FinishedAt: 2026-07-08 07:48:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:48:18 +0000 UTC FinishedAt: 2026-07-08 07:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:48:18 +0000 UTC FinishedAt: 2026-07-08 07:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-workflowj76f2/series-workflowj76f2-convert-artifact-2427254138/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:48:28 +0000 UTC FinishedAt: 2026-07-08 07:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:48:28 +0000 UTC FinishedAt: 2026-07-08 07:50:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfd28d8f-6a8d-4f20-9815-155bb9e72782,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-workflowj76f2/series-workflowj76f2-build-action-3323207729/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-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:50:32 +0000 UTC FinishedAt: 2026-07-08 07:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:50:32 +0000 UTC FinishedAt: 2026-07-08 07:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:50:32 +0000 UTC FinishedAt: 2026-07-08 08:22:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:50:32 +0000 UTC FinishedAt: 2026-07-08 08:22:49 +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:*f347c0b5-4a7f-4466-9edf-1588b4dfdf09,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-workflowj76f2/series-workflowj76f2-convert-artifact-2427254138/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": "5a6e27cb-9532-42d7-87d2-8fdf33234f05", "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-workflowj76f2/series-workflowj76f2-build-action-1393005790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 07:50:32 +0000 UTC FinishedAt: 2026-07-08 08:22:39 +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:*f347c0b5-4a7f-4466-9edf-1588b4dfdf09,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-workflowj76f2/series-workflowj76f2-convert-artifact-2427254138/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": "5a6e27cb-9532-42d7-87d2-8fdf33234f05", "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-workflowj76f2/series-workflowj76f2-build-action-1393005790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:22:49 +0000 UTC FinishedAt: 2026-07-08 08:22:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:22:49 +0000 UTC FinishedAt: 2026-07-08 08:22:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:22:49 +0000 UTC FinishedAt: 2026-07-08 08:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:22:49 +0000 UTC FinishedAt: 2026-07-08 08:24:40 +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:*5a6e27cb-9532-42d7-87d2-8fdf33234f05,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-workflowj76f2/series-workflowj76f2-build-action-1393005790/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-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 11:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 11:32:28 +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":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"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:*dfd28d8f-6a8d-4f20-9815-155bb9e72782,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a6e27cb-9532-42d7-87d2-8fdf33234f05,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-workflowj76f2/series-workflowj76f2-build-action-3323207729/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-workflowj76f2/series-workflowj76f2-build-action-1393005790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 08:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 08:24:58 +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":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"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-workflowj76f2/series-workflowj76f2-convert-artifact-2392863919/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 08:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 08:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:24:50 +0000 UTC FinishedAt: 2026-07-08 08:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:25:00 +0000 UTC FinishedAt: 2026-07-08 11:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj76f2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["thp_underused","deferred_split_scan","map_anon_folio_pte_nopf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"e4e745bf-0314-428c-87bd-ae1866248bc4","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-07-08 08:25:00 +0000 UTC FinishedAt: 2026-07-08 11:32:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfd28d8f-6a8d-4f20-9815-155bb9e72782,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a6e27cb-9532-42d7-87d2-8fdf33234f05,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-workflowj76f2/series-workflowj76f2-build-action-3323207729/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-workflowj76f2/series-workflowj76f2-build-action-1393005790/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-workflowj76f2/series-workflowj76f2-convert-artifact-2392863919/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,}