Name: series-workflowl5x72 Phase: Succeeded StartedAt: 2026-08-18 02:00:43 +0000 UTC FinishedAt: 2026-08-18 05:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[0] Phase: Succeeded StartedAt: 2026-08-18 02:00:43 +0000 UTC FinishedAt: 2026-08-18 02:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 02:00:43 +0000 UTC FinishedAt: 2026-08-18 02:04:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD" ], "series_id": "bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "userfaultfd_ioctl", "sys_userfaultfd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7c3lzX3VzZXJmYXVsdGZkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFdoZW4gYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgbG9vcCB1c2VzIGBjb250aW51ZWAgdG8gcmV0cnkgdGhlIHNhbWUgYWRkcmVzcy4gSG93ZXZlciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBub3QgcmVzZXQgdG8gMC4gSW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uLCBpZiB0aGUgbW92ZSBzdWNjZWVkcywgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIGFuZCByZW1haW5zIGAtRUFHQUlOYC4gVGhpcyBjYXVzZXMgdGhlIGxvb3AgdG8gaW5jb3JyZWN0bHkgYGNvbnRpbnVlYCBhZ2FpbiB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgYWRkcmVzc2VzIG9yIHRoZSBgbW92ZWRgIGNvdW50ZXIsIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgcGFnZSBtb3ZpbmcgYmVoYXZpb3IuXG5cblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCYjMzk7cyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggYzNhZGVkYWFmN2Q1NC4uZWM1ZDUxMWJkMTc5MSAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0yMDg1LDggJiM0MzsyMDg1LDEwIEBAIHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKVxuJiM0MztcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgICAmIzM0O3N5c191c2VyZmF1bHRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCYjMzk7cyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsCiAJCX0KIAogCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJCWVyciA9IDA7CiAJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVzZXJmYXVsdGZkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyByaWdodCBoZXJlOiBhIGNvbmRpdGlvbmFsIGluIHRoZSBlcnJvciBoYW5kbGluZy4gSW5pdGlhbGx5LCBpZiBgZXJyYCB3YXMgYC1FQUdBSU5gLCB0aGUgY29kZSB3b3VsZCBqdXN0IGJhaWwgb3V0IG9mIHRoZSBsb29wLiBOb3csIGl0IGV4cGxpY2l0bHkgcmVzZXRzIGBlcnJgIHRvIDAgYW5kIGNvbnRpbnVlcy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhbHRlcnMgdGhlIHByb2dyYW0mIzM5O3MgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgdGhhdCBzcGVjaWZpYyBlcnJvciBjb2RlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoeT8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGZvciBlc3NlbnRpYWxseSBpZ25vcmluZyBgLUVBR0FJTmAgaW4gdGhpcyBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW92ZV9wYWdlc2AgYW5kIGhvdyB1c2VyZmF1bHRmZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbGF5ZXIgdG8gbWFrZSBzZW5zZSBvZiB0aGlzLiBJcyBpdCByZWxhdGVkIHRvIHJldHJ5aW5nIGEgZmFpbGVkIHBhZ2UgbW92ZSBkdWUgdG8gcmVzb3VyY2UgY29udGVudGlvbj8gUGVyaGFwcyB0aGlzIGlzIGEgbWl0aWdhdGlvbiBmb3IgdHJhbnNpZW50IGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCBhbmQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQxNC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4NjctLyoqXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcbm1tL3VzZXJmYXVsdGZkLmMtMTg2OS0gKiBAY3R4OiBwb2ludGVyIHRvIHRoZSB1c2VyZmF1bHRmZCBjb250ZXh0XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXG5tbS91c2VyZmF1bHRmZC5jOjE4Nzc6ICogbW92ZV9wYWdlcygpIHJlbWFwcyBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIGF0b21pY2FsbHkgaW4gemVyb1xubW0vdXNlcmZhdWx0ZmQuYy0xODc4LSAqIGNvcHkuIEl0IG9ubHkgd29ya3Mgb24gbm9uIHNoYXJlZCBhbm9ueW1vdXMgcGFnZXMgYmVjYXVzZSB0aG9zZSBjYW5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4ODgtICogc3RvcmFnZSBvciBhbnkgb3RoZXIgSS9PIGRldmljZSAoTUFEVl9ET05URk9SSyBpbiB0aGUgc291cmNlIHZtYVxubW0vdXNlcmZhdWx0ZmQuYzoxODg5OiAqIGF2b2lkcyBtb3ZlX3BhZ2VzKCkgdG8gZmFpbCB3aXRoIC1FQlVTWSBpZiB0aGUgcHJvY2VzcyBmb3JrcyBiZWZvcmVcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcbm1tL3VzZXJmYXVsdGZkLmMtMTg5MS0gKiBwYWdlIGluIHRoZSBmYXVsdGluZyBhZGRyZXNzIGluIHRoZSBkZXN0aW5hdGlvbiB2bWEuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxubW0vdXNlcmZhdWx0ZmQuYzoxOTA2OiAqIG1vdmVfcGFnZXMoKSB3aWxsIGZhaWwgcmVzcGVjdGl2ZWx5IHdpdGggLUVOT0VOVCBvciAtRUVYSVNULiBUaGlzXG5tbS91c2VyZmF1bHRmZC5jLTE5MDctICogcHJvdmlkZXMgYSB2ZXJ5IHN0cmljdCBiZWhhdmlvciB0byBhdm9pZCBhbnkgY2hhbmNlIG9mIG1lbW9yeVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkxMC0gKiB0aW1lIGZvciBhbnkgZ2l2ZW4gZmF1bHRpbmcgYWRkcmVzcy4gVGhpcyBtZWFucyB0aGF0IGlmIHR3byB0aHJlYWRzXG5tbS91c2VyZmF1bHRmZC5jOjE5MTE6ICogdHJ5IHRvIGJvdGggY2FsbCBtb3ZlX3BhZ2VzKCkgb24gdGhlIHNhbWUgZGVzdGluYXRpb24gYWRkcmVzcyBhdCB0aGVcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkyMC0gKiBhbiBhbW91bnQgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IG1vdmVkLiBJZiB0aGUgcmV0dmFsIHJlcG9ydHMgYVxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFwmIzM0O3Nob3J0XCYjMzQ7IHJlbWFwLCB0aGUgbW92ZV9wYWdlcygpIGNvbW1hbmQgc2hvdWxkIGJlIHJlcGVhdGVkIGJ5XG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMmIzQzO3JldHZhbCwgZHN0JiM0MztyZXZhbCwgbGVuLXJldHZhbCBpZiBpdCB3YW50cyB0byBrbm93XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxOTM0OnN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtMTkzNS1cdFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cdFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XHRcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2Olx0XHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXHRcdCAqL1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0MS1cdFx0XHRcdHNwbGl0X2h1Z2VfcG1kKHNyY192bWEsIHNyY19wbWQsIHNyY19hZGRyKTtcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcdFx0XHRcdC8qIFRoZSBmb2xpbyB3aWxsIGJlIHNwbGl0IGJ5IG1vdmVfcGFnZXNfcHRlKCkgKi9cbm1tL3VzZXJmYXVsdGZkLmMtMjA0My1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcdFx0XHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVx0XHRcdFx0XHRcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXG5tbS91c2VyZmF1bHRmZC5jOjIwNjk6XHRcdFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDcwLVx0XHRcdFx0XHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyNTUtXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XG5tbS91c2VyZmF1bHRmZC5jOjQyNTY6XHRcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1Ny1cdFx0XHRcdCB1ZmZkaW9fbW92ZS5sZW4sIHVmZmRpb19tb3ZlLm1vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBgVUZGRElPX01PVkVgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBgbW92ZV9wYWdlc2AgaXMgbm93IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBieSBgdXNlcmZhdWx0ZmRfbW92ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBgVUZGRElPX01PVkVgIGlvY3RsIHdvcmtzIGluIHVzZXJmYXVsdGZkLCBzbyBpdCYjMzk7cyBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiB0aGUgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYSBrZXkgY2hhbmdlLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGFjcm9zcyB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCBjb25maWdzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB1c2VyZmF1bHRmZCB0byBmdW5jdGlvbiBjb3JyZWN0bHkgaW4gdGhpcyBzY2VuYXJpby4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IHNldCB1cCBmb3IgdGhpcyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4ND1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5Om1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgZGVmaW5pdGVseSB1c2luZyBgVVNFUkZBVUxURkRgLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE15IHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3Qgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiBhcmUgY2VudGVyZWQgYXJvdW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2UgbWlncmF0aW9uIHdpdGggYHVzZXJmYXVsdGZkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0LiBUaGUga2V5IHN5bWJvbHMgSSYjMzk7bSBsb29raW5nIGZvciBhcmUgYG1vdmVfcGFnZXNgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIG9yIGB1c2VyZmF1bHRmZF9pb2N0bGAuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHVzZXJmYXVsdGZkX2lvY3RsYCwgYXMgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHJlbGV2YW50IGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgVXNlcmZhdWx0ZmQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGB1c2VyZmF1bHRmZF9pb2N0bGAgd29ya3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBkZWZpbmVkIGluIGBmcy91c2VyZmF1bHRmZC5jYD8mIzM0OyBUaGF0IHNlZW1zLi4ucG90ZW50aWFsbHkgb2ZmLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgY29yZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uLiBJdCAqY291bGQqIGJlIHRoZXJlLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGJvdGggYG1tL3VzZXJmYXVsdGZkLmNgICh0aGF0JiMzOTtzIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB1c2VyZmF1bHRmZCkgYW5kIHRoZW4gdG8gY29uZmlybSBvciBkZW55IGluIGBmcy91c2VyZmF1bHRmZC5jYC4gVGhlIHBvdGVudGlhbCBmb3IgYSBuYW1pbmcgY29sbGlzaW9uLCBvciB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGltcGxlbWVudGVkIGVsc2V3aGVyZSBhbmQgdGhlIGBmc2AgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW4gaW50ZXJmYWNlLCBtYWtlcyBpdCBuZWNlc3NhcnkgdG8gY2hlY2sgYm90aCB0byBlbnN1cmUgSSBoYXZlIHRoZSBwcm9wZXIgcmVmZXJlbmNlLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIxMzQ9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjE4OS1cdFx0ICogdXNlcmZhdWx0ZmRfd3AoKSB2bWFzLiAgQnV0IHNpbmNlIHRoZSBtbWFwX2xvY2sgaXMgbm90IGhlbGQsXG5tbS9raHVnZXBhZ2VkLmM6MjE5MDpcdFx0ICogaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yIGEgcmFjaW5nIHVzZXJmYXVsdGZkX2lvY3RsKCkgb3Jcbm1tL2todWdlcGFnZWQuYy0yMTkxLVx0XHQgKiBtYWR2aXNlKCkgdG8gaGF2ZSBpbnNlcnRlZCBwdGVzIG9yIG1hcmtlcnMuICBOb3cgdGhhdCB3ZSBob2xkXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00Mjg2PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfYXBpKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzNDktXG5tbS91c2VyZmF1bHRmZC5jOjQzNTA6c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcbm1tL3VzZXJmYXVsdGZkLmMtNDM1MS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQ0MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNlcmZhdWx0ZmRfZm9wcyA9IHtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ0MjgtXHQucmVhZF9pdGVyXHQ9IHVzZXJmYXVsdGZkX3JlYWRfaXRlcixcbm1tL3VzZXJmYXVsdGZkLmM6NDQyOTpcdC51bmxvY2tlZF9pb2N0bCA9IHVzZXJmYXVsdGZkX2lvY3RsLFxubW0vdXNlcmZhdWx0ZmQuYy00NDMwLVx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdXNlcmZhdWx0ZmRfbW92ZWAgU3ltYm9sKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0LCB0aGUgb25lIEkmIzM5O20gY3VycmVudGx5IGZvY3VzZWQgb24sIHVzZXMgdGhlIHN5bWJvbCBgdXNlcmZhdWx0ZmRfbW92ZWAuIFdhaXQgYSBzZWNvbmTigKYgaXNuJiMzOTt0IGBtb3ZlX3BhZ2VzYCBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2A/IFRoYXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIFRoaXMgaGFzIG1lIHRoaW5raW5nOiBpcyBgdXNlcmZhdWx0ZmRfbW92ZWAgYWxzbyBkZWZpbmVkIGFzIHN0YXRpYz8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0IGhhcyBleHRlcm5hbCBsaW5rYWdlIG9yIGlzIHNjb3BlZCB0byBhIHNwZWNpZmljIGZpbGUuIFRoYXQgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2lsbCBiZSBwcmV0dHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX21vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9NDIwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZmZkX2N0eF9mZWF0dXJlcyhfX3U2NCB1c2VyX2ZlYXR1cmVzKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDIxNS1cbm1tL3VzZXJmYXVsdGZkLmM6NDIxNjpzdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxubW0vdXNlcmZhdWx0ZmQuYy00MjE3LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzNzgtXHRjYXNlIFVGRkRJT19NT1ZFOlxubW0vdXNlcmZhdWx0ZmQuYzo0Mzc5Olx0XHRyZXQgPSB1c2VyZmF1bHRmZF9tb3ZlKGN0eCwgYXJnKTtcbm1tL3VzZXJmYXVsdGZkLmMtNDM4MC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBBUEkqKgoKT2theSwgc28gYHVzZXJmYXVsdGZkX21vdmVgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0LiBOb3csIGxldCBtZSByZS1yZWFkIHRoYXQgZ3VpZGVsaW5l4oCmIEFoLCB0aGUgcHJlZmVyZW5jZSBpcyBmb3IgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMuIFRoYXQgd291bGQgZ2l2ZSB0aGVtIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIE9rYXksIHNvIHRoYXQgbWVhbnMgYHVzZXJmYXVsdGZkX2lvY3RsYCAqc2hvdWxkKiBiZSB0aGUgQVBJIGVudHJ5cG9pbnQgdGhlbiwgcmlnaHQ/IEl0JiMzOTtzIHRoZSBvbmx5IG90aGVyIG9idmlvdXMgY2FuZGlkYXRlLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaC4gSG1tLCBsZXQgbWUgc2VlLi4uIGFuZCB5ZXMsIGBzdGF0aWMgbG9uZyB1c2VyZmF1bHRmZF9pb2N0bC4uLmAgRGFtbWl0ISBJdCYjMzk7cyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGdldCBmcnVzdHJhdGluZyEgU28sIGlmIG5vdCBgdXNlcmZhdWx0ZmRfaW9jdGxgLCB0aGVuIHRoZSBuZXh0IGxvZ2ljYWwgZW50cnkgcG9pbnQgbXVzdCBiZSB0aGUgc3lzY2FsbCBpdHNlbGYsIGBzeXNfdXNlcmZhdWx0ZmRgPyBUaGF0IGhhcyB0byBiZSBpdCwgSSBzdXBwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qdXNlcmZhdWx0ZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz00NDgzPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9zeXNjYWxsX2FsbG93ZWQoaW50IGZsYWdzKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDQ5OS1cbm1tL3VzZXJmYXVsdGZkLmM6NDUwMDpTWVNDQUxMX0RFRklORTEodXNlcmZhdWx0ZmQsIGludCwgZmxhZ3MpXG5tbS91c2VyZmF1bHRmZC5jLTQ1MDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzYzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB1c2VyZmF1bHRmZGAgc2l0dWF0aW9uLiBUaGUgY29yZSBzeXNjYWxsIGlzIGNsZWFybHkgYHN5c191c2VyZmF1bHRmZGAuIE5vdywgdGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgZnVuY3Rpb24gc2VlbXMgdG8gYmUgd2hlcmUgaW9jdGxzIGFyZSBoYW5kbGVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgaXQmIzM5O3MgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBzdGF0aWMgZmlsZSBvcGVyYXRpb24uIEhtbSwgaXQgaXNuJiMzOTt0LgoKSSBqdXN0IGRvdWJsZS1jaGVja2VkLCBhbmQgYG1vdmVfcGFnZXNgIGlzIGFsc28gc3RhdGljLCBzbyBubyBsdWNrIHRoZXJlLiBPa2F5LCBzbyBldmVuIHRob3VnaCBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGRlY2xhcmVkIHN0YXRpYywgdGhlIGtlcm5lbCBhY3R1YWxseSB1c2VzIGl0cyBhZGRyZXNzIHRocm91Z2ggYHVzZXJmYXVsdGZkX2ZvcHNgLCBzbyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYHN5c191c2VyZmF1bHRmZGAgYW5kIGB1c2VyZmF1bHRmZF9pb2N0bGAgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIG5vbi1zdGF0aWMgdmVyc2lvbiBJIG1pc3NlZC4gSSYjMzk7bGwgYWRkIHRoZW0gYm90aCB0byBgRm9jdXNTeW1ib2xzYC4KCldhaXQgYSBzZWNvbmQsIHRoZSBndWlkYW5jZSBpcyB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gQnV0IGB1c2VyZmF1bHRmZF9pb2N0bGAgaXMgc3RhdGljICpidXQqIGFuIGVudHJ5cG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiB3aGF0IGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4gVGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgY2FsbCBpcyBhIGRpcmVjdCBlbnRyeXBvaW50LiBBbHJpZ2h0LCBsZXQmIzM5O3Mga2VlcCBpdC4KCkxldCYjMzk7cyBxdWlja2x5IG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgaXQuIGBVU0VSRkFVTFRGRGAgaXMgdGhlIG1haW4gb25lLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgYG1vdmVfcGFnZXNgIGluIGBtbS91c2VyZmF1bHRmZC5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE2LVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODU5PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcbm1tL3VzZXJmYXVsdGZkLmM6MTg2ODogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxubW0vdXNlcmZhdWx0ZmQuYy0xODY5LSAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHRcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4NzYtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTg3NzogKiBtb3ZlX3BhZ2VzKCkgcmVtYXBzIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgYXRvbWljYWxseSBpbiB6ZXJvXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg4OC0gKiBzdG9yYWdlIG9yIGFueSBvdGhlciBJL08gZGV2aWNlIChNQURWX0RPTlRGT1JLIGluIHRoZSBzb3VyY2Ugdm1hXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxubW0vdXNlcmZhdWx0ZmQuYzoxODkwOiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xODkxLSAqIHBhZ2UgaW4gdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlIGRlc3RpbmF0aW9uIHZtYS5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MDUtICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXG5tbS91c2VyZmF1bHRmZC5jOjE5MDY6ICogbW92ZV9wYWdlcygpIHdpbGwgZmFpbCByZXNwZWN0aXZlbHkgd2l0aCAtRU5PRU5UIG9yIC1FRVhJU1QuIFRoaXNcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEwLSAqIHRpbWUgZm9yIGFueSBnaXZlbiBmYXVsdGluZyBhZGRyZXNzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIHRocmVhZHNcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEyLSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXG5tbS91c2VyZmF1bHRmZC5jOjE5MjE6ICogXCYjMzQ7c2hvcnRcJiMzNDsgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcbm1tL3VzZXJmYXVsdGZkLmMtMTkyMi0gKiB1c2VybGFuZCB3aXRoIHNyYyYjNDM7cmV0dmFsLCBkc3QmIzQzO3JldmFsLCBsZW4tcmV0dmFsIGlmIGl0IHdhbnRzIHRvIGtub3dcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MzMtICovXG5tbS91c2VyZmF1bHRmZC5jOjE5MzQ6c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVx0XHQgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIF9fdTY0IG1vZGUpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVx0XHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcdFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XG5tbS91c2VyZmF1bHRmZC5jOjIwMTY6XHRcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNy1cdFx0ICovXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQxLVx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xubW0vdXNlcmZhdWx0ZmQuYzoyMDQyOlx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2Olx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cbm1tL3VzZXJmYXVsdGZkLmM6MjA2OTpcdFx0XHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXHRcdFx0XHRcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDI1NjpcdFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxubW0vdXNlcmZhdWx0ZmQuYy00MjU3LVx0XHRcdFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggd2l0aGluIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uICBJdCYjMzk7cyB0cmlnZ2VyZWQgdGhyb3VnaCBhIGNoYWluOiBgdXNlcmZhdWx0ZmRfbW92ZWAgY2FsbHMgYG1vdmVfcGFnZXNgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgZml4IHdpdGhpbiBhbiBlcnJvciBoYW5kbGluZyBibG9jay4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBtb3ZlX3BhZ2VzYCB3YXMgaW5jb3JyZWN0bHkgcmV0dXJuaW5nIGAtRUFHQUlOYCBpbiBjZXJ0YWluIHNjZW5hcmlvcy4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBkaWRuJiMzOTt0IHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwIHdoZW4gYW4gYC1FQUdBSU5gIHdhcyBlbmNvdW50ZXJlZCwgdGh1cyBzaG9ydC1jaXJjdWl0aW5nIHRoZSBleHBlY3RlZCByZXRyeS9jb250aW51ZSBiZWhhdmlvci4gVGhlIHBhdGNoIG5vdyBleHBsaWNpdGx5IHJlc2V0cyBgZXJyYCB0byAwIGluIHRoYXQgYC1FQUdBSU5gIGNvbmRpdGlvbiwgYWxsb3dpbmcgdGhlIGxvb3AgdG8gY29udGludWUgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhIG1vcmUgYXBwcm9wcmlhdGUgcmVzdWx0IGxhdGVyLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiBhdCB0aGUga2VybmVsJiMzOTtzIGNvcmUgd2l0aGluIHRoZSBgdXNlcmZhdWx0ZmRgIHN1YnN5c3RlbSwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIFNpbmNlIGl0JiMzOTtzIHJlYWNoYWJsZSBjb2RlLCBhbmQgZ2l2ZW4gaXRzIGRpcmVjdCBpbXBhY3Qgb24gZnVuY3Rpb25hbGl0eSwgaXQgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIGZ1enppbmcgYW5kIGRldGFpbGVkIGFuYWx5c2lzLiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUsIHNpbmNlIGl0IGlzIHRoZSByb290IG9mIHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBpZiB0aGUgYFVTRVJGQVVMVEZEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0ZXN0aW5nLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBtaWdodCBpbmZvcm0gbXkgZnV6emluZyBzdHJhdGVneSBvciB1bmNvdmVyIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gb3RoZXIgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODQ9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxuLS1cbm1tL0tjb25maWctMTM4OC1cbm1tL0tjb25maWc6MTM4OTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzOTAtXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIHRob3VnaHRzIG15c2VsZjoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBVU0VSRkFVTFRGRCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBVU0VSRkFVTFRGRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc3VyZmFjZS1sZXZlbCBmZWF0dXJlOyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJ3b3ZlbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCB1c2VyLXNwYWNlIGxpYnJhcmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZWxpZXMgb24gaXQgYW5kLCBjcnVjaWFsbHksIHdoYXQgKml0KiByZWxpZXMgb24uIFRoaXMgbWVhbnMgdHJhY2luZyB0aGUgY2FsbCBwYXRocywgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZToKCiogICAqKkNvcmUgS2VybmVsIE1vZHVsZXM6KiogSXMgYFVTRVJGQVVMVEZEYCBwcmltYXJpbHkgYSBtZW1vcnkgbWFuYWdlbWVudCBjb25zdHJ1Y3QsIG9yIGRvZXMgaXQgdG91Y2ggb24gaW50ZXJydXB0IGhhbmRsaW5nLCB0YXNrIHNjaGVkdWxpbmcsIG9yIGV2ZW4gdGhlIG5ldHdvcmtpbmcgc3RhY2s/IFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJhY3Rpb25zIGlzIGtleSB0byBhc3Nlc3NpbmcgaXRzIGltcGFjdC4KKiAgICoqVXNlci1TcGFjZSBMaWJyYXJpZXM6KiogV2hhdCB1c2VyLXNwYWNlIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIGFyZSBsZXZlcmFnaW5nIHRoaXM/IFdoYXQgQVBJcyBhcmUgZXhwb3NlZCwgYW5kIGhvdyBhcmUgdGhleSB1c2VkPyBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLgoqICAgKipWZXJzaW9uIENvbXBhdGliaWxpdHk6KiogSG93IGhhcyBgVVNFUkZBVUxURkRgIGV2b2x2ZWQgb3ZlciBkaWZmZXJlbnQga2VybmVsIHZlcnNpb25zPyBXaGF0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY29uc2lkZXJhdGlvbnMgYXJlIHRoZXJlPyBBbnkgZGVwcmVjYXRpb24gbm90aWNlcz8KKiAgICoqU2VjdXJpdHkgSW1wbGljYXRpb25zOioqIFdoYXQgYXJlIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlPyBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBvciBhdHRhY2sgdmVjdG9ycyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBhbmQgd2lsbCBJIG5lZWQgdG8gdGVzdCBhbnkgZWRnZSBjYXNlcz8KKiAgICoqVGVzdGluZyBhbmQgVmFsaWRhdGlvbjoqKiBXaGF0IHRlc3RzIGFyZSBhbHJlYWR5IGluIHBsYWNlLCBhbmQgd2hhdCB0ZXN0cyBtaWdodCBJIG5lZWQgdG8gcGVyZm9ybSB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBpdCBzaG91bGQgYmU/IEkgYW0gdGhpbmtpbmcgb2YgdmFyaW91cyB0ZXN0IHNjZW5hcmlvcyBJIGNhbiBlbXBsb3kgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHJldmlldy4KCk15IGdvYWwgaXMgdG8gY3JlYXRlIGEgbWVudGFsIG1hcCBvZiBob3cgYFVTRVJGQVVMVEZEYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIGlkZW50aWZ5IGl0cyByb2xlIGFzIGFuIGVuYWJsZXIgYW5kIGFuIG9ic3RhY2xlIHRvIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuIFdpdGggdGhpcyBmb3VuZGF0aW9uLCBJIGNhbiB0aGVuIGZvcm11bGF0ZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXNpZ24gYW5kIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzg5Olx0bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxuMTM5MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuMTM5MTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjEzOTI6XHRcdGhlbHBcbjEzOTM6XHRcdCAgRW5hYmxlIHRoZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIGludGVyY2VwdCBhbmRcbjEzOTQ6XHRcdCAgaGFuZGxlIHBhZ2UgZmF1bHRzIGluIHVzZXJsYW5kLlxuMTM5NTpcdFxuMTM5NjpcdGlmIFVTRVJGQVVMVEZEXG4xMzk3Olx0Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuMTM5ODpcdFx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuMTM5OTpcdFx0ZGVmYXVsdCB5XG4xNDAwOlx0XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxuMTQwMTpcdFxuMTQwMjpcdFx0aGVscFxuMTQwMzpcdFx0ICBBbGxvd3MgdG8gY3JlYXRlIG1hcmtlciBQVEVzIGZvciB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uXG4xNDA0Olx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDU6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDY6XHRlbmRpZiAjIFVTRVJGQVVMVEZEXG4xNDA3Olx0XG4xNDA4Olx0IyBtdWx0aS1nZW4gTFJVIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAzMgoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlNpbXBsaWZ5aW5nIHRoZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0aHJvdWdoIHRoZSBub2lzZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBkZXBlbmRlbmNpZXMgaGVyZSBhcmUgcmVhbGx5IGp1c3QgdGhlIGBNTVVgLiBFdmVyeXRoaW5nIGVsc2UgaXMgZWl0aGVyIGltcGxpY2l0bHkgaGFuZGxlZCBvciBpcnJlbGV2YW50IHRvIHRoZSBpbW1lZGlhdGUgY29uY2Vybi4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBmcm9tIGEgY29uZmlndXJhdGlvbiBzdGFuZHBvaW50LCBgVVNFUkZBVUxURkRgIGlzIHRoZSBvbmx5IGl0ZW0gb24gdGhlIGNoZWNrbGlzdCB0aGF0IGhhcyBhbnkgYmVhcmluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgZ29vZCwgaXQgc3RyZWFtbGluZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gSSBsaWtlIHRoZSBjbGFyaXR5LiBOb3csIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHksIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRlcGVuZGVuY3kgb24gYFVTRVJGQVVMVEZEYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7c3lzX3VzZXJmYXVsdGZkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHVzZXJmYXVsdGZkJiMzOTtzIG1vdmVfcGFnZXMgZnVuY3Rpb24gd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHByb3Blcmx5IGNsZWFyZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AsIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJldHVybiAtRUFHQUlOLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHVzZXJmYXVsdGZkIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgICAmIzM0O3N5c191c2VyZmF1bHRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCYjMzk7cyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cblxuVGhpcyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBvciBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1ZyAoZS5nLiwgaW5maW5pdGUgbG9vcHMgb3IgY3Jhc2hlcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsCiAJCX0KIAogCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJCWVyciA9IDA7CiAJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVc2VyZmF1bHRmZCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGBtb3ZlX3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGZpeGluZyBhIGJ1ZyByZWxhdGVkIHRvIGhvdyBgbW92ZV9wYWdlc2AgaGFuZGxlcyBgLUVBR0FJTmAgZXJyb3JzLiBMZXQgbWUgcGFyc2UgdGhpczoKClRoZSBjb2RlIG9yaWdpbmFsbHkgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKIAkJaWYgKGVycikgewotCQkJaWYgKGVyciA9PSAtRUFHQUlOKQomIzQzOwkJCWlmIChlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJCQllcnIgPSAwOwogCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9CmBgYAoKVGhlIHBhdGNoIG1vZGlmaWVzIGl0IGJ5IHNldHRpbmcgYGVyciA9IDBgICpiZWZvcmUqIHRoZSBgY29udGludWVgLiBIbW0sIGxldCBtZSB0aGluayBhYm91dCB0aGlzLi4uIGBtb3ZlX3BhZ2VzYCBpcyByZXNwb25zaWJsZSBmb3IgbW92aW5nIHBhZ2VzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBvcGVyYXRpbmcgd2l0aGluIHNvbWUga2luZCBvZiBsb29wLiBJZiBgZXJyYCBpcyBgLUVBR0FJTmAsIGl0IG1lYW5zIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHJldHJpZWQgbGF0ZXIuIFRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGlmIHRoYXQgYGVyciA9IDBgIHdhcyBub3QgcHJlc2VudCBhbmQgYC1FQUdBSU5gIG9jY3VycmVkLCBhbmQgdGhlIGxvb3AgaXRlcmF0ZWQsIGBlcnJgIHdvdWxkIGJlIHVuZGVmaW5lZCwgYW5kIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBgZXJyYCB3b3VsZCBiZSByZXR1cm5lZC4KClNvLCB3aXRob3V0IHRoZSBgZXJyID0gMGAsIGlmIGAtRUFHQUlOYCB3YXMgZW5jb3VudGVyZWQsIHRoZSBsb29wIHdvdWxkIGNvbnRpbnVlLCBwcmVzdW1hYmx5IHRvIHJldHJ5IHRoZSBwYWdlIG1vdmUuIEJ1dCwgaWYgdGhlIGxvb3AgKnRoZW4qIHRlcm1pbmF0ZWQgZm9yIHNvbWUgKm90aGVyKiByZWFzb24sIHRoZSBmdW5jdGlvbiBtaWdodCByZXR1cm4gdGhhdCBvcmlnaW5hbCBgLUVBR0FJTmAgZXJyb3IsIG9yIHNvbWUgb3RoZXIgZXJyb3IsIHdoaWNoIGlzIGluY29ycmVjdC4gV2l0aCB0aGUgYWRkZWQgYGVyciA9IDBgLCBpdCBtZWFucyB0aGF0IGlmIHRoZSBvcGVyYXRpb24gaXMgcmV0cmllZCwgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiBgLUVBR0FJTmAgaWYgdGhlIHJldHJ5IGZhaWxzIGJlY2F1c2Ugb2Ygc29tZSBvdGhlciByZWFzb24gLSBpdCB3aWxsIG9ubHkgcmV0dXJuIGFuIGVycm9yIGZvciBzb21lIG90aGVyIHJlYXNvbi4gVGh1cywgaXQgZW5zdXJlcyB0aGF0IGAtRUFHQUlOYCBvbmx5IG1lYW5zICYjMzQ7dHJ5IGFnYWluIGxhdGVyJiMzNDsuCgpMZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgYG1vdmVfcGFnZXNgIGltcGxlbWVudGF0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYCBqdXN0IHRvIGJlIHN1cmUsIGFuZCBzZWUgaWYgSSBjYW4gY29uZmlybSBteSBtZW50YWwgbW9kZWwgb2YgaXRzIG9wZXJhdGlvbmFsIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE2LVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODU5PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcbm1tL3VzZXJmYXVsdGZkLmM6MTg2ODogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxubW0vdXNlcmZhdWx0ZmQuYy0xODY5LSAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHRcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4NzYtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTg3NzogKiBtb3ZlX3BhZ2VzKCkgcmVtYXBzIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgYXRvbWljYWxseSBpbiB6ZXJvXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg4OC0gKiBzdG9yYWdlIG9yIGFueSBvdGhlciBJL08gZGV2aWNlIChNQURWX0RPTlRGT1JLIGluIHRoZSBzb3VyY2Ugdm1hXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxubW0vdXNlcmZhdWx0ZmQuYzoxODkwOiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xODkxLSAqIHBhZ2UgaW4gdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlIGRlc3RpbmF0aW9uIHZtYS5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MDUtICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXG5tbS91c2VyZmF1bHRmZC5jOjE5MDY6ICogbW92ZV9wYWdlcygpIHdpbGwgZmFpbCByZXNwZWN0aXZlbHkgd2l0aCAtRU5PRU5UIG9yIC1FRVhJU1QuIFRoaXNcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEwLSAqIHRpbWUgZm9yIGFueSBnaXZlbiBmYXVsdGluZyBhZGRyZXNzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIHRocmVhZHNcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEyLSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXG5tbS91c2VyZmF1bHRmZC5jOjE5MjE6ICogXCYjMzQ7c2hvcnRcJiMzNDsgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcbm1tL3VzZXJmYXVsdGZkLmMtMTkyMi0gKiB1c2VybGFuZCB3aXRoIHNyYyYjNDM7cmV0dmFsLCBkc3QmIzQzO3JldmFsLCBsZW4tcmV0dmFsIGlmIGl0IHdhbnRzIHRvIGtub3dcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MzMtICovXG5tbS91c2VyZmF1bHRmZC5jOjE5MzQ6c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVx0XHQgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIF9fdTY0IG1vZGUpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVx0XHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcdFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XG5tbS91c2VyZmF1bHRmZC5jOjIwMTY6XHRcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNy1cdFx0ICovXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQxLVx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xubW0vdXNlcmZhdWx0ZmQuYzoyMDQyOlx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2Olx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cbm1tL3VzZXJmYXVsdGZkLmM6MjA2OTpcdFx0XHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXHRcdFx0XHRcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDI1NjpcdFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxubW0vdXNlcmZhdWx0ZmQuYy00MjU3LVx0XHRcdFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1vdmVfcGFnZXNgIGluIGBtbS91c2VyZmF1bHRmZC5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG1vdmVfcGFnZXNgIGlzIGhhbmRsaW5nIHRoaW5ncyBpbiB0aGUgY29udGV4dCBvZiB1c2VyZmF1bHRmZC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaG93IHdlIG1hbmFnZSBwYWdlIG1pZ3JhdGlvbiBhbmQgdHJhbnNmZXIsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBtZW1vcnkgYWNjZXNzIGZhdWx0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBvcmNoZXN0cmF0ZXMgdGhpcyB3aG9sZSBkYW5jZSBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2VyZmF1bHRmZGAgYW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEhvdyBkb2VzIGl0IGtub3cgd2hlcmUgcGFnZXMgYXJlLCBhbmQgaG93IGRvZXMgaXQgZGlyZWN0IHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvPyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgZGVsaWNhdGUgYmFsYW5jaW5nIGFjdCBoZXJlLCBlbnN1cmluZyBkYXRhIGludGVncml0eSB3aGlsZSBtaW5pbWl6aW5nIHRoZSBwZXJmb3JtYW5jZSBoaXQgb2YgcGFnZSBmYXVsdHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZG8gaXQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBsb2NraW5nIHByaW1pdGl2ZXMsIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgZmxvdy4gVGhpcyBjb3VsZCBnaXZlIG1lIHNvbWUgZ3JlYXQgaW5zaWdodHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MzQ6XHRzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4xOTM1Olx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbjE5MzY6XHR7XG4xOTM3Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN0eC1cdTAwM2VtbTtcbjE5Mzg6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwgKmRzdF92bWE7XG4xOTM5Olx0XHR1bnNpZ25lZCBsb25nIHNyY19hZGRyLCBkc3RfYWRkciwgc3JjX2VuZDtcbjE5NDA6XHRcdHBtZF90ICpzcmNfcG1kLCAqZHN0X3BtZDtcbjE5NDE6XHRcdGxvbmcgZXJyID0gLUVJTlZBTDtcbjE5NDI6XHRcdHNzaXplX3QgbW92ZWQgPSAwO1xuMTk0MzpcdFxuMTk0NDpcdFx0LyogU2FuaXRpemUgdGhlIGNvbW1hbmQgcGFyYW1ldGVycy4gKi9cbjE5NDU6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgXHUwMDI2IH5QQUdFX01BU0spO1xuMTk0NjpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCBcdTAwMjYgflBBR0VfTUFTSyk7XG4xOTQ3Olx0XHRWTV9XQVJOX09OX09OQ0UobGVuIFx1MDAyNiB+UEFHRV9NQVNLKTtcbjE5NDg6XHRcbjE5NDk6XHRcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cbjE5NTA6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgJiM0MzsgbGVuIFx1MDAzYyBzcmNfc3RhcnQpO1xuMTk1MTpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCAmIzQzOyBsZW4gXHUwMDNjIGRzdF9zdGFydCk7XG4xOTUyOlx0XG4xOTUzOlx0XHRlcnIgPSB1ZmZkX21vdmVfbG9jayhtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIFx1MDAyNmRzdF92bWEsIFx1MDAyNnNyY192bWEpO1xuMTk1NDpcdFx0aWYgKGVycilcbjE5NTU6XHRcdFx0Z290byBvdXQ7XG4xOTU2Olx0XG4xOTU3Olx0XHQvKiBSZS1jaGVjayBhZnRlciB0YWtpbmcgbWFwX2NoYW5naW5nX2xvY2sgKi9cbjE5NTg6XHRcdGVyciA9IC1FQUdBSU47XG4xOTU5Olx0XHRkb3duX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcbjE5NjA6XHRcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1tYXBfY2hhbmdpbmcpKSlcbjE5NjE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk2MjpcdFx0LypcbjE5NjM6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXG4xOTY0Olx0XHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xuMTk2NTpcdFx0ICogdm1hLlxuMTk2NjpcdFx0ICovXG4xOTY3Olx0XHRlcnIgPSAtRUlOVkFMO1xuMTk2ODpcdFx0aWYgKHNyY192bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRClcbjE5Njk6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk3MDpcdFx0aWYgKHNyY19zdGFydCAmIzQzOyBsZW4gXHUwMDNlIHNyY192bWEtXHUwMDNldm1fZW5kKVxuMTk3MTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTcyOlx0XG4xOTczOlx0XHRpZiAoZHN0X3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKVxuMTk3NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTc1Olx0XHRpZiAoZHN0X3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2UgZHN0X3ZtYS1cdTAwM2V2bV9lbmQpXG4xOTc2Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5Nzc6XHRcbjE5Nzg6XHRcdGVyciA9IHZhbGlkYXRlX21vdmVfYXJlYXMoY3R4LCBzcmNfdm1hLCBkc3Rfdm1hKTtcbjE5Nzk6XHRcdGlmIChlcnIpXG4xOTgwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5ODE6XHRcbjE5ODI6XHRcdGZvciAoc3JjX2FkZHIgPSBzcmNfc3RhcnQsIGRzdF9hZGRyID0gZHN0X3N0YXJ0LCBzcmNfZW5kID0gc3JjX3N0YXJ0ICYjNDM7IGxlbjtcbjE5ODM6XHRcdCAgICAgc3JjX2FkZHIgXHUwMDNjIHNyY19lbmQ7KSB7XG4xOTg0Olx0XHRcdHNwaW5sb2NrX3QgKnB0bDtcbjE5ODU6XHRcdFx0cG1kX3QgZHN0X3BtZHZhbDtcbjE5ODY6XHRcdFx0dW5zaWduZWQgbG9uZyBzdGVwX3NpemU7XG4xOTg3Olx0XG4xOTg4Olx0XHRcdC8qXG4xOTg5Olx0XHRcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxuMTk5MDpcdFx0XHQgKiB0cmFuc3BhcmVudCBodWdlIFBVRC4gSWYgZmlsZS1iYWNrZWQgc3VwcG9ydCBpcyBhZGRlZCxcbjE5OTE6XHRcdFx0ICogdGhhdCBjYXNlIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBoZXJlLlxuMTk5MjpcdFx0XHQgKi9cbjE5OTM6XHRcdFx0c3JjX3BtZCA9IG1tX2ZpbmRfcG1kKG1tLCBzcmNfYWRkcik7XG4xOTk0Olx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjE5OTU6XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjE5OTY6XHRcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4xOTk3Olx0XHRcdFx0XHRicmVhaztcbjE5OTg6XHRcdFx0XHR9XG4xOTk5Olx0XHRcdFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xuMjAwMDpcdFx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjIwMDE6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDAyOlx0XHRcdFx0XHRicmVhaztcbjIwMDM6XHRcdFx0XHR9XG4yMDA0Olx0XHRcdH1cbjIwMDU6XHRcdFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xuMjAwNjpcdFx0XHRpZiAodW5saWtlbHkoIWRzdF9wbWQpKSB7XG4yMDA3Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjIwMDg6XHRcdFx0XHRicmVhaztcbjIwMDk6XHRcdFx0fVxuMjAxMDpcdFxuMjAxMTpcdFx0XHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XG4yMDEyOlx0XHRcdC8qXG4yMDEzOlx0XHRcdCAqIElmIHRoZSBkc3RfcG1kIGlzIG1hcHBlZCBhcyBUSFAgZG9uJiMzOTt0IG92ZXJyaWRlIGl0IGFuZCBqdXN0XG4yMDE0Olx0XHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxuMjAxNTpcdFx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbjIwMTY6XHRcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuMjAxNzpcdFx0XHQgKi9cbjIwMTg6XHRcdFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xuMjAxOTpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDIwOlx0XHRcdFx0YnJlYWs7XG4yMDIxOlx0XHRcdH1cbjIwMjI6XHRcbjIwMjM6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhzcmNfcG1kLCBzcmNfdm1hKTtcbjIwMjQ6XHRcdFx0aWYgKHB0bCkge1xuMjAyNTpcdFx0XHRcdC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHRoZSBwbWQgd2l0aG91dCBzcGxpdHRpbmcgaXQuICovXG4yMDI2Olx0XHRcdFx0aWYgKG1vdmVfc3BsaXRzX2h1Z2VfcG1kKGRzdF9hZGRyLCBzcmNfYWRkciwgc3JjX3N0YXJ0ICYjNDM7IGxlbikgfHxcbjIwMjc6XHRcdFx0XHQgICAgIXBtZF9ub25lKGRzdF9wbWR2YWwpKSB7XG4yMDI4Olx0XHRcdFx0XHQvKiBDYW4gYmUgYSBtaWdyYXRpb24gZW50cnkgKi9cbjIwMjk6XHRcdFx0XHRcdGlmIChwbWRfcHJlc2VudCgqc3JjX3BtZCkpIHtcbjIwMzA6XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBtZF9mb2xpbygqc3JjX3BtZCk7XG4yMDMxOlx0XG4yMDMyOlx0XHRcdFx0XHRcdGlmICghaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjIwMzM6XHRcdFx0XHRcdFx0ICAgICFQYWdlQW5vbkV4Y2x1c2l2ZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgTmV4dCBTdGVwcyBpbiBgbW92ZV9wYWdlc2AqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbi4gV2UmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHRhc2sgaW4gbWluZCAod2hhdGV2ZXIgdGhlIGxhcmdlciBjb250ZXh0IGRpY3RhdGVzKSwgYW5kIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBpdm90YWwgdG8gYWNjb21wbGlzaGluZyBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uJiMzNDsuIEkmIzM5O20gbm90IHN0b3BwaW5nIHRvIHJlZmxlY3Qgb24gYW55dGhpbmcgZWxzZSwganVzdCB3aGF0JiMzOTtzIG5leHQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIG9wZXJhdGlvbmFsIGRldGFpbHMsIGlkZW50aWZ5IGhvdyBpdCB3aWxsIGZpdCBpbnRvIHRoZSB3aWRlciBzY29wZSwgYW5kIGRldGVybWluZSB3aGF0IHdlIHdpbGwgYmUgZG9pbmcsIGFuZCBob3cgd2Ugd2lsbCBiZSBkb2luZyBpdC4gVGhlIHJlc3Qgb2YgdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBtdXN0IGJlIHVuZGVyc3Rvb2QgaWYgd2UgYXJlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbGFyZ2VyIHN0cnVjdHVyZSByZXF1aXJlcyBvZiB1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYXQgdGhlIGltcGxlbWVudGF0aW9uIGxldmVsIG5vdy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzNDpcdFx0XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4yMDM1Olx0XHRcdFx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMjAzNjpcdFx0XHRcdFx0XHRcdGJyZWFrO1xuMjAzNzpcdFx0XHRcdFx0XHR9XG4yMDM4Olx0XHRcdFx0XHR9XG4yMDM5Olx0XG4yMDQwOlx0XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuMjA0MTpcdFx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xuMjA0MjpcdFx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xuMjA0MzpcdFx0XHRcdFx0Y29udGludWU7XG4yMDQ0Olx0XHRcdFx0fVxuMjA0NTpcdFxuMjA0NjpcdFx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG4yMDQ3Olx0XHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuMjA0ODpcdFx0XHRcdFx0XHRcdCAgZHN0X2FkZHIsIHNyY19hZGRyKTtcbjIwNDk6XHRcdFx0XHRzdGVwX3NpemUgPSBIUEFHRV9QTURfU0laRTtcbjIwNTA6XHRcdFx0fSBlbHNlIHtcbjIwNTE6XHRcdFx0XHRsb25nIHJldDtcbjIwNTI6XHRcbjIwNTM6XHRcdFx0XHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XG4yMDU0Olx0XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjIwNTU6XHRcdFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjIwNTY6XHRcdFx0XHRcdFx0YnJlYWs7XG4yMDU3Olx0XHRcdFx0XHR9XG4yMDU4Olx0XHRcdFx0XHRpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHNyY19wbWQpKSkge1xuMjA1OTpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2MDpcdFx0XHRcdFx0XHRicmVhaztcbjIwNjE6XHRcdFx0XHRcdH1cbjIwNjI6XHRcdFx0XHR9XG4yMDYzOlx0XG4yMDY0Olx0XHRcdFx0aWYgKHVubGlrZWx5KHB0ZV9hbGxvYyhtbSwgZHN0X3BtZCkpKSB7XG4yMDY1Olx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2NjpcdFx0XHRcdFx0YnJlYWs7XG4yMDY3Olx0XHRcdFx0fVxuMjA2ODpcdFxuMjA2OTpcdFx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbjIwNzA6XHRcdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4yMDcxOlx0XHRcdFx0XHRcdCAgICAgIHNyY19hZGRyLCBzcmNfZW5kIC0gc3JjX2FkZHIsIG1vZGUpO1xuMjA3MjpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDczOlx0XHRcdFx0XHRlcnIgPSByZXQ7XG4yMDc0Olx0XHRcdFx0ZWxzZVxuMjA3NTpcdFx0XHRcdFx0c3RlcF9zaXplID0gcmV0O1xuMjA3NjpcdFx0XHR9XG4yMDc3Olx0XG4yMDc4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjA3OTpcdFxuMjA4MDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjIwODE6XHRcdFx0XHQvKiBEbyBub3Qgb3ZlcnJpZGUgYW4gZXJyb3IgKi9cbjIwODI6XHRcdFx0XHRpZiAoIWVyciB8fCBlcnIgPT0gLUVBR0FJTilcbjIwODM6XHRcdFx0XHRcdGVyciA9IC1FSU5UUjtcbjIwODQ6XHRcdFx0XHRicmVhaztcbjIwODU6XHRcdFx0fVxuMjA4NjpcdFxuMjA4NzpcdFx0XHRpZiAoZXJyKSB7XG4yMDg4Olx0XHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4yMDg5Olx0XHRcdFx0XHRlcnIgPSAwO1xuMjA5MDpcdFx0XHRcdFx0Y29udGludWU7XG4yMDkxOlx0XHRcdFx0fVxuMjA5MjpcdFx0XHRcdGJyZWFrO1xuMjA5MzpcdFx0XHR9XG4yMDk0Olx0XG4yMDk1Olx0XHRcdC8qIFByb2NlZWQgdG8gdGhlIG5leHQgcGFnZSAqL1xuMjA5NjpcdFx0XHRkc3RfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5NzpcdFx0XHRzcmNfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5ODpcdFx0XHRtb3ZlZCAmIzQzOz0gc3RlcF9zaXplO1xuMjA5OTpcdFx0fVxuMjEwMDpcdFxuMjEwMTpcdG91dF91bmxvY2s6XG4yMTAyOlx0XHR1cF9yZWFkKFx1MDAyNmN0eC1cdTAwM2VtYXBfY2hhbmdpbmdfbG9jayk7XG4yMTAzOlx0XHR1ZmZkX21vdmVfdW5sb2NrKGRzdF92bWEsIHNyY192bWEpO1xuMjEwNDpcdG91dDpcbjIxMDU6XHRcdFZNX1dBUk5fT05fT05DRShtb3ZlZCBcdTAwM2MgMCk7XG4yMTA2Olx0XHRWTV9XQVJOX09OX09OQ0UoZXJyIFx1MDAzZSAwKTtcbjIxMDc6XHRcdFZNX1dBUk5fT05fT05DRSghbW92ZWQgXHUwMDI2XHUwMDI2ICFlcnIpO1xuMjEwODpcdFx0cmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7XG4yMTA5Olx0fVxuMjExMDpcdFxuMjExMTpcdHN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuMjExMjpcdFx0XHQgICAgICAgYm9vbCB3cF9hc3luYylcbjIxMTM6XHR7XG4yMTE0Olx0XHRjb25zdCBzdHJ1Y3Qgdm1fdWZmZF9vcHMgKm9wcyA9IHZtYV91ZmZkX29wcyh2bWEpO1xuMjExNTpcdFxuMjExNjpcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RST1BQQUJMRSB8IFZNX1NIQURPV19TVEFDSykpXG4yMTE3Olx0XHRcdHJldHVybiBmYWxzZTtcbjIxMTg6XHRcbjIxMTk6XHRcdGlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXHUwMDI2XHUwMDI2ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NQRUNJQUwpKVxuMjEyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTIxOlx0XG4yMTIyOlx0XHR2bV9mbGFncyBcdTAwMjY9IF9fVk1fVUZGRF9GTEFHUztcbjIxMjM6XHRcbjIxMjQ6XHRcdC8qXG4yMTI1Olx0XHQgKiBJZiBXUCBpcyB0aGUgb25seSBtb2RlIGVuYWJsZWQgYW5kIGNvbnRleHQgaXMgd3AgYXN5bmMsIGFsbG93IGFueVxuMjEyNjpcdFx0ICogbWVtb3J5IHR5cGUuXG4yMTI3Olx0XHQgKi9cbjIxMjg6XHRcdGlmICh3cF9hc3luYyBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzID09IFZNX1VGRkRfV1ApKVxuMjEyOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjIxMzA6XHRcbjIxMzE6XHRcdC8qIEZvciBhbnkgb3RoZXIgbW9kZSByZWplY3QgVk1BcyB0aGF0IGRvbiYjMzk7dCBpbXBsZW1lbnQgdm1fdWZmZF9vcHMgKi9cbjIxMzI6XHRcdGlmICghb3BzKVxuMjEzMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MzcKCQkJCQkJCW91dHB1dDogMjE5CgkJCQkJCQl0aG91Z2h0czogMTk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYG1vdmVfcGFnZXNgIGAtRUFHQUlOYCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29udHJvbC1mbG93IGlzc3VlIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgYC1FQUdBSU5gIGVycm9ycyByZXR1cm5lZCBieSB0aGUgbG93ZXItbGV2ZWwgcGFnZS1tb3ZpbmcgZnVuY3Rpb25zIChgbW92ZV9wYWdlc19wdGVzYCwgYG1vdmVfcGFnZXNfaHVnZV9wbWRgKS4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGNlbnRlcnMgYXJvdW5kIHRoZSBwZXJzaXN0ZW50IHN0YXRlIG9mIHRoZSBgZXJyYCB2YXJpYWJsZSB3aXRoaW4gdGhlIG1haW4gbG9vcC4KClRoZSBidWcgaXMgdGhhdCB3aGVuIGEgY2FsbCB0byBgbW92ZV9wYWdlc19wdGVzYCAob3IgaXRzIHBtZCBlcXVpdmFsZW50KSByZXR1cm5zIGAtRUFHQUlOYCwgdGhlIGludGVudGlvbiBpcyB0byByZXRyeSB0aGUgb3BlcmF0aW9uIG9uIHRoZSAqc2FtZSogbWVtb3J5IHJlZ2lvbiBpbiB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgZmxhdyBsaWVzIGluIHRoZSBmYWN0IHRoYXQgaXQgZG9lc24mIzM5O3QgY2xlYXIgdGhlIGBlcnJgIHZhcmlhYmxlIHdoZW4gaXQgZW5jb3VudGVycyBgLUVBR0FJTmAgYW5kIHByb2NlZWRzIHRvIGBjb250aW51ZWAgdGhlIGxvb3AuIFNvLCBpZiB0aGUgc3Vic2VxdWVudCBhdHRlbXB0IHN1Y2NlZWRzLCB0aGUgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gZG9lc24mIzM5O3Qgb3ZlcndyaXRlIHRoZSBzdGFsZSBgLUVBR0FJTmAgdmFsdWUgaW4gYGVycmAuCgpDb25zaWRlciB0aGlzIHNjZW5hcmlvOiBJbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGAtRUFHQUlOYC4gYGVycmAgYmVjb21lcyBgLUVBR0FJTmAsIGFuZCBiZWNhdXNlIG9mIHRoZSBjb25kaXRpb24gYGlmIChlcnIgPT0gLUVBR0FJTikgY29udGludWVgLCB0aGUgbG9vcCBza2lwcyB0aGUgYWRkcmVzcyBpbmNyZW1lbnQsIHRodXMgcmV0cnlpbmcgb24gdGhlIGV4YWN0IHNhbWUgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGl0ZXJhdGlvbi4gTm93LCBpZiB0aGUgc2Vjb25kIGl0ZXJhdGlvbiBzdWNjZXNzZnVsbHkgbW92ZXMgc29tZSBwYWdlcywgaXQgcmV0dXJucyBhIHBvc2l0aXZlIGByZXRgIHZhbHVlLiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgYGVycmAgZnJvbSB0aGUgZmlyc3QgYC1FQUdBSU5gIGlzbiYjMzk7dCBvdmVyd3JpdHRlbi4gVGhpcyBtZWFucyB0aGUgcHJvZ3JhbSB0aGVuIHNraXBzIHRoZSBpbmNyZW1lbnQgYW5kIHJldHJpZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBpbmRlZmluaXRlbHksIHdoaWNoIGlzIGRlZmluaXRlbHkgaW5jb3JyZWN0IGFuZCBwcm9iYWJseSBhIHNvZnQgbG9ja3VwLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBzZXR0aW5nIGBlcnIgPSAwYCBiZWZvcmUgdGhlIGBjb250aW51ZWAsIGVuc3VyaW5nIHRoYXQgYW55IHN1Y2Nlc3NmdWwgc3Vic2VxdWVudCBhdHRlbXB0cyBhcmUgcHJvcGVybHkgYWNrbm93bGVkZ2VkIGFuZCB0aGUgbG9vcCBwcm9jZWVkcyBhcyBpbnRlbmRlZCwgdGhlcmVieSBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3NlcyBhbmQgbW92aW5nIG9uIHRvIHRoZSBuZXh0IHNlZ21lbnQuCgpTbywgdGhlIGNyaXRpY2FsIGlzc3VlIGlzIHRoZSBsb29wJiMzOTtzIGNvbnRyb2wgZmxvdywgc3BlY2lmaWNhbGx5IHRoZSBmYWN0IHRoYXQgYGVycmAgaXNuJiMzOTt0IHByb3Blcmx5IGNsZWFyZWQgb24gYSBzdWNjZXNzZnVsIHJldHJ5LiBUaGlzIGxlYWRzIHRvIHRoZSBza2lwcGluZyBvZiBpbXBvcnRhbnQgaW5jcmVtZW50cywgbGVhZGluZyB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZSBjcml0aWNhbCBwaWVjZSBtaXNzaW5nIGZyb20gdGhlIG9sZCBsb2dpYyBpcyB0byByZXNldCB0aGUgZXJyb3IgY29kZSBiZWZvcmUgY29udGludWluZy4KCkxldCBtZSBleGFtaW5lIHRoZSBjb2RlOgpgYGBjCmlmIChlcnIpIHsKICAgIGlmIChlcnIgPT0gLUVBR0FJTikgewoJZXJyID0gMDsKCWNvbnRpbnVlOwogICAgfQogICAgYnJlYWs7Cn0KYGBgCgpUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZXJyID0gMDtgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBzaW1wbHkgYGNvbnRpbnVlYGQsIHdoaWNoIHNraXBwZWQgdGhlIGFkZHJlc3MgaW5jcmVtZW50LgoKTm93LCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBjbGVhcjogVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykgb3IgcG1kIGVudHJpZXM7IGl0IGRvZXNuJiMzOTt0IHJlYWQgZnJvbSBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhlIGNvcmUgaXNzdWUgaXMgYSBsb2dpYyBmbGF3OiBhIGxvb3AgY29udHJvbCB2YXJpYWJsZSBub3QgYmVpbmcgcmVzZXQsIGNhdXNpbmcgdGhlIHByb2Nlc3MgdG8gZW50ZXIgYSBzdGF0ZSB3aGVyZSBpdCBlbmRsZXNzbHkgcmV0cmllcyB0aGUgc2FtZSBvcGVyYXRpb24gd2l0aG91dCBtYWtpbmcgcHJvZ3Jlc3MuIEtBU0FOIG1pZ2h0IGNhdGNoIGl0IGlmIGl0IGNhdXNlcyBhIG1lbW9yeSBmYXVsdCwgYnV0IGl0JiMzOTtzIG1vcmUgbGlrZWx5IGEgc29mdCBsb2NrdXAgb3IgaW5jb3JyZWN0IHJldHVybiBjb2RlLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBidWcgaXMgYSBtYXR0ZXIgb2YgY29udHJvbCBmbG93LCBub3Qgb2YgdW5pbml0aWFsaXplZCByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrYWdlLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoLCB0aGVyZWZvcmUsIHJlbW92ZXMgYSBsb2dpYyBlcnJvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFdoZW4gYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgbG9vcCB1c2VzIGBjb250aW51ZWAgdG8gcmV0cnkgdGhlIHNhbWUgYWRkcmVzcy4gSG93ZXZlciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBub3QgcmVzZXQgdG8gMC4gSW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uLCBpZiB0aGUgbW92ZSBzdWNjZWVkcywgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIGFuZCByZW1haW5zIGAtRUFHQUlOYC4gVGhpcyBjYXVzZXMgdGhlIGxvb3AgdG8gaW5jb3JyZWN0bHkgYGNvbnRpbnVlYCBhZ2FpbiB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgYWRkcmVzc2VzIG9yIHRoZSBgbW92ZWRgIGNvdW50ZXIsIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgcGFnZSBtb3ZpbmcgYmVoYXZpb3IuXG5cblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFdoZW4gYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgbG9vcCB1c2VzIGBjb250aW51ZWAgdG8gcmV0cnkgdGhlIHNhbWUgYWRkcmVzcy4gSG93ZXZlciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBub3QgcmVzZXQgdG8gMC4gSW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uLCBpZiB0aGUgbW92ZSBzdWNjZWVkcywgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIGFuZCByZW1haW5zIGAtRUFHQUlOYC4gVGhpcyBjYXVzZXMgdGhlIGxvb3AgdG8gaW5jb3JyZWN0bHkgYGNvbnRpbnVlYCBhZ2FpbiB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgYWRkcmVzc2VzIG9yIHRoZSBgbW92ZWRgIGNvdW50ZXIsIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgcGFnZSBtb3ZpbmcgYmVoYXZpb3IuXG5cblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzoyMi43NDAxMjc1NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMDg1MTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gICAgXCJzeXNfdXNlcmZhdWx0ZmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBXaGVuIGEgcGFnZSBtb3ZlIG9wZXJhdGlvbiByZXR1cm5zIGAtRUFHQUlOYCwgdGhlIGxvb3AgdXNlcyBgY29udGludWVgIHRvIHJldHJ5IHRoZSBzYW1lIGFkZHJlc3MuIEhvd2V2ZXIsIHRoZSBgZXJyYCB2YXJpYWJsZSB3YXMgbm90IHJlc2V0IHRvIDAuIEluIHRoZSBzdWJzZXF1ZW50IGl0ZXJhdGlvbiwgaWYgdGhlIG1vdmUgc3VjY2VlZHMsIGBlcnJgIGlzIG5vdCBvdmVyd3JpdHRlbiBhbmQgcmVtYWlucyBgLUVBR0FJTmAuIFRoaXMgY2F1c2VzIHRoZSBsb29wIHRvIGluY29ycmVjdGx5IGBjb250aW51ZWAgYWdhaW4gd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3NlcyBvciB0aGUgYG1vdmVkYCBjb3VudGVyLCBsZWFkaW5nIHRvIGFuIGluZmluaXRlIGxvb3Agb3IgaW5jb3JyZWN0IHBhZ2UgbW92aW5nIGJlaGF2aW9yLlxcblxcblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHVzZXJmYXVsdGZkJ3MgbW92ZV9wYWdlcyBmdW5jdGlvbiB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcHJvcGVybHkgY2xlYXJlZCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcCwgcG90ZW50aWFsbHkgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmV0dXJuIC1FQUdBSU4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdXNlcmZhdWx0ZmQgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjIyLjc0MDEzMjY4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NjM2MzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDI6MDM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTIwODUsOCArMjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOKVxcbitcXHRcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjIzLjk5NzM1NTg4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2MTAxMTg1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInN5c191c2VyZmF1bHRmZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHVzZXJmYXVsdGZkJ3MgbW92ZV9wYWdlcyBmdW5jdGlvbiB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcHJvcGVybHkgY2xlYXJlZCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcCwgcG90ZW50aWFsbHkgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmV0dXJuIC1FQUdBSU4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdXNlcmZhdWx0ZmQgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTIwODUsOCArMjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcbitcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbitcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjIzLjk5NzM1NzQwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDkxNzQ4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVXNlcmZhdWx0ZmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBtbS91c2VyZmF1bHRmZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIHJpZ2h0IGhlcmU6IGEgY29uZGl0aW9uYWwgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBJbml0aWFsbHksIGlmIGBlcnJgIHdhcyBgLUVBR0FJTmAsIHRoZSBjb2RlIHdvdWxkIGp1c3QgYmFpbCBvdXQgb2YgdGhlIGxvb3AuIE5vdywgaXQgZXhwbGljaXRseSByZXNldHMgYGVycmAgdG8gMCBhbmQgY29udGludWVzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQgYWx0ZXJzIHRoZSBwcm9ncmFtJ3MgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgdGhhdCBzcGVjaWZpYyBlcnJvciBjb2RlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoeT8gV2hhdCdzIHRoZSByYXRpb25hbGUgZm9yIGVzc2VudGlhbGx5IGlnbm9yaW5nIGAtRUFHQUlOYCBpbiB0aGlzIGNvbnRleHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtb3ZlX3BhZ2VzYCBhbmQgaG93IHVzZXJmYXVsdGZkIGludGVyYWN0cyB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsYXllciB0byBtYWtlIHNlbnNlIG9mIHRoaXMuIElzIGl0IHJlbGF0ZWQgdG8gcmV0cnlpbmcgYSBmYWlsZWQgcGFnZSBtb3ZlIGR1ZSB0byByZXNvdXJjZSBjb250ZW50aW9uPyBQZXJoYXBzIHRoaXMgaXMgYSBtaXRpZ2F0aW9uIGZvciB0cmFuc2llbnQgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3VzZXJmYXVsdGZkLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjI3LjgwNjUzNjE5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczNjEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xODU5PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxcbm1tL3VzZXJmYXVsdGZkLmM6MTg2ODogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2OS0gKiBAY3R4OiBwb2ludGVyIHRvIHRoZSB1c2VyZmF1bHRmZCBjb250ZXh0XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzYtICpcXG5tbS91c2VyZmF1bHRmZC5jOjE4Nzc6ICogbW92ZV9wYWdlcygpIHJlbWFwcyBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIGF0b21pY2FsbHkgaW4gemVyb1xcbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE4ODgtICogc3RvcmFnZSBvciBhbnkgb3RoZXIgSS9PIGRldmljZSAoTUFEVl9ET05URk9SSyBpbiB0aGUgc291cmNlIHZtYVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXFxubW0vdXNlcmZhdWx0ZmQuYzoxODkwOiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg5MS0gKiBwYWdlIGluIHRoZSBmYXVsdGluZyBhZGRyZXNzIGluIHRoZSBkZXN0aW5hdGlvbiB2bWEuXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MDUtICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTA2OiAqIG1vdmVfcGFnZXMoKSB3aWxsIGZhaWwgcmVzcGVjdGl2ZWx5IHdpdGggLUVOT0VOVCBvciAtRUVYSVNULiBUaGlzXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMC0gKiB0aW1lIGZvciBhbnkgZ2l2ZW4gZmF1bHRpbmcgYWRkcmVzcy4gVGhpcyBtZWFucyB0aGF0IGlmIHR3byB0aHJlYWRzXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTEyLSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcXG5tbS91c2VyZmF1bHRmZC5jOjE5MjE6ICogXFxcInNob3J0XFxcIiByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkyMi0gKiB1c2VybGFuZCB3aXRoIHNyYytyZXR2YWwsIGRzdCtyZXZhbCwgbGVuLXJldHZhbCBpZiBpdCB3YW50cyB0byBrbm93XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MzMtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTM0OnN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVxcdFxcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTY6XFx0XFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNy1cXHRcXHQgKi9cXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0MS1cXHRcXHRcXHRcXHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDQyOlxcdFxcdFxcdFxcdC8qIFRoZSBmb2xpbyB3aWxsIGJlIHNwbGl0IGJ5IG1vdmVfcGFnZXNfcHRlKCkgKi9cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2OlxcdFxcdFxcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cXG5tbS91c2VyZmF1bHRmZC5jOjIwNjk6XFx0XFx0XFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cXHRcXHRcXHRcXHRcXHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjU1LVxcdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jOjQyNTY6XFx0XFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1Ny1cXHRcXHRcXHRcXHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDM6MjcuODU0MjgwNTk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NTMyNzI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgYFVGRkRJT19NT1ZFYCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBgbW92ZV9wYWdlc2AgaXMgbm93IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBieSBgdXNlcmZhdWx0ZmRfbW92ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBgVUZGRElPX01PVkVgIGlvY3RsIHdvcmtzIGluIHVzZXJmYXVsdGZkLCBzbyBpdCdzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBmdW5jdGlvbmFsaXR5LiBJdCdzIGEga2V5IGNoYW5nZSwgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYWNyb3NzIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3MgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHVzZXJmYXVsdGZkIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSBpbiB0aGlzIHNjZW5hcmlvLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgc2V0IHVwIGZvciB0aGlzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjMwLjYxOTYxMDM4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM1ODgxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDM6MzIuMzU1NTAxMDg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2OTg4ODk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVzZXJmYXVsdGZkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIHdpdGggaXMgZGVmaW5pdGVseSB1c2luZyBgVVNFUkZBVUxURkRgLiBUaGF0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBNeSBwcmltYXJ5IGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24gYXJlIGNlbnRlcmVkIGFyb3VuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBwYWdlIG1pZ3JhdGlvbiB3aXRoIGB1c2VyZmF1bHRmZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdC4gVGhlIGtleSBzeW1ib2xzIEknbSBsb29raW5nIGZvciBhcmUgYG1vdmVfcGFnZXNgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIG9yIGB1c2VyZmF1bHRmZF9pb2N0bGAuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgcmVsZXZhbnQgY29udHJvbCBmbG93LiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzozNS4yMjUzOTE5OTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MDE4MjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjM1LjI3MzMwMTI3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQyMTI4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBVc2VyZmF1bHRmZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGB1c2VyZmF1bHRmZF9pb2N0bGAgd29ya3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBpcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBkZWZpbmVkIGluIGBmcy91c2VyZmF1bHRmZC5jYD9cIiBUaGF0IHNlZW1zLi4ucG90ZW50aWFsbHkgb2ZmLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBjb3JlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24uIEl0ICpjb3VsZCogYmUgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgYm90aCBgbW0vdXNlcmZhdWx0ZmQuY2AgKHRoYXQncyB0aGUgbW9yZSBsaWtlbHkgbG9jYXRpb24sIGdpdmVuIHRoZSBuYXR1cmUgb2YgdXNlcmZhdWx0ZmQpIGFuZCB0aGVuIHRvIGNvbmZpcm0gb3IgZGVueSBpbiBgZnMvdXNlcmZhdWx0ZmQuY2AuIFRoZSBwb3RlbnRpYWwgZm9yIGEgbmFtaW5nIGNvbGxpc2lvbiwgb3IgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiBiZWluZyBpbXBsZW1lbnRlZCBlbHNld2hlcmUgYW5kIHRoZSBgZnNgIGRpcmVjdG9yeSBjb250YWluaW5nIGFuIGludGVyZmFjZSwgbWFrZXMgaXQgbmVjZXNzYXJ5IHRvIGNoZWNrIGJvdGggdG8gZW5zdXJlIEkgaGF2ZSB0aGUgcHJvcGVyIHJlZmVyZW5jZS4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzozOC42Njc1MTU3OThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY2MjQwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMTM0PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjE4OS1cXHRcXHQgKiB1c2VyZmF1bHRmZF93cCgpIHZtYXMuICBCdXQgc2luY2UgdGhlIG1tYXBfbG9jayBpcyBub3QgaGVsZCxcXG5tbS9raHVnZXBhZ2VkLmM6MjE5MDpcXHRcXHQgKiBpdCBpcyBzdGlsbCBwb3NzaWJsZSBmb3IgYSByYWNpbmcgdXNlcmZhdWx0ZmRfaW9jdGwoKSBvclxcbm1tL2todWdlcGFnZWQuYy0yMTkxLVxcdFxcdCAqIG1hZHZpc2UoKSB0byBoYXZlIGluc2VydGVkIHB0ZXMgb3IgbWFya2Vycy4gIE5vdyB0aGF0IHdlIGhvbGRcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDI4Nj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2FwaShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQzNDktXFxubW0vdXNlcmZhdWx0ZmQuYzo0MzUwOnN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy00MzUxLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00NDIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzZXJmYXVsdGZkX2ZvcHMgPSB7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ0MjgtXFx0LnJlYWRfaXRlclxcdD0gdXNlcmZhdWx0ZmRfcmVhZF9pdGVyLFxcbm1tL3VzZXJmYXVsdGZkLmM6NDQyOTpcXHQudW5sb2NrZWRfaW9jdGwgPSB1c2VyZmF1bHRmZF9pb2N0bCxcXG5tbS91c2VyZmF1bHRmZC5jLTQ0MzAtXFx0LmNvbXBhdF9pb2N0bFxcdD0gY29tcGF0X3B0cl9pb2N0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDM6NDAuNDQ0MTQ1NzUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTk0ODE0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdXNlcmZhdWx0ZmRfbW92ZWAgU3ltYm9sKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQsIHRoZSBvbmUgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLCB1c2VzIHRoZSBzeW1ib2wgYHVzZXJmYXVsdGZkX21vdmVgLiBXYWl0IGEgc2Vjb25k4oCmIGlzbid0IGBtb3ZlX3BhZ2VzYCBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2A/IFRoYXQncyByaW5naW5nIGEgYmVsbC4gVGhpcyBoYXMgbWUgdGhpbmtpbmc6IGlzIGB1c2VyZmF1bHRmZF9tb3ZlYCBhbHNvIGRlZmluZWQgYXMgc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQgaGFzIGV4dGVybmFsIGxpbmthZ2Ugb3IgaXMgc2NvcGVkIHRvIGEgc3BlY2lmaWMgZmlsZS4gVGhhdCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB3aWxsIGJlIHByZXR0eSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGluIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjQzLjQ0MzYzMDIyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNTE2MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91c2VyZmF1bHRmZC5jPTQyMDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWZmZF9jdHhfZmVhdHVyZXMoX191NjQgdXNlcl9mZWF0dXJlcylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNS1cXG5tbS91c2VyZmF1bHRmZC5jOjQyMTY6c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG5tbS91c2VyZmF1bHRmZC5jLTQyMTctXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MzUwPXN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQzNzgtXFx0Y2FzZSBVRkZESU9fTU9WRTpcXG5tbS91c2VyZmF1bHRmZC5jOjQzNzk6XFx0XFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XFxubW0vdXNlcmZhdWx0ZmQuYy00MzgwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzo0NC4yODYxNTMxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTgwMTk4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgQVBJKipcblxuT2theSwgc28gYHVzZXJmYXVsdGZkX21vdmVgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0LiBOb3csIGxldCBtZSByZS1yZWFkIHRoYXQgZ3VpZGVsaW5l4oCmIEFoLCB0aGUgcHJlZmVyZW5jZSBpcyBmb3IgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMuIFRoYXQgd291bGQgZ2l2ZSB0aGVtIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIE9rYXksIHNvIHRoYXQgbWVhbnMgYHVzZXJmYXVsdGZkX2lvY3RsYCAqc2hvdWxkKiBiZSB0aGUgQVBJIGVudHJ5cG9pbnQgdGhlbiwgcmlnaHQ/IEl0J3MgdGhlIG9ubHkgb3RoZXIgb2J2aW91cyBjYW5kaWRhdGUuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guIEhtbSwgbGV0IG1lIHNlZS4uLiBhbmQgeWVzLCBgc3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwuLi5gIERhbW1pdCEgSXQncyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGdldCBmcnVzdHJhdGluZyEgU28sIGlmIG5vdCBgdXNlcmZhdWx0ZmRfaW9jdGxgLCB0aGVuIHRoZSBuZXh0IGxvZ2ljYWwgZW50cnkgcG9pbnQgbXVzdCBiZSB0aGUgc3lzY2FsbCBpdHNlbGYsIGBzeXNfdXNlcmZhdWx0ZmRgPyBUaGF0IGhhcyB0byBiZSBpdCwgSSBzdXBwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjUwLjI2NjM1NTAzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMDQzNzYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qdXNlcmZhdWx0ZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9NDQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDQ5OS1cXG5tbS91c2VyZmF1bHRmZC5jOjQ1MDA6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxcbm1tL3VzZXJmYXVsdGZkLmMtNDUwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjUyLjM3Njc5ODE5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTczMTMzMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdXNlcmZhdWx0ZmRgIHNpdHVhdGlvbi4gVGhlIGNvcmUgc3lzY2FsbCBpcyBjbGVhcmx5IGBzeXNfdXNlcmZhdWx0ZmRgLiBOb3csIHRoZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHdoZXJlIGlvY3RscyBhcmUgaGFuZGxlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIGl0J3MgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBzdGF0aWMgZmlsZSBvcGVyYXRpb24uIEhtbSwgaXQgaXNuJ3QuXG5cbkkganVzdCBkb3VibGUtY2hlY2tlZCwgYW5kIGBtb3ZlX3BhZ2VzYCBpcyBhbHNvIHN0YXRpYywgc28gbm8gbHVjayB0aGVyZS4gT2theSwgc28gZXZlbiB0aG91Z2ggYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBkZWNsYXJlZCBzdGF0aWMsIHRoZSBrZXJuZWwgYWN0dWFsbHkgdXNlcyBpdHMgYWRkcmVzcyB0aHJvdWdoIGB1c2VyZmF1bHRmZF9mb3BzYCwgc28gaXQncyAqbm90KiBpbmxpbmVkLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBzeXNfdXNlcmZhdWx0ZmRgIGFuZCBgdXNlcmZhdWx0ZmRfaW9jdGxgIHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24ndCBzb21lIG5vbi1zdGF0aWMgdmVyc2lvbiBJIG1pc3NlZC4gSSdsbCBhZGQgdGhlbSBib3RoIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGUgZ3VpZGFuY2UgaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIEJ1dCBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHN0YXRpYyAqYnV0KiBhbiBlbnRyeXBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gd2hhdCBpcyBhY3R1YWxseSBhdmFpbGFibGUuIFRoZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGNhbGwgaXMgYSBkaXJlY3QgZW50cnlwb2ludC4gQWxyaWdodCwgbGV0J3Mga2VlcCBpdC5cblxuTGV0J3MgcXVpY2tseSBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgaXQuIGBVU0VSRkFVTFRGRGAgaXMgdGhlIG1haW4gb25lLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjU3Ljk0OTkzNDQyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMzEwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjU3Ljk5NzI3MTc5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5MTg3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB3aXRoaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbi4gIEl0J3MgdHJpZ2dlcmVkIHRocm91Z2ggYSBjaGFpbjogYHVzZXJmYXVsdGZkX21vdmVgIGNhbGxzIGBtb3ZlX3BhZ2VzYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHVzZXJmYXVsdGZkX2lvY3RsYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGZpeCB3aXRoaW4gYW4gZXJyb3IgaGFuZGxpbmcgYmxvY2suIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNpdHVhdGlvbiB3aGVyZSBgbW92ZV9wYWdlc2Agd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBgLUVBR0FJTmAgaW4gY2VydGFpbiBzY2VuYXJpb3MuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgZGlkbid0IHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwIHdoZW4gYW4gYC1FQUdBSU5gIHdhcyBlbmNvdW50ZXJlZCwgdGh1cyBzaG9ydC1jaXJjdWl0aW5nIHRoZSBleHBlY3RlZCByZXRyeS9jb250aW51ZSBiZWhhdmlvci4gVGhlIHBhdGNoIG5vdyBleHBsaWNpdGx5IHJlc2V0cyBgZXJyYCB0byAwIGluIHRoYXQgYC1FQUdBSU5gIGNvbmRpdGlvbiwgYWxsb3dpbmcgdGhlIGxvb3AgdG8gY29udGludWUgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhIG1vcmUgYXBwcm9wcmlhdGUgcmVzdWx0IGxhdGVyLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjb3JyZWN0aW9uIGF0IHRoZSBrZXJuZWwncyBjb3JlIHdpdGhpbiB0aGUgYHVzZXJmYXVsdGZkYCBzdWJzeXN0ZW0sIHdoaWNoIGlzIHNpZ25pZmljYW50LiBTaW5jZSBpdCdzIHJlYWNoYWJsZSBjb2RlLCBhbmQgZ2l2ZW4gaXRzIGRpcmVjdCBpbXBhY3Qgb24gZnVuY3Rpb25hbGl0eSwgaXQgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIGZ1enppbmcgYW5kIGRldGFpbGVkIGFuYWx5c2lzLiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUsIHNpbmNlIGl0IGlzIHRoZSByb290IG9mIHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgdGhlIGBVU0VSRkFVTFRGRGAgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyIGludG8gdGVzdGluZy4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgbWlnaHQgaW5mb3JtIG15IGZ1enppbmcgc3RyYXRlZ3kgb3IgdW5jb3ZlciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIG90aGVyIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6MDIuNDU2NDY2MDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxODAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODQ9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbi0tXFxubW0vS2NvbmZpZy0xMzg4LVxcbm1tL0tjb25maWc6MTM4OTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzkwLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDowMi41MDQyOTE0MjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MzY4MzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgdGhvdWdodHMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgVVNFUkZBVUxURkQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBVU0VSRkFVTFRGRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbid0IGp1c3QgYSBzdXJmYWNlLWxldmVsIGZlYXR1cmU7IGl0J3MgbGlrZWx5IGludGVyd292ZW4gd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgdXNlci1zcGFjZSBsaWJyYXJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVsaWVzIG9uIGl0IGFuZCwgY3J1Y2lhbGx5LCB3aGF0ICppdCogcmVsaWVzIG9uLiBUaGlzIG1lYW5zIHRyYWNpbmcgdGhlIGNhbGwgcGF0aHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29yZSBLZXJuZWwgTW9kdWxlczoqKiBJcyBgVVNFUkZBVUxURkRgIHByaW1hcmlseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0cnVjdCwgb3IgZG9lcyBpdCB0b3VjaCBvbiBpbnRlcnJ1cHQgaGFuZGxpbmcsIHRhc2sgc2NoZWR1bGluZywgb3IgZXZlbiB0aGUgbmV0d29ya2luZyBzdGFjaz8gVW5kZXJzdGFuZGluZyB0aGVzZSBpbnRlcmFjdGlvbnMgaXMga2V5IHRvIGFzc2Vzc2luZyBpdHMgaW1wYWN0LlxuKiAgICoqVXNlci1TcGFjZSBMaWJyYXJpZXM6KiogV2hhdCB1c2VyLXNwYWNlIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIGFyZSBsZXZlcmFnaW5nIHRoaXM/IFdoYXQgQVBJcyBhcmUgZXhwb3NlZCwgYW5kIGhvdyBhcmUgdGhleSB1c2VkPyBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLlxuKiAgICoqVmVyc2lvbiBDb21wYXRpYmlsaXR5OioqIEhvdyBoYXMgYFVTRVJGQVVMVEZEYCBldm9sdmVkIG92ZXIgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucz8gV2hhdCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zIGFyZSB0aGVyZT8gQW55IGRlcHJlY2F0aW9uIG5vdGljZXM/XG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmU/IEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIG9yIGF0dGFjayB2ZWN0b3JzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGFuZCB3aWxsIEkgbmVlZCB0byB0ZXN0IGFueSBlZGdlIGNhc2VzP1xuKiAgICoqVGVzdGluZyBhbmQgVmFsaWRhdGlvbjoqKiBXaGF0IHRlc3RzIGFyZSBhbHJlYWR5IGluIHBsYWNlLCBhbmQgd2hhdCB0ZXN0cyBtaWdodCBJIG5lZWQgdG8gcGVyZm9ybSB0byBlbnN1cmUgdGhhdCBpdCdzIGZ1bmN0aW9uaW5nIGFzIGl0IHNob3VsZCBiZT8gSSBhbSB0aGlua2luZyBvZiB2YXJpb3VzIHRlc3Qgc2NlbmFyaW9zIEkgY2FuIGVtcGxveSB0byBwZXJmb3JtIGEgdGhvcm91Z2ggcmV2aWV3LlxuXG5NeSBnb2FsIGlzIHRvIGNyZWF0ZSBhIG1lbnRhbCBtYXAgb2YgaG93IGBVU0VSRkFVTFRGRGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSBpdHMgcm9sZSBhcyBhbiBlbmFibGVyIGFuZCBhbiBvYnN0YWNsZSB0byBleGlzdGluZyBmdW5jdGlvbmFsaXR5LiBXaXRoIHRoaXMgZm91bmRhdGlvbiwgSSBjYW4gdGhlbiBmb3JtdWxhdGUgYSBtb3JlIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVzaWduIGFuZCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDowNi4zOTc5NzczMTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM4OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM4OTpcXHRtZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxuMTM5MDpcXHRcXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG4xMzkxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTM5MjpcXHRcXHRoZWxwXFxuMTM5MzpcXHRcXHQgIEVuYWJsZSB0aGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBpbnRlcmNlcHQgYW5kXFxuMTM5NDpcXHRcXHQgIGhhbmRsZSBwYWdlIGZhdWx0cyBpbiB1c2VybGFuZC5cXG4xMzk1OlxcdFxcbjEzOTY6XFx0aWYgVVNFUkZBVUxURkRcXG4xMzk3OlxcdGNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4xMzk4OlxcdFxcdGJvb2wgXFxcIlVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXFxcIlxcbjEzOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTQwMDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRoZWxwXFxuMTQwMzpcXHRcXHQgIEFsbG93cyB0byBjcmVhdGUgbWFya2VyIFBURXMgZm9yIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb25cXG4xNDA0OlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjE0MDU6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjE0MDY6XFx0ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbjE0MDc6XFx0XFxuMTQwODpcXHQjIG11bHRpLWdlbiBMUlUge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDowNi4zOTgxMDk2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIxNTYwNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNpbXBsaWZ5aW5nIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBjdXQgdGhyb3VnaCB0aGUgbm9pc2UuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGhlcmUgYXJlIHJlYWxseSBqdXN0IHRoZSBgTU1VYC4gRXZlcnl0aGluZyBlbHNlIGlzIGVpdGhlciBpbXBsaWNpdGx5IGhhbmRsZWQgb3IgaXJyZWxldmFudCB0byB0aGUgaW1tZWRpYXRlIGNvbmNlcm4uIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBmcm9tIGEgY29uZmlndXJhdGlvbiBzdGFuZHBvaW50LCBgVVNFUkZBVUxURkRgIGlzIHRoZSBvbmx5IGl0ZW0gb24gdGhlIGNoZWNrbGlzdCB0aGF0IGhhcyBhbnkgYmVhcmluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoYXQncyBnb29kLCBpdCBzdHJlYW1saW5lcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBJIGxpa2UgdGhlIGNsYXJpdHkuIE5vdywgSSdsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkZXBlbmRlbmN5IG9uIGBVU0VSRkFVTFRGRGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMzIsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxMC4wMTk2NzMzMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg2MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyZmF1bHRmZF9pb2N0bFwiLFxuICAgIFwic3lzX3VzZXJmYXVsdGZkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdXNlcmZhdWx0ZmQncyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gICAgXCJzeXNfdXNlcmZhdWx0ZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCdzIG1vdmVfcGFnZXMgZnVuY3Rpb24gd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHByb3Blcmx5IGNsZWFyZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AsIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJldHVybiAtRUFHQUlOLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHVzZXJmYXVsdGZkIGlvY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxMC4wOTg1NDYwMjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjcyNDIyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6MTAuMDk5MTMzNjkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyNjcxODI5NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cXG5cXG5UaGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnIChlLmcuLCBpbmZpbml0ZSBsb29wcyBvciBjcmFzaGVzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMGQ3YmVlODMxMzk1ODVmZjkyNDBlMTFiYTQyM2FiOGE2YWQyNWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDI6MDM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggYzNhZGVkYWFmN2Q1NC4uZWM1ZDUxMWJkMTc5MSAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0yMDg1LDggKzIwODUsMTAgQEAgc3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4rXHRcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxMC4wOTkxMzQzNjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5OTU4ODE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVc2VyZmF1bHRmZCBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0J3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGBtb3ZlX3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGZpeGluZyBhIGJ1ZyByZWxhdGVkIHRvIGhvdyBgbW92ZV9wYWdlc2AgaGFuZGxlcyBgLUVBR0FJTmAgZXJyb3JzLiBMZXQgbWUgcGFyc2UgdGhpczpcblxuVGhlIGNvZGUgb3JpZ2luYWxseSBsb29rZWQgbGlrZSB0aGlzOlxuXG5gYGBjXG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4rXHRcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5gYGBcblxuVGhlIHBhdGNoIG1vZGlmaWVzIGl0IGJ5IHNldHRpbmcgYGVyciA9IDBgICpiZWZvcmUqIHRoZSBgY29udGludWVgLiBIbW0sIGxldCBtZSB0aGluayBhYm91dCB0aGlzLi4uIGBtb3ZlX3BhZ2VzYCBpcyByZXNwb25zaWJsZSBmb3IgbW92aW5nIHBhZ2VzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG9wZXJhdGluZyB3aXRoaW4gc29tZSBraW5kIG9mIGxvb3AuIElmIGBlcnJgIGlzIGAtRUFHQUlOYCwgaXQgbWVhbnMgdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcmV0cmllZCBsYXRlci4gVGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgaWYgdGhhdCBgZXJyID0gMGAgd2FzIG5vdCBwcmVzZW50IGFuZCBgLUVBR0FJTmAgb2NjdXJyZWQsIGFuZCB0aGUgbG9vcCBpdGVyYXRlZCwgYGVycmAgd291bGQgYmUgdW5kZWZpbmVkLCBhbmQgdGhlIHByZXZpb3VzIHZhbHVlIG9mIGBlcnJgIHdvdWxkIGJlIHJldHVybmVkLlxuXG5Tbywgd2l0aG91dCB0aGUgYGVyciA9IDBgLCBpZiBgLUVBR0FJTmAgd2FzIGVuY291bnRlcmVkLCB0aGUgbG9vcCB3b3VsZCBjb250aW51ZSwgcHJlc3VtYWJseSB0byByZXRyeSB0aGUgcGFnZSBtb3ZlLiBCdXQsIGlmIHRoZSBsb29wICp0aGVuKiB0ZXJtaW5hdGVkIGZvciBzb21lICpvdGhlciogcmVhc29uLCB0aGUgZnVuY3Rpb24gbWlnaHQgcmV0dXJuIHRoYXQgb3JpZ2luYWwgYC1FQUdBSU5gIGVycm9yLCBvciBzb21lIG90aGVyIGVycm9yLCB3aGljaCBpcyBpbmNvcnJlY3QuIFdpdGggdGhlIGFkZGVkIGBlcnIgPSAwYCwgaXQgbWVhbnMgdGhhdCBpZiB0aGUgb3BlcmF0aW9uIGlzIHJldHJpZWQsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gYC1FQUdBSU5gIGlmIHRoZSByZXRyeSBmYWlscyBiZWNhdXNlIG9mIHNvbWUgb3RoZXIgcmVhc29uIC0gaXQgd2lsbCBvbmx5IHJldHVybiBhbiBlcnJvciBmb3Igc29tZSBvdGhlciByZWFzb24uIFRodXMsIGl0IGVuc3VyZXMgdGhhdCBgLUVBR0FJTmAgb25seSBtZWFucyBcInRyeSBhZ2FpbiBsYXRlclwiLlxuXG5MZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgYG1vdmVfcGFnZXNgIGltcGxlbWVudGF0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYCBqdXN0IHRvIGJlIHN1cmUsIGFuZCBzZWUgaWYgSSBjYW4gY29uZmlybSBteSBtZW50YWwgbW9kZWwgb2YgaXRzIG9wZXJhdGlvbmFsIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjA0OjE1Ljg5ODcyNTU1MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjM4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjA0OjE1Ljk0NTc5NTgwNloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU1ODM4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtb3ZlX3BhZ2VzYCBpcyBoYW5kbGluZyB0aGluZ3MgaW4gdGhlIGNvbnRleHQgb2YgdXNlcmZhdWx0ZmQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyB3ZSBtYW5hZ2UgcGFnZSBtaWdyYXRpb24gYW5kIHRyYW5zZmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5IGFjY2VzcyBmYXVsdHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgd2hvbGUgZGFuY2UgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2VyZmF1bHRmZGAgYW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEhvdyBkb2VzIGl0IGtub3cgd2hlcmUgcGFnZXMgYXJlLCBhbmQgaG93IGRvZXMgaXQgZGlyZWN0IHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvPyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNpbmcgYWN0IGhlcmUsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IHdoaWxlIG1pbmltaXppbmcgdGhlIHBlcmZvcm1hbmNlIGhpdCBvZiBwYWdlIGZhdWx0cy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRvIGl0LiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBsb2NraW5nIHByaW1pdGl2ZXMsIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgZmxvdy4gVGhpcyBjb3VsZCBnaXZlIG1lIHNvbWUgZ3JlYXQgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxOC45MDE2Mzc2NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MzQ6XFx0c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbjE5MzU6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdHgtXFx1MDAzZW1tO1xcbjE5Mzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcXG4xOTM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xcbjE5NDA6XFx0XFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xcbjE5NDE6XFx0XFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xcbjE5NDI6XFx0XFx0c3NpemVfdCBtb3ZlZCA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIFNhbml0aXplIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMuICovXFxuMTk0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3JjX3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UobGVuIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cXG4xOTUwOlxcdFxcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgKyBsZW4gXFx1MDAzYyBzcmNfc3RhcnQpO1xcbjE5NTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCArIGxlbiBcXHUwMDNjIGRzdF9zdGFydCk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXFx1MDAyNmRzdF92bWEsIFxcdTAwMjZzcmNfdm1hKTtcXG4xOTU0OlxcdFxcdGlmIChlcnIpXFxuMTk1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0LyogUmUtY2hlY2sgYWZ0ZXIgdGFraW5nIG1hcF9jaGFuZ2luZ19sb2NrICovXFxuMTk1ODpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjE5NTk6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4xOTYwOlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxcbjE5NjE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NjI6XFx0XFx0LypcXG4xOTYzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXFxuMTk2NDpcXHRcXHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xcbjE5NjU6XFx0XFx0ICogdm1hLlxcbjE5NjY6XFx0XFx0ICovXFxuMTk2NzpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE5Njg6XFx0XFx0aWYgKHNyY192bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5Njk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzA6XFx0XFx0aWYgKHNyY19zdGFydCArIGxlbiBcXHUwMDNlIHNyY192bWEtXFx1MDAzZXZtX2VuZClcXG4xOTcxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0aWYgKGRzdF92bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5NzQ6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzU6XFx0XFx0aWYgKGRzdF9zdGFydCArIGxlbiBcXHUwMDNlIGRzdF92bWEtXFx1MDAzZXZtX2VuZClcXG4xOTc2OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xcbjE5Nzk6XFx0XFx0aWYgKGVycilcXG4xOTgwOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTgxOlxcdFxcbjE5ODI6XFx0XFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgKyBsZW47XFxuMTk4MzpcXHRcXHQgICAgIHNyY19hZGRyIFxcdTAwM2Mgc3JjX2VuZDspIHtcXG4xOTg0OlxcdFxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4xOTg1OlxcdFxcdFxcdHBtZF90IGRzdF9wbWR2YWw7XFxuMTk4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0XFx0LypcXG4xOTg5OlxcdFxcdFxcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxcbjE5OTA6XFx0XFx0XFx0ICogdHJhbnNwYXJlbnQgaHVnZSBQVUQuIElmIGZpbGUtYmFja2VkIHN1cHBvcnQgaXMgYWRkZWQsXFxuMTk5MTpcXHRcXHRcXHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXFxuMTk5MjpcXHRcXHRcXHQgKi9cXG4xOTkzOlxcdFxcdFxcdHNyY19wbWQgPSBtbV9maW5kX3BtZChtbSwgc3JjX2FkZHIpO1xcbjE5OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjE5OTU6XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjE5OTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xOTk3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5OTg6XFx0XFx0XFx0XFx0fVxcbjE5OTk6XFx0XFx0XFx0XFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xcbjIwMDA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjIwMDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDAyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDM6XFx0XFx0XFx0XFx0fVxcbjIwMDQ6XFx0XFx0XFx0fVxcbjIwMDU6XFx0XFx0XFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xcbjIwMDY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFkc3RfcG1kKSkge1xcbjIwMDc6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDA4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDk6XFx0XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRcXHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XFxuMjAxMjpcXHRcXHRcXHQvKlxcbjIwMTM6XFx0XFx0XFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24ndCBvdmVycmlkZSBpdCBhbmQganVzdFxcbjIwMTQ6XFx0XFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxuMjAxNTpcXHRcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG4yMDE2OlxcdFxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4yMDE3OlxcdFxcdFxcdCAqL1xcbjIwMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xcbjIwMTk6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMjE6XFx0XFx0XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xcbjIwMjQ6XFx0XFx0XFx0aWYgKHB0bCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cXG4yMDI2OlxcdFxcdFxcdFxcdGlmIChtb3ZlX3NwbGl0c19odWdlX3BtZChkc3RfYWRkciwgc3JjX2FkZHIsIHNyY19zdGFydCArIGxlbikgfHxcXG4yMDI3OlxcdFxcdFxcdFxcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdFxcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbjIwMjk6XFx0XFx0XFx0XFx0XFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xcbjIwMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBtZF9mb2xpbygqc3JjX3BtZCk7XFxuMjAzMTpcXHRcXG4yMDMyOlxcdFxcdFxcdFxcdFxcdFxcdGlmICghaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjIwMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFQYWdlQW5vbkV4Y2x1c2l2ZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjA0OjE4LjkwMTk0NTA0NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA1MTM1ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBOZXh0IFN0ZXBzIGluIGBtb3ZlX3BhZ2VzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uIFdlJ3ZlIGdvdCBhIHNwZWNpZmljIHRhc2sgaW4gbWluZCAod2hhdGV2ZXIgdGhlIGxhcmdlciBjb250ZXh0IGRpY3RhdGVzKSwgYW5kIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBpdm90YWwgdG8gYWNjb21wbGlzaGluZyBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb25cIi4gSSdtIG5vdCBzdG9wcGluZyB0byByZWZsZWN0IG9uIGFueXRoaW5nIGVsc2UsIGp1c3Qgd2hhdCdzIG5leHQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIG9wZXJhdGlvbmFsIGRldGFpbHMsIGlkZW50aWZ5IGhvdyBpdCB3aWxsIGZpdCBpbnRvIHRoZSB3aWRlciBzY29wZSwgYW5kIGRldGVybWluZSB3aGF0IHdlIHdpbGwgYmUgZG9pbmcsIGFuZCBob3cgd2Ugd2lsbCBiZSBkb2luZyBpdC4gVGhlIHJlc3Qgb2YgdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBtdXN0IGJlIHVuZGVyc3Rvb2QgaWYgd2UgYXJlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbGFyZ2VyIHN0cnVjdHVyZSByZXF1aXJlcyBvZiB1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYXQgdGhlIGltcGxlbWVudGF0aW9uIGxldmVsIG5vdy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoyMS45MDcwODMzNzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4yMDM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4yMDM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMzc6XFx0XFx0XFx0XFx0XFx0XFx0fVxcbjIwMzg6XFx0XFx0XFx0XFx0XFx0fVxcbjIwMzk6XFx0XFxuMjA0MDpcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbjIwNDE6XFx0XFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbjIwNDI6XFx0XFx0XFx0XFx0XFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xcbjIwNDM6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjA0NDpcXHRcXHRcXHRcXHR9XFxuMjA0NTpcXHRcXG4yMDQ2OlxcdFxcdFxcdFxcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxuMjA0NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuMjA0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9hZGRyLCBzcmNfYWRkcik7XFxuMjA0OTpcXHRcXHRcXHRcXHRzdGVwX3NpemUgPSBIUEFHRV9QTURfU0laRTtcXG4yMDUwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjA1MTpcXHRcXHRcXHRcXHRsb25nIHJldDtcXG4yMDUyOlxcdFxcbjIwNTM6XFx0XFx0XFx0XFx0aWYgKHBtZF9ub25lKCpzcmNfcG1kKSkge1xcbjIwNTQ6XFx0XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjIwNTU6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4yMDU2OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNTc6XFx0XFx0XFx0XFx0XFx0fVxcbjIwNTg6XFx0XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KF9fcHRlX2FsbG9jKG1tLCBzcmNfcG1kKSkpIHtcXG4yMDU5OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjA2MDpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMDYxOlxcdFxcdFxcdFxcdFxcdH1cXG4yMDYyOlxcdFxcdFxcdFxcdH1cXG4yMDYzOlxcdFxcbjIwNjQ6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHB0ZV9hbGxvYyhtbSwgZHN0X3BtZCkpKSB7XFxuMjA2NTpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjIwNjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA2NzpcXHRcXHRcXHRcXHR9XFxuMjA2ODpcXHRcXG4yMDY5OlxcdFxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG4yMDcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxcbjIwNzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3JjX2FkZHIsIHNyY19lbmQgLSBzcmNfYWRkciwgbW9kZSk7XFxuMjA3MjpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMDczOlxcdFxcdFxcdFxcdFxcdGVyciA9IHJldDtcXG4yMDc0OlxcdFxcdFxcdFxcdGVsc2VcXG4yMDc1OlxcdFxcdFxcdFxcdFxcdHN0ZXBfc2l6ZSA9IHJldDtcXG4yMDc2OlxcdFxcdFxcdH1cXG4yMDc3OlxcdFxcbjIwNzg6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjA3OTpcXHRcXG4yMDgwOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjIwODE6XFx0XFx0XFx0XFx0LyogRG8gbm90IG92ZXJyaWRlIGFuIGVycm9yICovXFxuMjA4MjpcXHRcXHRcXHRcXHRpZiAoIWVyciB8fCBlcnIgPT0gLUVBR0FJTilcXG4yMDgzOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FSU5UUjtcXG4yMDg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwODU6XFx0XFx0XFx0fVxcbjIwODY6XFx0XFxuMjA4NzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjA4ODpcXHRcXHRcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcXG4yMDg5OlxcdFxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMjA5MDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMDkxOlxcdFxcdFxcdFxcdH1cXG4yMDkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwOTM6XFx0XFx0XFx0fVxcbjIwOTQ6XFx0XFxuMjA5NTpcXHRcXHRcXHQvKiBQcm9jZWVkIHRvIHRoZSBuZXh0IHBhZ2UgKi9cXG4yMDk2OlxcdFxcdFxcdGRzdF9hZGRyICs9IHN0ZXBfc2l6ZTtcXG4yMDk3OlxcdFxcdFxcdHNyY19hZGRyICs9IHN0ZXBfc2l6ZTtcXG4yMDk4OlxcdFxcdFxcdG1vdmVkICs9IHN0ZXBfc2l6ZTtcXG4yMDk5OlxcdFxcdH1cXG4yMTAwOlxcdFxcbjIxMDE6XFx0b3V0X3VubG9jazpcXG4yMTAyOlxcdFxcdHVwX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbWFwX2NoYW5naW5nX2xvY2spO1xcbjIxMDM6XFx0XFx0dWZmZF9tb3ZlX3VubG9jayhkc3Rfdm1hLCBzcmNfdm1hKTtcXG4yMTA0OlxcdG91dDpcXG4yMTA1OlxcdFxcdFZNX1dBUk5fT05fT05DRShtb3ZlZCBcXHUwMDNjIDApO1xcbjIxMDY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGVyciBcXHUwMDNlIDApO1xcbjIxMDc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtb3ZlZCBcXHUwMDI2XFx1MDAyNiAhZXJyKTtcXG4yMTA4OlxcdFxcdHJldHVybiBtb3ZlZCA/IG1vdmVkIDogZXJyO1xcbjIxMDk6XFx0fVxcbjIxMTA6XFx0XFxuMjExMTpcXHRzdGF0aWMgYm9vbCB2bWFfY2FuX3VzZXJmYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4yMTEyOlxcdFxcdFxcdCAgICAgICBib29sIHdwX2FzeW5jKVxcbjIxMTM6XFx0e1xcbjIxMTQ6XFx0XFx0Y29uc3Qgc3RydWN0IHZtX3VmZmRfb3BzICpvcHMgPSB2bWFfdWZmZF9vcHModm1hKTtcXG4yMTE1OlxcdFxcbjIxMTY6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fRFJPUFBBQkxFIHwgVk1fU0hBRE9XX1NUQUNLKSlcXG4yMTE3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTE4OlxcdFxcbjIxMTk6XFx0XFx0aWYgKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSBcXHUwMDI2XFx1MDAyNiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpKVxcbjIxMjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRcXHR2bV9mbGFncyBcXHUwMDI2PSBfX1ZNX1VGRkRfRkxBR1M7XFxuMjEyMzpcXHRcXG4yMTI0OlxcdFxcdC8qXFxuMjEyNTpcXHRcXHQgKiBJZiBXUCBpcyB0aGUgb25seSBtb2RlIGVuYWJsZWQgYW5kIGNvbnRleHQgaXMgd3AgYXN5bmMsIGFsbG93IGFueVxcbjIxMjY6XFx0XFx0ICogbWVtb3J5IHR5cGUuXFxuMjEyNzpcXHRcXHQgKi9cXG4yMTI4OlxcdFxcdGlmICh3cF9hc3luYyBcXHUwMDI2XFx1MDAyNiAodm1fZmxhZ3MgPT0gVk1fVUZGRF9XUCkpXFxuMjEyOTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yMTMwOlxcdFxcbjIxMzE6XFx0XFx0LyogRm9yIGFueSBvdGhlciBtb2RlIHJlamVjdCBWTUFzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHZtX3VmZmRfb3BzICovXFxuMjEzMjpcXHRcXHRpZiAoIW9wcylcXG4yMTMzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6MjEuOTA3OTg5NjIxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwODYyOTQ4MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgbW92ZV9wYWdlc2AgYC1FQUdBSU5gIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29udHJvbC1mbG93IGlzc3VlIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgYC1FQUdBSU5gIGVycm9ycyByZXR1cm5lZCBieSB0aGUgbG93ZXItbGV2ZWwgcGFnZS1tb3ZpbmcgZnVuY3Rpb25zIChgbW92ZV9wYWdlc19wdGVzYCwgYG1vdmVfcGFnZXNfaHVnZV9wbWRgKS4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGNlbnRlcnMgYXJvdW5kIHRoZSBwZXJzaXN0ZW50IHN0YXRlIG9mIHRoZSBgZXJyYCB2YXJpYWJsZSB3aXRoaW4gdGhlIG1haW4gbG9vcC5cblxuVGhlIGJ1ZyBpcyB0aGF0IHdoZW4gYSBjYWxsIHRvIGBtb3ZlX3BhZ2VzX3B0ZXNgIChvciBpdHMgcG1kIGVxdWl2YWxlbnQpIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgaW50ZW50aW9uIGlzIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gb24gdGhlICpzYW1lKiBtZW1vcnkgcmVnaW9uIGluIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSdzIGZsYXcgbGllcyBpbiB0aGUgZmFjdCB0aGF0IGl0IGRvZXNuJ3QgY2xlYXIgdGhlIGBlcnJgIHZhcmlhYmxlIHdoZW4gaXQgZW5jb3VudGVycyBgLUVBR0FJTmAgYW5kIHByb2NlZWRzIHRvIGBjb250aW51ZWAgdGhlIGxvb3AuIFNvLCBpZiB0aGUgc3Vic2VxdWVudCBhdHRlbXB0IHN1Y2NlZWRzLCB0aGUgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gZG9lc24ndCBvdmVyd3JpdGUgdGhlIHN0YWxlIGAtRUFHQUlOYCB2YWx1ZSBpbiBgZXJyYC5cblxuQ29uc2lkZXIgdGhpcyBzY2VuYXJpbzogSW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBgLUVBR0FJTmAuIGBlcnJgIGJlY29tZXMgYC1FQUdBSU5gLCBhbmQgYmVjYXVzZSBvZiB0aGUgY29uZGl0aW9uIGBpZiAoZXJyID09IC1FQUdBSU4pIGNvbnRpbnVlYCwgdGhlIGxvb3Agc2tpcHMgdGhlIGFkZHJlc3MgaW5jcmVtZW50LCB0aHVzIHJldHJ5aW5nIG9uIHRoZSBleGFjdCBzYW1lIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBpdGVyYXRpb24uIE5vdywgaWYgdGhlIHNlY29uZCBpdGVyYXRpb24gc3VjY2Vzc2Z1bGx5IG1vdmVzIHNvbWUgcGFnZXMsIGl0IHJldHVybnMgYSBwb3NpdGl2ZSBgcmV0YCB2YWx1ZS4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIGBlcnJgIGZyb20gdGhlIGZpcnN0IGAtRUFHQUlOYCBpc24ndCBvdmVyd3JpdHRlbi4gVGhpcyBtZWFucyB0aGUgcHJvZ3JhbSB0aGVuIHNraXBzIHRoZSBpbmNyZW1lbnQgYW5kIHJldHJpZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBpbmRlZmluaXRlbHksIHdoaWNoIGlzIGRlZmluaXRlbHkgaW5jb3JyZWN0IGFuZCBwcm9iYWJseSBhIHNvZnQgbG9ja3VwLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBzZXR0aW5nIGBlcnIgPSAwYCBiZWZvcmUgdGhlIGBjb250aW51ZWAsIGVuc3VyaW5nIHRoYXQgYW55IHN1Y2Nlc3NmdWwgc3Vic2VxdWVudCBhdHRlbXB0cyBhcmUgcHJvcGVybHkgYWNrbm93bGVkZ2VkIGFuZCB0aGUgbG9vcCBwcm9jZWVkcyBhcyBpbnRlbmRlZCwgdGhlcmVieSBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3NlcyBhbmQgbW92aW5nIG9uIHRvIHRoZSBuZXh0IHNlZ21lbnQuXG5cblNvLCB0aGUgY3JpdGljYWwgaXNzdWUgaXMgdGhlIGxvb3AncyBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSB0aGUgZmFjdCB0aGF0IGBlcnJgIGlzbid0IHByb3Blcmx5IGNsZWFyZWQgb24gYSBzdWNjZXNzZnVsIHJldHJ5LiBUaGlzIGxlYWRzIHRvIHRoZSBza2lwcGluZyBvZiBpbXBvcnRhbnQgaW5jcmVtZW50cywgbGVhZGluZyB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZSBjcml0aWNhbCBwaWVjZSBtaXNzaW5nIGZyb20gdGhlIG9sZCBsb2dpYyBpcyB0byByZXNldCB0aGUgZXJyb3IgY29kZSBiZWZvcmUgY29udGludWluZy5cblxuTGV0IG1lIGV4YW1pbmUgdGhlIGNvZGU6XG5gYGBjXG5pZiAoZXJyKSB7XG4gICAgaWYgKGVyciA9PSAtRUFHQUlOKSB7XG5cdGVyciA9IDA7XG5cdGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbn1cbmBgYFxuXG5UaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZXJyID0gMDtgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBzaW1wbHkgYGNvbnRpbnVlYGQsIHdoaWNoIHNraXBwZWQgdGhlIGFkZHJlc3MgaW5jcmVtZW50LlxuXG5Ob3csIGxldCdzIGJlIGFic29sdXRlbHkgY2xlYXI6IFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbidzIGxvZ2ljIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykgb3IgcG1kIGVudHJpZXM7IGl0IGRvZXNuJ3QgcmVhZCBmcm9tIG9yIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXRzZWxmLiBUaGUgY29yZSBpc3N1ZSBpcyBhIGxvZ2ljIGZsYXc6IGEgbG9vcCBjb250cm9sIHZhcmlhYmxlIG5vdCBiZWluZyByZXNldCwgY2F1c2luZyB0aGUgcHJvY2VzcyB0byBlbnRlciBhIHN0YXRlIHdoZXJlIGl0IGVuZGxlc3NseSByZXRyaWVzIHRoZSBzYW1lIG9wZXJhdGlvbiB3aXRob3V0IG1ha2luZyBwcm9ncmVzcy4gS0FTQU4gbWlnaHQgY2F0Y2ggaXQgaWYgaXQgY2F1c2VzIGEgbWVtb3J5IGZhdWx0LCBidXQgaXQncyBtb3JlIGxpa2VseSBhIHNvZnQgbG9ja3VwIG9yIGluY29ycmVjdCByZXR1cm4gY29kZS4gS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZSBidWcgaXMgYSBtYXR0ZXIgb2YgY29udHJvbCBmbG93LCBub3Qgb2YgdW5pbml0aWFsaXplZCByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrYWdlLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoLCB0aGVyZWZvcmUsIHJlbW92ZXMgYSBsb2dpYyBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzNywiT3V0cHV0VG9rZW5zIjoyMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6NDIuNzcwOTQxMzQ4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cXG5cXG5UaGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnIChlLmcuLCBpbmZpbml0ZSBsb29wcyBvciBjcmFzaGVzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cXG5cXG5UaGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnIChlLmcuLCBpbmZpbml0ZSBsb29wcyBvciBjcmFzaGVzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowl5x72[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 02:00:43 +0000 UTC FinishedAt: 2026-08-18 02:04:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "62cc90241548d5570ee68e01aaba6506964e9811", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD" ], "series_id": "bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "userfaultfd_ioctl", "sys_userfaultfd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7c3lzX3VzZXJmYXVsdGZkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFdoZW4gYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgbG9vcCB1c2VzIGBjb250aW51ZWAgdG8gcmV0cnkgdGhlIHNhbWUgYWRkcmVzcy4gSG93ZXZlciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBub3QgcmVzZXQgdG8gMC4gSW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uLCBpZiB0aGUgbW92ZSBzdWNjZWVkcywgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIGFuZCByZW1haW5zIGAtRUFHQUlOYC4gVGhpcyBjYXVzZXMgdGhlIGxvb3AgdG8gaW5jb3JyZWN0bHkgYGNvbnRpbnVlYCBhZ2FpbiB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgYWRkcmVzc2VzIG9yIHRoZSBgbW92ZWRgIGNvdW50ZXIsIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgcGFnZSBtb3ZpbmcgYmVoYXZpb3IuXG5cblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCYjMzk7cyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggYzNhZGVkYWFmN2Q1NC4uZWM1ZDUxMWJkMTc5MSAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0yMDg1LDggJiM0MzsyMDg1LDEwIEBAIHN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKVxuJiM0MztcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgICAmIzM0O3N5c191c2VyZmF1bHRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCYjMzk7cyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsCiAJCX0KIAogCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJCWVyciA9IDA7CiAJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVzZXJmYXVsdGZkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hlZCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyByaWdodCBoZXJlOiBhIGNvbmRpdGlvbmFsIGluIHRoZSBlcnJvciBoYW5kbGluZy4gSW5pdGlhbGx5LCBpZiBgZXJyYCB3YXMgYC1FQUdBSU5gLCB0aGUgY29kZSB3b3VsZCBqdXN0IGJhaWwgb3V0IG9mIHRoZSBsb29wLiBOb3csIGl0IGV4cGxpY2l0bHkgcmVzZXRzIGBlcnJgIHRvIDAgYW5kIGNvbnRpbnVlcy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhbHRlcnMgdGhlIHByb2dyYW0mIzM5O3MgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgdGhhdCBzcGVjaWZpYyBlcnJvciBjb2RlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoeT8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGZvciBlc3NlbnRpYWxseSBpZ25vcmluZyBgLUVBR0FJTmAgaW4gdGhpcyBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW92ZV9wYWdlc2AgYW5kIGhvdyB1c2VyZmF1bHRmZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbGF5ZXIgdG8gbWFrZSBzZW5zZSBvZiB0aGlzLiBJcyBpdCByZWxhdGVkIHRvIHJldHJ5aW5nIGEgZmFpbGVkIHBhZ2UgbW92ZSBkdWUgdG8gcmVzb3VyY2UgY29udGVudGlvbj8gUGVyaGFwcyB0aGlzIGlzIGEgbWl0aWdhdGlvbiBmb3IgdHJhbnNpZW50IGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCBhbmQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTQxNC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4NjctLyoqXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcbm1tL3VzZXJmYXVsdGZkLmMtMTg2OS0gKiBAY3R4OiBwb2ludGVyIHRvIHRoZSB1c2VyZmF1bHRmZCBjb250ZXh0XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXG5tbS91c2VyZmF1bHRmZC5jOjE4Nzc6ICogbW92ZV9wYWdlcygpIHJlbWFwcyBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIGF0b21pY2FsbHkgaW4gemVyb1xubW0vdXNlcmZhdWx0ZmQuYy0xODc4LSAqIGNvcHkuIEl0IG9ubHkgd29ya3Mgb24gbm9uIHNoYXJlZCBhbm9ueW1vdXMgcGFnZXMgYmVjYXVzZSB0aG9zZSBjYW5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4ODgtICogc3RvcmFnZSBvciBhbnkgb3RoZXIgSS9PIGRldmljZSAoTUFEVl9ET05URk9SSyBpbiB0aGUgc291cmNlIHZtYVxubW0vdXNlcmZhdWx0ZmQuYzoxODg5OiAqIGF2b2lkcyBtb3ZlX3BhZ2VzKCkgdG8gZmFpbCB3aXRoIC1FQlVTWSBpZiB0aGUgcHJvY2VzcyBmb3JrcyBiZWZvcmVcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcbm1tL3VzZXJmYXVsdGZkLmMtMTg5MS0gKiBwYWdlIGluIHRoZSBmYXVsdGluZyBhZGRyZXNzIGluIHRoZSBkZXN0aW5hdGlvbiB2bWEuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxubW0vdXNlcmZhdWx0ZmQuYzoxOTA2OiAqIG1vdmVfcGFnZXMoKSB3aWxsIGZhaWwgcmVzcGVjdGl2ZWx5IHdpdGggLUVOT0VOVCBvciAtRUVYSVNULiBUaGlzXG5tbS91c2VyZmF1bHRmZC5jLTE5MDctICogcHJvdmlkZXMgYSB2ZXJ5IHN0cmljdCBiZWhhdmlvciB0byBhdm9pZCBhbnkgY2hhbmNlIG9mIG1lbW9yeVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkxMC0gKiB0aW1lIGZvciBhbnkgZ2l2ZW4gZmF1bHRpbmcgYWRkcmVzcy4gVGhpcyBtZWFucyB0aGF0IGlmIHR3byB0aHJlYWRzXG5tbS91c2VyZmF1bHRmZC5jOjE5MTE6ICogdHJ5IHRvIGJvdGggY2FsbCBtb3ZlX3BhZ2VzKCkgb24gdGhlIHNhbWUgZGVzdGluYXRpb24gYWRkcmVzcyBhdCB0aGVcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkyMC0gKiBhbiBhbW91bnQgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IG1vdmVkLiBJZiB0aGUgcmV0dmFsIHJlcG9ydHMgYVxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFwmIzM0O3Nob3J0XCYjMzQ7IHJlbWFwLCB0aGUgbW92ZV9wYWdlcygpIGNvbW1hbmQgc2hvdWxkIGJlIHJlcGVhdGVkIGJ5XG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMmIzQzO3JldHZhbCwgZHN0JiM0MztyZXZhbCwgbGVuLXJldHZhbCBpZiBpdCB3YW50cyB0byBrbm93XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxOTM0OnN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtMTkzNS1cdFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cdFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XHRcdCAqIG1vdmVfcGFnZXNfaHVnZV9wbWQoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCByZXRyeVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2Olx0XHQgKiB3aGlsZSBtb3ZlX3BhZ2VzX3B0ZSgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIGZhaWwuXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXHRcdCAqL1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0MS1cdFx0XHRcdHNwbGl0X2h1Z2VfcG1kKHNyY192bWEsIHNyY19wbWQsIHNyY19hZGRyKTtcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcdFx0XHRcdC8qIFRoZSBmb2xpbyB3aWxsIGJlIHNwbGl0IGJ5IG1vdmVfcGFnZXNfcHRlKCkgKi9cbm1tL3VzZXJmYXVsdGZkLmMtMjA0My1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcdFx0XHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVx0XHRcdFx0XHRcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXG5tbS91c2VyZmF1bHRmZC5jOjIwNjk6XHRcdFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDcwLVx0XHRcdFx0XHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQyNTUtXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XG5tbS91c2VyZmF1bHRmZC5jOjQyNTY6XHRcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1Ny1cdFx0XHRcdCB1ZmZkaW9fbW92ZS5sZW4sIHVmZmRpb19tb3ZlLm1vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBgVUZGRElPX01PVkVgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBgbW92ZV9wYWdlc2AgaXMgbm93IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBieSBgdXNlcmZhdWx0ZmRfbW92ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBgVUZGRElPX01PVkVgIGlvY3RsIHdvcmtzIGluIHVzZXJmYXVsdGZkLCBzbyBpdCYjMzk7cyBhIHByZXR0eSBmdW5kYW1lbnRhbCBzaGlmdCBpbiB0aGUgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYSBrZXkgY2hhbmdlLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGFjcm9zcyB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCBjb25maWdzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB1c2VyZmF1bHRmZCB0byBmdW5jdGlvbiBjb3JyZWN0bHkgaW4gdGhpcyBzY2VuYXJpby4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IHNldCB1cCBmb3IgdGhpcyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4ND1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5Om1lbnVjb25maWcgVVNFUkZBVUxURkRcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgZGVmaW5pdGVseSB1c2luZyBgVVNFUkZBVUxURkRgLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE15IHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3Qgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiBhcmUgY2VudGVyZWQgYXJvdW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2UgbWlncmF0aW9uIHdpdGggYHVzZXJmYXVsdGZkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb24gaGFuZGxlcyB0aGF0LiBUaGUga2V5IHN5bWJvbHMgSSYjMzk7bSBsb29raW5nIGZvciBhcmUgYG1vdmVfcGFnZXNgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIG9yIGB1c2VyZmF1bHRmZF9pb2N0bGAuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHVzZXJmYXVsdGZkX2lvY3RsYCwgYXMgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHJlbGV2YW50IGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgVXNlcmZhdWx0ZmQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGB1c2VyZmF1bHRmZF9pb2N0bGAgd29ya3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBkZWZpbmVkIGluIGBmcy91c2VyZmF1bHRmZC5jYD8mIzM0OyBUaGF0IHNlZW1zLi4ucG90ZW50aWFsbHkgb2ZmLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgY29yZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uLiBJdCAqY291bGQqIGJlIHRoZXJlLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGludmVzdGlnYXRlIGJvdGggYG1tL3VzZXJmYXVsdGZkLmNgICh0aGF0JiMzOTtzIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB1c2VyZmF1bHRmZCkgYW5kIHRoZW4gdG8gY29uZmlybSBvciBkZW55IGluIGBmcy91c2VyZmF1bHRmZC5jYC4gVGhlIHBvdGVudGlhbCBmb3IgYSBuYW1pbmcgY29sbGlzaW9uLCBvciB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGltcGxlbWVudGVkIGVsc2V3aGVyZSBhbmQgdGhlIGBmc2AgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW4gaW50ZXJmYWNlLCBtYWtlcyBpdCBuZWNlc3NhcnkgdG8gY2hlY2sgYm90aCB0byBlbnN1cmUgSSBoYXZlIHRoZSBwcm9wZXIgcmVmZXJlbmNlLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIxMzQ9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjE4OS1cdFx0ICogdXNlcmZhdWx0ZmRfd3AoKSB2bWFzLiAgQnV0IHNpbmNlIHRoZSBtbWFwX2xvY2sgaXMgbm90IGhlbGQsXG5tbS9raHVnZXBhZ2VkLmM6MjE5MDpcdFx0ICogaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yIGEgcmFjaW5nIHVzZXJmYXVsdGZkX2lvY3RsKCkgb3Jcbm1tL2todWdlcGFnZWQuYy0yMTkxLVx0XHQgKiBtYWR2aXNlKCkgdG8gaGF2ZSBpbnNlcnRlZCBwdGVzIG9yIG1hcmtlcnMuICBOb3cgdGhhdCB3ZSBob2xkXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00Mjg2PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfYXBpKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzNDktXG5tbS91c2VyZmF1bHRmZC5jOjQzNTA6c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcbm1tL3VzZXJmYXVsdGZkLmMtNDM1MS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQ0MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNlcmZhdWx0ZmRfZm9wcyA9IHtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ0MjgtXHQucmVhZF9pdGVyXHQ9IHVzZXJmYXVsdGZkX3JlYWRfaXRlcixcbm1tL3VzZXJmYXVsdGZkLmM6NDQyOTpcdC51bmxvY2tlZF9pb2N0bCA9IHVzZXJmYXVsdGZkX2lvY3RsLFxubW0vdXNlcmZhdWx0ZmQuYy00NDMwLVx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdXNlcmZhdWx0ZmRfbW92ZWAgU3ltYm9sKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0LCB0aGUgb25lIEkmIzM5O20gY3VycmVudGx5IGZvY3VzZWQgb24sIHVzZXMgdGhlIHN5bWJvbCBgdXNlcmZhdWx0ZmRfbW92ZWAuIFdhaXQgYSBzZWNvbmTigKYgaXNuJiMzOTt0IGBtb3ZlX3BhZ2VzYCBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2A/IFRoYXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIFRoaXMgaGFzIG1lIHRoaW5raW5nOiBpcyBgdXNlcmZhdWx0ZmRfbW92ZWAgYWxzbyBkZWZpbmVkIGFzIHN0YXRpYz8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0IGhhcyBleHRlcm5hbCBsaW5rYWdlIG9yIGlzIHNjb3BlZCB0byBhIHNwZWNpZmljIGZpbGUuIFRoYXQgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2lsbCBiZSBwcmV0dHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX21vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9NDIwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZmZkX2N0eF9mZWF0dXJlcyhfX3U2NCB1c2VyX2ZlYXR1cmVzKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDIxNS1cbm1tL3VzZXJmYXVsdGZkLmM6NDIxNjpzdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxubW0vdXNlcmZhdWx0ZmQuYy00MjE3LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTQzNTA9c3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQzNzgtXHRjYXNlIFVGRkRJT19NT1ZFOlxubW0vdXNlcmZhdWx0ZmQuYzo0Mzc5Olx0XHRyZXQgPSB1c2VyZmF1bHRmZF9tb3ZlKGN0eCwgYXJnKTtcbm1tL3VzZXJmYXVsdGZkLmMtNDM4MC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBBUEkqKgoKT2theSwgc28gYHVzZXJmYXVsdGZkX21vdmVgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0LiBOb3csIGxldCBtZSByZS1yZWFkIHRoYXQgZ3VpZGVsaW5l4oCmIEFoLCB0aGUgcHJlZmVyZW5jZSBpcyBmb3IgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMuIFRoYXQgd291bGQgZ2l2ZSB0aGVtIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIE9rYXksIHNvIHRoYXQgbWVhbnMgYHVzZXJmYXVsdGZkX2lvY3RsYCAqc2hvdWxkKiBiZSB0aGUgQVBJIGVudHJ5cG9pbnQgdGhlbiwgcmlnaHQ/IEl0JiMzOTtzIHRoZSBvbmx5IG90aGVyIG9idmlvdXMgY2FuZGlkYXRlLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaC4gSG1tLCBsZXQgbWUgc2VlLi4uIGFuZCB5ZXMsIGBzdGF0aWMgbG9uZyB1c2VyZmF1bHRmZF9pb2N0bC4uLmAgRGFtbWl0ISBJdCYjMzk7cyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGdldCBmcnVzdHJhdGluZyEgU28sIGlmIG5vdCBgdXNlcmZhdWx0ZmRfaW9jdGxgLCB0aGVuIHRoZSBuZXh0IGxvZ2ljYWwgZW50cnkgcG9pbnQgbXVzdCBiZSB0aGUgc3lzY2FsbCBpdHNlbGYsIGBzeXNfdXNlcmZhdWx0ZmRgPyBUaGF0IGhhcyB0byBiZSBpdCwgSSBzdXBwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qdXNlcmZhdWx0ZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz00NDgzPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9zeXNjYWxsX2FsbG93ZWQoaW50IGZsYWdzKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDQ5OS1cbm1tL3VzZXJmYXVsdGZkLmM6NDUwMDpTWVNDQUxMX0RFRklORTEodXNlcmZhdWx0ZmQsIGludCwgZmxhZ3MpXG5tbS91c2VyZmF1bHRmZC5jLTQ1MDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzYzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB1c2VyZmF1bHRmZGAgc2l0dWF0aW9uLiBUaGUgY29yZSBzeXNjYWxsIGlzIGNsZWFybHkgYHN5c191c2VyZmF1bHRmZGAuIE5vdywgdGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgZnVuY3Rpb24gc2VlbXMgdG8gYmUgd2hlcmUgaW9jdGxzIGFyZSBoYW5kbGVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgaXQmIzM5O3MgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBzdGF0aWMgZmlsZSBvcGVyYXRpb24uIEhtbSwgaXQgaXNuJiMzOTt0LgoKSSBqdXN0IGRvdWJsZS1jaGVja2VkLCBhbmQgYG1vdmVfcGFnZXNgIGlzIGFsc28gc3RhdGljLCBzbyBubyBsdWNrIHRoZXJlLiBPa2F5LCBzbyBldmVuIHRob3VnaCBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIGRlY2xhcmVkIHN0YXRpYywgdGhlIGtlcm5lbCBhY3R1YWxseSB1c2VzIGl0cyBhZGRyZXNzIHRocm91Z2ggYHVzZXJmYXVsdGZkX2ZvcHNgLCBzbyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYHN5c191c2VyZmF1bHRmZGAgYW5kIGB1c2VyZmF1bHRmZF9pb2N0bGAgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIG5vbi1zdGF0aWMgdmVyc2lvbiBJIG1pc3NlZC4gSSYjMzk7bGwgYWRkIHRoZW0gYm90aCB0byBgRm9jdXNTeW1ib2xzYC4KCldhaXQgYSBzZWNvbmQsIHRoZSBndWlkYW5jZSBpcyB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gQnV0IGB1c2VyZmF1bHRmZF9pb2N0bGAgaXMgc3RhdGljICpidXQqIGFuIGVudHJ5cG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2luZyBvbiB3aGF0IGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4gVGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgY2FsbCBpcyBhIGRpcmVjdCBlbnRyeXBvaW50LiBBbHJpZ2h0LCBsZXQmIzM5O3Mga2VlcCBpdC4KCkxldCYjMzk7cyBxdWlja2x5IG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgaXQuIGBVU0VSRkFVTFRGRGAgaXMgdGhlIG1haW4gb25lLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgYG1vdmVfcGFnZXNgIGluIGBtbS91c2VyZmF1bHRmZC5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE2LVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODU5PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcbm1tL3VzZXJmYXVsdGZkLmM6MTg2ODogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxubW0vdXNlcmZhdWx0ZmQuYy0xODY5LSAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHRcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4NzYtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTg3NzogKiBtb3ZlX3BhZ2VzKCkgcmVtYXBzIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgYXRvbWljYWxseSBpbiB6ZXJvXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg4OC0gKiBzdG9yYWdlIG9yIGFueSBvdGhlciBJL08gZGV2aWNlIChNQURWX0RPTlRGT1JLIGluIHRoZSBzb3VyY2Ugdm1hXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxubW0vdXNlcmZhdWx0ZmQuYzoxODkwOiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xODkxLSAqIHBhZ2UgaW4gdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlIGRlc3RpbmF0aW9uIHZtYS5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MDUtICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXG5tbS91c2VyZmF1bHRmZC5jOjE5MDY6ICogbW92ZV9wYWdlcygpIHdpbGwgZmFpbCByZXNwZWN0aXZlbHkgd2l0aCAtRU5PRU5UIG9yIC1FRVhJU1QuIFRoaXNcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEwLSAqIHRpbWUgZm9yIGFueSBnaXZlbiBmYXVsdGluZyBhZGRyZXNzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIHRocmVhZHNcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEyLSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXG5tbS91c2VyZmF1bHRmZC5jOjE5MjE6ICogXCYjMzQ7c2hvcnRcJiMzNDsgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcbm1tL3VzZXJmYXVsdGZkLmMtMTkyMi0gKiB1c2VybGFuZCB3aXRoIHNyYyYjNDM7cmV0dmFsLCBkc3QmIzQzO3JldmFsLCBsZW4tcmV0dmFsIGlmIGl0IHdhbnRzIHRvIGtub3dcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MzMtICovXG5tbS91c2VyZmF1bHRmZC5jOjE5MzQ6c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVx0XHQgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIF9fdTY0IG1vZGUpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVx0XHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcdFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XG5tbS91c2VyZmF1bHRmZC5jOjIwMTY6XHRcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNy1cdFx0ICovXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQxLVx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xubW0vdXNlcmZhdWx0ZmQuYzoyMDQyOlx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2Olx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cbm1tL3VzZXJmYXVsdGZkLmM6MjA2OTpcdFx0XHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXHRcdFx0XHRcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDI1NjpcdFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxubW0vdXNlcmZhdWx0ZmQuYy00MjU3LVx0XHRcdFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggd2l0aGluIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uICBJdCYjMzk7cyB0cmlnZ2VyZWQgdGhyb3VnaCBhIGNoYWluOiBgdXNlcmZhdWx0ZmRfbW92ZWAgY2FsbHMgYG1vdmVfcGFnZXNgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgdXNlcmZhdWx0ZmRfaW9jdGxgLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgZml4IHdpdGhpbiBhbiBlcnJvciBoYW5kbGluZyBibG9jay4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBtb3ZlX3BhZ2VzYCB3YXMgaW5jb3JyZWN0bHkgcmV0dXJuaW5nIGAtRUFHQUlOYCBpbiBjZXJ0YWluIHNjZW5hcmlvcy4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBkaWRuJiMzOTt0IHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwIHdoZW4gYW4gYC1FQUdBSU5gIHdhcyBlbmNvdW50ZXJlZCwgdGh1cyBzaG9ydC1jaXJjdWl0aW5nIHRoZSBleHBlY3RlZCByZXRyeS9jb250aW51ZSBiZWhhdmlvci4gVGhlIHBhdGNoIG5vdyBleHBsaWNpdGx5IHJlc2V0cyBgZXJyYCB0byAwIGluIHRoYXQgYC1FQUdBSU5gIGNvbmRpdGlvbiwgYWxsb3dpbmcgdGhlIGxvb3AgdG8gY29udGludWUgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhIG1vcmUgYXBwcm9wcmlhdGUgcmVzdWx0IGxhdGVyLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiBhdCB0aGUga2VybmVsJiMzOTtzIGNvcmUgd2l0aGluIHRoZSBgdXNlcmZhdWx0ZmRgIHN1YnN5c3RlbSwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIFNpbmNlIGl0JiMzOTtzIHJlYWNoYWJsZSBjb2RlLCBhbmQgZ2l2ZW4gaXRzIGRpcmVjdCBpbXBhY3Qgb24gZnVuY3Rpb25hbGl0eSwgaXQgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIGZ1enppbmcgYW5kIGRldGFpbGVkIGFuYWx5c2lzLiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUsIHNpbmNlIGl0IGlzIHRoZSByb290IG9mIHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBpZiB0aGUgYFVTRVJGQVVMVEZEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0ZXN0aW5nLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBtaWdodCBpbmZvcm0gbXkgZnV6emluZyBzdHJhdGVneSBvciB1bmNvdmVyIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gb3RoZXIgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJGQVVMVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODQ9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxuLS1cbm1tL0tjb25maWctMTM4OC1cbm1tL0tjb25maWc6MTM4OTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzOTAtXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIHRob3VnaHRzIG15c2VsZjoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBVU0VSRkFVTFRGRCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBVU0VSRkFVTFRGRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc3VyZmFjZS1sZXZlbCBmZWF0dXJlOyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJ3b3ZlbiB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCB1c2VyLXNwYWNlIGxpYnJhcmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZWxpZXMgb24gaXQgYW5kLCBjcnVjaWFsbHksIHdoYXQgKml0KiByZWxpZXMgb24uIFRoaXMgbWVhbnMgdHJhY2luZyB0aGUgY2FsbCBwYXRocywgdGhlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZToKCiogICAqKkNvcmUgS2VybmVsIE1vZHVsZXM6KiogSXMgYFVTRVJGQVVMVEZEYCBwcmltYXJpbHkgYSBtZW1vcnkgbWFuYWdlbWVudCBjb25zdHJ1Y3QsIG9yIGRvZXMgaXQgdG91Y2ggb24gaW50ZXJydXB0IGhhbmRsaW5nLCB0YXNrIHNjaGVkdWxpbmcsIG9yIGV2ZW4gdGhlIG5ldHdvcmtpbmcgc3RhY2s/IFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJhY3Rpb25zIGlzIGtleSB0byBhc3Nlc3NpbmcgaXRzIGltcGFjdC4KKiAgICoqVXNlci1TcGFjZSBMaWJyYXJpZXM6KiogV2hhdCB1c2VyLXNwYWNlIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIGFyZSBsZXZlcmFnaW5nIHRoaXM/IFdoYXQgQVBJcyBhcmUgZXhwb3NlZCwgYW5kIGhvdyBhcmUgdGhleSB1c2VkPyBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLgoqICAgKipWZXJzaW9uIENvbXBhdGliaWxpdHk6KiogSG93IGhhcyBgVVNFUkZBVUxURkRgIGV2b2x2ZWQgb3ZlciBkaWZmZXJlbnQga2VybmVsIHZlcnNpb25zPyBXaGF0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY29uc2lkZXJhdGlvbnMgYXJlIHRoZXJlPyBBbnkgZGVwcmVjYXRpb24gbm90aWNlcz8KKiAgICoqU2VjdXJpdHkgSW1wbGljYXRpb25zOioqIFdoYXQgYXJlIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlPyBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBvciBhdHRhY2sgdmVjdG9ycyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBhbmQgd2lsbCBJIG5lZWQgdG8gdGVzdCBhbnkgZWRnZSBjYXNlcz8KKiAgICoqVGVzdGluZyBhbmQgVmFsaWRhdGlvbjoqKiBXaGF0IHRlc3RzIGFyZSBhbHJlYWR5IGluIHBsYWNlLCBhbmQgd2hhdCB0ZXN0cyBtaWdodCBJIG5lZWQgdG8gcGVyZm9ybSB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBpdCBzaG91bGQgYmU/IEkgYW0gdGhpbmtpbmcgb2YgdmFyaW91cyB0ZXN0IHNjZW5hcmlvcyBJIGNhbiBlbXBsb3kgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHJldmlldy4KCk15IGdvYWwgaXMgdG8gY3JlYXRlIGEgbWVudGFsIG1hcCBvZiBob3cgYFVTRVJGQVVMVEZEYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIGlkZW50aWZ5IGl0cyByb2xlIGFzIGFuIGVuYWJsZXIgYW5kIGFuIG9ic3RhY2xlIHRvIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuIFdpdGggdGhpcyBmb3VuZGF0aW9uLCBJIGNhbiB0aGVuIGZvcm11bGF0ZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXNpZ24gYW5kIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzg5Olx0bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxuMTM5MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuMTM5MTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjEzOTI6XHRcdGhlbHBcbjEzOTM6XHRcdCAgRW5hYmxlIHRoZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIGludGVyY2VwdCBhbmRcbjEzOTQ6XHRcdCAgaGFuZGxlIHBhZ2UgZmF1bHRzIGluIHVzZXJsYW5kLlxuMTM5NTpcdFxuMTM5NjpcdGlmIFVTRVJGQVVMVEZEXG4xMzk3Olx0Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuMTM5ODpcdFx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuMTM5OTpcdFx0ZGVmYXVsdCB5XG4xNDAwOlx0XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxuMTQwMTpcdFxuMTQwMjpcdFx0aGVscFxuMTQwMzpcdFx0ICBBbGxvd3MgdG8gY3JlYXRlIG1hcmtlciBQVEVzIGZvciB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uXG4xNDA0Olx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDU6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDY6XHRlbmRpZiAjIFVTRVJGQVVMVEZEXG4xNDA3Olx0XG4xNDA4Olx0IyBtdWx0aS1nZW4gTFJVIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAzMgoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlNpbXBsaWZ5aW5nIHRoZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGN1dCB0aHJvdWdoIHRoZSBub2lzZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBkZXBlbmRlbmNpZXMgaGVyZSBhcmUgcmVhbGx5IGp1c3QgdGhlIGBNTVVgLiBFdmVyeXRoaW5nIGVsc2UgaXMgZWl0aGVyIGltcGxpY2l0bHkgaGFuZGxlZCBvciBpcnJlbGV2YW50IHRvIHRoZSBpbW1lZGlhdGUgY29uY2Vybi4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBmcm9tIGEgY29uZmlndXJhdGlvbiBzdGFuZHBvaW50LCBgVVNFUkZBVUxURkRgIGlzIHRoZSBvbmx5IGl0ZW0gb24gdGhlIGNoZWNrbGlzdCB0aGF0IGhhcyBhbnkgYmVhcmluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgZ29vZCwgaXQgc3RyZWFtbGluZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gSSBsaWtlIHRoZSBjbGFyaXR5LiBOb3csIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHksIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRlcGVuZGVuY3kgb24gYFVTRVJGQVVMVEZEYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcmZhdWx0ZmRfaW9jdGwmIzM0OywKICAgICYjMzQ7c3lzX3VzZXJmYXVsdGZkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHVzZXJmYXVsdGZkJiMzOTtzIG1vdmVfcGFnZXMgZnVuY3Rpb24gd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHByb3Blcmx5IGNsZWFyZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AsIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJldHVybiAtRUFHQUlOLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHVzZXJmYXVsdGZkIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgICAmIzM0O3N5c191c2VyZmF1bHRmZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCYjMzk7cyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cblxuVGhpcyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBvciBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1ZyAoZS5nLiwgaW5maW5pdGUgbG9vcHMgb3IgY3Jhc2hlcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IGMzYWRlZGFhZjdkNTQuLmVjNWQ1MTFiZDE3OTEgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMjA4NSw4ICYjNDM7MjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsCiAJCX0KIAogCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CQkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQkJCWVyciA9IDA7CiAJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQkJYnJlYWs7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVc2VyZmF1bHRmZCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGBtb3ZlX3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGZpeGluZyBhIGJ1ZyByZWxhdGVkIHRvIGhvdyBgbW92ZV9wYWdlc2AgaGFuZGxlcyBgLUVBR0FJTmAgZXJyb3JzLiBMZXQgbWUgcGFyc2UgdGhpczoKClRoZSBjb2RlIG9yaWdpbmFsbHkgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKIAkJaWYgKGVycikgewotCQkJaWYgKGVyciA9PSAtRUFHQUlOKQomIzQzOwkJCWlmIChlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJCQllcnIgPSAwOwogCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9CmBgYAoKVGhlIHBhdGNoIG1vZGlmaWVzIGl0IGJ5IHNldHRpbmcgYGVyciA9IDBgICpiZWZvcmUqIHRoZSBgY29udGludWVgLiBIbW0sIGxldCBtZSB0aGluayBhYm91dCB0aGlzLi4uIGBtb3ZlX3BhZ2VzYCBpcyByZXNwb25zaWJsZSBmb3IgbW92aW5nIHBhZ2VzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBvcGVyYXRpbmcgd2l0aGluIHNvbWUga2luZCBvZiBsb29wLiBJZiBgZXJyYCBpcyBgLUVBR0FJTmAsIGl0IG1lYW5zIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHJldHJpZWQgbGF0ZXIuIFRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGlmIHRoYXQgYGVyciA9IDBgIHdhcyBub3QgcHJlc2VudCBhbmQgYC1FQUdBSU5gIG9jY3VycmVkLCBhbmQgdGhlIGxvb3AgaXRlcmF0ZWQsIGBlcnJgIHdvdWxkIGJlIHVuZGVmaW5lZCwgYW5kIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBgZXJyYCB3b3VsZCBiZSByZXR1cm5lZC4KClNvLCB3aXRob3V0IHRoZSBgZXJyID0gMGAsIGlmIGAtRUFHQUlOYCB3YXMgZW5jb3VudGVyZWQsIHRoZSBsb29wIHdvdWxkIGNvbnRpbnVlLCBwcmVzdW1hYmx5IHRvIHJldHJ5IHRoZSBwYWdlIG1vdmUuIEJ1dCwgaWYgdGhlIGxvb3AgKnRoZW4qIHRlcm1pbmF0ZWQgZm9yIHNvbWUgKm90aGVyKiByZWFzb24sIHRoZSBmdW5jdGlvbiBtaWdodCByZXR1cm4gdGhhdCBvcmlnaW5hbCBgLUVBR0FJTmAgZXJyb3IsIG9yIHNvbWUgb3RoZXIgZXJyb3IsIHdoaWNoIGlzIGluY29ycmVjdC4gV2l0aCB0aGUgYWRkZWQgYGVyciA9IDBgLCBpdCBtZWFucyB0aGF0IGlmIHRoZSBvcGVyYXRpb24gaXMgcmV0cmllZCwgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiBgLUVBR0FJTmAgaWYgdGhlIHJldHJ5IGZhaWxzIGJlY2F1c2Ugb2Ygc29tZSBvdGhlciByZWFzb24gLSBpdCB3aWxsIG9ubHkgcmV0dXJuIGFuIGVycm9yIGZvciBzb21lIG90aGVyIHJlYXNvbi4gVGh1cywgaXQgZW5zdXJlcyB0aGF0IGAtRUFHQUlOYCBvbmx5IG1lYW5zICYjMzQ7dHJ5IGFnYWluIGxhdGVyJiMzNDsuCgpMZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgYG1vdmVfcGFnZXNgIGltcGxlbWVudGF0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYCBqdXN0IHRvIGJlIHN1cmUsIGFuZCBzZWUgaWYgSSBjYW4gY29uZmlybSBteSBtZW50YWwgbW9kZWwgb2YgaXRzIG9wZXJhdGlvbmFsIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE2LVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODU5PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcbm1tL3VzZXJmYXVsdGZkLmM6MTg2ODogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxubW0vdXNlcmZhdWx0ZmQuYy0xODY5LSAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHRcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE4NzYtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTg3NzogKiBtb3ZlX3BhZ2VzKCkgcmVtYXBzIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgYXRvbWljYWxseSBpbiB6ZXJvXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg4OC0gKiBzdG9yYWdlIG9yIGFueSBvdGhlciBJL08gZGV2aWNlIChNQURWX0RPTlRGT1JLIGluIHRoZSBzb3VyY2Ugdm1hXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxubW0vdXNlcmZhdWx0ZmQuYzoxODkwOiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xODkxLSAqIHBhZ2UgaW4gdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlIGRlc3RpbmF0aW9uIHZtYS5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MDUtICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXG5tbS91c2VyZmF1bHRmZC5jOjE5MDY6ICogbW92ZV9wYWdlcygpIHdpbGwgZmFpbCByZXNwZWN0aXZlbHkgd2l0aCAtRU5PRU5UIG9yIC1FRVhJU1QuIFRoaXNcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEwLSAqIHRpbWUgZm9yIGFueSBnaXZlbiBmYXVsdGluZyBhZGRyZXNzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIHRocmVhZHNcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTEyLSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXG5tbS91c2VyZmF1bHRmZC5jOjE5MjE6ICogXCYjMzQ7c2hvcnRcJiMzNDsgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcbm1tL3VzZXJmYXVsdGZkLmMtMTkyMi0gKiB1c2VybGFuZCB3aXRoIHNyYyYjNDM7cmV0dmFsLCBkc3QmIzQzO3JldmFsLCBsZW4tcmV0dmFsIGlmIGl0IHdhbnRzIHRvIGtub3dcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MzMtICovXG5tbS91c2VyZmF1bHRmZC5jOjE5MzQ6c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVx0XHQgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIF9fdTY0IG1vZGUpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVx0XHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcdFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XG5tbS91c2VyZmF1bHRmZC5jOjIwMTY6XHRcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cbm1tL3VzZXJmYXVsdGZkLmMtMjAxNy1cdFx0ICovXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQxLVx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xubW0vdXNlcmZhdWx0ZmQuYzoyMDQyOlx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2Olx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cbm1tL3VzZXJmYXVsdGZkLmM6MjA2OTpcdFx0XHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXHRcdFx0XHRcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDI1NjpcdFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxubW0vdXNlcmZhdWx0ZmQuYy00MjU3LVx0XHRcdFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1vdmVfcGFnZXNgIGluIGBtbS91c2VyZmF1bHRmZC5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG1vdmVfcGFnZXNgIGlzIGhhbmRsaW5nIHRoaW5ncyBpbiB0aGUgY29udGV4dCBvZiB1c2VyZmF1bHRmZC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaG93IHdlIG1hbmFnZSBwYWdlIG1pZ3JhdGlvbiBhbmQgdHJhbnNmZXIsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdXNlci1zcGFjZSBtZW1vcnkgYWNjZXNzIGZhdWx0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBvcmNoZXN0cmF0ZXMgdGhpcyB3aG9sZSBkYW5jZSBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2VyZmF1bHRmZGAgYW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEhvdyBkb2VzIGl0IGtub3cgd2hlcmUgcGFnZXMgYXJlLCBhbmQgaG93IGRvZXMgaXQgZGlyZWN0IHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvPyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgZGVsaWNhdGUgYmFsYW5jaW5nIGFjdCBoZXJlLCBlbnN1cmluZyBkYXRhIGludGVncml0eSB3aGlsZSBtaW5pbWl6aW5nIHRoZSBwZXJmb3JtYW5jZSBoaXQgb2YgcGFnZSBmYXVsdHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZG8gaXQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBsb2NraW5nIHByaW1pdGl2ZXMsIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgZmxvdy4gVGhpcyBjb3VsZCBnaXZlIG1lIHNvbWUgZ3JlYXQgaW5zaWdodHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MzQ6XHRzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4xOTM1Olx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbjE5MzY6XHR7XG4xOTM3Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN0eC1cdTAwM2VtbTtcbjE5Mzg6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwgKmRzdF92bWE7XG4xOTM5Olx0XHR1bnNpZ25lZCBsb25nIHNyY19hZGRyLCBkc3RfYWRkciwgc3JjX2VuZDtcbjE5NDA6XHRcdHBtZF90ICpzcmNfcG1kLCAqZHN0X3BtZDtcbjE5NDE6XHRcdGxvbmcgZXJyID0gLUVJTlZBTDtcbjE5NDI6XHRcdHNzaXplX3QgbW92ZWQgPSAwO1xuMTk0MzpcdFxuMTk0NDpcdFx0LyogU2FuaXRpemUgdGhlIGNvbW1hbmQgcGFyYW1ldGVycy4gKi9cbjE5NDU6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgXHUwMDI2IH5QQUdFX01BU0spO1xuMTk0NjpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCBcdTAwMjYgflBBR0VfTUFTSyk7XG4xOTQ3Olx0XHRWTV9XQVJOX09OX09OQ0UobGVuIFx1MDAyNiB+UEFHRV9NQVNLKTtcbjE5NDg6XHRcbjE5NDk6XHRcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cbjE5NTA6XHRcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgJiM0MzsgbGVuIFx1MDAzYyBzcmNfc3RhcnQpO1xuMTk1MTpcdFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCAmIzQzOyBsZW4gXHUwMDNjIGRzdF9zdGFydCk7XG4xOTUyOlx0XG4xOTUzOlx0XHRlcnIgPSB1ZmZkX21vdmVfbG9jayhtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIFx1MDAyNmRzdF92bWEsIFx1MDAyNnNyY192bWEpO1xuMTk1NDpcdFx0aWYgKGVycilcbjE5NTU6XHRcdFx0Z290byBvdXQ7XG4xOTU2Olx0XG4xOTU3Olx0XHQvKiBSZS1jaGVjayBhZnRlciB0YWtpbmcgbWFwX2NoYW5naW5nX2xvY2sgKi9cbjE5NTg6XHRcdGVyciA9IC1FQUdBSU47XG4xOTU5Olx0XHRkb3duX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcbjE5NjA6XHRcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXHUwMDI2Y3R4LVx1MDAzZW1tYXBfY2hhbmdpbmcpKSlcbjE5NjE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk2MjpcdFx0LypcbjE5NjM6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXG4xOTY0Olx0XHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xuMTk2NTpcdFx0ICogdm1hLlxuMTk2NjpcdFx0ICovXG4xOTY3Olx0XHRlcnIgPSAtRUlOVkFMO1xuMTk2ODpcdFx0aWYgKHNyY192bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRClcbjE5Njk6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTk3MDpcdFx0aWYgKHNyY19zdGFydCAmIzQzOyBsZW4gXHUwMDNlIHNyY192bWEtXHUwMDNldm1fZW5kKVxuMTk3MTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTcyOlx0XG4xOTczOlx0XHRpZiAoZHN0X3ZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKVxuMTk3NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xOTc1Olx0XHRpZiAoZHN0X3N0YXJ0ICYjNDM7IGxlbiBcdTAwM2UgZHN0X3ZtYS1cdTAwM2V2bV9lbmQpXG4xOTc2Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5Nzc6XHRcbjE5Nzg6XHRcdGVyciA9IHZhbGlkYXRlX21vdmVfYXJlYXMoY3R4LCBzcmNfdm1hLCBkc3Rfdm1hKTtcbjE5Nzk6XHRcdGlmIChlcnIpXG4xOTgwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE5ODE6XHRcbjE5ODI6XHRcdGZvciAoc3JjX2FkZHIgPSBzcmNfc3RhcnQsIGRzdF9hZGRyID0gZHN0X3N0YXJ0LCBzcmNfZW5kID0gc3JjX3N0YXJ0ICYjNDM7IGxlbjtcbjE5ODM6XHRcdCAgICAgc3JjX2FkZHIgXHUwMDNjIHNyY19lbmQ7KSB7XG4xOTg0Olx0XHRcdHNwaW5sb2NrX3QgKnB0bDtcbjE5ODU6XHRcdFx0cG1kX3QgZHN0X3BtZHZhbDtcbjE5ODY6XHRcdFx0dW5zaWduZWQgbG9uZyBzdGVwX3NpemU7XG4xOTg3Olx0XG4xOTg4Olx0XHRcdC8qXG4xOTg5Olx0XHRcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxuMTk5MDpcdFx0XHQgKiB0cmFuc3BhcmVudCBodWdlIFBVRC4gSWYgZmlsZS1iYWNrZWQgc3VwcG9ydCBpcyBhZGRlZCxcbjE5OTE6XHRcdFx0ICogdGhhdCBjYXNlIHdvdWxkIG5lZWQgdG8gYmUgaGFuZGxlZCBoZXJlLlxuMTk5MjpcdFx0XHQgKi9cbjE5OTM6XHRcdFx0c3JjX3BtZCA9IG1tX2ZpbmRfcG1kKG1tLCBzcmNfYWRkcik7XG4xOTk0Olx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjE5OTU6XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjE5OTY6XHRcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4xOTk3Olx0XHRcdFx0XHRicmVhaztcbjE5OTg6XHRcdFx0XHR9XG4xOTk5Olx0XHRcdFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xuMjAwMDpcdFx0XHRcdGlmICh1bmxpa2VseSghc3JjX3BtZCkpIHtcbjIwMDE6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4yMDAyOlx0XHRcdFx0XHRicmVhaztcbjIwMDM6XHRcdFx0XHR9XG4yMDA0Olx0XHRcdH1cbjIwMDU6XHRcdFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xuMjAwNjpcdFx0XHRpZiAodW5saWtlbHkoIWRzdF9wbWQpKSB7XG4yMDA3Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjIwMDg6XHRcdFx0XHRicmVhaztcbjIwMDk6XHRcdFx0fVxuMjAxMDpcdFxuMjAxMTpcdFx0XHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XG4yMDEyOlx0XHRcdC8qXG4yMDEzOlx0XHRcdCAqIElmIHRoZSBkc3RfcG1kIGlzIG1hcHBlZCBhcyBUSFAgZG9uJiMzOTt0IG92ZXJyaWRlIGl0IGFuZCBqdXN0XG4yMDE0Olx0XHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxuMjAxNTpcdFx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbjIwMTY6XHRcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuMjAxNzpcdFx0XHQgKi9cbjIwMTg6XHRcdFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xuMjAxOTpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDIwOlx0XHRcdFx0YnJlYWs7XG4yMDIxOlx0XHRcdH1cbjIwMjI6XHRcbjIwMjM6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhzcmNfcG1kLCBzcmNfdm1hKTtcbjIwMjQ6XHRcdFx0aWYgKHB0bCkge1xuMjAyNTpcdFx0XHRcdC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHRoZSBwbWQgd2l0aG91dCBzcGxpdHRpbmcgaXQuICovXG4yMDI2Olx0XHRcdFx0aWYgKG1vdmVfc3BsaXRzX2h1Z2VfcG1kKGRzdF9hZGRyLCBzcmNfYWRkciwgc3JjX3N0YXJ0ICYjNDM7IGxlbikgfHxcbjIwMjc6XHRcdFx0XHQgICAgIXBtZF9ub25lKGRzdF9wbWR2YWwpKSB7XG4yMDI4Olx0XHRcdFx0XHQvKiBDYW4gYmUgYSBtaWdyYXRpb24gZW50cnkgKi9cbjIwMjk6XHRcdFx0XHRcdGlmIChwbWRfcHJlc2VudCgqc3JjX3BtZCkpIHtcbjIwMzA6XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBtZF9mb2xpbygqc3JjX3BtZCk7XG4yMDMxOlx0XG4yMDMyOlx0XHRcdFx0XHRcdGlmICghaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjIwMzM6XHRcdFx0XHRcdFx0ICAgICFQYWdlQW5vbkV4Y2x1c2l2ZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgTmV4dCBTdGVwcyBpbiBgbW92ZV9wYWdlc2AqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbi4gV2UmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHRhc2sgaW4gbWluZCAod2hhdGV2ZXIgdGhlIGxhcmdlciBjb250ZXh0IGRpY3RhdGVzKSwgYW5kIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBpdm90YWwgdG8gYWNjb21wbGlzaGluZyBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uJiMzNDsuIEkmIzM5O20gbm90IHN0b3BwaW5nIHRvIHJlZmxlY3Qgb24gYW55dGhpbmcgZWxzZSwganVzdCB3aGF0JiMzOTtzIG5leHQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIG9wZXJhdGlvbmFsIGRldGFpbHMsIGlkZW50aWZ5IGhvdyBpdCB3aWxsIGZpdCBpbnRvIHRoZSB3aWRlciBzY29wZSwgYW5kIGRldGVybWluZSB3aGF0IHdlIHdpbGwgYmUgZG9pbmcsIGFuZCBob3cgd2Ugd2lsbCBiZSBkb2luZyBpdC4gVGhlIHJlc3Qgb2YgdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBtdXN0IGJlIHVuZGVyc3Rvb2QgaWYgd2UgYXJlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbGFyZ2VyIHN0cnVjdHVyZSByZXF1aXJlcyBvZiB1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYXQgdGhlIGltcGxlbWVudGF0aW9uIGxldmVsIG5vdy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzNDpcdFx0XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4yMDM1Olx0XHRcdFx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMjAzNjpcdFx0XHRcdFx0XHRcdGJyZWFrO1xuMjAzNzpcdFx0XHRcdFx0XHR9XG4yMDM4Olx0XHRcdFx0XHR9XG4yMDM5Olx0XG4yMDQwOlx0XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuMjA0MTpcdFx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xuMjA0MjpcdFx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xuMjA0MzpcdFx0XHRcdFx0Y29udGludWU7XG4yMDQ0Olx0XHRcdFx0fVxuMjA0NTpcdFxuMjA0NjpcdFx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG4yMDQ3Olx0XHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuMjA0ODpcdFx0XHRcdFx0XHRcdCAgZHN0X2FkZHIsIHNyY19hZGRyKTtcbjIwNDk6XHRcdFx0XHRzdGVwX3NpemUgPSBIUEFHRV9QTURfU0laRTtcbjIwNTA6XHRcdFx0fSBlbHNlIHtcbjIwNTE6XHRcdFx0XHRsb25nIHJldDtcbjIwNTI6XHRcbjIwNTM6XHRcdFx0XHRpZiAocG1kX25vbmUoKnNyY19wbWQpKSB7XG4yMDU0Olx0XHRcdFx0XHRpZiAoIShtb2RlIFx1MDAyNiBVRkZESU9fTU9WRV9NT0RFX0FMTE9XX1NSQ19IT0xFUykpIHtcbjIwNTU6XHRcdFx0XHRcdFx0ZXJyID0gLUVOT0VOVDtcbjIwNTY6XHRcdFx0XHRcdFx0YnJlYWs7XG4yMDU3Olx0XHRcdFx0XHR9XG4yMDU4Olx0XHRcdFx0XHRpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHNyY19wbWQpKSkge1xuMjA1OTpcdFx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2MDpcdFx0XHRcdFx0XHRicmVhaztcbjIwNjE6XHRcdFx0XHRcdH1cbjIwNjI6XHRcdFx0XHR9XG4yMDYzOlx0XG4yMDY0Olx0XHRcdFx0aWYgKHVubGlrZWx5KHB0ZV9hbGxvYyhtbSwgZHN0X3BtZCkpKSB7XG4yMDY1Olx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2NjpcdFx0XHRcdFx0YnJlYWs7XG4yMDY3Olx0XHRcdFx0fVxuMjA2ODpcdFxuMjA2OTpcdFx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbjIwNzA6XHRcdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4yMDcxOlx0XHRcdFx0XHRcdCAgICAgIHNyY19hZGRyLCBzcmNfZW5kIC0gc3JjX2FkZHIsIG1vZGUpO1xuMjA3MjpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDczOlx0XHRcdFx0XHRlcnIgPSByZXQ7XG4yMDc0Olx0XHRcdFx0ZWxzZVxuMjA3NTpcdFx0XHRcdFx0c3RlcF9zaXplID0gcmV0O1xuMjA3NjpcdFx0XHR9XG4yMDc3Olx0XG4yMDc4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjA3OTpcdFxuMjA4MDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjIwODE6XHRcdFx0XHQvKiBEbyBub3Qgb3ZlcnJpZGUgYW4gZXJyb3IgKi9cbjIwODI6XHRcdFx0XHRpZiAoIWVyciB8fCBlcnIgPT0gLUVBR0FJTilcbjIwODM6XHRcdFx0XHRcdGVyciA9IC1FSU5UUjtcbjIwODQ6XHRcdFx0XHRicmVhaztcbjIwODU6XHRcdFx0fVxuMjA4NjpcdFxuMjA4NzpcdFx0XHRpZiAoZXJyKSB7XG4yMDg4Olx0XHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4yMDg5Olx0XHRcdFx0XHRlcnIgPSAwO1xuMjA5MDpcdFx0XHRcdFx0Y29udGludWU7XG4yMDkxOlx0XHRcdFx0fVxuMjA5MjpcdFx0XHRcdGJyZWFrO1xuMjA5MzpcdFx0XHR9XG4yMDk0Olx0XG4yMDk1Olx0XHRcdC8qIFByb2NlZWQgdG8gdGhlIG5leHQgcGFnZSAqL1xuMjA5NjpcdFx0XHRkc3RfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5NzpcdFx0XHRzcmNfYWRkciAmIzQzOz0gc3RlcF9zaXplO1xuMjA5ODpcdFx0XHRtb3ZlZCAmIzQzOz0gc3RlcF9zaXplO1xuMjA5OTpcdFx0fVxuMjEwMDpcdFxuMjEwMTpcdG91dF91bmxvY2s6XG4yMTAyOlx0XHR1cF9yZWFkKFx1MDAyNmN0eC1cdTAwM2VtYXBfY2hhbmdpbmdfbG9jayk7XG4yMTAzOlx0XHR1ZmZkX21vdmVfdW5sb2NrKGRzdF92bWEsIHNyY192bWEpO1xuMjEwNDpcdG91dDpcbjIxMDU6XHRcdFZNX1dBUk5fT05fT05DRShtb3ZlZCBcdTAwM2MgMCk7XG4yMTA2Olx0XHRWTV9XQVJOX09OX09OQ0UoZXJyIFx1MDAzZSAwKTtcbjIxMDc6XHRcdFZNX1dBUk5fT05fT05DRSghbW92ZWQgXHUwMDI2XHUwMDI2ICFlcnIpO1xuMjEwODpcdFx0cmV0dXJuIG1vdmVkID8gbW92ZWQgOiBlcnI7XG4yMTA5Olx0fVxuMjExMDpcdFxuMjExMTpcdHN0YXRpYyBib29sIHZtYV9jYW5fdXNlcmZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuMjExMjpcdFx0XHQgICAgICAgYm9vbCB3cF9hc3luYylcbjIxMTM6XHR7XG4yMTE0Olx0XHRjb25zdCBzdHJ1Y3Qgdm1fdWZmZF9vcHMgKm9wcyA9IHZtYV91ZmZkX29wcyh2bWEpO1xuMjExNTpcdFxuMjExNjpcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0RST1BQQUJMRSB8IFZNX1NIQURPV19TVEFDSykpXG4yMTE3Olx0XHRcdHJldHVybiBmYWxzZTtcbjIxMTg6XHRcbjIxMTk6XHRcdGlmICghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXHUwMDI2XHUwMDI2ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NQRUNJQUwpKVxuMjEyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMTIxOlx0XG4yMTIyOlx0XHR2bV9mbGFncyBcdTAwMjY9IF9fVk1fVUZGRF9GTEFHUztcbjIxMjM6XHRcbjIxMjQ6XHRcdC8qXG4yMTI1Olx0XHQgKiBJZiBXUCBpcyB0aGUgb25seSBtb2RlIGVuYWJsZWQgYW5kIGNvbnRleHQgaXMgd3AgYXN5bmMsIGFsbG93IGFueVxuMjEyNjpcdFx0ICogbWVtb3J5IHR5cGUuXG4yMTI3Olx0XHQgKi9cbjIxMjg6XHRcdGlmICh3cF9hc3luYyBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzID09IFZNX1VGRkRfV1ApKVxuMjEyOTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjIxMzA6XHRcbjIxMzE6XHRcdC8qIEZvciBhbnkgb3RoZXIgbW9kZSByZWplY3QgVk1BcyB0aGF0IGRvbiYjMzk7dCBpbXBsZW1lbnQgdm1fdWZmZF9vcHMgKi9cbjIxMzI6XHRcdGlmICghb3BzKVxuMjEzMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MzcKCQkJCQkJCW91dHB1dDogMjE5CgkJCQkJCQl0aG91Z2h0czogMTk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYG1vdmVfcGFnZXNgIGAtRUFHQUlOYCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29udHJvbC1mbG93IGlzc3VlIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgYC1FQUdBSU5gIGVycm9ycyByZXR1cm5lZCBieSB0aGUgbG93ZXItbGV2ZWwgcGFnZS1tb3ZpbmcgZnVuY3Rpb25zIChgbW92ZV9wYWdlc19wdGVzYCwgYG1vdmVfcGFnZXNfaHVnZV9wbWRgKS4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGNlbnRlcnMgYXJvdW5kIHRoZSBwZXJzaXN0ZW50IHN0YXRlIG9mIHRoZSBgZXJyYCB2YXJpYWJsZSB3aXRoaW4gdGhlIG1haW4gbG9vcC4KClRoZSBidWcgaXMgdGhhdCB3aGVuIGEgY2FsbCB0byBgbW92ZV9wYWdlc19wdGVzYCAob3IgaXRzIHBtZCBlcXVpdmFsZW50KSByZXR1cm5zIGAtRUFHQUlOYCwgdGhlIGludGVudGlvbiBpcyB0byByZXRyeSB0aGUgb3BlcmF0aW9uIG9uIHRoZSAqc2FtZSogbWVtb3J5IHJlZ2lvbiBpbiB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgZmxhdyBsaWVzIGluIHRoZSBmYWN0IHRoYXQgaXQgZG9lc24mIzM5O3QgY2xlYXIgdGhlIGBlcnJgIHZhcmlhYmxlIHdoZW4gaXQgZW5jb3VudGVycyBgLUVBR0FJTmAgYW5kIHByb2NlZWRzIHRvIGBjb250aW51ZWAgdGhlIGxvb3AuIFNvLCBpZiB0aGUgc3Vic2VxdWVudCBhdHRlbXB0IHN1Y2NlZWRzLCB0aGUgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gZG9lc24mIzM5O3Qgb3ZlcndyaXRlIHRoZSBzdGFsZSBgLUVBR0FJTmAgdmFsdWUgaW4gYGVycmAuCgpDb25zaWRlciB0aGlzIHNjZW5hcmlvOiBJbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCBgbW92ZV9wYWdlc19wdGVzYCByZXR1cm5zIGAtRUFHQUlOYC4gYGVycmAgYmVjb21lcyBgLUVBR0FJTmAsIGFuZCBiZWNhdXNlIG9mIHRoZSBjb25kaXRpb24gYGlmIChlcnIgPT0gLUVBR0FJTikgY29udGludWVgLCB0aGUgbG9vcCBza2lwcyB0aGUgYWRkcmVzcyBpbmNyZW1lbnQsIHRodXMgcmV0cnlpbmcgb24gdGhlIGV4YWN0IHNhbWUgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGl0ZXJhdGlvbi4gTm93LCBpZiB0aGUgc2Vjb25kIGl0ZXJhdGlvbiBzdWNjZXNzZnVsbHkgbW92ZXMgc29tZSBwYWdlcywgaXQgcmV0dXJucyBhIHBvc2l0aXZlIGByZXRgIHZhbHVlLiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgYGVycmAgZnJvbSB0aGUgZmlyc3QgYC1FQUdBSU5gIGlzbiYjMzk7dCBvdmVyd3JpdHRlbi4gVGhpcyBtZWFucyB0aGUgcHJvZ3JhbSB0aGVuIHNraXBzIHRoZSBpbmNyZW1lbnQgYW5kIHJldHJpZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBpbmRlZmluaXRlbHksIHdoaWNoIGlzIGRlZmluaXRlbHkgaW5jb3JyZWN0IGFuZCBwcm9iYWJseSBhIHNvZnQgbG9ja3VwLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBzZXR0aW5nIGBlcnIgPSAwYCBiZWZvcmUgdGhlIGBjb250aW51ZWAsIGVuc3VyaW5nIHRoYXQgYW55IHN1Y2Nlc3NmdWwgc3Vic2VxdWVudCBhdHRlbXB0cyBhcmUgcHJvcGVybHkgYWNrbm93bGVkZ2VkIGFuZCB0aGUgbG9vcCBwcm9jZWVkcyBhcyBpbnRlbmRlZCwgdGhlcmVieSBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3NlcyBhbmQgbW92aW5nIG9uIHRvIHRoZSBuZXh0IHNlZ21lbnQuCgpTbywgdGhlIGNyaXRpY2FsIGlzc3VlIGlzIHRoZSBsb29wJiMzOTtzIGNvbnRyb2wgZmxvdywgc3BlY2lmaWNhbGx5IHRoZSBmYWN0IHRoYXQgYGVycmAgaXNuJiMzOTt0IHByb3Blcmx5IGNsZWFyZWQgb24gYSBzdWNjZXNzZnVsIHJldHJ5LiBUaGlzIGxlYWRzIHRvIHRoZSBza2lwcGluZyBvZiBpbXBvcnRhbnQgaW5jcmVtZW50cywgbGVhZGluZyB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZSBjcml0aWNhbCBwaWVjZSBtaXNzaW5nIGZyb20gdGhlIG9sZCBsb2dpYyBpcyB0byByZXNldCB0aGUgZXJyb3IgY29kZSBiZWZvcmUgY29udGludWluZy4KCkxldCBtZSBleGFtaW5lIHRoZSBjb2RlOgpgYGBjCmlmIChlcnIpIHsKICAgIGlmIChlcnIgPT0gLUVBR0FJTikgewoJZXJyID0gMDsKCWNvbnRpbnVlOwogICAgfQogICAgYnJlYWs7Cn0KYGBgCgpUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZXJyID0gMDtgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBzaW1wbHkgYGNvbnRpbnVlYGQsIHdoaWNoIHNraXBwZWQgdGhlIGFkZHJlc3MgaW5jcmVtZW50LgoKTm93LCBsZXQmIzM5O3MgYmUgYWJzb2x1dGVseSBjbGVhcjogVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBUaGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykgb3IgcG1kIGVudHJpZXM7IGl0IGRvZXNuJiMzOTt0IHJlYWQgZnJvbSBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGl0c2VsZi4gVGhlIGNvcmUgaXNzdWUgaXMgYSBsb2dpYyBmbGF3OiBhIGxvb3AgY29udHJvbCB2YXJpYWJsZSBub3QgYmVpbmcgcmVzZXQsIGNhdXNpbmcgdGhlIHByb2Nlc3MgdG8gZW50ZXIgYSBzdGF0ZSB3aGVyZSBpdCBlbmRsZXNzbHkgcmV0cmllcyB0aGUgc2FtZSBvcGVyYXRpb24gd2l0aG91dCBtYWtpbmcgcHJvZ3Jlc3MuIEtBU0FOIG1pZ2h0IGNhdGNoIGl0IGlmIGl0IGNhdXNlcyBhIG1lbW9yeSBmYXVsdCwgYnV0IGl0JiMzOTtzIG1vcmUgbGlrZWx5IGEgc29mdCBsb2NrdXAgb3IgaW5jb3JyZWN0IHJldHVybiBjb2RlLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBidWcgaXMgYSBtYXR0ZXIgb2YgY29udHJvbCBmbG93LCBub3Qgb2YgdW5pbml0aWFsaXplZCByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrYWdlLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoLCB0aGVyZWZvcmUsIHJlbW92ZXMgYSBsb2dpYyBlcnJvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFdoZW4gYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgbG9vcCB1c2VzIGBjb250aW51ZWAgdG8gcmV0cnkgdGhlIHNhbWUgYWRkcmVzcy4gSG93ZXZlciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBub3QgcmVzZXQgdG8gMC4gSW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uLCBpZiB0aGUgbW92ZSBzdWNjZWVkcywgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIGFuZCByZW1haW5zIGAtRUFHQUlOYC4gVGhpcyBjYXVzZXMgdGhlIGxvb3AgdG8gaW5jb3JyZWN0bHkgYGNvbnRpbnVlYCBhZ2FpbiB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgYWRkcmVzc2VzIG9yIHRoZSBgbW92ZWRgIGNvdW50ZXIsIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgcGFnZSBtb3ZpbmcgYmVoYXZpb3IuXG5cblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFdoZW4gYSBwYWdlIG1vdmUgb3BlcmF0aW9uIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgbG9vcCB1c2VzIGBjb250aW51ZWAgdG8gcmV0cnkgdGhlIHNhbWUgYWRkcmVzcy4gSG93ZXZlciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBub3QgcmVzZXQgdG8gMC4gSW4gdGhlIHN1YnNlcXVlbnQgaXRlcmF0aW9uLCBpZiB0aGUgbW92ZSBzdWNjZWVkcywgYGVycmAgaXMgbm90IG92ZXJ3cml0dGVuIGFuZCByZW1haW5zIGAtRUFHQUlOYC4gVGhpcyBjYXVzZXMgdGhlIGxvb3AgdG8gaW5jb3JyZWN0bHkgYGNvbnRpbnVlYCBhZ2FpbiB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgYWRkcmVzc2VzIG9yIHRoZSBgbW92ZWRgIGNvdW50ZXIsIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgcGFnZSBtb3ZpbmcgYmVoYXZpb3IuXG5cblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzoyMi43NDAxMjc1NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMDg1MTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gICAgXCJzeXNfdXNlcmZhdWx0ZmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL3VzZXJmYXVsdGZkLmNgLiBXaGVuIGEgcGFnZSBtb3ZlIG9wZXJhdGlvbiByZXR1cm5zIGAtRUFHQUlOYCwgdGhlIGxvb3AgdXNlcyBgY29udGludWVgIHRvIHJldHJ5IHRoZSBzYW1lIGFkZHJlc3MuIEhvd2V2ZXIsIHRoZSBgZXJyYCB2YXJpYWJsZSB3YXMgbm90IHJlc2V0IHRvIDAuIEluIHRoZSBzdWJzZXF1ZW50IGl0ZXJhdGlvbiwgaWYgdGhlIG1vdmUgc3VjY2VlZHMsIGBlcnJgIGlzIG5vdCBvdmVyd3JpdHRlbiBhbmQgcmVtYWlucyBgLUVBR0FJTmAuIFRoaXMgY2F1c2VzIHRoZSBsb29wIHRvIGluY29ycmVjdGx5IGBjb250aW51ZWAgYWdhaW4gd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3NlcyBvciB0aGUgYG1vdmVkYCBjb3VudGVyLCBsZWFkaW5nIHRvIGFuIGluZmluaXRlIGxvb3Agb3IgaW5jb3JyZWN0IHBhZ2UgbW92aW5nIGJlaGF2aW9yLlxcblxcblRoaXMgaXMgYSBwdXJlIGNvbnRyb2wgZmxvdyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gb3Igc29mdCBsb2NrdXAgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcgKGUuZy4sIGluZmluaXRlIGxvb3BzIG9yIGNyYXNoZXMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHVzZXJmYXVsdGZkJ3MgbW92ZV9wYWdlcyBmdW5jdGlvbiB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcHJvcGVybHkgY2xlYXJlZCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcCwgcG90ZW50aWFsbHkgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmV0dXJuIC1FQUdBSU4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdXNlcmZhdWx0ZmQgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjIyLjc0MDEzMjY4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NjM2MzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDI6MDM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTIwODUsOCArMjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOKVxcbitcXHRcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjIzLjk5NzM1NTg4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2MTAxMTg1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgICBcInN5c191c2VyZmF1bHRmZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHVzZXJmYXVsdGZkJ3MgbW92ZV9wYWdlcyBmdW5jdGlvbiB3aGVyZSBhbiAtRUFHQUlOIGVycm9yIHdhcyBub3QgcHJvcGVybHkgY2xlYXJlZCBiZWZvcmUgY29udGludWluZyB0aGUgbG9vcCwgcG90ZW50aWFsbHkgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmV0dXJuIC1FQUdBSU4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdXNlcmZhdWx0ZmQgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEwZDdiZWU4MzEzOTU4NWZmOTI0MGUxMWJhNDIzYWI4YTZhZDI1ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMjowMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCBjM2FkZWRhYWY3ZDU0Li5lYzVkNTExYmQxNzkxIDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTIwODUsOCArMjA4NSwxMCBAQCBzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGlmIChlcnIgPT0gLUVBR0FJTilcbitcdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pIHtcbitcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjIzLjk5NzM1NzQwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDkxNzQ4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVXNlcmZhdWx0ZmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBtbS91c2VyZmF1bHRmZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIHJpZ2h0IGhlcmU6IGEgY29uZGl0aW9uYWwgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBJbml0aWFsbHksIGlmIGBlcnJgIHdhcyBgLUVBR0FJTmAsIHRoZSBjb2RlIHdvdWxkIGp1c3QgYmFpbCBvdXQgb2YgdGhlIGxvb3AuIE5vdywgaXQgZXhwbGljaXRseSByZXNldHMgYGVycmAgdG8gMCBhbmQgY29udGludWVzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQgYWx0ZXJzIHRoZSBwcm9ncmFtJ3MgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgdGhhdCBzcGVjaWZpYyBlcnJvciBjb2RlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoeT8gV2hhdCdzIHRoZSByYXRpb25hbGUgZm9yIGVzc2VudGlhbGx5IGlnbm9yaW5nIGAtRUFHQUlOYCBpbiB0aGlzIGNvbnRleHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtb3ZlX3BhZ2VzYCBhbmQgaG93IHVzZXJmYXVsdGZkIGludGVyYWN0cyB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsYXllciB0byBtYWtlIHNlbnNlIG9mIHRoaXMuIElzIGl0IHJlbGF0ZWQgdG8gcmV0cnlpbmcgYSBmYWlsZWQgcGFnZSBtb3ZlIGR1ZSB0byByZXNvdXJjZSBjb250ZW50aW9uPyBQZXJoYXBzIHRoaXMgaXMgYSBtaXRpZ2F0aW9uIGZvciB0cmFuc2llbnQgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3VzZXJmYXVsdGZkLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjI3LjgwNjUzNjE5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczNjEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz0xMzgyPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxNDE1OnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTQxNi1cXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xODU5PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxcbm1tL3VzZXJmYXVsdGZkLmM6MTg2ODogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2OS0gKiBAY3R4OiBwb2ludGVyIHRvIHRoZSB1c2VyZmF1bHRmZCBjb250ZXh0XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzYtICpcXG5tbS91c2VyZmF1bHRmZC5jOjE4Nzc6ICogbW92ZV9wYWdlcygpIHJlbWFwcyBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIGF0b21pY2FsbHkgaW4gemVyb1xcbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE4ODgtICogc3RvcmFnZSBvciBhbnkgb3RoZXIgSS9PIGRldmljZSAoTUFEVl9ET05URk9SSyBpbiB0aGUgc291cmNlIHZtYVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXFxubW0vdXNlcmZhdWx0ZmQuYzoxODkwOiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg5MS0gKiBwYWdlIGluIHRoZSBmYXVsdGluZyBhZGRyZXNzIGluIHRoZSBkZXN0aW5hdGlvbiB2bWEuXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MDUtICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTA2OiAqIG1vdmVfcGFnZXMoKSB3aWxsIGZhaWwgcmVzcGVjdGl2ZWx5IHdpdGggLUVOT0VOVCBvciAtRUVYSVNULiBUaGlzXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMC0gKiB0aW1lIGZvciBhbnkgZ2l2ZW4gZmF1bHRpbmcgYWRkcmVzcy4gVGhpcyBtZWFucyB0aGF0IGlmIHR3byB0aHJlYWRzXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTEyLSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcXG5tbS91c2VyZmF1bHRmZC5jOjE5MjE6ICogXFxcInNob3J0XFxcIiByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkyMi0gKiB1c2VybGFuZCB3aXRoIHNyYytyZXR2YWwsIGRzdCtyZXZhbCwgbGVuLXJldHZhbCBpZiBpdCB3YW50cyB0byBrbm93XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MzMtICovXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTM0OnN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVxcdFxcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTY6XFx0XFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNy1cXHRcXHQgKi9cXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0MS1cXHRcXHRcXHRcXHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDQyOlxcdFxcdFxcdFxcdC8qIFRoZSBmb2xpbyB3aWxsIGJlIHNwbGl0IGJ5IG1vdmVfcGFnZXNfcHRlKCkgKi9cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDQ2OlxcdFxcdFxcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA2OC1cXG5tbS91c2VyZmF1bHRmZC5jOjIwNjk6XFx0XFx0XFx0cmV0ID0gbW92ZV9wYWdlc19wdGVzKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cXHRcXHRcXHRcXHRcXHQgICAgICBkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfYWRkcixcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDIxNj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjU1LVxcdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jOjQyNTY6XFx0XFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1Ny1cXHRcXHRcXHRcXHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDM6MjcuODU0MjgwNTk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NTMyNzI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgYFVGRkRJT19NT1ZFYCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyBgbW92ZV9wYWdlc2AgaXMgbm93IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBieSBgdXNlcmZhdWx0ZmRfbW92ZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBgVUZGRElPX01PVkVgIGlvY3RsIHdvcmtzIGluIHVzZXJmYXVsdGZkLCBzbyBpdCdzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBmdW5jdGlvbmFsaXR5LiBJdCdzIGEga2V5IGNoYW5nZSwgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYWNyb3NzIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3MgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHVzZXJmYXVsdGZkIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSBpbiB0aGlzIHNjZW5hcmlvLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgc2V0IHVwIGZvciB0aGlzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjMwLjYxOTYxMDM4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM1ODgxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0VSRkFVTFRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg0PWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDM6MzIuMzU1NTAxMDg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2OTg4ODk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVzZXJmYXVsdGZkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIHdpdGggaXMgZGVmaW5pdGVseSB1c2luZyBgVVNFUkZBVUxURkRgLiBUaGF0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBNeSBwcmltYXJ5IGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24gYXJlIGNlbnRlcmVkIGFyb3VuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBwYWdlIG1pZ3JhdGlvbiB3aXRoIGB1c2VyZmF1bHRmZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdC4gVGhlIGtleSBzeW1ib2xzIEknbSBsb29raW5nIGZvciBhcmUgYG1vdmVfcGFnZXNgLCBgdXNlcmZhdWx0ZmRfbW92ZWAsIG9yIGB1c2VyZmF1bHRmZF9pb2N0bGAuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgcmVsZXZhbnQgY29udHJvbCBmbG93LiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzozNS4yMjUzOTE5OTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MDE4MjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3VzZXJmYXVsdGZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjM1LjI3MzMwMTI3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQyMTI4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBVc2VyZmF1bHRmZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGB1c2VyZmF1bHRmZF9pb2N0bGAgd29ya3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBpcyB0aGlzIGZ1bmN0aW9uIHJlYWxseSBkZWZpbmVkIGluIGBmcy91c2VyZmF1bHRmZC5jYD9cIiBUaGF0IHNlZW1zLi4ucG90ZW50aWFsbHkgb2ZmLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBjb3JlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24uIEl0ICpjb3VsZCogYmUgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgYm90aCBgbW0vdXNlcmZhdWx0ZmQuY2AgKHRoYXQncyB0aGUgbW9yZSBsaWtlbHkgbG9jYXRpb24sIGdpdmVuIHRoZSBuYXR1cmUgb2YgdXNlcmZhdWx0ZmQpIGFuZCB0aGVuIHRvIGNvbmZpcm0gb3IgZGVueSBpbiBgZnMvdXNlcmZhdWx0ZmQuY2AuIFRoZSBwb3RlbnRpYWwgZm9yIGEgbmFtaW5nIGNvbGxpc2lvbiwgb3IgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiBiZWluZyBpbXBsZW1lbnRlZCBlbHNld2hlcmUgYW5kIHRoZSBgZnNgIGRpcmVjdG9yeSBjb250YWluaW5nIGFuIGludGVyZmFjZSwgbWFrZXMgaXQgbmVjZXNzYXJ5IHRvIGNoZWNrIGJvdGggdG8gZW5zdXJlIEkgaGF2ZSB0aGUgcHJvcGVyIHJlZmVyZW5jZS4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzozOC42Njc1MTU3OThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY2MjQwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmZhdWx0ZmRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0yMTM0PXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjE4OS1cXHRcXHQgKiB1c2VyZmF1bHRmZF93cCgpIHZtYXMuICBCdXQgc2luY2UgdGhlIG1tYXBfbG9jayBpcyBub3QgaGVsZCxcXG5tbS9raHVnZXBhZ2VkLmM6MjE5MDpcXHRcXHQgKiBpdCBpcyBzdGlsbCBwb3NzaWJsZSBmb3IgYSByYWNpbmcgdXNlcmZhdWx0ZmRfaW9jdGwoKSBvclxcbm1tL2todWdlcGFnZWQuYy0yMTkxLVxcdFxcdCAqIG1hZHZpc2UoKSB0byBoYXZlIGluc2VydGVkIHB0ZXMgb3IgbWFya2Vycy4gIE5vdyB0aGF0IHdlIGhvbGRcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDI4Nj1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2FwaShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQzNDktXFxubW0vdXNlcmZhdWx0ZmQuYzo0MzUwOnN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy00MzUxLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00NDIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzZXJmYXVsdGZkX2ZvcHMgPSB7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ0MjgtXFx0LnJlYWRfaXRlclxcdD0gdXNlcmZhdWx0ZmRfcmVhZF9pdGVyLFxcbm1tL3VzZXJmYXVsdGZkLmM6NDQyOTpcXHQudW5sb2NrZWRfaW9jdGwgPSB1c2VyZmF1bHRmZF9pb2N0bCxcXG5tbS91c2VyZmF1bHRmZC5jLTQ0MzAtXFx0LmNvbXBhdF9pb2N0bFxcdD0gY29tcGF0X3B0cl9pb2N0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDM6NDAuNDQ0MTQ1NzUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTk0ODE0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdXNlcmZhdWx0ZmRfbW92ZWAgU3ltYm9sKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQsIHRoZSBvbmUgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLCB1c2VzIHRoZSBzeW1ib2wgYHVzZXJmYXVsdGZkX21vdmVgLiBXYWl0IGEgc2Vjb25k4oCmIGlzbid0IGBtb3ZlX3BhZ2VzYCBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbW0vdXNlcmZhdWx0ZmQuY2A/IFRoYXQncyByaW5naW5nIGEgYmVsbC4gVGhpcyBoYXMgbWUgdGhpbmtpbmc6IGlzIGB1c2VyZmF1bHRmZF9tb3ZlYCBhbHNvIGRlZmluZWQgYXMgc3RhdGljPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQgaGFzIGV4dGVybmFsIGxpbmthZ2Ugb3IgaXMgc2NvcGVkIHRvIGEgc3BlY2lmaWMgZmlsZS4gVGhhdCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB3aWxsIGJlIHByZXR0eSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGluIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjQzLjQ0MzYzMDIyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNTE2MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX21vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91c2VyZmF1bHRmZC5jPTQyMDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWZmZF9jdHhfZmVhdHVyZXMoX191NjQgdXNlcl9mZWF0dXJlcylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDIxNS1cXG5tbS91c2VyZmF1bHRmZC5jOjQyMTY6c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG5tbS91c2VyZmF1bHRmZC5jLTQyMTctXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MzUwPXN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQzNzgtXFx0Y2FzZSBVRkZESU9fTU9WRTpcXG5tbS91c2VyZmF1bHRmZC5jOjQzNzk6XFx0XFx0cmV0ID0gdXNlcmZhdWx0ZmRfbW92ZShjdHgsIGFyZyk7XFxubW0vdXNlcmZhdWx0ZmQuYy00MzgwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowMzo0NC4yODYxNTMxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTgwMTk4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgQVBJKipcblxuT2theSwgc28gYHVzZXJmYXVsdGZkX21vdmVgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0LiBOb3csIGxldCBtZSByZS1yZWFkIHRoYXQgZ3VpZGVsaW5l4oCmIEFoLCB0aGUgcHJlZmVyZW5jZSBpcyBmb3IgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBBUEkgZW50cnlwb2ludHMuIFRoYXQgd291bGQgZ2l2ZSB0aGVtIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIE9rYXksIHNvIHRoYXQgbWVhbnMgYHVzZXJmYXVsdGZkX2lvY3RsYCAqc2hvdWxkKiBiZSB0aGUgQVBJIGVudHJ5cG9pbnQgdGhlbiwgcmlnaHQ/IEl0J3MgdGhlIG9ubHkgb3RoZXIgb2J2aW91cyBjYW5kaWRhdGUuIExldCdzIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guIEhtbSwgbGV0IG1lIHNlZS4uLiBhbmQgeWVzLCBgc3RhdGljIGxvbmcgdXNlcmZhdWx0ZmRfaW9jdGwuLi5gIERhbW1pdCEgSXQncyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGdldCBmcnVzdHJhdGluZyEgU28sIGlmIG5vdCBgdXNlcmZhdWx0ZmRfaW9jdGxgLCB0aGVuIHRoZSBuZXh0IGxvZ2ljYWwgZW50cnkgcG9pbnQgbXVzdCBiZSB0aGUgc3lzY2FsbCBpdHNlbGYsIGBzeXNfdXNlcmZhdWx0ZmRgPyBUaGF0IGhhcyB0byBiZSBpdCwgSSBzdXBwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjUwLjI2NjM1NTAzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMDQzNzYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qdXNlcmZhdWx0ZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9NDQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDQ5OS1cXG5tbS91c2VyZmF1bHRmZC5jOjQ1MDA6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxcbm1tL3VzZXJmYXVsdGZkLmMtNDUwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjUyLjM3Njc5ODE5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTczMTMzMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdXNlcmZhdWx0ZmRgIHNpdHVhdGlvbi4gVGhlIGNvcmUgc3lzY2FsbCBpcyBjbGVhcmx5IGBzeXNfdXNlcmZhdWx0ZmRgLiBOb3csIHRoZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHdoZXJlIGlvY3RscyBhcmUgaGFuZGxlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIGl0J3MgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBzdGF0aWMgZmlsZSBvcGVyYXRpb24uIEhtbSwgaXQgaXNuJ3QuXG5cbkkganVzdCBkb3VibGUtY2hlY2tlZCwgYW5kIGBtb3ZlX3BhZ2VzYCBpcyBhbHNvIHN0YXRpYywgc28gbm8gbHVjayB0aGVyZS4gT2theSwgc28gZXZlbiB0aG91Z2ggYHVzZXJmYXVsdGZkX2lvY3RsYCBpcyBkZWNsYXJlZCBzdGF0aWMsIHRoZSBrZXJuZWwgYWN0dWFsbHkgdXNlcyBpdHMgYWRkcmVzcyB0aHJvdWdoIGB1c2VyZmF1bHRmZF9mb3BzYCwgc28gaXQncyAqbm90KiBpbmxpbmVkLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBzeXNfdXNlcmZhdWx0ZmRgIGFuZCBgdXNlcmZhdWx0ZmRfaW9jdGxgIHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24ndCBzb21lIG5vbi1zdGF0aWMgdmVyc2lvbiBJIG1pc3NlZC4gSSdsbCBhZGQgdGhlbSBib3RoIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGUgZ3VpZGFuY2UgaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIEJ1dCBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHN0YXRpYyAqYnV0KiBhbiBlbnRyeXBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gd2hhdCBpcyBhY3R1YWxseSBhdmFpbGFibGUuIFRoZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGNhbGwgaXMgYSBkaXJlY3QgZW50cnlwb2ludC4gQWxyaWdodCwgbGV0J3Mga2VlcCBpdC5cblxuTGV0J3MgcXVpY2tseSBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgaXQuIGBVU0VSRkFVTFRGRGAgaXMgdGhlIG1haW4gb25lLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjU3Ljk0OTkzNDQyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMzEwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjAzOjU3Ljk5NzI3MTc5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5MTg3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB3aXRoaW4gdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbi4gIEl0J3MgdHJpZ2dlcmVkIHRocm91Z2ggYSBjaGFpbjogYHVzZXJmYXVsdGZkX21vdmVgIGNhbGxzIGBtb3ZlX3BhZ2VzYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHVzZXJmYXVsdGZkX2lvY3RsYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGZpeCB3aXRoaW4gYW4gZXJyb3IgaGFuZGxpbmcgYmxvY2suIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNpdHVhdGlvbiB3aGVyZSBgbW92ZV9wYWdlc2Agd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBgLUVBR0FJTmAgaW4gY2VydGFpbiBzY2VuYXJpb3MuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgZGlkbid0IHJlc2V0IHRoZSBgZXJyYCB2YXJpYWJsZSB0byAwIHdoZW4gYW4gYC1FQUdBSU5gIHdhcyBlbmNvdW50ZXJlZCwgdGh1cyBzaG9ydC1jaXJjdWl0aW5nIHRoZSBleHBlY3RlZCByZXRyeS9jb250aW51ZSBiZWhhdmlvci4gVGhlIHBhdGNoIG5vdyBleHBsaWNpdGx5IHJlc2V0cyBgZXJyYCB0byAwIGluIHRoYXQgYC1FQUdBSU5gIGNvbmRpdGlvbiwgYWxsb3dpbmcgdGhlIGxvb3AgdG8gY29udGludWUgYW5kIHBvdGVudGlhbGx5IHJldHVybiBhIG1vcmUgYXBwcm9wcmlhdGUgcmVzdWx0IGxhdGVyLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjb3JyZWN0aW9uIGF0IHRoZSBrZXJuZWwncyBjb3JlIHdpdGhpbiB0aGUgYHVzZXJmYXVsdGZkYCBzdWJzeXN0ZW0sIHdoaWNoIGlzIHNpZ25pZmljYW50LiBTaW5jZSBpdCdzIHJlYWNoYWJsZSBjb2RlLCBhbmQgZ2l2ZW4gaXRzIGRpcmVjdCBpbXBhY3Qgb24gZnVuY3Rpb25hbGl0eSwgaXQgYWJzb2x1dGVseSB3YXJyYW50cyBmdXJ0aGVyIGZ1enppbmcgYW5kIGRldGFpbGVkIGFuYWx5c2lzLiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgc2hvdWxkIGZvY3VzIG9uIGhlcmUsIHNpbmNlIGl0IGlzIHRoZSByb290IG9mIHRoZSBjYWxsIGNoYWluIGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgdGhlIGBVU0VSRkFVTFRGRGAgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyIGludG8gdGVzdGluZy4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgbWlnaHQgaW5mb3JtIG15IGZ1enppbmcgc3RyYXRlZ3kgb3IgdW5jb3ZlciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIG90aGVyIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6MDIuNDU2NDY2MDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxODAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUkZBVUxURkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODQ9Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbi0tXFxubW0vS2NvbmZpZy0xMzg4LVxcbm1tL0tjb25maWc6MTM4OTptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzkwLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDowMi41MDQyOTE0MjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MzY4MzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgdGhvdWdodHMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgVVNFUkZBVUxURkQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBVU0VSRkFVTFRGRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbid0IGp1c3QgYSBzdXJmYWNlLWxldmVsIGZlYXR1cmU7IGl0J3MgbGlrZWx5IGludGVyd292ZW4gd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgdXNlci1zcGFjZSBsaWJyYXJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVsaWVzIG9uIGl0IGFuZCwgY3J1Y2lhbGx5LCB3aGF0ICppdCogcmVsaWVzIG9uLiBUaGlzIG1lYW5zIHRyYWNpbmcgdGhlIGNhbGwgcGF0aHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29yZSBLZXJuZWwgTW9kdWxlczoqKiBJcyBgVVNFUkZBVUxURkRgIHByaW1hcmlseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0cnVjdCwgb3IgZG9lcyBpdCB0b3VjaCBvbiBpbnRlcnJ1cHQgaGFuZGxpbmcsIHRhc2sgc2NoZWR1bGluZywgb3IgZXZlbiB0aGUgbmV0d29ya2luZyBzdGFjaz8gVW5kZXJzdGFuZGluZyB0aGVzZSBpbnRlcmFjdGlvbnMgaXMga2V5IHRvIGFzc2Vzc2luZyBpdHMgaW1wYWN0LlxuKiAgICoqVXNlci1TcGFjZSBMaWJyYXJpZXM6KiogV2hhdCB1c2VyLXNwYWNlIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIGFyZSBsZXZlcmFnaW5nIHRoaXM/IFdoYXQgQVBJcyBhcmUgZXhwb3NlZCwgYW5kIGhvdyBhcmUgdGhleSB1c2VkPyBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLlxuKiAgICoqVmVyc2lvbiBDb21wYXRpYmlsaXR5OioqIEhvdyBoYXMgYFVTRVJGQVVMVEZEYCBldm9sdmVkIG92ZXIgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucz8gV2hhdCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zIGFyZSB0aGVyZT8gQW55IGRlcHJlY2F0aW9uIG5vdGljZXM/XG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmU/IEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIG9yIGF0dGFjayB2ZWN0b3JzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGFuZCB3aWxsIEkgbmVlZCB0byB0ZXN0IGFueSBlZGdlIGNhc2VzP1xuKiAgICoqVGVzdGluZyBhbmQgVmFsaWRhdGlvbjoqKiBXaGF0IHRlc3RzIGFyZSBhbHJlYWR5IGluIHBsYWNlLCBhbmQgd2hhdCB0ZXN0cyBtaWdodCBJIG5lZWQgdG8gcGVyZm9ybSB0byBlbnN1cmUgdGhhdCBpdCdzIGZ1bmN0aW9uaW5nIGFzIGl0IHNob3VsZCBiZT8gSSBhbSB0aGlua2luZyBvZiB2YXJpb3VzIHRlc3Qgc2NlbmFyaW9zIEkgY2FuIGVtcGxveSB0byBwZXJmb3JtIGEgdGhvcm91Z2ggcmV2aWV3LlxuXG5NeSBnb2FsIGlzIHRvIGNyZWF0ZSBhIG1lbnRhbCBtYXAgb2YgaG93IGBVU0VSRkFVTFRGRGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSBpdHMgcm9sZSBhcyBhbiBlbmFibGVyIGFuZCBhbiBvYnN0YWNsZSB0byBleGlzdGluZyBmdW5jdGlvbmFsaXR5LiBXaXRoIHRoaXMgZm91bmRhdGlvbiwgSSBjYW4gdGhlbiBmb3JtdWxhdGUgYSBtb3JlIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVzaWduIGFuZCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDowNi4zOTc5NzczMTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM4OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM4OTpcXHRtZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxuMTM5MDpcXHRcXHRib29sIFxcXCJFbmFibGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbFxcXCJcXG4xMzkxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTM5MjpcXHRcXHRoZWxwXFxuMTM5MzpcXHRcXHQgIEVuYWJsZSB0aGUgdXNlcmZhdWx0ZmQoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBpbnRlcmNlcHQgYW5kXFxuMTM5NDpcXHRcXHQgIGhhbmRsZSBwYWdlIGZhdWx0cyBpbiB1c2VybGFuZC5cXG4xMzk1OlxcdFxcbjEzOTY6XFx0aWYgVVNFUkZBVUxURkRcXG4xMzk3OlxcdGNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4xMzk4OlxcdFxcdGJvb2wgXFxcIlVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXFxcIlxcbjEzOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTQwMDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRoZWxwXFxuMTQwMzpcXHRcXHQgIEFsbG93cyB0byBjcmVhdGUgbWFya2VyIFBURXMgZm9yIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb25cXG4xNDA0OlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjE0MDU6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjE0MDY6XFx0ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbjE0MDc6XFx0XFxuMTQwODpcXHQjIG11bHRpLWdlbiBMUlUge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDowNi4zOTgxMDk2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIxNTYwNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNpbXBsaWZ5aW5nIHRoZSBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBjdXQgdGhyb3VnaCB0aGUgbm9pc2UuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGhlcmUgYXJlIHJlYWxseSBqdXN0IHRoZSBgTU1VYC4gRXZlcnl0aGluZyBlbHNlIGlzIGVpdGhlciBpbXBsaWNpdGx5IGhhbmRsZWQgb3IgaXJyZWxldmFudCB0byB0aGUgaW1tZWRpYXRlIGNvbmNlcm4uIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBmcm9tIGEgY29uZmlndXJhdGlvbiBzdGFuZHBvaW50LCBgVVNFUkZBVUxURkRgIGlzIHRoZSBvbmx5IGl0ZW0gb24gdGhlIGNoZWNrbGlzdCB0aGF0IGhhcyBhbnkgYmVhcmluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoYXQncyBnb29kLCBpdCBzdHJlYW1saW5lcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBJIGxpa2UgdGhlIGNsYXJpdHkuIE5vdywgSSdsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkZXBlbmRlbmN5IG9uIGBVU0VSRkFVTFRGRGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMzIsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxMC4wMTk2NzMzMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg2MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2VyZmF1bHRmZF9pb2N0bFwiLFxuICAgIFwic3lzX3VzZXJmYXVsdGZkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdXNlcmZhdWx0ZmQncyBtb3ZlX3BhZ2VzIGZ1bmN0aW9uIHdoZXJlIGFuIC1FQUdBSU4gZXJyb3Igd2FzIG5vdCBwcm9wZXJseSBjbGVhcmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSBsb29wLCBwb3RlbnRpYWxseSBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXR1cm4gLUVBR0FJTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB1c2VyZmF1bHRmZCBpb2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gICAgXCJzeXNfdXNlcmZhdWx0ZmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB1c2VyZmF1bHRmZCdzIG1vdmVfcGFnZXMgZnVuY3Rpb24gd2hlcmUgYW4gLUVBR0FJTiBlcnJvciB3YXMgbm90IHByb3Blcmx5IGNsZWFyZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGxvb3AsIHBvdGVudGlhbGx5IGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJldHVybiAtRUFHQUlOLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHVzZXJmYXVsdGZkIGlvY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxMC4wOTg1NDYwMjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjcyNDIyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6MTAuMDk5MTMzNjkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyNjcxODI5NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cXG5cXG5UaGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnIChlLmcuLCBpbmZpbml0ZSBsb29wcyBvciBjcmFzaGVzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMGQ3YmVlODMxMzk1ODVmZjkyNDBlMTFiYTQyM2FiOGE2YWQyNWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDI6MDM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggYzNhZGVkYWFmN2Q1NC4uZWM1ZDUxMWJkMTc5MSAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0yMDg1LDggKzIwODUsMTAgQEAgc3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4rXHRcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxMC4wOTkxMzQzNjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5OTU4ODE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBVc2VyZmF1bHRmZCBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0J3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGBtb3ZlX3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGZpeGluZyBhIGJ1ZyByZWxhdGVkIHRvIGhvdyBgbW92ZV9wYWdlc2AgaGFuZGxlcyBgLUVBR0FJTmAgZXJyb3JzLiBMZXQgbWUgcGFyc2UgdGhpczpcblxuVGhlIGNvZGUgb3JpZ2luYWxseSBsb29rZWQgbGlrZSB0aGlzOlxuXG5gYGBjXG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4rXHRcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5gYGBcblxuVGhlIHBhdGNoIG1vZGlmaWVzIGl0IGJ5IHNldHRpbmcgYGVyciA9IDBgICpiZWZvcmUqIHRoZSBgY29udGludWVgLiBIbW0sIGxldCBtZSB0aGluayBhYm91dCB0aGlzLi4uIGBtb3ZlX3BhZ2VzYCBpcyByZXNwb25zaWJsZSBmb3IgbW92aW5nIHBhZ2VzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG9wZXJhdGluZyB3aXRoaW4gc29tZSBraW5kIG9mIGxvb3AuIElmIGBlcnJgIGlzIGAtRUFHQUlOYCwgaXQgbWVhbnMgdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcmV0cmllZCBsYXRlci4gVGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgaWYgdGhhdCBgZXJyID0gMGAgd2FzIG5vdCBwcmVzZW50IGFuZCBgLUVBR0FJTmAgb2NjdXJyZWQsIGFuZCB0aGUgbG9vcCBpdGVyYXRlZCwgYGVycmAgd291bGQgYmUgdW5kZWZpbmVkLCBhbmQgdGhlIHByZXZpb3VzIHZhbHVlIG9mIGBlcnJgIHdvdWxkIGJlIHJldHVybmVkLlxuXG5Tbywgd2l0aG91dCB0aGUgYGVyciA9IDBgLCBpZiBgLUVBR0FJTmAgd2FzIGVuY291bnRlcmVkLCB0aGUgbG9vcCB3b3VsZCBjb250aW51ZSwgcHJlc3VtYWJseSB0byByZXRyeSB0aGUgcGFnZSBtb3ZlLiBCdXQsIGlmIHRoZSBsb29wICp0aGVuKiB0ZXJtaW5hdGVkIGZvciBzb21lICpvdGhlciogcmVhc29uLCB0aGUgZnVuY3Rpb24gbWlnaHQgcmV0dXJuIHRoYXQgb3JpZ2luYWwgYC1FQUdBSU5gIGVycm9yLCBvciBzb21lIG90aGVyIGVycm9yLCB3aGljaCBpcyBpbmNvcnJlY3QuIFdpdGggdGhlIGFkZGVkIGBlcnIgPSAwYCwgaXQgbWVhbnMgdGhhdCBpZiB0aGUgb3BlcmF0aW9uIGlzIHJldHJpZWQsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gYC1FQUdBSU5gIGlmIHRoZSByZXRyeSBmYWlscyBiZWNhdXNlIG9mIHNvbWUgb3RoZXIgcmVhc29uIC0gaXQgd2lsbCBvbmx5IHJldHVybiBhbiBlcnJvciBmb3Igc29tZSBvdGhlciByZWFzb24uIFRodXMsIGl0IGVuc3VyZXMgdGhhdCBgLUVBR0FJTmAgb25seSBtZWFucyBcInRyeSBhZ2FpbiBsYXRlclwiLlxuXG5MZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgYG1vdmVfcGFnZXNgIGltcGxlbWVudGF0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYCBqdXN0IHRvIGJlIHN1cmUsIGFuZCBzZWUgaWYgSSBjYW4gY29uZmlybSBteSBtZW50YWwgbW9kZWwgb2YgaXRzIG9wZXJhdGlvbmFsIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjA0OjE1Ljg5ODcyNTU1MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjM4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTY9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1NS1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU2OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNTctXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjA0OjE1Ljk0NTc5NTgwNloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU1ODM4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc2AgaW4gYG1tL3VzZXJmYXVsdGZkLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtb3ZlX3BhZ2VzYCBpcyBoYW5kbGluZyB0aGluZ3MgaW4gdGhlIGNvbnRleHQgb2YgdXNlcmZhdWx0ZmQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyB3ZSBtYW5hZ2UgcGFnZSBtaWdyYXRpb24gYW5kIHRyYW5zZmVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgbWVtb3J5IGFjY2VzcyBmYXVsdHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgb3JjaGVzdHJhdGVzIHRoaXMgd2hvbGUgZGFuY2UgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIGB1c2VyZmF1bHRmZGAgYW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEhvdyBkb2VzIGl0IGtub3cgd2hlcmUgcGFnZXMgYXJlLCBhbmQgaG93IGRvZXMgaXQgZGlyZWN0IHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvPyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBkZWxpY2F0ZSBiYWxhbmNpbmcgYWN0IGhlcmUsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IHdoaWxlIG1pbmltaXppbmcgdGhlIHBlcmZvcm1hbmNlIGhpdCBvZiBwYWdlIGZhdWx0cy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRvIGl0LiBJJ20gbG9va2luZyBmb3IgdGhlIGtleSBsb2NraW5nIHByaW1pdGl2ZXMsIGVycm9yIGhhbmRsaW5nIHBhdGhzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgZmxvdy4gVGhpcyBjb3VsZCBnaXZlIG1lIHNvbWUgZ3JlYXQgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoxOC45MDE2Mzc2NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MzQ6XFx0c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbjE5MzU6XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLCBfX3U2NCBtb2RlKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdHgtXFx1MDAzZW1tO1xcbjE5Mzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLCAqZHN0X3ZtYTtcXG4xOTM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjX2FkZHIsIGRzdF9hZGRyLCBzcmNfZW5kO1xcbjE5NDA6XFx0XFx0cG1kX3QgKnNyY19wbWQsICpkc3RfcG1kO1xcbjE5NDE6XFx0XFx0bG9uZyBlcnIgPSAtRUlOVkFMO1xcbjE5NDI6XFx0XFx0c3NpemVfdCBtb3ZlZCA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIFNhbml0aXplIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMuICovXFxuMTk0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uoc3JjX3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0X3N0YXJ0IFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UobGVuIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdC8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi9cXG4xOTUwOlxcdFxcdFZNX1dBUk5fT05fT05DRShzcmNfc3RhcnQgKyBsZW4gXFx1MDAzYyBzcmNfc3RhcnQpO1xcbjE5NTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGRzdF9zdGFydCArIGxlbiBcXHUwMDNjIGRzdF9zdGFydCk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdGVyciA9IHVmZmRfbW92ZV9sb2NrKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgXFx1MDAyNmRzdF92bWEsIFxcdTAwMjZzcmNfdm1hKTtcXG4xOTU0OlxcdFxcdGlmIChlcnIpXFxuMTk1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0LyogUmUtY2hlY2sgYWZ0ZXIgdGFraW5nIG1hcF9jaGFuZ2luZ19sb2NrICovXFxuMTk1ODpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjE5NTk6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZW1hcF9jaGFuZ2luZ19sb2NrKTtcXG4xOTYwOlxcdFxcdGlmIChsaWtlbHkoYXRvbWljX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbW1hcF9jaGFuZ2luZykpKVxcbjE5NjE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NjI6XFx0XFx0LypcXG4xOTYzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgdm1hIGlzIG5vdCBzaGFyZWQsIHRoYXQgdGhlIHNyYyBhbmQgZHN0IHJlbWFwXFxuMTk2NDpcXHRcXHQgKiByYW5nZXMgYXJlIGJvdGggdmFsaWQgYW5kIGZ1bGx5IHdpdGhpbiBhIHNpbmdsZSBleGlzdGluZ1xcbjE5NjU6XFx0XFx0ICogdm1hLlxcbjE5NjY6XFx0XFx0ICovXFxuMTk2NzpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE5Njg6XFx0XFx0aWYgKHNyY192bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5Njk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzA6XFx0XFx0aWYgKHNyY19zdGFydCArIGxlbiBcXHUwMDNlIHNyY192bWEtXFx1MDAzZXZtX2VuZClcXG4xOTcxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0aWYgKGRzdF92bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKVxcbjE5NzQ6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE5NzU6XFx0XFx0aWYgKGRzdF9zdGFydCArIGxlbiBcXHUwMDNlIGRzdF92bWEtXFx1MDAzZXZtX2VuZClcXG4xOTc2OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0ZXJyID0gdmFsaWRhdGVfbW92ZV9hcmVhcyhjdHgsIHNyY192bWEsIGRzdF92bWEpO1xcbjE5Nzk6XFx0XFx0aWYgKGVycilcXG4xOTgwOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xOTgxOlxcdFxcbjE5ODI6XFx0XFx0Zm9yIChzcmNfYWRkciA9IHNyY19zdGFydCwgZHN0X2FkZHIgPSBkc3Rfc3RhcnQsIHNyY19lbmQgPSBzcmNfc3RhcnQgKyBsZW47XFxuMTk4MzpcXHRcXHQgICAgIHNyY19hZGRyIFxcdTAwM2Mgc3JjX2VuZDspIHtcXG4xOTg0OlxcdFxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4xOTg1OlxcdFxcdFxcdHBtZF90IGRzdF9wbWR2YWw7XFxuMTk4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0ZXBfc2l6ZTtcXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0XFx0LypcXG4xOTg5OlxcdFxcdFxcdCAqIEJlbG93IHdvcmtzIGJlY2F1c2UgYW5vbnltb3VzIGFyZWEgd291bGQgbm90IGhhdmUgYVxcbjE5OTA6XFx0XFx0XFx0ICogdHJhbnNwYXJlbnQgaHVnZSBQVUQuIElmIGZpbGUtYmFja2VkIHN1cHBvcnQgaXMgYWRkZWQsXFxuMTk5MTpcXHRcXHRcXHQgKiB0aGF0IGNhc2Ugd291bGQgbmVlZCB0byBiZSBoYW5kbGVkIGhlcmUuXFxuMTk5MjpcXHRcXHRcXHQgKi9cXG4xOTkzOlxcdFxcdFxcdHNyY19wbWQgPSBtbV9maW5kX3BtZChtbSwgc3JjX2FkZHIpO1xcbjE5OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjE5OTU6XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjE5OTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4xOTk3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5OTg6XFx0XFx0XFx0XFx0fVxcbjE5OTk6XFx0XFx0XFx0XFx0c3JjX3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgc3JjX2FkZHIpO1xcbjIwMDA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFzcmNfcG1kKSkge1xcbjIwMDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDAyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDM6XFx0XFx0XFx0XFx0fVxcbjIwMDQ6XFx0XFx0XFx0fVxcbjIwMDU6XFx0XFx0XFx0ZHN0X3BtZCA9IG1tX2FsbG9jX3BtZChtbSwgZHN0X2FkZHIpO1xcbjIwMDY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFkc3RfcG1kKSkge1xcbjIwMDc6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yMDA4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMDk6XFx0XFx0XFx0fVxcbjIwMTA6XFx0XFxuMjAxMTpcXHRcXHRcXHRkc3RfcG1kdmFsID0gcG1kcF9nZXRfbG9ja2xlc3MoZHN0X3BtZCk7XFxuMjAxMjpcXHRcXHRcXHQvKlxcbjIwMTM6XFx0XFx0XFx0ICogSWYgdGhlIGRzdF9wbWQgaXMgbWFwcGVkIGFzIFRIUCBkb24ndCBvdmVycmlkZSBpdCBhbmQganVzdFxcbjIwMTQ6XFx0XFx0XFx0ICogYmUgc3RyaWN0LiBJZiBkc3RfcG1kIGNoYW5nZXMgaW50byBUUEggYWZ0ZXIgdGhpcyBjaGVjaywgdGhlXFxuMjAxNTpcXHRcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG4yMDE2OlxcdFxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4yMDE3OlxcdFxcdFxcdCAqL1xcbjIwMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKGRzdF9wbWR2YWwpKSkge1xcbjIwMTk6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDIwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMjE6XFx0XFx0XFx0fVxcbjIwMjI6XFx0XFxuMjAyMzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHNyY19wbWQsIHNyY192bWEpO1xcbjIwMjQ6XFx0XFx0XFx0aWYgKHB0bCkge1xcbjIwMjU6XFx0XFx0XFx0XFx0LyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIHBtZCB3aXRob3V0IHNwbGl0dGluZyBpdC4gKi9cXG4yMDI2OlxcdFxcdFxcdFxcdGlmIChtb3ZlX3NwbGl0c19odWdlX3BtZChkc3RfYWRkciwgc3JjX2FkZHIsIHNyY19zdGFydCArIGxlbikgfHxcXG4yMDI3OlxcdFxcdFxcdFxcdCAgICAhcG1kX25vbmUoZHN0X3BtZHZhbCkpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdFxcdC8qIENhbiBiZSBhIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbjIwMjk6XFx0XFx0XFx0XFx0XFx0aWYgKHBtZF9wcmVzZW50KCpzcmNfcG1kKSkge1xcbjIwMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBtZF9mb2xpbygqc3JjX3BtZCk7XFxuMjAzMTpcXHRcXG4yMDMyOlxcdFxcdFxcdFxcdFxcdFxcdGlmICghaXNfaHVnZV96ZXJvX2ZvbGlvKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbjIwMzM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFQYWdlQW5vbkV4Y2x1c2l2ZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAyOjA0OjE4LjkwMTk0NTA0NloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA1MTM1ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBOZXh0IFN0ZXBzIGluIGBtb3ZlX3BhZ2VzYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbW92ZV9wYWdlc2AgZnVuY3Rpb24uIFdlJ3ZlIGdvdCBhIHNwZWNpZmljIHRhc2sgaW4gbWluZCAod2hhdGV2ZXIgdGhlIGxhcmdlciBjb250ZXh0IGRpY3RhdGVzKSwgYW5kIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBpdm90YWwgdG8gYWNjb21wbGlzaGluZyBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb25cIi4gSSdtIG5vdCBzdG9wcGluZyB0byByZWZsZWN0IG9uIGFueXRoaW5nIGVsc2UsIGp1c3Qgd2hhdCdzIG5leHQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIG9wZXJhdGlvbmFsIGRldGFpbHMsIGlkZW50aWZ5IGhvdyBpdCB3aWxsIGZpdCBpbnRvIHRoZSB3aWRlciBzY29wZSwgYW5kIGRldGVybWluZSB3aGF0IHdlIHdpbGwgYmUgZG9pbmcsIGFuZCBob3cgd2Ugd2lsbCBiZSBkb2luZyBpdC4gVGhlIHJlc3Qgb2YgdGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbiBtdXN0IGJlIHVuZGVyc3Rvb2QgaWYgd2UgYXJlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbGFyZ2VyIHN0cnVjdHVyZSByZXF1aXJlcyBvZiB1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYXQgdGhlIGltcGxlbWVudGF0aW9uIGxldmVsIG5vdy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMjowNDoyMS45MDcwODMzNzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3VzZXJmYXVsdGZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4yMDM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4yMDM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwMzc6XFx0XFx0XFx0XFx0XFx0XFx0fVxcbjIwMzg6XFx0XFx0XFx0XFx0XFx0fVxcbjIwMzk6XFx0XFxuMjA0MDpcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbjIwNDE6XFx0XFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbjIwNDI6XFx0XFx0XFx0XFx0XFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xcbjIwNDM6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjA0NDpcXHRcXHRcXHRcXHR9XFxuMjA0NTpcXHRcXG4yMDQ2OlxcdFxcdFxcdFxcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxuMjA0NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuMjA0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9hZGRyLCBzcmNfYWRkcik7XFxuMjA0OTpcXHRcXHRcXHRcXHRzdGVwX3NpemUgPSBIUEFHRV9QTURfU0laRTtcXG4yMDUwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjA1MTpcXHRcXHRcXHRcXHRsb25nIHJldDtcXG4yMDUyOlxcdFxcbjIwNTM6XFx0XFx0XFx0XFx0aWYgKHBtZF9ub25lKCpzcmNfcG1kKSkge1xcbjIwNTQ6XFx0XFx0XFx0XFx0XFx0aWYgKCEobW9kZSBcXHUwMDI2IFVGRkRJT19NT1ZFX01PREVfQUxMT1dfU1JDX0hPTEVTKSkge1xcbjIwNTU6XFx0XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4yMDU2OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNTc6XFx0XFx0XFx0XFx0XFx0fVxcbjIwNTg6XFx0XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KF9fcHRlX2FsbG9jKG1tLCBzcmNfcG1kKSkpIHtcXG4yMDU5OlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjA2MDpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMDYxOlxcdFxcdFxcdFxcdFxcdH1cXG4yMDYyOlxcdFxcdFxcdFxcdH1cXG4yMDYzOlxcdFxcbjIwNjQ6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHB0ZV9hbGxvYyhtbSwgZHN0X3BtZCkpKSB7XFxuMjA2NTpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjIwNjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA2NzpcXHRcXHRcXHRcXHR9XFxuMjA2ODpcXHRcXG4yMDY5OlxcdFxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG4yMDcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxcbjIwNzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3JjX2FkZHIsIHNyY19lbmQgLSBzcmNfYWRkciwgbW9kZSk7XFxuMjA3MjpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yMDczOlxcdFxcdFxcdFxcdFxcdGVyciA9IHJldDtcXG4yMDc0OlxcdFxcdFxcdFxcdGVsc2VcXG4yMDc1OlxcdFxcdFxcdFxcdFxcdHN0ZXBfc2l6ZSA9IHJldDtcXG4yMDc2OlxcdFxcdFxcdH1cXG4yMDc3OlxcdFxcbjIwNzg6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjA3OTpcXHRcXG4yMDgwOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjIwODE6XFx0XFx0XFx0XFx0LyogRG8gbm90IG92ZXJyaWRlIGFuIGVycm9yICovXFxuMjA4MjpcXHRcXHRcXHRcXHRpZiAoIWVyciB8fCBlcnIgPT0gLUVBR0FJTilcXG4yMDgzOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FSU5UUjtcXG4yMDg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwODU6XFx0XFx0XFx0fVxcbjIwODY6XFx0XFxuMjA4NzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjA4ODpcXHRcXHRcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcXG4yMDg5OlxcdFxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMjA5MDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMDkxOlxcdFxcdFxcdFxcdH1cXG4yMDkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwOTM6XFx0XFx0XFx0fVxcbjIwOTQ6XFx0XFxuMjA5NTpcXHRcXHRcXHQvKiBQcm9jZWVkIHRvIHRoZSBuZXh0IHBhZ2UgKi9cXG4yMDk2OlxcdFxcdFxcdGRzdF9hZGRyICs9IHN0ZXBfc2l6ZTtcXG4yMDk3OlxcdFxcdFxcdHNyY19hZGRyICs9IHN0ZXBfc2l6ZTtcXG4yMDk4OlxcdFxcdFxcdG1vdmVkICs9IHN0ZXBfc2l6ZTtcXG4yMDk5OlxcdFxcdH1cXG4yMTAwOlxcdFxcbjIxMDE6XFx0b3V0X3VubG9jazpcXG4yMTAyOlxcdFxcdHVwX3JlYWQoXFx1MDAyNmN0eC1cXHUwMDNlbWFwX2NoYW5naW5nX2xvY2spO1xcbjIxMDM6XFx0XFx0dWZmZF9tb3ZlX3VubG9jayhkc3Rfdm1hLCBzcmNfdm1hKTtcXG4yMTA0OlxcdG91dDpcXG4yMTA1OlxcdFxcdFZNX1dBUk5fT05fT05DRShtb3ZlZCBcXHUwMDNjIDApO1xcbjIxMDY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGVyciBcXHUwMDNlIDApO1xcbjIxMDc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtb3ZlZCBcXHUwMDI2XFx1MDAyNiAhZXJyKTtcXG4yMTA4OlxcdFxcdHJldHVybiBtb3ZlZCA/IG1vdmVkIDogZXJyO1xcbjIxMDk6XFx0fVxcbjIxMTA6XFx0XFxuMjExMTpcXHRzdGF0aWMgYm9vbCB2bWFfY2FuX3VzZXJmYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4yMTEyOlxcdFxcdFxcdCAgICAgICBib29sIHdwX2FzeW5jKVxcbjIxMTM6XFx0e1xcbjIxMTQ6XFx0XFx0Y29uc3Qgc3RydWN0IHZtX3VmZmRfb3BzICpvcHMgPSB2bWFfdWZmZF9vcHModm1hKTtcXG4yMTE1OlxcdFxcbjIxMTY6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fRFJPUFBBQkxFIHwgVk1fU0hBRE9XX1NUQUNLKSlcXG4yMTE3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTE4OlxcdFxcbjIxMTk6XFx0XFx0aWYgKCFpc192bV9odWdldGxiX3BhZ2Uodm1hKSBcXHUwMDI2XFx1MDAyNiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpKVxcbjIxMjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRcXHR2bV9mbGFncyBcXHUwMDI2PSBfX1ZNX1VGRkRfRkxBR1M7XFxuMjEyMzpcXHRcXG4yMTI0OlxcdFxcdC8qXFxuMjEyNTpcXHRcXHQgKiBJZiBXUCBpcyB0aGUgb25seSBtb2RlIGVuYWJsZWQgYW5kIGNvbnRleHQgaXMgd3AgYXN5bmMsIGFsbG93IGFueVxcbjIxMjY6XFx0XFx0ICogbWVtb3J5IHR5cGUuXFxuMjEyNzpcXHRcXHQgKi9cXG4yMTI4OlxcdFxcdGlmICh3cF9hc3luYyBcXHUwMDI2XFx1MDAyNiAodm1fZmxhZ3MgPT0gVk1fVUZGRF9XUCkpXFxuMjEyOTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yMTMwOlxcdFxcbjIxMzE6XFx0XFx0LyogRm9yIGFueSBvdGhlciBtb2RlIHJlamVjdCBWTUFzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHZtX3VmZmRfb3BzICovXFxuMjEzMjpcXHRcXHRpZiAoIW9wcylcXG4yMTMzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6MjEuOTA3OTg5NjIxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwODYyOTQ4MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgbW92ZV9wYWdlc2AgYC1FQUdBSU5gIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29udHJvbC1mbG93IGlzc3VlIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgYC1FQUdBSU5gIGVycm9ycyByZXR1cm5lZCBieSB0aGUgbG93ZXItbGV2ZWwgcGFnZS1tb3ZpbmcgZnVuY3Rpb25zIChgbW92ZV9wYWdlc19wdGVzYCwgYG1vdmVfcGFnZXNfaHVnZV9wbWRgKS4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGNlbnRlcnMgYXJvdW5kIHRoZSBwZXJzaXN0ZW50IHN0YXRlIG9mIHRoZSBgZXJyYCB2YXJpYWJsZSB3aXRoaW4gdGhlIG1haW4gbG9vcC5cblxuVGhlIGJ1ZyBpcyB0aGF0IHdoZW4gYSBjYWxsIHRvIGBtb3ZlX3BhZ2VzX3B0ZXNgIChvciBpdHMgcG1kIGVxdWl2YWxlbnQpIHJldHVybnMgYC1FQUdBSU5gLCB0aGUgaW50ZW50aW9uIGlzIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gb24gdGhlICpzYW1lKiBtZW1vcnkgcmVnaW9uIGluIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSdzIGZsYXcgbGllcyBpbiB0aGUgZmFjdCB0aGF0IGl0IGRvZXNuJ3QgY2xlYXIgdGhlIGBlcnJgIHZhcmlhYmxlIHdoZW4gaXQgZW5jb3VudGVycyBgLUVBR0FJTmAgYW5kIHByb2NlZWRzIHRvIGBjb250aW51ZWAgdGhlIGxvb3AuIFNvLCBpZiB0aGUgc3Vic2VxdWVudCBhdHRlbXB0IHN1Y2NlZWRzLCB0aGUgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gZG9lc24ndCBvdmVyd3JpdGUgdGhlIHN0YWxlIGAtRUFHQUlOYCB2YWx1ZSBpbiBgZXJyYC5cblxuQ29uc2lkZXIgdGhpcyBzY2VuYXJpbzogSW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYG1vdmVfcGFnZXNfcHRlc2AgcmV0dXJucyBgLUVBR0FJTmAuIGBlcnJgIGJlY29tZXMgYC1FQUdBSU5gLCBhbmQgYmVjYXVzZSBvZiB0aGUgY29uZGl0aW9uIGBpZiAoZXJyID09IC1FQUdBSU4pIGNvbnRpbnVlYCwgdGhlIGxvb3Agc2tpcHMgdGhlIGFkZHJlc3MgaW5jcmVtZW50LCB0aHVzIHJldHJ5aW5nIG9uIHRoZSBleGFjdCBzYW1lIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBpdGVyYXRpb24uIE5vdywgaWYgdGhlIHNlY29uZCBpdGVyYXRpb24gc3VjY2Vzc2Z1bGx5IG1vdmVzIHNvbWUgcGFnZXMsIGl0IHJldHVybnMgYSBwb3NpdGl2ZSBgcmV0YCB2YWx1ZS4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIGBlcnJgIGZyb20gdGhlIGZpcnN0IGAtRUFHQUlOYCBpc24ndCBvdmVyd3JpdHRlbi4gVGhpcyBtZWFucyB0aGUgcHJvZ3JhbSB0aGVuIHNraXBzIHRoZSBpbmNyZW1lbnQgYW5kIHJldHJpZXMgdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBpbmRlZmluaXRlbHksIHdoaWNoIGlzIGRlZmluaXRlbHkgaW5jb3JyZWN0IGFuZCBwcm9iYWJseSBhIHNvZnQgbG9ja3VwLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBzZXR0aW5nIGBlcnIgPSAwYCBiZWZvcmUgdGhlIGBjb250aW51ZWAsIGVuc3VyaW5nIHRoYXQgYW55IHN1Y2Nlc3NmdWwgc3Vic2VxdWVudCBhdHRlbXB0cyBhcmUgcHJvcGVybHkgYWNrbm93bGVkZ2VkIGFuZCB0aGUgbG9vcCBwcm9jZWVkcyBhcyBpbnRlbmRlZCwgdGhlcmVieSBpbmNyZW1lbnRpbmcgdGhlIGFkZHJlc3NlcyBhbmQgbW92aW5nIG9uIHRvIHRoZSBuZXh0IHNlZ21lbnQuXG5cblNvLCB0aGUgY3JpdGljYWwgaXNzdWUgaXMgdGhlIGxvb3AncyBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSB0aGUgZmFjdCB0aGF0IGBlcnJgIGlzbid0IHByb3Blcmx5IGNsZWFyZWQgb24gYSBzdWNjZXNzZnVsIHJldHJ5LiBUaGlzIGxlYWRzIHRvIHRoZSBza2lwcGluZyBvZiBpbXBvcnRhbnQgaW5jcmVtZW50cywgbGVhZGluZyB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZSBjcml0aWNhbCBwaWVjZSBtaXNzaW5nIGZyb20gdGhlIG9sZCBsb2dpYyBpcyB0byByZXNldCB0aGUgZXJyb3IgY29kZSBiZWZvcmUgY29udGludWluZy5cblxuTGV0IG1lIGV4YW1pbmUgdGhlIGNvZGU6XG5gYGBjXG5pZiAoZXJyKSB7XG4gICAgaWYgKGVyciA9PSAtRUFHQUlOKSB7XG5cdGVyciA9IDA7XG5cdGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbn1cbmBgYFxuXG5UaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZXJyID0gMDtgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBzaW1wbHkgYGNvbnRpbnVlYGQsIHdoaWNoIHNraXBwZWQgdGhlIGFkZHJlc3MgaW5jcmVtZW50LlxuXG5Ob3csIGxldCdzIGJlIGFic29sdXRlbHkgY2xlYXI6IFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIGBtb3ZlX3BhZ2VzYCBmdW5jdGlvbidzIGxvZ2ljIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykgb3IgcG1kIGVudHJpZXM7IGl0IGRvZXNuJ3QgcmVhZCBmcm9tIG9yIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXRzZWxmLiBUaGUgY29yZSBpc3N1ZSBpcyBhIGxvZ2ljIGZsYXc6IGEgbG9vcCBjb250cm9sIHZhcmlhYmxlIG5vdCBiZWluZyByZXNldCwgY2F1c2luZyB0aGUgcHJvY2VzcyB0byBlbnRlciBhIHN0YXRlIHdoZXJlIGl0IGVuZGxlc3NseSByZXRyaWVzIHRoZSBzYW1lIG9wZXJhdGlvbiB3aXRob3V0IG1ha2luZyBwcm9ncmVzcy4gS0FTQU4gbWlnaHQgY2F0Y2ggaXQgaWYgaXQgY2F1c2VzIGEgbWVtb3J5IGZhdWx0LCBidXQgaXQncyBtb3JlIGxpa2VseSBhIHNvZnQgbG9ja3VwIG9yIGluY29ycmVjdCByZXR1cm4gY29kZS4gS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZSBidWcgaXMgYSBtYXR0ZXIgb2YgY29udHJvbCBmbG93LCBub3Qgb2YgdW5pbml0aWFsaXplZCByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrYWdlLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoLCB0aGVyZWZvcmUsIHJlbW92ZXMgYSBsb2dpYyBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzNywiT3V0cHV0VG9rZW5zIjoyMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDI6MDQ6NDIuNzcwOTQxMzQ4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cXG5cXG5UaGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnIChlLmcuLCBpbmZpbml0ZSBsb29wcyBvciBjcmFzaGVzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgYG1vdmVfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS91c2VyZmF1bHRmZC5jYC4gV2hlbiBhIHBhZ2UgbW92ZSBvcGVyYXRpb24gcmV0dXJucyBgLUVBR0FJTmAsIHRoZSBsb29wIHVzZXMgYGNvbnRpbnVlYCB0byByZXRyeSB0aGUgc2FtZSBhZGRyZXNzLiBIb3dldmVyLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIG5vdCByZXNldCB0byAwLiBJbiB0aGUgc3Vic2VxdWVudCBpdGVyYXRpb24sIGlmIHRoZSBtb3ZlIHN1Y2NlZWRzLCBgZXJyYCBpcyBub3Qgb3ZlcndyaXR0ZW4gYW5kIHJlbWFpbnMgYC1FQUdBSU5gLiBUaGlzIGNhdXNlcyB0aGUgbG9vcCB0byBpbmNvcnJlY3RseSBgY29udGludWVgIGFnYWluIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzZXMgb3IgdGhlIGBtb3ZlZGAgY291bnRlciwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wIG9yIGluY29ycmVjdCBwYWdlIG1vdmluZyBiZWhhdmlvci5cXG5cXG5UaGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnIChlLmcuLCBpbmZpbml0ZSBsb29wcyBvciBjcmFzaGVzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowl5x72[1] Phase: Succeeded StartedAt: 2026-08-18 02:04:54 +0000 UTC FinishedAt: 2026-08-18 02:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 02:04:54 +0000 UTC FinishedAt: 2026-08-18 02:04:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2] Phase: Succeeded StartedAt: 2026-08-18 02:04:54 +0000 UTC FinishedAt: 2026-08-18 05:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 02:04:54 +0000 UTC FinishedAt: 2026-08-18 05:49:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 02:04:54 +0000 UTC FinishedAt: 2026-08-18 02:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 02:04:54 +0000 UTC FinishedAt: 2026-08-18 02:04:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowl5x72/series-workflowl5x72-convert-artifact-2967766449/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 02:05:04 +0000 UTC FinishedAt: 2026-08-18 02:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 02:05:04 +0000 UTC FinishedAt: 2026-08-18 02:21:22 +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:*5e019fc8-3c75-4b9a-a635-e895887c929a,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-workflowl5x72/series-workflowl5x72-convert-artifact-2967766449/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": "0f3a54f5-dee3-404a-92fe-584284fd30de", "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-workflowl5x72/series-workflowl5x72-build-action-3235455967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 02:05:04 +0000 UTC FinishedAt: 2026-08-18 02:21:12 +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:*5e019fc8-3c75-4b9a-a635-e895887c929a,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-workflowl5x72/series-workflowl5x72-convert-artifact-2967766449/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": "0f3a54f5-dee3-404a-92fe-584284fd30de", "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-workflowl5x72/series-workflowl5x72-build-action-3235455967/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 02:21:22 +0000 UTC FinishedAt: 2026-08-18 02:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 02:21:22 +0000 UTC FinishedAt: 2026-08-18 02:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 02:21:22 +0000 UTC FinishedAt: 2026-08-18 02:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 02:21:22 +0000 UTC FinishedAt: 2026-08-18 02:21:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowl5x72/series-workflowl5x72-convert-artifact-894896132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 02:21:32 +0000 UTC FinishedAt: 2026-08-18 02:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 02:21:32 +0000 UTC FinishedAt: 2026-08-18 02:23:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0f3a54f5-dee3-404a-92fe-584284fd30de,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-workflowl5x72/series-workflowl5x72-build-action-3235455967/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-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 02:23:37 +0000 UTC FinishedAt: 2026-08-18 02:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 02:23:37 +0000 UTC FinishedAt: 2026-08-18 02:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 02:23:37 +0000 UTC FinishedAt: 2026-08-18 02:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 02:23:37 +0000 UTC FinishedAt: 2026-08-18 02:39:48 +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:*5e019fc8-3c75-4b9a-a635-e895887c929a,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-workflowl5x72/series-workflowl5x72-convert-artifact-894896132/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": "b3226c81-ea24-45b9-98a7-d9ee35bba776", "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-workflowl5x72/series-workflowl5x72-build-action-380437008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 02:23:37 +0000 UTC FinishedAt: 2026-08-18 02:39:38 +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:*5e019fc8-3c75-4b9a-a635-e895887c929a,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-workflowl5x72/series-workflowl5x72-convert-artifact-894896132/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": "b3226c81-ea24-45b9-98a7-d9ee35bba776", "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-workflowl5x72/series-workflowl5x72-build-action-380437008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 02:39:48 +0000 UTC FinishedAt: 2026-08-18 02:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 02:39:48 +0000 UTC FinishedAt: 2026-08-18 02:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 02:39:48 +0000 UTC FinishedAt: 2026-08-18 02:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 02:39:48 +0000 UTC FinishedAt: 2026-08-18 02:41:37 +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:*b3226c81-ea24-45b9-98a7-d9ee35bba776,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-workflowl5x72/series-workflowl5x72-build-action-380437008/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-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 05:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 05:49:54 +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":["userfaultfd_ioctl","sys_userfaultfd"],"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:*0f3a54f5-dee3-404a-92fe-584284fd30de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b3226c81-ea24-45b9-98a7-d9ee35bba776,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-workflowl5x72/series-workflowl5x72-build-action-3235455967/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-workflowl5x72/series-workflowl5x72-build-action-380437008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 02:42:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 02:41:57 +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":["userfaultfd_ioctl","sys_userfaultfd"],"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-workflowl5x72/series-workflowl5x72-convert-artifact-2210320909/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 02:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 02:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 02:41:47 +0000 UTC FinishedAt: 2026-08-18 02:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 02:42:07 +0000 UTC FinishedAt: 2026-08-18 05:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5x72[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["userfaultfd_ioctl","sys_userfaultfd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"62cc90241548d5570ee68e01aaba6506964e9811","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD"],"series_id":"bcca06e3-8f94-4f87-b1fa-5f07dfb1fcad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 02:42:07 +0000 UTC FinishedAt: 2026-08-18 05:49:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0f3a54f5-dee3-404a-92fe-584284fd30de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b3226c81-ea24-45b9-98a7-d9ee35bba776,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-workflowl5x72/series-workflowl5x72-build-action-3235455967/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-workflowl5x72/series-workflowl5x72-build-action-380437008/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-workflowl5x72/series-workflowl5x72-convert-artifact-2210320909/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,}