Name: series-workflowxtkf5 Phase: Succeeded StartedAt: 2026-09-09 17:42:31 +0000 UTC FinishedAt: 2026-09-09 21:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[0] Phase: Succeeded StartedAt: 2026-09-09 17:42:31 +0000 UTC FinishedAt: 2026-09-09 17:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 17:42:31 +0000 UTC FinishedAt: 2026-09-09 17:45:10 +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": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "333b8b2a-6b55-446b-ad1b-e461edc67def" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_alloc_folio", "alloc_hugetlb_folio", "mem_cgroup_charge_hugetlb" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYDogaXQgcmVwbGFjZXMgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgdG8gYC1FTk9TUENgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvci1oYW5kbGluZyBsb2dpYyBpbiBtbS9odWdldGxiLmMgKGh1Z2V0bGJfYWxsb2NfZm9saW8pIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlscywgcmVwbGFjaW5nIGZyZWVfaHVnZV9mb2xpbyB3aXRoIGZvbGlvX3B1dCBhbmQgcmV0dXJuaW5nIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgZnV0aWxlIGZhdWx0IHJldHJpZXMuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhcmdpbmcgcGF0aHMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBodWdldGxiZnMgb3BlcmF0aW9ucyBhbmQgTUFQX0hVR0VUTEIgZmF1bHRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY5Mzc1NzIzNDIxODcxZGE5MDFhNDE2YTA3ZmNhYjIzNTY2OWQ5YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjQzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNGY2ZjU4YmYzZGI2Yy4uZjViODUzYTUzNzdjMiAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMjgyNSw3ICYjNDM7MjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTIsMTMgJiM0MzsyODkxLDE3IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XG4gXG4gXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcbi1cdFx0ZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdC8qXG4gXHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuIFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4gXHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6XG4mIzQzO1x0XHQgKiB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkIGZvciBIdWdlVExCLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiBcdH1cbiBcbiBcdHJldHVybiBmb2xpbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvci1oYW5kbGluZyBsb2dpYyBpbiBtbS9odWdldGxiLmMgKGh1Z2V0bGJfYWxsb2NfZm9saW8pIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlscywgcmVwbGFjaW5nIGZyZWVfaHVnZV9mb2xpbyB3aXRoIGZvbGlvX3B1dCBhbmQgcmV0dXJuaW5nIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgZnV0aWxlIGZhdWx0IHJldHJpZXMuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhcmdpbmcgcGF0aHMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBodWdldGxiZnMgb3BlcmF0aW9ucyBhbmQgTUFQX0hVR0VUTEIgZmF1bHRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY5Mzc1NzIzNDIxODcxZGE5MDFhNDE2YTA3ZmNhYjIzNTY2OWQ5YmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE3OjQzOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDRmNmY1OGJmM2RiNmMuLmY1Yjg1M2E1Mzc3YzIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTI4MjUsNyAmIzQzOzI4MjUsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpCiAgKgogICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLgogICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuCi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy4KICAqLwogc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncykKQEAgLTI4OTIsMTMgJiM0MzsyODkxLDE3IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpOwogCiAJaWYgKHJldCA9PSAtRU5PTUVNKSB7Ci0JCWZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogCQkvKgogCQkgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXMKIAkJICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpbwogCQkgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuCiAJCSAqLwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJldHVybiAtRU5PU1BDLCBzaW5jZSByZXRyeWluZyB0aGUgZmF1bHQgaXMgZnV0aWxlOgomIzQzOwkJICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJfQogCiAJcmV0dXJuIGZvbGlvOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2VUTEIgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgYW5kIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZW1vdmFsIG9mIHRoZSBgLUVOT01FTWAgZXJyb3IgcmV0dXJuLiBTcGVjaWZpY2FsbHksIHRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgLUVOT1NQQ2AgaW5zdGVhZC4gTGV0IG1lIGdvIGxpbmUgYnkgbGluZSB0aHJvdWdoIHRoYXQgYGRpZmZgIGJsb2NrLCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKSSBzZWUgdGhleSYjMzk7dmUgcmVtb3ZlZCBhIHNwZWNpZmljIGVycm9yIGNoZWNrIGFuZCBzdWJzZXF1ZW50IGZvbGlvIGZyZWVpbmcgbG9naWMuIFRoZSBvcmlnaW5hbCBjb2RlIHBhdGggc2VlbXMgdG8gaGF2ZSBoYW5kbGVkIGEgYC1FTk9NRU1gIHJldHVybiBmcm9tIGNncm91cCBjaGFyZ2luZywgZnJlZWQgdGhlIGZvbGlvLCBhbmQgdGhlbiByZXR1cm5lZCB0aGUgZXJyb3IuIE5vdywgaXQgYXBwZWFycyB0aGF0IHRoZSBmb2xpbyBpcyBiZWluZyBgZm9saW9fcHV0YCByYXRoZXIgdGhhbiBgZnJlZV9odWdlX2ZvbGlvYCwgYW5kIGAtRU5PU1BDYCBpcyByZXR1cm5lZCBpbnN0ZWFkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIFdhcyB0aGVyZSBhbiBpc3N1ZSB3aXRoIGhvdyBgLUVOT01FTWAgd2FzIGJlaW5nIGhhbmRsZWQgcHJldmlvdXNseT8gSXMgYC1FTk9TUENgIGEgbW9yZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgYW5kIHdoeSBpcyB0aGF0PyBUaGUgY29tbWVudCBtZW50aW9ucyB0aGUgT09NIGtpbGxlciBub3QgYmVpbmcgaW52b2x2ZWQgaW4gSHVnZVRMQi4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhhdCB0aGUgY2hhbmdlIGFpbXMgdG8gcHJldmVudCBhIGZ1dGlsZSByZXRyeSBzY2VuYXJpbyBpbiB0aGUgZmF1bHQgaGFuZGxlciwgc2luY2UgdGhlIE9PTSBraWxsZXIgaXNuJiMzOTt0IHRyaWdnZXJlZCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uLiBSZXR1cm5pbmcgYC1FTk9TUENgIG1pZ2h0IHNpZ25hbCBhIG1vcmUgcGVyc2lzdGVudCByZXNvdXJjZSBleGhhdXN0aW9uLCB3aGljaCBpcyB0aGUgaW50ZW50aW9uIGluIHRoaXMgY2FzZSwgcmF0aGVyIHRoYW4gaW5kaWNhdGluZyBqdXN0IGEgdGVtcG9yYXJ5IG1lbW9yeSBzaG9ydGFnZS4gVG8gY29uZmlybSB0aGlzIGludHVpdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGhvdyBjYWxsZXJzIGhhbmRsZSBgLUVOT1NQQ2AuIFBlcmhhcHMgdGhlIHJldHVybiBvZiBgLUVOT1NQQ2AgcHJvdmlkZXMgY2xhcml0eSBhbmQgcmVkdWNlcyB0aGUgb3Bwb3J0dW5pdHkgZm9yIGEgZmF1bHQgaGFuZGxlciB0byByZXRyeSBvbiB0aGUgc2FtZSBjb25kaXRpb24uCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL2h1Z2V0bGIuY2AgYXJvdW5kIGxpbmVzIDI4MjUtMjkxMCwgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgaW4gdGhpcyBmdW5jdGlvbiB0byBnZXQgbW9yZSBiYWNrZ3JvdW5kLiBMZXQgbWUgdXNlIGByZWFkLWZpbGVgIHRvIGRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MjU6XHQgKlxuMjgyNjpcdCAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbjI4Mjc6XHQgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbjI4Mjg6XHQgKi9cbjI4Mjk6XHRzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbjI4MzA6XHRcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuMjgzMTpcdHtcbjI4MzI6XHRcdGJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyBcdTAwMjZcbjI4MzM6XHRcdFx0XHRcdFx0ICBIVUdFVExCX0FMTE9DX0NIQVJHX0NHUk9VUF9SU1ZEO1xuMjgzNDpcdFx0Ym9vbCB1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uID0gYWxsb2NfZmxhZ3MgXHUwMDI2XG4yODM1Olx0XHRcdFx0XHQgICAgICBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xuMjgzNjpcdFx0c2l6ZV90IG5yX3BhZ2VzID0gcGFnZXNfcGVyX2h1Z2VfcGFnZShoKTtcbjI4Mzc6XHRcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcbjI4Mzg6XHRcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XG4yODM5Olx0XHRnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7XG4yODQwOlx0XHRpbnQgaWR4ID0gaHN0YXRlX2luZGV4KGgpO1xuMjg0MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjI4NDI6XHRcdGludCByZXQ7XG4yODQzOlx0XG4yODQ0Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgXHUwMDI2XHUwMDI2XG4yODQ1Olx0XHQgICAgaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgbnJfcGFnZXMsIFx1MDAyNmhfY2dfcnN2ZCkpXG4yODQ2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuMjg0NzpcdFxuMjg0ODpcdFx0aWYgKGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgXHUwMDI2aF9jZykpIHtcbjI4NDk6XHRcdFx0cmV0ID0gLUVOT1NQQztcbjI4NTA6XHRcdFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcbjI4NTE6XHRcdH1cbjI4NTI6XHRcbjI4NTM6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI4NTQ6XHRcbjI4NTU6XHRcdGZvbGlvID0gTlVMTDtcbjI4NTY6XHRcdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uIHx8IGF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKVxuMjg1NzpcdFx0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIG1wb2xpKTtcbjI4NTg6XHRcbjI4NTk6XHRcdGlmICghZm9saW8pIHtcbjI4NjA6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yODYxOlx0XHRcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIG1wb2xpKTtcbjI4NjI6XHRcdFx0aWYgKCFmb2xpbykge1xuMjg2MzpcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4yODY0Olx0XHRcdFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA7XG4yODY1Olx0XHRcdH1cbjI4NjY6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg2NzpcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmgtXHUwMDNlaHVnZXBhZ2VfYWN0aXZlbGlzdCk7XG4yODY4Olx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4yODY5Olx0XHR9XG4yODcwOlx0XG4yODcxOlx0XHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xuMjg3MjpcdFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xuMjg3MzpcdFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuMjg3NDpcdFx0fVxuMjg3NTpcdFxuMjg3NjpcdFx0aHVnZXRsYl9jZ3JvdXBfY29tbWl0X2NoYXJnZShpZHgsIG5yX3BhZ2VzLCBoX2NnLCBmb2xpbyk7XG4yODc3Olx0XG4yODc4Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpIHtcbjI4Nzk6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfY29tbWl0X2NoYXJnZV9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCxcbjI4ODA6XHRcdFx0XHRcdFx0XHQgIGZvbGlvKTtcbjI4ODE6XHRcdH1cbjI4ODI6XHRcbjI4ODM6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg4NDpcdFxuMjg4NTpcdFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG4yODg2Olx0XHQvKlxuMjg4NzpcdFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxuMjg4ODpcdFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxuMjg4OTpcdFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXG4yODkwOlx0XHQgKi9cbjI4OTE6XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuMjg5MjpcdFxuMjg5MzpcdFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4yODk0Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yODk1Olx0XHRcdC8qXG4yODk2Olx0XHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuMjg5NzpcdFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4yODk4Olx0XHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbjI4OTk6XHRcdFx0ICovXG4yOTAwOlx0XHRcdC8qXG4yOTAxOlx0XHRcdCAqIFJldHVybiAtRU5PU1BDLCBzaW5jZSByZXRyeWluZyB0aGUgZmF1bHQgaXMgZnV0aWxlOlxuMjkwMjpcdFx0XHQgKiB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkIGZvciBIdWdlVExCLlxuMjkwMzpcdFx0XHQgKi9cbjI5MDQ6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4yOTA1Olx0XHR9XG4yOTA2Olx0XG4yOTA3Olx0XHRyZXR1cm4gZm9saW87XG4yOTA4Olx0XG4yOTA5Olx0IGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDcyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IGNhbGxlcnMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2hhdCogaGFzIGNoYW5nZWQgaW4gaXRzIHVzYWdlIHJlY2VudGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIG5vdyBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbWUgdG8gaGF2ZSBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiByZWNlbnQgbW9kaWZpY2F0aW9ucy4KClRoZW4sIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYG1tL2h1Z2V0bGIuY2AgYW5kIGh1Z2V0bGIgbW9yZSBnZW5lcmFsbHkuIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGJsaW5kc2lkZWQgYnkgc29tZSBidWlsZC10aW1lIGRlcGVuZGVuY3kgdGhhdCBJIG1pc3NlZC4gVGhpcyBzdGVwIGlzIGEgbXVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1lbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAxOnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yODA5PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNy0vKipcbm1tL2h1Z2V0bGIuYzoyODE4OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxOS0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjk6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgzMC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAyNy1cbm1tL2h1Z2V0bGIuYzozMDI4Olx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGl0cyBDYWxsIFNpdGVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBodWdlIHBhZ2UgYWxsb2NhdGlvbi4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgdGhpcyBmdW5jdGlvbiwgb3IgaXRzIGFsaWFzIGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgaXMgYmVpbmcgaW52b2tlZC4gVGhhdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGRvZXMgdGhlIHN5c3RlbSBkZWNpZGUgaXQgbmVlZHMgYSBodWdlIHBhZ2U/IFdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoaXMgYWxsb2NhdGlvbj8mIzM0OyBCeSB0cmFjaW5nIGJhY2sgZnJvbSB0aGUgY2FsbCBzaXRlcywgSSBjYW4gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMuIEZvciBpbnN0YW5jZSwgSSYjMzk7bGwgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2FsbGVycyBhcmUgaW4gdXNlci1zcGFjZSwga2VybmVsLXNwYWNlLCBvciBib3RoLiBBbmQsIGZ1cnRoZXIsIHdoZXRoZXIgb3Igbm90IHRoZSBjYWxsZXJzIGhhdmUgdGhlaXIgb3duIGFsbG9jYXRpb24gc3RyYXRlZ3kgd2hpY2ggd2lsbCBhbHRlciBob3cgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGJlaGF2ZXMuCgpCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtub3cgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgdGhpcyBmdW5jdGlvbiBjcml0aWNhbCBwYXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcz8gTG9va2luZyBhdCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGF0IGVhY2ggY2FsbCBzaXRlIHdpbGwgYmUga2V5LiBEb2VzIGl0IGRldGVybWluZSB0aGUgc2l6ZT8gQXJlIHNwZWNpZmljIGZsYWdzIHNldCBmb3IgbWVtb3J5IGF0dHJpYnV0ZXMgb3IgcGVybWlzc2lvbnM/IFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIGNvbXBvbmVudCBhbmQgaXRzIGRlcGVuZGVuY3kgdHJlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTgxPWFyZSBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXBwaW5nLiAgVGhlIGFsbG9jYXRpb25cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTgyOmlzIHBlcmZvcm1lZCB3aXRoaW4gdGhlIHJvdXRpbmUgYWxsb2NfaHVnZXRsYl9mb2xpbygpOjpcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTgzLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODQ6XHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4NS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg2LVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODc6YWxsb2NfaHVnZXRsYl9mb2xpbyBpcyBwYXNzZWQgYSBWTUEgcG9pbnRlciBhbmQgYSB2aXJ0dWFsIGFkZHJlc3MsIHNvIGl0IGNhblxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODgtY29uc3VsdCB0aGUgcmVzZXJ2YXRpb24gbWFwIHRvIGRldGVybWluZSBpZiBhIHJlc2VydmF0aW9uIGV4aXN0cy4gIEluIGFkZGl0aW9uLFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODk6YWxsb2NfaHVnZXRsYl9mb2xpbyB0YWtlcyB0aGUgYXJndW1lbnQgYXZvaWRfcmVzZXJ2ZSB3aGljaCBpbmRpY2F0ZXMgcmVzZXJ2ZXNcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTkwLXNob3VsZCBub3QgYmUgdXNlZCBldmVuIGlmIGl0IGFwcGVhcnMgdGhleSBoYXZlIGJlZW4gc2V0IGFzaWRlIGZvciB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTIwNz1pcyBjYWxsZWQuICBUaGlzIHJvdXRpbmUgdGFrZXMgdHdvIGFyZ3VtZW50cyByZWxhdGVkIHRvIHJlc2VydmF0aW9uczpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwOS0tIGF2b2lkX3Jlc2VydmUsIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUvYXJndW1lbnQgcGFzc2VkIHRvXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjIxMDogIGFsbG9jX2h1Z2V0bGJfZm9saW8oKS5cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjExLS0gY2hnLCBldmVuIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIG9mIHR5cGUgbG9uZyBvbmx5IHRoZSB2YWx1ZXMgMCBvciAxIGFyZVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjQ3PUl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHJlc2VydmUgbWFwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGhlIGNhbGxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ4OnRvIHZtYV9uZWVkc19yZXNlcnZhdGlvbigpIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NfaHVnZXRsYl9mb2xpbygpIGFuZCB0aGVcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ5LWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTExNj1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQ1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ2OuW9k+S4jumihOeVmeebuOWFs+eahOW3qOmhteWcqOebuOW6lOeahOaYoOWwhOS4reiiq+WIhumFjeWSjOWunuS+i+WMluaXtu+8jOmihOeVmeWwseiiq+a2iOiAl+S6huOAguivpeWIhumFjeaYr+WcqOWHveaVsGFsbG9jX2h1Z2V0bGJfZm9saW8uLi5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0Ny3kuK3ov5vooYznmoQ6OlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQ4LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ5Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBhdm9pZF9yZXNlcnZlKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUyOmFsbG9jX2h1Z2V0bGJfZm9saW/ooqvkvKDpgJLnu5nkuIDkuKpWTUHmjIfpkojlkozkuIDkuKromZrmi5/lnLDlnYDvvIzlm6DmraTlroPlj6/ku6Xmn6XpmIXpooTnlZnmmKDlsITku6Xnoa7lrprmmK/lkKblrZjlnKjpooTnlZnjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MzrmraTlpJbvvIxhbGxvY19odWdldGxiX2ZvbGlv6ZyA6KaB5LiA5Liq5Y+C5pWwYXZvaWRfcmVzZXJ2Ze+8jOivpeWPguaVsOihqOekuuWNs+S9v+eci+i1t+adpeW3sue7j+S4uuaMh+WumueahOWcsOWdgOmihOeVmeS6hlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTU0LemihOeVme+8jOS5n+S4jeW6lOivpeS9v+eUqOmihOeVmeOAgmF2b2lkX3Jlc2VydmXlj4LmlbDmnIDluLjooqvnlKjkuo7lhpnml7bmi7fotJ3lkozpobXpnaLov4Hnp7vnmoTmg4XlhrXkuIvvvIzljbPnjrDmnInpobXpnaLnmoTpop1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNjA9dm1hX25lZWRzX3Jlc2VydmF0aW9uKCnov5Tlm57nmoTlgLzpgJrluLjkuLow5oiWMeOAguWmguaenOivpeWcsOWdgOWtmOWcqOmihOeVme+8jOWImeS4ujDvvIzlpoLmnpzkuI3lrZjlnKjpooTnlZnvvIzliJnkuLox44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTY1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTY2Oi0gYXZvaWRfcmVzZXJ2Ze+8jOi/meaYr+S8oOmAkue7mWFsbG9jX2h1Z2V0bGJfZm9saW8oKeeahOWQjOS4gOS4quWAvC/lj4LmlbDjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2Ny0tIGNoZ++8jOWwveeuoei/meS4quWPguaVsOeahOexu+Wei+aYr2xvbmfvvIzkvYblj6rmnIkw5oiWMeeahOWAvOiiq+S8oOmAkue7mWRlcXVldWVfaHVnZV9wYWdlX3ZtYeOAguWmguaenOivpeWAvOS4ujDvvIxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjAyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjAzOuWcqGFsbG9jX2h1Z2V0bGJfZm9saW8oKeW8gOWni+iwg+eUqHZtYV9uZWVkc19yZXNlcnZhdGlvbigp5ZKM6aG16Z2i5YiG6YWN5ZCO6LCD55SoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDQtdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NzAwPXN0YXRpYyBsb25nIGh1Z2V0bGJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5Mi1cdFx0ICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3OTM6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhcdTAwMjZwc2V1ZG9fdm1hLCBhZGRyLCBmYWxzZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTQtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODEzLVx0XHQgKiBmb2xpb191bmxvY2sgYmVjYXVzZSBsb2NrZWQgYnkgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MTQ6XHRcdCAqIGZvbGlvX3B1dCgpIGR1ZSB0byByZWZlcmVuY2UgZnJvbSBhbGxvY19odWdldGxiX2ZvbGlvKClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxNS1cdFx0ICovXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NzAxPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAzOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDU6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA2LVx0XHRcdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVx0XHRcdFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTIyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjUtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEyNy1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEzNDphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTM1LVx0XHRcdCAgICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTE0MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTQxOmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTQyLVx0XHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmM9MjE0ND1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjE2Ny1cbm1tL2h1Z2V0bGIuYzoyMTY4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxNjktXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMjE4OC0vKiBmb2xpbyBtaWdyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gKi9cbm1tL2h1Z2V0bGIuYzoyMTg5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMTkwLVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spXG4tLVxubW0vaHVnZXRsYi5jPTI1MjI9c3RhdGljIGxvbmcgdm1hX2RlbF9yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cbm1tL2h1Z2V0bGIuYzoyNTMwOiAqIEl0IHNob3VsZCBPTkxZIGJlIGNhbGxlZCBmb3IgZm9saW9zIGFsbG9jYXRlZCB2aWEgYWxsb2NfaHVnZXRsYl9mb2xpbygpLFxubW0vaHVnZXRsYi5jLTI1MzEtICogYW5kIHRoZSBodWdldGxiIG11dGV4IHNob3VsZCByZW1haW4gaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyByb3V0aW5lLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTM2LSAqIDIpIE5vIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBmb3IgdGhlIHBhZ2UsIHNvIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzXG5tbS9odWdldGxiLmM6MjUzNzogKiAgICBub3Qgc2V0LiAgSG93ZXZlciwgYWxsb2NfaHVnZXRsYl9mb2xpbyBhbHdheXMgdXBkYXRlcyB0aGUgcmVzZXJ2ZSBtYXAuXG5tbS9odWdldGxiLmMtMjUzOC0gKlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQ1LSAqXG5tbS9odWdldGxiLmM6MjU0NjogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxubW0vaHVnZXRsYi5jLTI1NDctICovXG5tbS9odWdldGxiLmM9MjU0OD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMjU3NC1cdFx0XHQgKiBUaGlzIGluZGljYXRlcyB0aGVyZSBpcyBhbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZSBtYXBcbm1tL2h1Z2V0bGIuYzoyNTc1Olx0XHRcdCAqIG5vdCBhZGRlZCBieSBhbGxvY19odWdldGxiX2ZvbGlvLiAgV2Uga25vdyBpdCB3YXMgYWRkZWRcbm1tL2h1Z2V0bGIuYzoyNTc2Olx0XHRcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2Vcbm1tL2h1Z2V0bGIuYy0yNTc3LVx0XHRcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHdvdWxkIGJlIHNldCBvbiB0aGUgZm9saW8uXG4tLVxubW0vaHVnZXRsYi5jPTI5MTg9dHlwZWRlZiBlbnVtIHtcbi0tXG5tbS9odWdldGxiLmMtMjk0My0gKi9cbm1tL2h1Z2V0bGIuYzoyOTQ0OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy0yOTQ1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbi0tXG5tbS9odWdldGxiLmM9NDg4OT1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTUwMTAtXHRcdFx0XHQvKiBEbyBub3QgdXNlIHJlc2VydmUgYXMgaXQmIzM5O3MgcHJpdmF0ZSBvd25lZCAqL1xubW0vaHVnZXRsYi5jOjUwMTE6XHRcdFx0XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGFkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy01MDEyLVx0XHRcdFx0aWYgKElTX0VSUihuZXdfZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTU0ODI9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTU2My1cdHNwaW5fdW5sb2NrKHZtZi1cdTAwM2VwdGwpO1xubW0vaHVnZXRsYi5jOjU1NjQ6XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGNvd19mcm9tX293bmVyKTtcbm1tL2h1Z2V0bGIuYy01NTY1LVxuLS1cbm1tL2h1Z2V0bGIuYz01NzU0PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTgyMy1cbm1tL2h1Z2V0bGIuYzo1ODI0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTU4MjUtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTYwMDQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjIzOS0gKi9cbm1tL2h1Z2V0bGIuYzo2MjQwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtNjI0MS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS9odWdldGxiLmMtNjI1Ni1cdCAqL1xubW0vaHVnZXRsYi5jOjYyNTc6XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbm9kZSwgbm9kZW1hc2ssIGdmcF9tYXNrLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjI1OC1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vaHVnZXRsYi5jPTYyNjc9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjMyMy1cbm1tL2h1Z2V0bGIuYzo2MzI0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02MzI1LVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYy02MzQ5LVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjYzNTA6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3ZtYShoLCBkc3Rfdm1hLCBkc3RfYWRkcik7XG5tbS9odWdldGxiLmMtNjM1MS1cdFx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vaHVnZXRsYi5jLTYzNzAtXG5tbS9odWdldGxiLmM6NjM3MTpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjM3Mi1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NjY2ND1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL2h1Z2V0bGIuYy02Nzg0LVx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG5tbS9odWdldGxiLmM6Njc4NTpcdFx0XHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxubW0vaHVnZXRsYi5jLTY3ODYtXHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG4tLVxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4tLVxubW0vbWVtZmQuYy05My1cbm1tL21lbWZkLmM6OTQ6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG5tbS9tZW1mZC5jLTk1LVx0XHRcdFx0XHRcdCAgICBudW1hX25vZGVfaWQoKSxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDU2LVx0XHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgaWx4LCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6MTQ1NzpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLCBub2RlbWFzaywgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cdFx0XHRcdGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soTVJfTUVNUE9MSUNZX01CSU5EKSk7XG4tLVxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyMTQtXHRcdGdmcF9tYXNrID0gaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhoLCBnZnBfbWFzayk7XG5tbS9taWdyYXRlLmM6MjIxNTpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLFxubW0vbWlncmF0ZS5jLTIyMTYtXHRcdFx0XHRcdFx0bXRjLVx1MDAzZW5tYXNrLCBnZnBfbWFzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSHVnZXRsYiBBbGxvY2F0aW9uIEJ1Z2ZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGluIGBtbS9odWdldGxiLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmYWlscywgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcmV0dXJucyBgLUVOT01FTWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGNhbGwgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGFuZCB0aGVuIHJldHVybiB0aGUgb3JpZ2luYWwgYC1FTk9NRU1gIGVycm9yLiBOb3csIGl0IGFwcGVhcnMgdGhleSYjMzk7cmUgdXNpbmcgYGZvbGlvX3B1dChmb2xpbylgIGFuZCByZXR1cm5pbmcgYC1FTk9TUENgIGluc3RlYWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSo/ICBXaGF0JiMzOTtzIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlPyBUaGUgYmVoYXZpb3Igc2VlbXMgc3VidGxlLiBJcyB0aGlzIGEgYnVnZml4LCBvciBhIGRlbGliZXJhdGUgY2hhbmdlIGluIHNlbWFudGljcz8KClRvIHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHJldHVybiB2YWx1ZSBvZiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgaXMgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGNvZGUgYW5kIGFueSByZWxhdGVkIGZhdWx0IGhhbmRsZXJzIHJlYWN0IHRvIGEgcG90ZW50aWFsIGVycm9yLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyByb3VnaGx5IGZyb20gMjk0MCB0byAzMDUwLCB3aGVyZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBtb3N0IGxpa2VseSBkZWZpbmVkLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIHN3YXAgZnJvbSBgLUVOT01FTWAgdG8gYC1FTk9TUENgLiBQZXJoYXBzIGAtRU5PU1BDYCBpcyBtb3JlIGFjY3VyYXRlIGluIHRoaXMgY29udGV4dCwgb3IgbWF5YmUgdGhlIGNoYW5nZSBpcyB0aWVkIHRvIHNvbWUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvciBvciBpbnRlcmFjdGlvbnMgd2l0aCBgZm9saW9fcHV0YCB0aGF0IEkmIzM5O20gbm90IHNlZWluZyBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHNlZSB0aGUgbGFyZ2VyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTQwOlx0ICogd2hpY2ggY2FzZSBldmVuIGlmIHRoZXJlJiMzOTtzIGEgcHJpdmF0ZSB2bWEgcmVzdiBtYXAgaXQgd29uJiMzOTt0IGNvdmVyIHN1Y2hcbjI5NDE6XHQgKiBhbGxvY2F0aW9uKS4gIE5ldyBjYWxsIHNpdGVzIHNob3VsZCAocHJvYmFibHkpIG5ldmVyIHNldCBpdCB0byB0cnVlISFcbjI5NDI6XHQgKiBXaGVuIGl0JiMzOTtzIHNldCwgdGhlIGFsbG9jYXRpb24gd2lsbCBieXBhc3MgYWxsIHZtYSBsZXZlbCByZXNlcnZhdGlvbnMuXG4yOTQzOlx0ICovXG4yOTQ0Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjk0NTpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbjI5NDY6XHR7XG4yOTQ3Olx0XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xuMjk0ODpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbjI5NDk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yOTUwOlx0XHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XG4yOTUxOlx0XHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4yOTUyOlx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuMjk1MzpcdFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuMjk1NDpcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbjI5NTU6XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuMjk1NjpcdFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xuMjk1NzpcdFx0aW50IG5pZDtcbjI5NTg6XHRcdGludCByZXQ7XG4yOTU5Olx0XG4yOTYwOlx0XHQvKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBwZXItdm1hIHJlc2VydmF0aW9uPyAqL1xuMjk2MTpcdFx0aWYgKGNvd19mcm9tX293bmVyKSB7XG4yOTYyOlx0XHRcdC8qXG4yOTYzOlx0XHRcdCAqIFNwZWNpYWwgY2FzZSEgIFNpbmNlIGl0JiMzOTtzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXG4yOTY0Olx0XHRcdCAqIHBhZ2UsIHRoZSBwcml2YXRlIHJlc3YgbWFwIGRvZXNuJiMzOTt0IGNvdW50LiAgU28gaXQgY2Fubm90XG4yOTY1Olx0XHRcdCAqIGNvbnN1bWUgdGhlIHBlci12bWEgcmVzdiBtYXAgZXZlbiBpZiBpdCYjMzk7cyByZXNlcnZlZC5cbjI5NjY6XHRcdFx0ICovXG4yOTY3Olx0XHRcdG1hcF9jaGcgPSBNQVBfQ0hHX0VORk9SQ0VEO1xuMjk2ODpcdFx0fSBlbHNlIHtcbjI5Njk6XHRcdFx0LypcbjI5NzA6XHRcdFx0ICogRXhhbWluZSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwIHRvIGRldGVybWluZSBpZiB0aGUgcHJvY2Vzc1xuMjk3MTpcdFx0XHQgKiBoYXMgYSByZXNlcnZhdGlvbiBmb3IgdGhlIHBhZ2UgdG8gYmUgYWxsb2NhdGVkLiAgQSByZXR1cm5cbjI5NzI6XHRcdFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cbjI5NzM6XHRcdFx0ICovXG4yOTc0Olx0XHRcdHJldHZhbCA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xuMjk3NTpcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMjk3NjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMjk3NzpcdFx0XHRtYXBfY2hnID0gcmV0dmFsID8gTUFQX0NIR19ORUVERUQgOiBNQVBfQ0hHX1JFVVNFO1xuMjk3ODpcdFx0fVxuMjk3OTpcdFxuMjk4MDpcdFx0LypcbjI5ODE6XHRcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cbjI5ODI6XHRcdCAqXG4yOTgzOlx0XHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cbjI5ODQ6XHRcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xuMjk4NTpcdFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXG4yOTg2Olx0XHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuMjk4NzpcdFx0ICovXG4yOTg4Olx0XHRpZiAobWFwX2NoZykge1xuMjk4OTpcdFx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuMjk5MDpcdFx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuMjk5MTpcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4yOTkyOlx0XHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuMjk5MzpcdFx0XHR9XG4yOTk0Olx0XHR9IGVsc2Uge1xuMjk5NTpcdFx0XHQvKlxuMjk5NjpcdFx0XHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXG4yOTk3Olx0XHRcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cbjI5OTg6XHRcdFx0ICovXG4yOTk5Olx0XHRcdGdibF9jaGcgPSAwO1xuMzAwMDpcdFx0fVxuMzAwMTpcdFxuMzAwMjpcdFx0LypcbjMwMDM6XHRcdCAqIElmIGFsbG9jYXRpb24gZG9lc24mIzM5O3QgcmV1c2UgYSByZXNlcnZhdGlvbiBpbiB0aGUgcmVzdl9tYXAsXG4zMDA0Olx0XHQgKiBjaGFyZ2UgZm9yIHRoZSByZXNlcnZhdGlvbi5cbjMwMDU6XHRcdCAqL1xuMzAwNjpcdFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19SRVVTRSlcbjMwMDc6XHRcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbjMwMDg6XHRcbjMwMDk6XHRcdC8qXG4zMDEwOlx0XHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4zMDExOlx0XHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuMzAxMjpcdFx0ICovXG4zMDEzOlx0XHRpZiAoZ2JsX2NoZyA9PSAwKVxuMzAxNDpcdFx0XHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xuMzAxNTpcdFxuMzAxNjpcdFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXG4zMDE3Olx0XHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnAsIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbjMwMTg6XHRcdG1wb2xpID0gKHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQpe1xuMzAxOTpcdFx0XHQubmlkID0gbmlkLFxuMzAyMDpcdCNpZmRlZiBDT05GSUdfTlVNQVxuMzAyMTpcdFx0XHQubW9kZSA9IG1wb2wgPyBtcG9sLVx1MDAzZW1vZGUgOiBNUE9MX0RFRkFVTFQsXG4zMDIyOlx0I2Vsc2VcbjMwMjM6XHRcdFx0Lm1vZGUgPSBNUE9MX0RFRkFVTFQsXG4zMDI0Olx0I2VuZGlmXG4zMDI1Olx0XHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuMzAyNjpcdFx0fTtcbjMwMjc6XHRcbjMwMjg6XHRcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuMzAyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBmb3IgYG1tL2h1Z2V0bGIuY2Agd2l0aCBhIEZ1enplcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL2h1Z2V0bGIuY2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIGh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRpbWUgdG8gYXBwbHkgbXkgbWVudGFsIGNoZWNrbGlzdC4KCkZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY29kZSBldmVuIGZhbGxzIHVuZGVyIHRoZSBjcml0ZXJpYS4gU2VjdGlvbiAzIGxpc3RzIHRoZSBqdWljeSBiaXRzOiBtbSwgbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIG5ldHdvcmtpbmcsIFZGUywgc3lzY2FsbHMuIFllcCwgbWVtb3J5IG1hbmFnZW1lbnQgaXMgb24gdGhlIGxpc3QsIGFuZCB0aGF0IGNvdmVycyBgbW0vaHVnZXRsYi5jYC4gQ2hlY2suCgpOZXh0LCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGNvZGU/IElzIHRoZXJlIGEgc3RyYWlnaHRmb3J3YXJkIHBhdGggdmlhIFFFTVUgYW5kIHN5emthbGxlcj8gRm9ydHVuYXRlbHksIHllcy4gSSBjYW4gdXNlIG1tYXAgd2l0aCBNQVBfSFVHRVRMQiwgbW91bnQgaHVnZXRsYmZzLCB1c2Ugc2htZ2V0IHdpdGggU0hNX0hVR0VUTEIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBNZW0gY2dyb3VwcyByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvby4gU2VlbXMgbGlrZSBpdCYjMzk7cyByZWFjaGFibGUuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBmb3IgYG1tL2h1Z2V0bGIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVx0JiM0Mzs9IGRtYXBvb2wub1xubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGh1Z2UgcGFnZSBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZzL2h1Z2V0bGJmcy9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhlIGRlZmluaXRpb25zIG9mIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBUaGVzZSBhcmUgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSYjMzk7cyBodWdlIHBhZ2UgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkLiBLbm93aW5nIHRoZWlyIHN0YXR1cyB3aWxsIGJlIGZ1bmRhbWVudGFsIHRvIGRpYWdub3Npbmcgb3Igb3B0aW1pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDY3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIGZvciBgY29uZmlnIEhVR0VUTEJGU2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyBvZiBgY29uZmlnIEhVR0VUTEJGU2AgYWNyb3NzIG91ciBLY29uZmlnIGZpbGVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc2ltcGxlIGdyZXA7IEkgbmVlZCB0byBiZSBwcmVjaXNlLCBlbnN1cmluZyBJIGNhdGNoIGFsbCB2YXJpYXRpb25zIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCB0cmVlLiBJJiMzOTtsbCBwcm9iYWJseSBsZXZlcmFnZSBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgdmFyaWF0aW9ucyBsaWtlIGAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldGAgd2hpY2ggSSB3aWxsIHdhbnQgdG8gZXhjbHVkZS4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IGxpbmVzIHdoaWxlIHNraXBwaW5nIG92ZXIgdGhlIGNvbW1lbnQgbGluZXMuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIG91dCBmb3IgYW55dGhpbmcgY29uZGl0aW9uYWxseSBkZWZpbmVkLiBPbmNlIEkgaGF2ZSB0aGUgaW5pdGlhbCBoaXQgbGlzdCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gZWFjaCBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQg4oCTIHdoaWNoIGFyY2hpdGVjdHVyZShzKSBvciBzdWJzeXN0ZW0ocykgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoLCB3aGF0IG90aGVyIG9wdGlvbnMgaXQgZGVwZW5kcyBvbiBvciBpcyBkZXBlbmRlbnQgb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIGNvbXBsZXRlIG1hcCBvZiBob3cgYEhVR0VUTEJGU2AgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIHNvbWUgbWFudWFsIGluc3BlY3Rpb24gb2YgdGhlIHJlc3VsdHMgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBhbmQgdW5kZXJzdGFuZCB0aGUgbnVhbmNlZCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGlzIG9yZ2FuaXplZCwgbWF5YmUgdXNlIGEgc2NyaXB0IHRvIHBhcnNlIHRoZSBvdXRwdXQgaW50byBhIG1vcmUgdXNhYmxlIGZvcm1hdCBhcyBJIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4ODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgcHJpb3IgZXhwZXJpZW5jZSwgSSBhbnRpY2lwYXRlIHRoYXQgc2VjdGlvbiBvZiB0aGUgZmlsZSB0byBwcm92aWRlIHNvbWUgaGlnaC1sZXZlbCBjb250ZXh0LCBhbmQgYXQgbGluZSAyNDcgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgSSBjYW4gb2Z0ZW4gZmluZCBpbml0aWFsIGRlY2xhcmF0aW9ucyBpbiB0aGF0IGdlbmVyYWwgYXJlYS4gSSYjMzk7bGwgcmVhZCBhcm91bmQgdGhlcmUgYW5kIHF1aWNrbHkgc2NhbiBmb3IgYW55IHJlbGF0ZWQgc3ltYm9scyBvciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjQ4Olx0XHRkZWZfYm9vbCBuXG4gMjQ5Olx0XG4gMjUwOlx0bWVudWNvbmZpZyBIVUdFVExCRlNcbiAyNTE6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMjUyOlx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjUzOlx0XHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4gMjU0Olx0XHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxuIDI1NTpcdFx0aGVscFxuIDI1NjpcdFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG4gMjU3Olx0XHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcbiAyNTg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAyNTk6XHRcbiAyNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjE6XHRcbiAyNjI6XHRpZiBIVUdFVExCRlNcbiAyNjM6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuIDI2NDpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4gMjY1Olx0XHRkZWZhdWx0IG5cbiAyNjY6XHRcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNjc6XHRcdGhlbHBcbiAyNjg6XHRcdCAgVGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb2ZmLiBTYXkgWSBoZXJlIHRvXG4gMjY5Olx0XHQgIGVuYWJsZSBIVk8gYnkgZGVmYXVsdC4gSXQgY2FuIGJlIGRpc2FibGVkIHZpYSBodWdldGxiX2ZyZWVfdm1lbW1hcD1vZmZcbiAyNzA6XHRcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG4gMjcxOlx0ZW5kaWYgIyBIVUdFVExCRlNcbiAyNzI6XHRcbiAyNzM6XHRjb25maWcgSFVHRVRMQl9QQUdFXG4gMjc0Olx0XHRkZWZfYm9vbCBIVUdFVExCRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MzgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBjZ3JvdXBzIGFuZCBodWdldGxiIGNoYXJnaW5nIGFyZSBpbnRlcmFjdGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aWVkIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gV2hhdCBhcmUgdGhlIGtub2JzIHRoYXQgcmVhbGx5IGFmZmVjdCBob3cgaHVnZXRsYiBtZW1vcnkgaXMgYWNjb3VudGVkIGZvciBhbmQgY2hhcmdlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgbWFuYWdlbWVudC4gR290dGEgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTUzPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTYwLXtcbi0tXG5tbS9odWdldGxiLmM9MjgyOT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjg4NC1cbm1tL2h1Z2V0bGIuYzoyODg1Olx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG5tbS9odWdldGxiLmMtMjg4Ni1cdC8qXG5tbS9odWdldGxiLmMtMjg4Ny1cdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbm1tL2h1Z2V0bGIuYzoyODg4Olx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxubW0vaHVnZXRsYi5jLTI4ODktXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cbi0tXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUyMzUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNDQtICovXG5tbS9tZW1jb250cm9sLmM6NTI0NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTI0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgTWVtb3J5IENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBHdWFyZHMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIGd1YXJkcyBpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBzdGFydCBhcm91bmQgbGluZSA1MjQ1LiBJIHN1c3BlY3QgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtYWNyb3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZlcyBiYXNlZCBvbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgZ3VhcmRzIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBjb250cm9sIGZsb3cgYW5kIHdoYXQgaW1wYWN0IHRoZXkgaGF2ZSBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGlzIHNob3VsZCBjbGFyaWZ5IGhvdyB0aGlzIGZlYXR1cmUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyMzA6XHRcdHJldHVybiByZXQ7XG41MjMxOlx0fVxuNTIzMjpcdFxuNTIzMzpcdC8qKlxuNTIzNDpcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbjUyMzU6XHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbjUyMzY6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjUyMzc6XHQgKlxuNTIzODpcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXG41MjM5Olx0ICogYWxyZWFkeSBiZWVuIG9idGFpbmVkIGFuZCBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBodWdldGxiIGNncm91cFxuNTI0MDpcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxuNTI0MTpcdCAqXG41MjQyOlx0ICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cbjUyNDM6XHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxuNTI0NDpcdCAqL1xuNTI0NTpcdGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbjUyNDY6XHR7XG41MjQ3Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbjUyNDg6XHRcdGludCByZXQgPSAwO1xuNTI0OTpcdFxuNTI1MDpcdFx0LypcbjUyNTE6XHRcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcbjUyNTI6XHRcdCAqIHN5c3RlbS1sZXZlbCBzdGF0cyB2aWEgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvLiBSZXR1cm4gMCwgYW5kIHNraXBcbjUyNTM6XHRcdCAqIGNoYXJnaW5nIHRoZSBtZW1jZy5cbjUyNTQ6XHRcdCAqL1xuNTI1NTpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XG41MjU2Olx0XHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjUyNTc6XHRcdFx0Z290byBvdXQ7XG41MjU4Olx0XG41MjU5Olx0XHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbjUyNjA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjUyNjE6XHRcbjUyNjI6XHRvdXQ6XG41MjYzOlx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG41MjY0Olx0XHRyZXR1cm4gcmV0O1xuNTI2NTpcdH1cbjUyNjY6XHRcbjUyNjc6XHQvKipcbjUyNjg6XHQgKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cbjUyNjk6XHQgKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIHdpdGggSHVnZVRMQnMuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgYW5kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBtZW1jZ19hY2NvdW50c19odWdldGxiKClgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGxpa2VseSB0aWVkIHRvIHNvbWUga2VybmVsIGNvbXBpbGUtdGltZSBmbGFnIG9yIG1vZHVsZSBwYXJhbWV0ZXIuIEdyYWJiaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgdGFraW5nIGEgcXVpY2sgbG9vayB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGlzIGNoZWNrIGlzIGRvbmUgdG8gZGVjaWRlIHdoZXRoZXIgYWNjb3VudGluZyBpcyBlbmFibGVkIG9yIG5vdC4gRnJvbSB0aGVyZSBJJiMzOTtsbCBiZSBhYmxlIHRvIHRyYWNlIGhvdyB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQmIzM5O3MgdGhlIGJlc3QgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfYWNjb3VudHNfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MTcxOT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MjYtI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYzoxNzI3OnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcbm1tL21lbWNvbnRyb2wuYy0xNzI4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTczMS0jZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9tZW1jb250cm9sLmM6MTczMjpzdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19odWdldGxiKHZvaWQpXG5tbS9tZW1jb250cm9sLmMtMTczMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc1OC1cdFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6MTc1OTpcdFx0XHQhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpKVxubW0vbWVtY29udHJvbC5jLTE3NjAtXHRcdFx0Y29udGludWU7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyNDU9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjU0LVx0ICovXG5tbS9tZW1jb250cm9sLmM6NTI1NTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxubW0vbWVtY29udHJvbC5jLTUyNTYtXHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBBY2NvdW50aW5nIHdpdGhpbiBNZW1vcnkgQ29udHJvbCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IGh1Z2UgcGFnZXMgYXJlIGFjY291bnRlZCBmb3IgdW5kZXIgbWVtb3J5IGNvbnRyb2wuIFRoZSBzdGFydGluZyBwb2ludCBpcyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAsIHNwZWNpZmljYWxseSBpbiBgbW0vbWVtY29udHJvbC5jOjE3MjdgLiBUaGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgKnNob3VsZCogYmUgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkgY2hhbmdlcyBvciBpZiB0aGlzIGlzIHBlcmZvcm1pbmcgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseT8gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGFjY291bnRpbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYmVjYXVzZSBtaXNtYW5hZ2VkIEh1Z2VUTEIgYWxsb2NhdGlvbiBjYW4gbGVhZCB0byBzZXJpb3VzIHBlcmZvcm1hbmNlIGlzc3VlcywgcmlnaHQ/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhbGwgd29ya2luZyBhcyBleHBlY3RlZCB1bmRlciBhbGwgc2NlbmFyaW9zLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gQW55IGNoYW5jZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3IgZGVhZGxvY2sgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgbG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGUgaW50ZXJmYWNlIGlzIHNjYWxhYmxlIGFuZCByb2J1c3QgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFRoZXJlIGFyZSBnb2luZyB0byBiZSBhIGxvdCBvZiBsaXR0bGUgZGV0YWlscyBpbiBoZXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzI1Olx0XG4xNzI2Olx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbjE3Mjc6XHRzdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19odWdldGxiKHZvaWQpXG4xNzI4Olx0e1xuMTcyOTpcdFx0cmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfSFVHRVRMQl9BQ0NPVU5USU5HO1xuMTczMDpcdH1cbjE3MzE6XHQjZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4xNzMyOlx0c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxuMTczMzpcdHtcbjE3MzQ6XHRcdHJldHVybiBmYWxzZTtcbjE3MzU6XHR9XG4xNzM2Olx0I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbjE3Mzc6XHRcbjE3Mzg6XHRzdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuMTczOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2VwYWdlIEFsbG9jYXRpb24gYW5kIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBNRU1DR2AsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIG9yIGNhbGxlcnMgdGhhdCBhcmUgaW52b2x2ZWQgaGVyZS4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBkb2luZy4gUmlnaHQsIGl0JiMzOTtzIHRoZSBjb3JlIG9mIGh1Z2VwYWdlIGFsbG9jYXRpb24uIEkgc2VlIHRoYXQsIGlmIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmYWlscywgdGhlIGxvZ2ljIGhhcyBiZWVuIHVwZGF0ZWQuIFByZXZpb3VzbHksIGl0IHdvdWxkIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCBhbmQgcmV0dXJuIGAtRU5PTUVNYC4gTm93LCBpdCBjYWxscyBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybnMgYEVSUl9QVFIoLUVOT1NQQylgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgKndoeSogdGhlIGNoYW5nZSBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIHRvIGBmb2xpb19wdXRgLiBBaCwgdGhlIHJlZmNvdW50aW5nISBXaGVuIGEgaHVnZSBwYWdlIGlzIGFsbG9jYXRlZCBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIHRoZSByZWZjb3VudCBnZXRzIGVpdGhlciBmcm96ZW4gYW5kIHVuZnJvemVuIHdpdGggYGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSlgIG9yIGluY3JlbWVudGVkIHdpdGggYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AuIElmIHdlIGp1c3QgY2FsbGVkIGBmcmVlX2h1Z2VfZm9saW9gIGRpcmVjdGx5LCB0aGUgcmVmY291bnQgbWlnaHQgbm90IGhhdmUgYmVlbiBwcm9wZXJseSBkZWNyZW1lbnRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBwYWdlIGRlc3RydWN0b3JzIG9yIG90aGVyIHJlZmNvdW50IGlzc3Vlcy4gYGZvbGlvX3B1dGAsIG9uIHRoZSBvdGhlciBoYW5kLCAqYWx3YXlzKiBkZWNyZW1lbnRzIHRoZSByZWZjb3VudCBhbmQsIHdoZW4gaXQgaGl0cyB6ZXJvLCB0cmlnZ2VycyB0aGUgY29ycmVjdCBkZXN0cnVjdG9yIHdoaWNoIGZyZWVzIHRoZSBodWdlIGZvbGlvIGFuZCB1bmNoYXJnZXMgdGhlIGNncm91cCBwcm9wZXJseS4KClRoZSBvdGhlciBwb2ludCBpcyB0aGUgZXJyb3IgY29kZSBjaGFuZ2UgdG8gYC1FTk9TUENgIGluc3RlYWQgb2YgYC1FTk9NRU1gLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIGhvdyB0aGUgY2FsbGVycyBoYW5kbGUgdGhlIGVycm9yLiBGb3IgZXhhbXBsZSwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBmYXVsdCBoYW5kbGVycywgcmV0dXJuaW5nIGAtRU5PU1BDYCB0cmFuc2xhdGVzIHRvIGBWTV9GQVVMVF9TSUdCVVNgIGluc3RlYWQgb2YgYFZNX0ZBVUxUX09PTWAuIFRoaXMgd2lsbCBiZSBrZXkuIEkgbmVlZCB0byBleGFtaW5lIGhvdyB0aGVzZSBjYWxsZXJzIHJlYWN0IHRvIHRoZXNlIGRpZmZlcmVudCBlcnJvciBjb2Rlcy4gSXQmIzM5O3MgdGltZSB0byByZWFkIHRocm91Z2ggYG1tL2h1Z2V0bGIuY2AgYXJvdW5kIGZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX25vX3BhZ2VgIGFuZCBgaHVnZXRsYl93cGAgdG8gZ2V0IHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTgyMDpcdFx0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuNTgyMTpcdFx0XHRcdFx0Z290byBvdXQ7XG41ODIyOlx0XHRcdH1cbjU4MjM6XHRcbjU4MjQ6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcbjU4MjU6XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjU4MjY6XHRcdFx0XHQvKlxuNTgyNzpcdFx0XHRcdCAqIFJldHVybmluZyBlcnJvciB3aWxsIHJlc3VsdCBpbiBmYXVsdGluZyB0YXNrIGJlaW5nXG41ODI4Olx0XHRcdFx0ICogc2VudCBTSUdCVVMuICBUaGUgaHVnZXRsYiBmYXVsdCBtdXRleCBwcmV2ZW50cyB0d29cbjU4Mjk6XHRcdFx0XHQgKiB0YXNrcyBmcm9tIHJhY2luZyB0byBmYXVsdCBpbiB0aGUgc2FtZSBwYWdlIHdoaWNoXG41ODMwOlx0XHRcdFx0ICogY291bGQgcmVzdWx0IGluIGZhbHNlIHVuYWJsZSB0byBhbGxvY2F0ZSBlcnJvcnMuXG41ODMxOlx0XHRcdFx0ICogUGFnZSBtaWdyYXRpb24gZG9lcyBub3QgdGFrZSB0aGUgZmF1bHQgbXV0ZXgsIGJ1dFxuNTgzMjpcdFx0XHRcdCAqIGRvZXMgYSBjbGVhciB0aGVuIHdyaXRlIG9mIHB0ZSYjMzk7cyB1bmRlciBwYWdlIHRhYmxlXG41ODMzOlx0XHRcdFx0ICogbG9jay4gIFBhZ2UgZmF1bHQgY29kZSBjb3VsZCByYWNlIHdpdGggbWlncmF0aW9uLFxuNTgzNDpcdFx0XHRcdCAqIG5vdGljZSB0aGUgY2xlYXIgcHRlIGFuZCB0cnkgdG8gYWxsb2NhdGUgYSBwYWdlXG41ODM1Olx0XHRcdFx0ICogaGVyZS4gIEJlZm9yZSByZXR1cm5pbmcgZXJyb3IsIGdldCBwdGwgYW5kIG1ha2VcbjU4MzY6XHRcdFx0XHQgKiBzdXJlIHRoZXJlIHJlYWxseSBpcyBubyBwdGUgZW50cnkuXG41ODM3Olx0XHRcdFx0ICovXG41ODM4Olx0XHRcdFx0aWYgKGh1Z2V0bGJfcHRlX3N0YWJsZShoLCBtbSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VvcmlnX3B0ZSkpXG41ODM5Olx0XHRcdFx0XHRyZXQgPSB2bWZfZXJyb3IoUFRSX0VSUihmb2xpbykpO1xuNTg0MDpcdFx0XHRcdGVsc2VcbjU4NDE6XHRcdFx0XHRcdHJldCA9IDA7XG41ODQyOlx0XHRcdFx0Z290byBvdXQ7XG41ODQzOlx0XHRcdH1cbjU4NDQ6XHRcdFx0Zm9saW9femVyb191c2VyKGZvbGlvLCB2bWYtXHUwMDNlcmVhbF9hZGRyZXNzKTtcbjU4NDU6XHRcdFx0X19mb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbjU4NDY6XHRcdFx0bmV3X2ZvbGlvID0gdHJ1ZTtcbjU4NDc6XHRcbjU4NDg6XHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpIHtcbjU4NDk6XHRcdFx0XHRpbnQgZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywgbWFwcGluZyxcbjU4NTA6XHRcdFx0XHRcdFx0XHRcdHZtZi1cdTAwM2VwZ29mZik7XG41ODUxOlx0XHRcdFx0aWYgKGVycikge1xuNTg1MjpcdFx0XHRcdFx0LypcbjU4NTM6XHRcdFx0XHRcdCAqIGVyciBjYW4mIzM5O3QgYmUgLUVFWElTVCB3aGljaCBpbXBsaWVzIHNvbWVvbmVcbjU4NTQ6XHRcdFx0XHRcdCAqIGVsc2UgY29uc3VtZWQgdGhlIHJlc2VydmF0aW9uIHNpbmNlIGh1Z2V0bGJcbjU4NTU6XHRcdFx0XHRcdCAqIGZhdWx0IG11dGV4IGlzIGhlbGQgd2hlbiBhZGQgYSBodWdldGxiIHBhZ2VcbjU4NTY6XHRcdFx0XHRcdCAqIHRvIHRoZSBwYWdlIGNhY2hlLiBTbyBpdCYjMzk7cyBzYWZlIHRvIGNhbGxcbjU4NTc6XHRcdFx0XHRcdCAqIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpIGhlcmUuXG41ODU4Olx0XHRcdFx0XHQgKi9cbjU4NTk6XHRcdFx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCB2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk3MwoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA1OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IEh1Z2VUTEIgTWVtb3J5IEFsbG9jYXRpb24gRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSA1ODM5IGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ6IGByZXQgPSB2bWZfZXJyb3IoUFRSX0VSUihmb2xpbykpO2AuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGB2bWZfZXJyb3JgIGhhbmRsZXMgdGhlIGAtRU5PTUVNYCBhbmQgYC1FTk9TUENgIGVycm9ycy4gYHZtZl9lcnJvcigtRU5PTUVNKWAgdHJhbnNsYXRlcyB0byBgVk1fRkFVTFRfT09NYCwgYW5kIGB2bWZfZXJyb3IoLUVOT1NQQylgIG1hcHMgdG8gYFZNX0ZBVUxUX1NJR0JVU2AuIFByZXZpb3VzbHksIGFuIGAtRU5PTUVNYCB3b3VsZCB0cmlnZ2VyIGFuIE9PTSByZXNwb25zZSwgd2hpY2ggaXMgcHJvYmxlbWF0aWMgZm9yIEh1Z2VUTEIgYmVjYXVzZSB0aGUgT09NIGtpbGxlciAqZG9lc24mIzM5O3QqIHJlY2xhaW0gSHVnZVRMQiBwYWdlcy4gVGhpcyByZXN1bHRzIGluIGZ1dGlsZSByZXRyaWVzLiBTd2l0Y2hpbmcgdG8gYC1FTk9TUENgIGFuZCB0aHVzIGBWTV9GQVVMVF9TSUdCVVNgIHNlZW1zIGxpa2UgYSBtb3JlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgoKTm93LCBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSByZWFjaGFibGU/IEFic29sdXRlbHkuIFRoZSBgbW0vaHVnZXRsYi5jYCBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgbWFkdmlzZWAsIGFuZCBvcGVyYXRpb25zIG9uIHRoZSBgaHVnZXRsYmZzYCBmaWxlc3lzdGVtLiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGUgZnV6emluZyBzdWl0YWJpbGl0eSBhcHBlYXJzIGhpZ2guCgpGaXJzdCwgSSBjb25maXJtIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnLiBDaGVjay4KClNlY29uZCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIGluIHBsYWNlLiBXZSBuZWVkIGBIVUdFVExCRlNgIChvciBgSFVHRVRMQl9QQUdFYCwgYnV0IGBIVUdFVExCRlNgIGlzIHdoYXQgdGhlIHVzZXIgY29uZmlndXJlcyBpbiBgbWVudWNvbmZpZ2ApLiBXZSBhbHNvIG5lZWQgYE1FTUNHYCBmb3IgdGhlIG1lbV9jZ3JvdXAgY2hhcmdpbmcgb24gaHVnZSBwYWdlcyBhbmQgYENHUk9VUF9IVUdFVExCYCBmb3Igb3B0aW9uYWwgc3VwcG9ydC4gQWxsIG9mIHRoZXNlIGFyZSByZWxldmFudCwgbWFraW5nIHRoaXMgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0LiBDaGVjay4KClRoaXJkLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgZm9jdXMgc3ltYm9scz8gSSYjMzk7bSBsaXN0aW5nIHRoZXNlOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgSSB1bmRlcnN0YW5kIHRoZXNlIGFuZCB0aGVpciBjb250ZXh0LiBDaGVjay4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBub3QgYSBnZW5lcmljIHBhZ2UgYWxsb2NhdG9yIHRoYXQgd291bGQgcHJvZHVjZSB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMgZHVyaW5nIGZ1enppbmcuIE5vbmUgb2YgdGhlIGxpc3RlZCBzeW1ib2xzIGFyZSB1YmlxdWl0b3VzIG9yIGdlbmVyYWwgYWxsb2NhdG9ycyBsaWtlIGBhbGxvY19wYWdlc2AsIGBwYWdlX2ZhdWx0YCwgb3IgYGttYWxsb2NgLiBUaGV5JiMzOTtyZSBzcGVjaWZpYyB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGFyZSBhbGwgdGlnaHRseSBib3VuZCB0byB0aGUgSHVnZVRMQiBmZWF0dXJlLiBDaGVjay4KClNvLCBsZXQmIzM5O3MgcmVpdGVyYXRlIHRvIHZlcmlmeToKCjEuICBgV29ydGhGdXp6aW5nOiB0cnVlYAoyLiAgYEZvY3VzU3ltYm9sc2A6IGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAKMy4gIGBFbmFibGVDb25maWdzYDogYEhVR0VUTEJGU2AsIGBNRU1DR2AKNC4gIGBSZWFzb25pbmdgOiBIYW5kbGluZyBgLUVOT01FTWAgd2l0aCBgVk1fRkFVTFRfT09NYCBsZWFkcyB0byBmdXRpbGUgcmV0cmllcyBvbiBIdWdlVExCIHBhZ2VzLCBhbmQgY2hhbmdpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGAtRU5PU1BDYCBhbmQgYFZNX0ZBVUxUX1NJR0JVU2Agc2VlbXMgdG8gYmUgYSB2YWxpZCBpbXByb3ZlbWVudC4gVGhlIGlkZW50aWZpZWQgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgSHVnZVRMQiBmZWF0dXJlIGFuZCB0aHVzIGEgZ29vZCBmdXp6aW5nIHRhcmdldC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3ItaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZXRsYi5jIChodWdldGxiX2FsbG9jX2ZvbGlvKSB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbHMsIHJlcGxhY2luZyBmcmVlX2h1Z2VfZm9saW8gd2l0aCBmb2xpb19wdXQgYW5kIHJldHVybmluZyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IGZ1dGlsZSBmYXVsdCByZXRyaWVzLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYXJnaW5nIHBhdGhzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgaHVnZXRsYmZzIG9wZXJhdGlvbnMgYW5kIE1BUF9IVUdFVExCIGZhdWx0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2V0bGIuYyAoaHVnZXRsYl9hbGxvY19mb2xpbykgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxzLCByZXBsYWNpbmcgZnJlZV9odWdlX2ZvbGlvIHdpdGggZm9saW9fcHV0IGFuZCByZXR1cm5pbmcgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCBmdXRpbGUgZmF1bHQgcmV0cmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFyZ2luZyBwYXRocyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGh1Z2V0bGJmcyBvcGVyYXRpb25zIGFuZCBNQVBfSFVHRVRMQiBmYXVsdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYDogaXQgcmVwbGFjZXMgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgdG8gYC1FTk9TUENgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjkzNzU3MjM0MjE4NzFkYTkwMWE0MTZhMDdmY2FiMjM1NjY5ZDliYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTc6NDM6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNGY2ZjU4YmYzZGI2Yy4uZjViODUzYTUzNzdjMiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjgyNSw3ICYjNDM7MjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCkKICAqCiAgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZvbGlvLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuCiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS4KLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLgogICovCiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKQpAQCAtMjg5MiwxMyAmIzQzOzI4OTEsMTcgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7CiAKIAlpZiAocmV0ID09IC1FTk9NRU0pIHsKLQkJZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCWZvbGlvX3B1dChmb2xpbyk7CiAJCS8qCiAJCSAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlcwogCQkgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvCiAJCSAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC4KIAkJICovCi0JCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CQkvKgomIzQzOwkJICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6CiYjNDM7CQkgKiB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkIGZvciBIdWdlVExCLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIAl9CiAKIAlyZXR1cm4gZm9saW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIGBtbS9odWdldGxiLmNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgY3JpdGljYWwgc3BvdCBmb3IgYWxsb2NhdGlvbiBsb2dpYyBpbiB0aGUgaHVnZSBwYWdlIHN5c3RlbSwgc28gd29ydGggYSBjbG9zZXIgbG9vay4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgc28gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBodWdldGxiLmNgIGFuZCBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmVzIDI4MjUgdG8gMjkwMC4gSSBjYW4gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGlzb2xhdGUgdGhhdCBzZWN0aW9uIGFuZCBnaXZlIG15c2VsZiBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zIHRoZSBwYXRjaCBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgyNTpcdCAqXG4yODI2Olx0ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuMjgyNzpcdCAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLlxuMjgyODpcdCAqL1xuMjgyOTpcdHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuMjgzMDpcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4yODMxOlx0e1xuMjgzMjpcdFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuMjgzMzpcdFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG4yODM0Olx0XHRib29sIHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gPSBhbGxvY19mbGFncyBcdTAwMjZcbjI4MzU6XHRcdFx0XHRcdCAgICAgIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4yODM2Olx0XHRzaXplX3QgbnJfcGFnZXMgPSBwYWdlc19wZXJfaHVnZV9wYWdlKGgpO1xuMjgzNzpcdFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xuMjgzODpcdFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbjI4Mzk6XHRcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbjI4NDA6XHRcdGludCBpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG4yODQxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMjg0MjpcdFx0aW50IHJldDtcbjI4NDM6XHRcbjI4NDQ6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCBcdTAwMjZcdTAwMjZcbjI4NDU6XHRcdCAgICBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgXHUwMDI2aF9jZ19yc3ZkKSlcbjI4NDY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4yODQ3Olx0XG4yODQ4Olx0XHRpZiAoaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBcdTAwMjZoX2NnKSkge1xuMjg0OTpcdFx0XHRyZXQgPSAtRU5PU1BDO1xuMjg1MDpcdFx0XHRnb3RvIGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkO1xuMjg1MTpcdFx0fVxuMjg1MjpcdFxuMjg1MzpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg1NDpcdFxuMjg1NTpcdFx0Zm9saW8gPSBOVUxMO1xuMjg1NjpcdFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4yODU3Olx0XHRcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xuMjg1ODpcdFxuMjg1OTpcdFx0aWYgKCFmb2xpbykge1xuMjg2MDpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI4NjE6XHRcdFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xuMjg2MjpcdFx0XHRpZiAoIWZvbGlvKSB7XG4yODYzOlx0XHRcdFx0cmV0ID0gLUVOT1NQQztcbjI4NjQ6XHRcdFx0XHRnb3RvIGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDtcbjI4NjU6XHRcdFx0fVxuMjg2NjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yODY3Olx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2aC1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbjI4Njg6XHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcbjI4Njk6XHRcdH1cbjI4NzA6XHRcbjI4NzE6XHRcdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XG4yODcyOlx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG4yODczOlx0XHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4yODc0Olx0XHR9XG4yODc1Olx0XG4yODc2Olx0XHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlKGlkeCwgbnJfcGFnZXMsIGhfY2csIGZvbGlvKTtcbjI4Nzc6XHRcbjI4Nzg6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCkge1xuMjg3OTpcdFx0XHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxuMjg4MDpcdFx0XHRcdFx0XHRcdCAgZm9saW8pO1xuMjg4MTpcdFx0fVxuMjg4MjpcdFxuMjg4MzpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yODg0Olx0XG4yODg1Olx0XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbjI4ODY6XHRcdC8qXG4yODg3Olx0XHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXG4yODg4Olx0XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG4yODg5Olx0XHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cbjI4OTA6XHRcdCAqL1xuMjg5MTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XG4yODkyOlx0XG4yODkzOlx0XHRpZiAocmV0ID09IC1FTk9NRU0pIHtcbjI4OTQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI4OTU6XHRcdFx0LypcbjI4OTY6XHRcdFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXG4yODk3Olx0XHRcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cbjI4OTg6XHRcdFx0ICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLlxuMjg5OTpcdFx0XHQgKi9cbjI5MDA6XHRcdFx0LypcbjI5MDE6XHRcdFx0ICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6XG4yOTAyOlx0XHRcdCAqIHRoZSBPT00ga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQgZm9yIEh1Z2VUTEIuXG4yOTAzOlx0XHRcdCAqL1xuMjkwNDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbjI5MDU6XHRcdH1cbjI5MDY6XHRcbjI5MDc6XHRcdHJldHVybiBmb2xpbztcbjI5MDg6XHRcbjI5MDk6XHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwOlxuMjkxMDpcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwKGlkeCwgbnJfcGFnZXMsIGhfY2cpO1xuMjkxMTpcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDpcbjI5MTI6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZClcbjI5MTM6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkKTtcbjI5MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5OAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA1OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nOiBIdWdlVExCIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNvcmUgY2hhbmdlcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEZpcnN0LCB0aGUgY29kZSBjaGFuZ2VkIHdpdGhpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2A6IHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHJldHVybnMgYC1FTk9NRU1gLCBpdCBub3cgdXNlcyBgZm9saW9fcHV0KGZvbGlvKWAgaW5zdGVhZCBvZiBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAsIGFuZCByZXR1cm5zIGAtRU5PU1BDYCBpbnN0ZWFkIG9mIGAtRU5PTUVNYC4gVGhlIGNoYW5nZSBpcyBhYm91dCByZWZjb3VudGluZyBhbmQgZmF1bHQgbG9vcHMgb24gbWVtY2cgY2hhcmdpbmcgZmFpbHVyZTsgc3dpdGNoaW5nIGAtRU5PTUVNYCB0byBgLUVOT1NQQ2AgaXMgdGhlIGtleS4KClNvLCBgZnJlZV9odWdlX2ZvbGlvYCB2cyBgZm9saW9fcHV0YDogdGhlIGZvcm1lciBkaXJlY3RseSBmcmVlcywgdGhlIGxhdHRlciBkZWNyZW1lbnRzIHRoZSByZWZjb3VudCwgd2hpY2ggdGhlbiAqbWF5KiBmcmVlLiBXaGVuIGBmb2xpb2AgaXMgYXQgcmVmY291bnQgMSwgYGZvbGlvX3B1dGAgZG9lcyB0aGUgc2FtZSBhcyBgZnJlZV9odWdlX2ZvbGlvYC4gVGhlIHJldHVybiBjb2RlIGNoYW5nZSBpcyB0byBwcmV2ZW50IHJldHJ5aW5nIGZhdWx0IGxvb3BzIG9uIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHVyZS4KCk5vdywgdGhlIGNydWNpYWwgS01TQU4gcXVlc3Rpb25zLiBEb2VzIHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4KCjEuICBEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IE5vLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LgoyLiAgRG9lcyBpdCBhZGQgb3IgbW9kaWZ5IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoZSBjcml0aWNhbCB2YXJpYWJsZSwgYHJldGAsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4KMy4gIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgdGhpcyBjb2RlIGRlYWxzIHdpdGggYGZvbGlvYCBzdHJ1Y3R1cmVzLCB3aGljaCBhcmUgYWxyZWFkeSB3ZWxsLWRlZmluZWQgbWVtb3J5IG9iamVjdHMgaW4gdGhlIGtlcm5lbC4KNC4gIERvZXMgaXQgY2hhbmdlIGJvdW5kcyBjaGVja3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBtZW1vcnkgY29weSBvcGVyYXRpb25zPyBObywgdGhpcyBwYXRjaCBpcyBpc29sYXRlZC4KNS4gIFRoaXMgaXMgYWxsIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCYjMzk7cyBoYW5kbGluZyB0aGUgcmVmY291bnQgb2YgdGhlIGBmb2xpb2Agd2l0aCB0aGUgY2hhbmdlcyBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIHRvIGBmb2xpb19wdXRgIGFuZCBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4KCkFueSBpc3N1ZXMgaGVyZSAocmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGJhZCBlcnJvciBjb2RlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMvYXNzZXJ0aW9ucy4gVGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZSBzaW5jZSB0aGVyZSBhcmUgbm8gcmlza3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gVGhlIHBhdGNoIGlzIHNpbXBseSByZXBsYWNpbmcgb25lIG1lbW9yeSBmcmVlaW5nIGZ1bmN0aW9uIHdpdGggYW5vdGhlciwgd2hpbGUgYWRqdXN0aW5nIHRoZSBlcnJvciByZXR1cm4uIFRoZXJlJiMzOTtzIG5vIHN1YnRsZSwgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhc3BlY3QgaGVyZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoZSBjaGFuZ2UgaXMgc2FmZSBpbiByZWdhcmQgdG8gS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGZyZWVpbmcgbWVjaGFuaWNzLCBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3Iga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZywgbGlmZXRpbWUgKHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlKSwgb3IgYWxsb2NhdGlvbiBsb2dpYyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGZyZWVpbmcgbWVjaGFuaWNzLCBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3Iga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZywgbGlmZXRpbWUgKHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlKSwgb3IgYWxsb2NhdGlvbiBsb2dpYyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDYuMDM4ODk3ODEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1Nzk1MzM0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2V0bGIuYyAoaHVnZXRsYl9hbGxvY19mb2xpbykgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxzLCByZXBsYWNpbmcgZnJlZV9odWdlX2ZvbGlvIHdpdGggZm9saW9fcHV0IGFuZCByZXR1cm5pbmcgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCBmdXRpbGUgZmF1bHQgcmV0cmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFyZ2luZyBwYXRocyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGh1Z2V0bGJmcyBvcGVyYXRpb25zIGFuZCBNQVBfSFVHRVRMQiBmYXVsdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0Ni4wMzg5MDM4OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODM0ODgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY5Mzc1NzIzNDIxODcxZGE5MDFhNDE2YTA3ZmNhYjIzNTY2OWQ5YmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzo0Mzo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA0ZjZmNThiZjNkYjZjLi5mNWI4NTNhNTM3N2MyIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yODI1LDcgKzI4MjUsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuICAqXFxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cXG4gICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuXFxuLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxcbiAgKi9cXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG5AQCAtMjg5MiwxMyArMjg5MSwxNyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XFxuIFxcbiBcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4tXFx0XFx0ZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuIFxcdFxcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cXG4gXFx0XFx0ICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6XFxuK1xcdFxcdCAqIHRoZSBPT00ga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQgZm9yIEh1Z2VUTEIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGZvbGlvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0Ni40OTc5MDk5MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwOTg0MjkwODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3ItaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZXRsYi5jIChodWdldGxiX2FsbG9jX2ZvbGlvKSB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbHMsIHJlcGxhY2luZyBmcmVlX2h1Z2VfZm9saW8gd2l0aCBmb2xpb19wdXQgYW5kIHJldHVybmluZyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IGZ1dGlsZSBmYXVsdCByZXRyaWVzLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYXJnaW5nIHBhdGhzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgaHVnZXRsYmZzIG9wZXJhdGlvbnMgYW5kIE1BUF9IVUdFVExCIGZhdWx0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjkzNzU3MjM0MjE4NzFkYTkwMWE0MTZhMDdmY2FiMjM1NjY5ZDliYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLmY1Yjg1M2E1Mzc3YzIgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjUsNyArMjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTIsMTMgKzI4OTEsMTcgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbiBcbiBcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZXR1cm4gLUVOT1NQQywgc2luY2UgcmV0cnlpbmcgdGhlIGZhdWx0IGlzIGZ1dGlsZTpcbitcdFx0ICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi5cbitcdFx0ICovXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDYuNDk3OTExMzAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0Mjg5NDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBIdWdlVExCIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBhbmQgYXNzZXNzIGl0cyBpbXBhY3Qgb24gdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhlIGRpZmYsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlbW92YWwgb2YgdGhlIGAtRU5PTUVNYCBlcnJvciByZXR1cm4uIFNwZWNpZmljYWxseSwgdGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIGAtRU5PU1BDYCBpbnN0ZWFkLiBMZXQgbWUgZ28gbGluZSBieSBsaW5lIHRocm91Z2ggdGhhdCBgZGlmZmAgYmxvY2ssIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbkkgc2VlIHRoZXkndmUgcmVtb3ZlZCBhIHNwZWNpZmljIGVycm9yIGNoZWNrIGFuZCBzdWJzZXF1ZW50IGZvbGlvIGZyZWVpbmcgbG9naWMuIFRoZSBvcmlnaW5hbCBjb2RlIHBhdGggc2VlbXMgdG8gaGF2ZSBoYW5kbGVkIGEgYC1FTk9NRU1gIHJldHVybiBmcm9tIGNncm91cCBjaGFyZ2luZywgZnJlZWQgdGhlIGZvbGlvLCBhbmQgdGhlbiByZXR1cm5lZCB0aGUgZXJyb3IuIE5vdywgaXQgYXBwZWFycyB0aGF0IHRoZSBmb2xpbyBpcyBiZWluZyBgZm9saW9fcHV0YCByYXRoZXIgdGhhbiBgZnJlZV9odWdlX2ZvbGlvYCwgYW5kIGAtRU5PU1BDYCBpcyByZXR1cm5lZCBpbnN0ZWFkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIFdhcyB0aGVyZSBhbiBpc3N1ZSB3aXRoIGhvdyBgLUVOT01FTWAgd2FzIGJlaW5nIGhhbmRsZWQgcHJldmlvdXNseT8gSXMgYC1FTk9TUENgIGEgbW9yZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgYW5kIHdoeSBpcyB0aGF0PyBUaGUgY29tbWVudCBtZW50aW9ucyB0aGUgT09NIGtpbGxlciBub3QgYmVpbmcgaW52b2x2ZWQgaW4gSHVnZVRMQi5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoYXQgdGhlIGNoYW5nZSBhaW1zIHRvIHByZXZlbnQgYSBmdXRpbGUgcmV0cnkgc2NlbmFyaW8gaW4gdGhlIGZhdWx0IGhhbmRsZXIsIHNpbmNlIHRoZSBPT00ga2lsbGVyIGlzbid0IHRyaWdnZXJlZCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uLiBSZXR1cm5pbmcgYC1FTk9TUENgIG1pZ2h0IHNpZ25hbCBhIG1vcmUgcGVyc2lzdGVudCByZXNvdXJjZSBleGhhdXN0aW9uLCB3aGljaCBpcyB0aGUgaW50ZW50aW9uIGluIHRoaXMgY2FzZSwgcmF0aGVyIHRoYW4gaW5kaWNhdGluZyBqdXN0IGEgdGVtcG9yYXJ5IG1lbW9yeSBzaG9ydGFnZS4gVG8gY29uZmlybSB0aGlzIGludHVpdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGhvdyBjYWxsZXJzIGhhbmRsZSBgLUVOT1NQQ2AuIFBlcmhhcHMgdGhlIHJldHVybiBvZiBgLUVOT1NQQ2AgcHJvdmlkZXMgY2xhcml0eSBhbmQgcmVkdWNlcyB0aGUgb3Bwb3J0dW5pdHkgZm9yIGEgZmF1bHQgaGFuZGxlciB0byByZXRyeSBvbiB0aGUgc2FtZSBjb25kaXRpb24uXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgbW0vaHVnZXRsYi5jYCBhcm91bmQgbGluZXMgMjgyNS0yOTEwLCBsZXQncyBzZWUgd2hhdCBlbHNlIGlzIGluIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IG1vcmUgYmFja2dyb3VuZC4gTGV0IG1lIHVzZSBgcmVhZC1maWxlYCB0byBkbyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NTAuOTQwODA4Mjc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODI1LFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODI1OlxcdCAqXFxuMjgyNjpcXHQgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZvbGlvLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuXFxuMjgyNzpcXHQgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cXG4yODI4OlxcdCAqL1xcbjI4Mjk6XFx0c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuMjgzMDpcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXFxuMjgzMTpcXHR7XFxuMjgzMjpcXHRcXHRib29sIGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkID0gYWxsb2NfZmxhZ3MgXFx1MDAyNlxcbjI4MzM6XFx0XFx0XFx0XFx0XFx0XFx0ICBIVUdFVExCX0FMTE9DX0NIQVJHX0NHUk9VUF9SU1ZEO1xcbjI4MzQ6XFx0XFx0Ym9vbCB1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uID0gYWxsb2NfZmxhZ3MgXFx1MDAyNlxcbjI4MzU6XFx0XFx0XFx0XFx0XFx0ICAgICAgSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcXG4yODM2OlxcdFxcdHNpemVfdCBucl9wYWdlcyA9IHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCk7XFxuMjgzNzpcXHRcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dfcnN2ZCA9IE5VTEw7XFxuMjgzODpcXHRcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbjI4Mzk6XFx0XFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjI4NDA6XFx0XFx0aW50IGlkeCA9IGhzdGF0ZV9pbmRleChoKTtcXG4yODQxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMjg0MjpcXHRcXHRpbnQgcmV0O1xcbjI4NDM6XFx0XFxuMjg0NDpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgXFx1MDAyNlxcdTAwMjZcXG4yODQ1OlxcdFxcdCAgICBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgXFx1MDAyNmhfY2dfcnN2ZCkpXFxuMjg0NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4yODQ3OlxcdFxcbjI4NDg6XFx0XFx0aWYgKGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgXFx1MDAyNmhfY2cpKSB7XFxuMjg0OTpcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbjI4NTA6XFx0XFx0XFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4yODUxOlxcdFxcdH1cXG4yODUyOlxcdFxcbjI4NTM6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODU0OlxcdFxcbjI4NTU6XFx0XFx0Zm9saW8gPSBOVUxMO1xcbjI4NTY6XFx0XFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXFxuMjg1NzpcXHRcXHRcXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIG1wb2xpKTtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0aWYgKCFmb2xpbykge1xcbjI4NjA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4NjE6XFx0XFx0XFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xcbjI4NjI6XFx0XFx0XFx0aWYgKCFmb2xpbykge1xcbjI4NjM6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT1NQQztcXG4yODY0OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwO1xcbjI4NjU6XFx0XFx0XFx0fVxcbjI4NjY6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODY3OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2aC1cXHUwMDNlaHVnZXBhZ2VfYWN0aXZlbGlzdCk7XFxuMjg2ODpcXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xcbjI4Njk6XFx0XFx0fVxcbjI4NzA6XFx0XFxuMjg3MTpcXHRcXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xcbjI4NzI6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4yODczOlxcdFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbjI4NzQ6XFx0XFx0fVxcbjI4NzU6XFx0XFxuMjg3NjpcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlKGlkeCwgbnJfcGFnZXMsIGhfY2csIGZvbGlvKTtcXG4yODc3OlxcdFxcbjI4Nzg6XFx0XFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XFxuMjg3OTpcXHRcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxcbjI4ODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuMjg4MTpcXHRcXHR9XFxuMjg4MjpcXHRcXG4yODgzOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODg0OlxcdFxcbjI4ODU6XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuMjg4NjpcXHRcXHQvKlxcbjI4ODc6XFx0XFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbjI4ODg6XFx0XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbjI4ODk6XFx0XFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuMjg5MDpcXHRcXHQgKi9cXG4yODkxOlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xcbjI4OTI6XFx0XFxuMjg5MzpcXHRcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4yODk0OlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjg5NTpcXHRcXHRcXHQvKlxcbjI4OTY6XFx0XFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuMjg5NzpcXHRcXHRcXHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXFxuMjg5ODpcXHRcXHRcXHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXFxuMjg5OTpcXHRcXHRcXHQgKi9cXG4yOTAwOlxcdFxcdFxcdC8qXFxuMjkwMTpcXHRcXHRcXHQgKiBSZXR1cm4gLUVOT1NQQywgc2luY2UgcmV0cnlpbmcgdGhlIGZhdWx0IGlzIGZ1dGlsZTpcXG4yOTAyOlxcdFxcdFxcdCAqIHRoZSBPT00ga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQgZm9yIEh1Z2VUTEIuXFxuMjkwMzpcXHRcXHRcXHQgKi9cXG4yOTA0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI5MDU6XFx0XFx0fVxcbjI5MDY6XFx0XFxuMjkwNzpcXHRcXHRyZXR1cm4gZm9saW87XFxuMjkwODpcXHRcXG4yOTA5OlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjUwLjk0MTA5MDQ3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDk3OTY5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgY2FsbGVycyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aGF0KiBoYXMgY2hhbmdlZCBpbiBpdHMgdXNhZ2UgcmVjZW50bHkuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgbm93IGFuZCBob3cgaXQncyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uIEl0J3MgY3J1Y2lhbCBmb3IgbWUgdG8gaGF2ZSBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiByZWNlbnQgbW9kaWZpY2F0aW9ucy5cblxuVGhlbiwgSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBtbS9odWdldGxiLmNgIGFuZCBodWdldGxiIG1vcmUgZ2VuZXJhbGx5LiBJIGRvbid0IHdhbnQgdG8gZ2V0IGJsaW5kc2lkZWQgYnkgc29tZSBidWlsZC10aW1lIGRlcGVuZGVuY3kgdGhhdCBJIG1pc3NlZC4gVGhpcyBzdGVwIGlzIGEgbXVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NTMuODkwODg5Mzg2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDU0NjU0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9ZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwMTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODA5PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODE3LS8qKlxcbm1tL2h1Z2V0bGIuYzoyODE4OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXFxubW0vaHVnZXRsYi5jLTI4MTktICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyODI5OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0yODMwLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDI3LVxcbm1tL2h1Z2V0bGIuYzozMDI4OlxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtMzAyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NTUuODM2MzY0NTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAwNzk5NjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBpdHMgQ2FsbCBTaXRlcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhpcyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGh1Z2UgcGFnZSBhbGxvY2F0aW9uLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGtlcm5lbCB3aGVyZSB0aGlzIGZ1bmN0aW9uLCBvciBpdHMgYWxpYXMgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBpcyBiZWluZyBpbnZva2VkLiBUaGF0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuXG5JJ20gdGhpbmtpbmcsIFwiV2hlcmUgZG9lcyB0aGUgc3lzdGVtIGRlY2lkZSBpdCBuZWVkcyBhIGh1Z2UgcGFnZT8gV2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhpcyBhbGxvY2F0aW9uP1wiIEJ5IHRyYWNpbmcgYmFjayBmcm9tIHRoZSBjYWxsIHNpdGVzLCBJIGNhbiBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MgdGhpcyBmdW5jdGlvbiBzdXBwb3J0cy4gRm9yIGluc3RhbmNlLCBJJ2xsIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNhbGxlcnMgYXJlIGluIHVzZXItc3BhY2UsIGtlcm5lbC1zcGFjZSwgb3IgYm90aC4gQW5kLCBmdXJ0aGVyLCB3aGV0aGVyIG9yIG5vdCB0aGUgY2FsbGVycyBoYXZlIHRoZWlyIG93biBhbGxvY2F0aW9uIHN0cmF0ZWd5IHdoaWNoIHdpbGwgYWx0ZXIgaG93IGBhbGxvY19odWdldGxiX2ZvbGlvYCBiZWhhdmVzLlxuXG5CZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtub3cgKmhvdyogaXQncyBiZWluZyB1c2VkLiBJcyB0aGlzIGZ1bmN0aW9uIGNyaXRpY2FsIHBhdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzPyBMb29raW5nIGF0IHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXQgZWFjaCBjYWxsIHNpdGUgd2lsbCBiZSBrZXkuIERvZXMgaXQgZGV0ZXJtaW5lIHRoZSBzaXplPyBBcmUgc3BlY2lmaWMgZmxhZ3Mgc2V0IGZvciBtZW1vcnkgYXR0cmlidXRlcyBvciBwZXJtaXNzaW9ucz8gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgY29tcG9uZW50IGFuZCBpdHMgZGVwZW5kZW5jeSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MDEuODQ0MzYzNjI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYyMTkwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE4MT1hcmUgYWxsb2NhdGVkIGFuZCBpbnN0YW50aWF0ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWFwcGluZy4gIFRoZSBhbGxvY2F0aW9uXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODI6aXMgcGVyZm9ybWVkIHdpdGhpbiB0aGUgcm91dGluZSBhbGxvY19odWdldGxiX2ZvbGlvKCk6OlxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTgzLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg0OlxcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4NS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODYtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODc6YWxsb2NfaHVnZXRsYl9mb2xpbyBpcyBwYXNzZWQgYSBWTUEgcG9pbnRlciBhbmQgYSB2aXJ0dWFsIGFkZHJlc3MsIHNvIGl0IGNhblxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg4LWNvbnN1bHQgdGhlIHJlc2VydmF0aW9uIG1hcCB0byBkZXRlcm1pbmUgaWYgYSByZXNlcnZhdGlvbiBleGlzdHMuICBJbiBhZGRpdGlvbixcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4OTphbGxvY19odWdldGxiX2ZvbGlvIHRha2VzIHRoZSBhcmd1bWVudCBhdm9pZF9yZXNlcnZlIHdoaWNoIGluZGljYXRlcyByZXNlcnZlc1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTkwLXNob3VsZCBub3QgYmUgdXNlZCBldmVuIGlmIGl0IGFwcGVhcnMgdGhleSBoYXZlIGJlZW4gc2V0IGFzaWRlIGZvciB0aGVcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjA3PWlzIGNhbGxlZC4gIFRoaXMgcm91dGluZSB0YWtlcyB0d28gYXJndW1lbnRzIHJlbGF0ZWQgdG8gcmVzZXJ2YXRpb25zOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDktLSBhdm9pZF9yZXNlcnZlLCB0aGlzIGlzIHRoZSBzYW1lIHZhbHVlL2FyZ3VtZW50IHBhc3NlZCB0b1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjEwOiAgYWxsb2NfaHVnZXRsYl9mb2xpbygpLlxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjExLS0gY2hnLCBldmVuIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIG9mIHR5cGUgbG9uZyBvbmx5IHRoZSB2YWx1ZXMgMCBvciAxIGFyZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yNDc9SXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcmVzZXJ2ZSBtYXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aGUgY2FsbFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ4OnRvIHZtYV9uZWVkc19yZXNlcnZhdGlvbigpIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NfaHVnZXRsYl9mb2xpbygpIGFuZCB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0OS1jYWxsIHRvIHZtYV9jb21taXRfcmVzZXJ2YXRpb24oKSBhZnRlciB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZC4gIFRoaXMgd291bGRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTExNj1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ2OuW9k+S4jumihOeVmeebuOWFs+eahOW3qOmhteWcqOebuOW6lOeahOaYoOWwhOS4reiiq+WIhumFjeWSjOWunuS+i+WMluaXtu+8jOmihOeVmeWwseiiq+a2iOiAl+S6huOAguivpeWIhumFjeaYr+WcqOWHveaVsGFsbG9jX2h1Z2V0bGJfZm9saW8uLi5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDct5Lit6L+b6KGM55qEOjpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDgtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ5OlxcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBhdm9pZF9yZXNlcnZlKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTI6YWxsb2NfaHVnZXRsYl9mb2xpb+iiq+S8oOmAkue7meS4gOS4qlZNQeaMh+mSiOWSjOS4gOS4quiZmuaLn+WcsOWdgO+8jOWboOatpOWug+WPr+S7peafpemYhemihOeVmeaYoOWwhOS7peehruWumuaYr+WQpuWtmOWcqOmihOeVmeOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MzrmraTlpJbvvIxhbGxvY19odWdldGxiX2ZvbGlv6ZyA6KaB5LiA5Liq5Y+C5pWwYXZvaWRfcmVzZXJ2Ze+8jOivpeWPguaVsOihqOekuuWNs+S9v+eci+i1t+adpeW3sue7j+S4uuaMh+WumueahOWcsOWdgOmihOeVmeS6hlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1NC3pooTnlZnvvIzkuZ/kuI3lupTor6Xkvb/nlKjpooTnlZnjgIJhdm9pZF9yZXNlcnZl5Y+C5pWw5pyA5bi46KKr55So5LqO5YaZ5pe25ou36LSd5ZKM6aG16Z2i6L+B56e755qE5oOF5Ya15LiL77yM5Y2z546w5pyJ6aG16Z2i55qE6aKdXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNjA9dm1hX25lZWRzX3Jlc2VydmF0aW9uKCnov5Tlm57nmoTlgLzpgJrluLjkuLow5oiWMeOAguWmguaenOivpeWcsOWdgOWtmOWcqOmihOeVme+8jOWImeS4ujDvvIzlpoLmnpzkuI3lrZjlnKjpooTnlZnvvIzliJnkuLox44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTY2Oi0gYXZvaWRfcmVzZXJ2Ze+8jOi/meaYr+S8oOmAkue7mWFsbG9jX2h1Z2V0bGJfZm9saW8oKeeahOWQjOS4gOS4quWAvC/lj4LmlbDjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjctLSBjaGfvvIzlsL3nrqHov5nkuKrlj4LmlbDnmoTnsbvlnovmmK9sb25n77yM5L2G5Y+q5pyJMOaIljHnmoTlgLzooqvkvKDpgJLnu5lkZXF1ZXVlX2h1Z2VfcGFnZV92bWHjgILlpoLmnpzor6XlgLzkuLow77yMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjAzOuWcqGFsbG9jX2h1Z2V0bGJfZm9saW8oKeW8gOWni+iwg+eUqHZtYV9uZWVkc19yZXNlcnZhdGlvbigp5ZKM6aG16Z2i5YiG6YWN5ZCO6LCD55SoXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA0LXZtYV9jb21taXRfcmVzZXJ2YXRpb24oKeS5i+mXtO+8jOmihOeVmeaYoOWwhOacieWPr+iDveiiq+aUueWPmOOAguWmguaenGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc+WcqOWFsVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NzAwPXN0YXRpYyBsb25nIGh1Z2V0bGJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzkyLVxcdFxcdCAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5MzpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oXFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTQtXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxMy1cXHRcXHQgKiBmb2xpb191bmxvY2sgYmVjYXVzZSBsb2NrZWQgYnkgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODE0OlxcdFxcdCAqIGZvbGlvX3B1dCgpIGR1ZSB0byByZWZlcmVuY2UgZnJvbSBhbGxvY19odWdldGxiX2ZvbGlvKClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MTUtXFx0XFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDE9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAzOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDU6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVxcdFxcdFxcdFxcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEyMj1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjUtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEyNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI3LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXFx0XFx0XFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExNDE6YWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTQyLVxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjctXFxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjktXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODgtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIxODk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTkwLVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTIyPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cXG5tbS9odWdldGxiLmM6MjUzMDogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9odWdldGxiLmMtMjUzMS0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXFxuLS1cXG5tbS9odWdldGxiLmMtMjUzNi0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xcbm1tL2h1Z2V0bGIuYzoyNTM3OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cXG5tbS9odWdldGxiLmMtMjUzOC0gKlxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NDUtICpcXG5tbS9odWdldGxiLmM6MjU0NjogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTQ3LSAqL1xcbm1tL2h1Z2V0bGIuYz0yNTQ4PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NzQtXFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXFxubW0vaHVnZXRsYi5jOjI1NzU6XFx0XFx0XFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxcbm1tL2h1Z2V0bGIuYzoyNTc2OlxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmMtMjU3Ny1cXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5MTg9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTQzLSAqL1xcbm1tL2h1Z2V0bGIuYzoyOTQ0OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjk0NS1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4ODk9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwMTAtXFx0XFx0XFx0XFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0J3MgcHJpdmF0ZSBvd25lZCAqL1xcbm1tL2h1Z2V0bGIuYzo1MDExOlxcdFxcdFxcdFxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01MDEyLVxcdFxcdFxcdFxcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTU0ODI9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTYzLVxcdHNwaW5fdW5sb2NrKHZtZi1cXHUwMDNlcHRsKTtcXG5tbS9odWdldGxiLmM6NTU2NDpcXHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XFxubW0vaHVnZXRsYi5jLTU1NjUtXFxuLS1cXG5tbS9odWdldGxiLmM9NTc1ND1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgyMy1cXG5tbS9odWdldGxiLmM6NTgyNDpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNTgyNS1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYwMDQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjM5LSAqL1xcbm1tL2h1Z2V0bGIuYzo2MjQwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTYyNDEtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjU2LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MjU3OlxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjI1OC1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTYyNjc9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzIzLVxcbm1tL2h1Z2V0bGIuYzo2MzI0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MzI1LVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM0OS1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NjM1MDpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcXG5tbS9odWdldGxiLmMtNjM1MS1cXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM3MC1cXG5tbS9odWdldGxiLmM6NjM3MTpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjM3Mi1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2NjQ9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02Nzg0LVxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jOjY3ODU6XFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG5tbS9odWdldGxiLmMtNjc4Ni1cXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0NTYtXFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6MTQ1NzpcXHRcXHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cXHRcXHRcXHRcXHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjIxNC1cXHRcXHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xcbm1tL21pZ3JhdGUuYzoyMjE1OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcXG5tbS9taWdyYXRlLmMtMjIxNi1cXHRcXHRcXHRcXHRcXHRcXHRtdGMtXFx1MDAzZW5tYXNrLCBnZnBfbWFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MDMuODMwNTg3NTY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIzNTgxMDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSHVnZXRsYiBBbGxvY2F0aW9uIEJ1Z2ZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGNoYW5naW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmYWlscywgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcmV0dXJucyBgLUVOT01FTWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGNhbGwgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGFuZCB0aGVuIHJldHVybiB0aGUgb3JpZ2luYWwgYC1FTk9NRU1gIGVycm9yLiBOb3csIGl0IGFwcGVhcnMgdGhleSdyZSB1c2luZyBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybmluZyBgLUVOT1NQQ2AgaW5zdGVhZC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzICp3aHkqPyAgV2hhdCdzIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlPyBUaGUgYmVoYXZpb3Igc2VlbXMgc3VidGxlLiBJcyB0aGlzIGEgYnVnZml4LCBvciBhIGRlbGliZXJhdGUgY2hhbmdlIGluIHNlbWFudGljcz9cblxuVG8gdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBhY3R1YWxseSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gY29kZSBhbmQgYW55IHJlbGF0ZWQgZmF1bHQgaGFuZGxlcnMgcmVhY3QgdG8gYSBwb3RlbnRpYWwgZXJyb3IuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbW0vaHVnZXRsYi5jYCBhbmQgZm9jdXMgb24gbGluZXMgcm91Z2hseSBmcm9tIDI5NDAgdG8gMzA1MCwgd2hlcmUgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgbW9zdCBsaWtlbHkgZGVmaW5lZC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBzd2FwIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYC4gUGVyaGFwcyBgLUVOT1NQQ2AgaXMgbW9yZSBhY2N1cmF0ZSBpbiB0aGlzIGNvbnRleHQsIG9yIG1heWJlIHRoZSBjaGFuZ2UgaXMgdGllZCB0byBzb21lIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3Igb3IgaW50ZXJhY3Rpb25zIHdpdGggYGZvbGlvX3B1dGAgdGhhdCBJJ20gbm90IHNlZWluZyBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHNlZSB0aGUgbGFyZ2VyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjA3LjA2NjQwMTI2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NDAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NDA6XFx0ICogd2hpY2ggY2FzZSBldmVuIGlmIHRoZXJlJ3MgYSBwcml2YXRlIHZtYSByZXN2IG1hcCBpdCB3b24ndCBjb3ZlciBzdWNoXFxuMjk0MTpcXHQgKiBhbGxvY2F0aW9uKS4gIE5ldyBjYWxsIHNpdGVzIHNob3VsZCAocHJvYmFibHkpIG5ldmVyIHNldCBpdCB0byB0cnVlISFcXG4yOTQyOlxcdCAqIFdoZW4gaXQncyBzZXQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgYnlwYXNzIGFsbCB2bWEgbGV2ZWwgcmVzZXJ2YXRpb25zLlxcbjI5NDM6XFx0ICovXFxuMjk0NDpcXHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjk0NTpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbjI5NDY6XFx0e1xcbjI5NDc6XFx0XFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcXG4yOTQ4OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XFxuMjk0OTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI5NTA6XFx0XFx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xcbjI5NTE6XFx0XFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xcbjI5NTI6XFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcXG4yOTUzOlxcdFxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4yOTU0OlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuMjk1NTpcXHRcXHRub2RlbWFza190ICpub2RlbWFzaztcXG4yOTU2OlxcdFxcdHU4IGFsbG9jX2ZsYWdzID0gMDtcXG4yOTU3OlxcdFxcdGludCBuaWQ7XFxuMjk1ODpcXHRcXHRpbnQgcmV0O1xcbjI5NTk6XFx0XFxuMjk2MDpcXHRcXHQvKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBwZXItdm1hIHJlc2VydmF0aW9uPyAqL1xcbjI5NjE6XFx0XFx0aWYgKGNvd19mcm9tX293bmVyKSB7XFxuMjk2MjpcXHRcXHRcXHQvKlxcbjI5NjM6XFx0XFx0XFx0ICogU3BlY2lhbCBjYXNlISAgU2luY2UgaXQncyBhIENvVyBvbiB0b3Agb2YgYSByZXNlcnZlZFxcbjI5NjQ6XFx0XFx0XFx0ICogcGFnZSwgdGhlIHByaXZhdGUgcmVzdiBtYXAgZG9lc24ndCBjb3VudC4gIFNvIGl0IGNhbm5vdFxcbjI5NjU6XFx0XFx0XFx0ICogY29uc3VtZSB0aGUgcGVyLXZtYSByZXN2IG1hcCBldmVuIGlmIGl0J3MgcmVzZXJ2ZWQuXFxuMjk2NjpcXHRcXHRcXHQgKi9cXG4yOTY3OlxcdFxcdFxcdG1hcF9jaGcgPSBNQVBfQ0hHX0VORk9SQ0VEO1xcbjI5Njg6XFx0XFx0fSBlbHNlIHtcXG4yOTY5OlxcdFxcdFxcdC8qXFxuMjk3MDpcXHRcXHRcXHQgKiBFeGFtaW5lIHRoZSByZWdpb24vcmVzZXJ2ZSBtYXAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9jZXNzXFxuMjk3MTpcXHRcXHRcXHQgKiBoYXMgYSByZXNlcnZhdGlvbiBmb3IgdGhlIHBhZ2UgdG8gYmUgYWxsb2NhdGVkLiAgQSByZXR1cm5cXG4yOTcyOlxcdFxcdFxcdCAqIGNvZGUgb2YgemVybyBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgKG5vIGNoYW5nZSkuXFxuMjk3MzpcXHRcXHRcXHQgKi9cXG4yOTc0OlxcdFxcdFxcdHJldHZhbCA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xcbjI5NzU6XFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuMjk3NjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4yOTc3OlxcdFxcdFxcdG1hcF9jaGcgPSByZXR2YWwgPyBNQVBfQ0hHX05FRURFRCA6IE1BUF9DSEdfUkVVU0U7XFxuMjk3ODpcXHRcXHR9XFxuMjk3OTpcXHRcXG4yOTgwOlxcdFxcdC8qXFxuMjk4MTpcXHRcXHQgKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBnbG9iYWwgcmVzZXJ2YXRpb24/XFxuMjk4MjpcXHRcXHQgKlxcbjI5ODM6XFx0XFx0ICogUHJvY2Vzc2VzIHRoYXQgZGlkIG5vdCBjcmVhdGUgdGhlIG1hcHBpbmcgd2lsbCBoYXZlIG5vXFxuMjk4NDpcXHRcXHQgKiByZXNlcnZlcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcC4gQ2hlY2tcXG4yOTg1OlxcdFxcdCAqIHRoYXQgdGhlIGFsbG9jYXRpb24gd2lsbCBub3QgZXhjZWVkIHRoZSBzdWJwb29sIGxpbWl0LlxcbjI5ODY6XFx0XFx0ICogT3IgaWYgaXQgY2FuIGdldCBvbmUgZnJvbSB0aGUgcG9vbCByZXNlcnZhdGlvbiBkaXJlY3RseS5cXG4yOTg3OlxcdFxcdCAqL1xcbjI5ODg6XFx0XFx0aWYgKG1hcF9jaGcpIHtcXG4yOTg5OlxcdFxcdFxcdGdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XFxuMjk5MDpcXHRcXHRcXHRpZiAoZ2JsX2NoZyBcXHUwMDNjIDApIHtcXG4yOTkxOlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMjk5MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuMjk5MzpcXHRcXHRcXHR9XFxuMjk5NDpcXHRcXHR9IGVsc2Uge1xcbjI5OTU6XFx0XFx0XFx0LypcXG4yOTk2OlxcdFxcdFxcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcXG4yOTk3OlxcdFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4yOTk4OlxcdFxcdFxcdCAqL1xcbjI5OTk6XFx0XFx0XFx0Z2JsX2NoZyA9IDA7XFxuMzAwMDpcXHRcXHR9XFxuMzAwMTpcXHRcXG4zMDAyOlxcdFxcdC8qXFxuMzAwMzpcXHRcXHQgKiBJZiBhbGxvY2F0aW9uIGRvZXNuJ3QgcmV1c2UgYSByZXNlcnZhdGlvbiBpbiB0aGUgcmVzdl9tYXAsXFxuMzAwNDpcXHRcXHQgKiBjaGFyZ2UgZm9yIHRoZSByZXNlcnZhdGlvbi5cXG4zMDA1OlxcdFxcdCAqL1xcbjMwMDY6XFx0XFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19SRVVTRSlcXG4zMDA3OlxcdFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XFxuMzAwODpcXHRcXG4zMDA5OlxcdFxcdC8qXFxuMzAxMDpcXHRcXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXFxuMzAxMTpcXHRcXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxcbjMwMTI6XFx0XFx0ICovXFxuMzAxMzpcXHRcXHRpZiAoZ2JsX2NoZyA9PSAwKVxcbjMwMTQ6XFx0XFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcXG4zMDE1OlxcdFxcbjMwMTY6XFx0XFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuMzAxNzpcXHRcXHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnAsIFxcdTAwMjZtcG9sLCBcXHUwMDI2bm9kZW1hc2spO1xcbjMwMTg6XFx0XFx0bXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7XFxuMzAxOTpcXHRcXHRcXHQubmlkID0gbmlkLFxcbjMwMjA6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMzAyMTpcXHRcXHRcXHQubW9kZSA9IG1wb2wgPyBtcG9sLVxcdTAwM2Vtb2RlIDogTVBPTF9ERUZBVUxULFxcbjMwMjI6XFx0I2Vsc2VcXG4zMDIzOlxcdFxcdFxcdC5tb2RlID0gTVBPTF9ERUZBVUxULFxcbjMwMjQ6XFx0I2VuZGlmXFxuMzAyNTpcXHRcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4zMDI2OlxcdFxcdH07XFxuMzAyNzpcXHRcXG4zMDI4OlxcdFxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG4zMDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDowNy4wNjY3MzIwMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE5NTUzNTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBmb3IgYG1tL2h1Z2V0bGIuY2Agd2l0aCBhIEZ1enplcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9odWdldGxiLmNgIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIGh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRpbWUgdG8gYXBwbHkgbXkgbWVudGFsIGNoZWNrbGlzdC5cblxuRmlyc3QsIGxldCdzIHNlZSBpZiB0aGlzIGNvZGUgZXZlbiBmYWxscyB1bmRlciB0aGUgY3JpdGVyaWEuIFNlY3Rpb24gMyBsaXN0cyB0aGUganVpY3kgYml0czogbW0sIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLCBuZXR3b3JraW5nLCBWRlMsIHN5c2NhbGxzLiBZZXAsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIG9uIHRoZSBsaXN0LCBhbmQgdGhhdCBjb3ZlcnMgYG1tL2h1Z2V0bGIuY2AuIENoZWNrLlxuXG5OZXh0LCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGNvZGU/IElzIHRoZXJlIGEgc3RyYWlnaHRmb3J3YXJkIHBhdGggdmlhIFFFTVUgYW5kIHN5emthbGxlcj8gRm9ydHVuYXRlbHksIHllcy4gSSBjYW4gdXNlIG1tYXAgd2l0aCBNQVBfSFVHRVRMQiwgbW91bnQgaHVnZXRsYmZzLCB1c2Ugc2htZ2V0IHdpdGggU0hNX0hVR0VUTEIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIE1lbSBjZ3JvdXBzIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG9vLiBTZWVtcyBsaWtlIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBgbW0vaHVnZXRsYi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2ODgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxMS4yNjIyNjk0NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzM2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxMS4zMTU2MTA2ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY3NzQzMjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaHVnZSBwYWdlIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoaXMgc3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQncyBzdGFydCB3aXRoIGBmcy9odWdldGxiZnMvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYC4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhlIGRlZmluaXRpb25zIG9mIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBUaGVzZSBhcmUgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSdzIGh1Z2UgcGFnZSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuIEtub3dpbmcgdGhlaXIgc3RhdHVzIHdpbGwgYmUgZnVuZGFtZW50YWwgdG8gZGlhZ25vc2luZyBvciBvcHRpbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjEyLjk5MzA0NzE4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTY5ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaHVnZXRsYmZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MTMuMDQwODE0MjQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2OTc4NTY0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBmb3IgYGNvbmZpZyBIVUdFVExCRlNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyBvZiBgY29uZmlnIEhVR0VUTEJGU2AgYWNyb3NzIG91ciBLY29uZmlnIGZpbGVzLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgZ3JlcDsgSSBuZWVkIHRvIGJlIHByZWNpc2UsIGVuc3VyaW5nIEkgY2F0Y2ggYWxsIHZhcmlhdGlvbnMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCB0cmVlLiBJJ2xsIHByb2JhYmx5IGxldmVyYWdlIGBmaW5kYCBjb21iaW5lZCB3aXRoIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgcG90ZW50aWFsIHZhcmlhdGlvbnMgbGlrZSBgIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXRgIHdoaWNoIEkgd2lsbCB3YW50IHRvIGV4Y2x1ZGUuIEknbGwgbmVlZCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IGxpbmVzIHdoaWxlIHNraXBwaW5nIG92ZXIgdGhlIGNvbW1lbnQgbGluZXMuIEknbGwgYWxzbyB3YW50IHRvIGxvb2sgb3V0IGZvciBhbnl0aGluZyBjb25kaXRpb25hbGx5IGRlZmluZWQuIE9uY2UgSSBoYXZlIHRoZSBpbml0aWFsIGhpdCBsaXN0LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGVhY2ggZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB3aGljaCBhcmNoaXRlY3R1cmUocykgb3Igc3Vic3lzdGVtKHMpIGl0J3MgYXNzb2NpYXRlZCB3aXRoLCB3aGF0IG90aGVyIG9wdGlvbnMgaXQgZGVwZW5kcyBvbiBvciBpcyBkZXBlbmRlbnQgb24uIEVzc2VudGlhbGx5LCBJJ20gYWltaW5nIHRvIGJ1aWxkIGEgY29tcGxldGUgbWFwIG9mIGhvdyBgSFVHRVRMQkZTYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgc29tZSBtYW51YWwgaW5zcGVjdGlvbiBvZiB0aGUgcmVzdWx0cyB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VkIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhpcyBvcmdhbml6ZWQsIG1heWJlIHVzZSBhIHNjcmlwdCB0byBwYXJzZSB0aGUgb3V0cHV0IGludG8gYSBtb3JlIHVzYWJsZSBmb3JtYXQgYXMgSSBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxNS43Mzg2NzMxNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjQ5MTY5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxNy41NjM1OTYwMzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIxNDU0MDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgcHJpb3IgZXhwZXJpZW5jZSwgSSBhbnRpY2lwYXRlIHRoYXQgc2VjdGlvbiBvZiB0aGUgZmlsZSB0byBwcm92aWRlIHNvbWUgaGlnaC1sZXZlbCBjb250ZXh0LCBhbmQgYXQgbGluZSAyNDcgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgSSBjYW4gb2Z0ZW4gZmluZCBpbml0aWFsIGRlY2xhcmF0aW9ucyBpbiB0aGF0IGdlbmVyYWwgYXJlYS4gSSdsbCByZWFkIGFyb3VuZCB0aGVyZSBhbmQgcXVpY2tseSBzY2FuIGZvciBhbnkgcmVsYXRlZCBzeW1ib2xzIG9yIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoyMi43NzgxMzkwODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDY6XFx0XFxuIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoyMi43NzgyMjU5ODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxNzI3NjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBjZ3JvdXBzIGFuZCBodWdldGxiIGNoYXJnaW5nIGFyZSBpbnRlcmFjdGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aWVkIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gV2hhdCBhcmUgdGhlIGtub2JzIHRoYXQgcmVhbGx5IGFmZmVjdCBob3cgaHVnZXRsYiBtZW1vcnkgaXMgYWNjb3VudGVkIGZvciBhbmQgY2hhcmdlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgbWFuYWdlbWVudC4gR290dGEgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMgZG93biB0aGUgbGluZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTM4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoyNS41OTU1MDUwMzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDM1MzM1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NTc9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE1Mz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTU5OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAte1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4Mjk9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjg4NC1cXG5tbS9odWdldGxiLmM6Mjg4NTpcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG5tbS9odWdldGxiLmMtMjg4Ni1cXHQvKlxcbm1tL2h1Z2V0bGIuYy0yODg3LVxcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcXG5tbS9odWdldGxiLmM6Mjg4ODpcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXFxubW0vaHVnZXRsYi5jLTI4ODktXFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01MjM1LSAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNDQtICovXFxubW0vbWVtY29udHJvbC5jOjUyNDU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbm1tL21lbWNvbnRyb2wuYy01MjQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MjcuNDM5MDQ2MjQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NjI1MDI4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gR3VhcmRzKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIGd1YXJkcyBpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDUyNDUuIEkgc3VzcGVjdCB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBtYWNyb3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZlcyBiYXNlZCBvbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBndWFyZHMgaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdyBhbmQgd2hhdCBpbXBhY3QgdGhleSBoYXZlIG9uIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoaXMgc2hvdWxkIGNsYXJpZnkgaG93IHRoaXMgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjI5LjMwMTU1MjMyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyMzA6XFx0XFx0cmV0dXJuIHJldDtcXG41MjMxOlxcdH1cXG41MjMyOlxcdFxcbjUyMzM6XFx0LyoqXFxuNTIzNDpcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxuNTIzNTpcXHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG41MjM2OlxcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbjUyMzc6XFx0ICpcXG41MjM4OlxcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXFxuNTIzOTpcXHQgKiBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYW5kIGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGh1Z2V0bGIgY2dyb3VwXFxuNTI0MDpcXHQgKiBjb250cm9sbGVyIChpZiBpdCBpcyBlbmFibGVkKS5cXG41MjQxOlxcdCAqXFxuNTI0MjpcXHQgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxcbjUyNDM6XFx0ICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cXG41MjQ0OlxcdCAqL1xcbjUyNDU6XFx0aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbjUyNDY6XFx0e1xcbjUyNDc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuNTI0ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG41MjQ5OlxcdFxcbjUyNTA6XFx0XFx0LypcXG41MjUxOlxcdFxcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcXG41MjUyOlxcdFxcdCAqIHN5c3RlbS1sZXZlbCBzdGF0cyB2aWEgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvLiBSZXR1cm4gMCwgYW5kIHNraXBcXG41MjUzOlxcdFxcdCAqIGNoYXJnaW5nIHRoZSBtZW1jZy5cXG41MjU0OlxcdFxcdCAqL1xcbjUyNTU6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XFxuNTI1NjpcXHRcXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuNTI1NzpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjU4OlxcdFxcbjUyNTk6XFx0XFx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXFxuNTI2MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjUyNjE6XFx0XFxuNTI2MjpcXHRvdXQ6XFxuNTI2MzpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuNTI2NDpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyNjU6XFx0fVxcbjUyNjY6XFx0XFxuNTI2NzpcXHQvKipcXG41MjY4OlxcdCAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxcbjUyNjk6XFx0ICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjI5LjMwMTgwNDEwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA1MTIwMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlVExCIE1lbW9yeSBBY2NvdW50aW5nKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgd2l0aCBIdWdlVExCcy4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24sIGFuZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBzaWRlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpYC4gVGhhdCBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGxpa2VseSB0aWVkIHRvIHNvbWUga2VybmVsIGNvbXBpbGUtdGltZSBmbGFnIG9yIG1vZHVsZSBwYXJhbWV0ZXIuIEdyYWJiaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgdGFraW5nIGEgcXVpY2sgbG9vayB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGlzIGNoZWNrIGlzIGRvbmUgdG8gZGVjaWRlIHdoZXRoZXIgYWNjb3VudGluZyBpcyBlbmFibGVkIG9yIG5vdC4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gVGhhdCdzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTU2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDozMS40MDY5MjgxODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDMwNDA2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfYWNjb3VudHNfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTcxOT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTcyNi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbWNvbnRyb2wuYzoxNzI3OnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG5tbS9tZW1jb250cm9sLmMtMTcyOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTczMS0jZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jOjE3MzI6c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xNzMzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc1OC1cXHRcXHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoxNzU5OlxcdFxcdFxcdCFtZW1jZ19hY2NvdW50c19odWdldGxiKCkpXFxubW0vbWVtY29udHJvbC5jLTE3NjAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI0NT1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1NC1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1NTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcXG5tbS9tZW1jb250cm9sLmMtNTI1Ni1cXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjMzLjM0OTk3NDQxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk0NjQxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBIdWdlVExCIEFjY291bnRpbmcgd2l0aGluIE1lbW9yeSBDb250cm9sKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IGh1Z2UgcGFnZXMgYXJlIGFjY291bnRlZCBmb3IgdW5kZXIgbWVtb3J5IGNvbnRyb2wuIFRoZSBzdGFydGluZyBwb2ludCBpcyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAsIHNwZWNpZmljYWxseSBpbiBgbW0vbWVtY29udHJvbC5jOjE3MjdgLiBUaGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgKnNob3VsZCogYmUgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkgY2hhbmdlcyBvciBpZiB0aGlzIGlzIHBlcmZvcm1pbmcgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseT8gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgYWNjb3VudGluZy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBiZWNhdXNlIG1pc21hbmFnZWQgSHVnZVRMQiBhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIHNlcmlvdXMgcGVyZm9ybWFuY2UgaXNzdWVzLCByaWdodD8gSSdsbCBwcm9iYWJseSBiZSB0cmFjaW5nIGV4ZWN1dGlvbiBwYXRocyB0byBjb25maXJtIHRoYXQgaXQncyBhbGwgd29ya2luZyBhcyBleHBlY3RlZCB1bmRlciBhbGwgc2NlbmFyaW9zLiBJJ20gZXNwZWNpYWxseSBrZWVuIG9uIHNlZWluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBBbnkgY2hhbmNlIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrIGhlcmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgdXNlIG9mIGxvY2tzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBJIGFsc28gd2FudCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBpcyBzY2FsYWJsZSBhbmQgcm9idXN0IGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBUaGVyZSBhcmUgZ29pbmcgdG8gYmUgYSBsb3Qgb2YgbGl0dGxlIGRldGFpbHMgaW4gaGVyZS4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjM2LjE0NDYxNzgzNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MjUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MjU6XFx0XFxuMTcyNjpcXHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbjE3Mjc6XFx0c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbjE3Mjg6XFx0e1xcbjE3Mjk6XFx0XFx0cmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0hVR0VUTEJfQUNDT1VOVElORztcXG4xNzMwOlxcdH1cXG4xNzMxOlxcdCNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4xNzMyOlxcdHN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG4xNzMzOlxcdHtcXG4xNzM0OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xNzM1OlxcdH1cXG4xNzM2OlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuMTczNzpcXHRcXG4xNzM4OlxcdHN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuMTczOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjM2LjE0NDg3NDk5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU0MTQ1MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlcGFnZSBBbGxvY2F0aW9uIGFuZCBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBhbmQgYE1FTUNHYCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEl0J3MgdGltZSB0byBkaWcgaW50byBgbW0vaHVnZXRsYi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBvciBjYWxsZXJzIHRoYXQgYXJlIGludm9sdmVkIGhlcmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBkb2luZy4gUmlnaHQsIGl0J3MgdGhlIGNvcmUgb2YgaHVnZXBhZ2UgYWxsb2NhdGlvbi4gSSBzZWUgdGhhdCwgaWYgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGZhaWxzLCB0aGUgbG9naWMgaGFzIGJlZW4gdXBkYXRlZC4gUHJldmlvdXNseSwgaXQgd291bGQgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGFuZCByZXR1cm4gYC1FTk9NRU1gLiBOb3csIGl0IGNhbGxzIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBjaGFuZ2UgZnJvbSBgZnJlZV9odWdlX2ZvbGlvYCB0byBgZm9saW9fcHV0YC4gQWgsIHRoZSByZWZjb3VudGluZyEgV2hlbiBhIGh1Z2UgcGFnZSBpcyBhbGxvY2F0ZWQgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCB0aGUgcmVmY291bnQgZ2V0cyBlaXRoZXIgZnJvemVuIGFuZCB1bmZyb3plbiB3aXRoIGBmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpYCBvciBpbmNyZW1lbnRlZCB3aXRoIGBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9gLiBJZiB3ZSBqdXN0IGNhbGxlZCBgZnJlZV9odWdlX2ZvbGlvYCBkaXJlY3RseSwgdGhlIHJlZmNvdW50IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcHJvcGVybHkgZGVjcmVtZW50ZWQuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcGFnZSBkZXN0cnVjdG9ycyBvciBvdGhlciByZWZjb3VudCBpc3N1ZXMuIGBmb2xpb19wdXRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmFsd2F5cyogZGVjcmVtZW50cyB0aGUgcmVmY291bnQgYW5kLCB3aGVuIGl0IGhpdHMgemVybywgdHJpZ2dlcnMgdGhlIGNvcnJlY3QgZGVzdHJ1Y3RvciB3aGljaCBmcmVlcyB0aGUgaHVnZSBmb2xpbyBhbmQgdW5jaGFyZ2VzIHRoZSBjZ3JvdXAgcHJvcGVybHkuXG5cblRoZSBvdGhlciBwb2ludCBpcyB0aGUgZXJyb3IgY29kZSBjaGFuZ2UgdG8gYC1FTk9TUENgIGluc3RlYWQgb2YgYC1FTk9NRU1gLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIGhvdyB0aGUgY2FsbGVycyBoYW5kbGUgdGhlIGVycm9yLiBGb3IgZXhhbXBsZSwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBmYXVsdCBoYW5kbGVycywgcmV0dXJuaW5nIGAtRU5PU1BDYCB0cmFuc2xhdGVzIHRvIGBWTV9GQVVMVF9TSUdCVVNgIGluc3RlYWQgb2YgYFZNX0ZBVUxUX09PTWAuIFRoaXMgd2lsbCBiZSBrZXkuIEkgbmVlZCB0byBleGFtaW5lIGhvdyB0aGVzZSBjYWxsZXJzIHJlYWN0IHRvIHRoZXNlIGRpZmZlcmVudCBlcnJvciBjb2Rlcy4gSXQncyB0aW1lIHRvIHJlYWQgdGhyb3VnaCBgbW0vaHVnZXRsYi5jYCBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfbm9fcGFnZWAgYW5kIGBodWdldGxiX3dwYCB0byBnZXQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NDEuMDk5MDI0MTYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTgyMDpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG41ODIxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjU4MjI6XFx0XFx0XFx0fVxcbjU4MjM6XFx0XFxuNTgyNDpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG41ODI1OlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuNTgyNjpcXHRcXHRcXHRcXHQvKlxcbjU4Mjc6XFx0XFx0XFx0XFx0ICogUmV0dXJuaW5nIGVycm9yIHdpbGwgcmVzdWx0IGluIGZhdWx0aW5nIHRhc2sgYmVpbmdcXG41ODI4OlxcdFxcdFxcdFxcdCAqIHNlbnQgU0lHQlVTLiAgVGhlIGh1Z2V0bGIgZmF1bHQgbXV0ZXggcHJldmVudHMgdHdvXFxuNTgyOTpcXHRcXHRcXHRcXHQgKiB0YXNrcyBmcm9tIHJhY2luZyB0byBmYXVsdCBpbiB0aGUgc2FtZSBwYWdlIHdoaWNoXFxuNTgzMDpcXHRcXHRcXHRcXHQgKiBjb3VsZCByZXN1bHQgaW4gZmFsc2UgdW5hYmxlIHRvIGFsbG9jYXRlIGVycm9ycy5cXG41ODMxOlxcdFxcdFxcdFxcdCAqIFBhZ2UgbWlncmF0aW9uIGRvZXMgbm90IHRha2UgdGhlIGZhdWx0IG11dGV4LCBidXRcXG41ODMyOlxcdFxcdFxcdFxcdCAqIGRvZXMgYSBjbGVhciB0aGVuIHdyaXRlIG9mIHB0ZSdzIHVuZGVyIHBhZ2UgdGFibGVcXG41ODMzOlxcdFxcdFxcdFxcdCAqIGxvY2suICBQYWdlIGZhdWx0IGNvZGUgY291bGQgcmFjZSB3aXRoIG1pZ3JhdGlvbixcXG41ODM0OlxcdFxcdFxcdFxcdCAqIG5vdGljZSB0aGUgY2xlYXIgcHRlIGFuZCB0cnkgdG8gYWxsb2NhdGUgYSBwYWdlXFxuNTgzNTpcXHRcXHRcXHRcXHQgKiBoZXJlLiAgQmVmb3JlIHJldHVybmluZyBlcnJvciwgZ2V0IHB0bCBhbmQgbWFrZVxcbjU4MzY6XFx0XFx0XFx0XFx0ICogc3VyZSB0aGVyZSByZWFsbHkgaXMgbm8gcHRlIGVudHJ5LlxcbjU4Mzc6XFx0XFx0XFx0XFx0ICovXFxuNTgzODpcXHRcXHRcXHRcXHRpZiAoaHVnZXRsYl9wdGVfc3RhYmxlKGgsIG1tLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG41ODM5OlxcdFxcdFxcdFxcdFxcdHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7XFxuNTg0MDpcXHRcXHRcXHRcXHRlbHNlXFxuNTg0MTpcXHRcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbjU4NDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNTg0MzpcXHRcXHRcXHR9XFxuNTg0NDpcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIHZtZi1cXHUwMDNlcmVhbF9hZGRyZXNzKTtcXG41ODQ1OlxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuNTg0NjpcXHRcXHRcXHRuZXdfZm9saW8gPSB0cnVlO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB7XFxuNTg0OTpcXHRcXHRcXHRcXHRpbnQgZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywgbWFwcGluZyxcXG41ODUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGdvZmYpO1xcbjU4NTE6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjU4NTI6XFx0XFx0XFx0XFx0XFx0LypcXG41ODUzOlxcdFxcdFxcdFxcdFxcdCAqIGVyciBjYW4ndCBiZSAtRUVYSVNUIHdoaWNoIGltcGxpZXMgc29tZW9uZVxcbjU4NTQ6XFx0XFx0XFx0XFx0XFx0ICogZWxzZSBjb25zdW1lZCB0aGUgcmVzZXJ2YXRpb24gc2luY2UgaHVnZXRsYlxcbjU4NTU6XFx0XFx0XFx0XFx0XFx0ICogZmF1bHQgbXV0ZXggaXMgaGVsZCB3aGVuIGFkZCBhIGh1Z2V0bGIgcGFnZVxcbjU4NTY6XFx0XFx0XFx0XFx0XFx0ICogdG8gdGhlIHBhZ2UgY2FjaGUuIFNvIGl0J3Mgc2FmZSB0byBjYWxsXFxuNTg1NzpcXHRcXHRcXHRcXHRcXHQgKiByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoKSBoZXJlLlxcbjU4NTg6XFx0XFx0XFx0XFx0XFx0ICovXFxuNTg1OTpcXHRcXHRcXHRcXHRcXHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjQxLjA5OTQ0NTc3MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mjc0MjM4NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBIdWdlVExCIE1lbW9yeSBBbGxvY2F0aW9uIEVycm9yIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDU4MzkgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZDogYHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7YC4gSSdtIGZvY3VzaW5nIG9uIGhvdyBgdm1mX2Vycm9yYCBoYW5kbGVzIHRoZSBgLUVOT01FTWAgYW5kIGAtRU5PU1BDYCBlcnJvcnMuIGB2bWZfZXJyb3IoLUVOT01FTSlgIHRyYW5zbGF0ZXMgdG8gYFZNX0ZBVUxUX09PTWAsIGFuZCBgdm1mX2Vycm9yKC1FTk9TUEMpYCBtYXBzIHRvIGBWTV9GQVVMVF9TSUdCVVNgLiBQcmV2aW91c2x5LCBhbiBgLUVOT01FTWAgd291bGQgdHJpZ2dlciBhbiBPT00gcmVzcG9uc2UsIHdoaWNoIGlzIHByb2JsZW1hdGljIGZvciBIdWdlVExCIGJlY2F1c2UgdGhlIE9PTSBraWxsZXIgKmRvZXNuJ3QqIHJlY2xhaW0gSHVnZVRMQiBwYWdlcy4gVGhpcyByZXN1bHRzIGluIGZ1dGlsZSByZXRyaWVzLiBTd2l0Y2hpbmcgdG8gYC1FTk9TUENgIGFuZCB0aHVzIGBWTV9GQVVMVF9TSUdCVVNgIHNlZW1zIGxpa2UgYSBtb3JlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLlxuXG5Ob3csIGlzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhlIGBtbS9odWdldGxiLmNgIGNvZGUgaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBtbWFwYCB3aXRoIGBNQVBfSFVHRVRMQmAsIGBtYWR2aXNlYCwgYW5kIG9wZXJhdGlvbnMgb24gdGhlIGBodWdldGxiZnNgIGZpbGVzeXN0ZW0uIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjcml0ZXJpYS4gVGhlIGZ1enppbmcgc3VpdGFiaWxpdHkgYXBwZWFycyBoaWdoLlxuXG5GaXJzdCwgSSBjb25maXJtIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnLiBDaGVjay5cblxuU2Vjb25kLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UuIFdlIG5lZWQgYEhVR0VUTEJGU2AgKG9yIGBIVUdFVExCX1BBR0VgLCBidXQgYEhVR0VUTEJGU2AgaXMgd2hhdCB0aGUgdXNlciBjb25maWd1cmVzIGluIGBtZW51Y29uZmlnYCkuIFdlIGFsc28gbmVlZCBgTUVNQ0dgIGZvciB0aGUgbWVtX2Nncm91cCBjaGFyZ2luZyBvbiBodWdlIHBhZ2VzIGFuZCBgQ0dST1VQX0hVR0VUTEJgIGZvciBvcHRpb25hbCBzdXBwb3J0LiBBbGwgb2YgdGhlc2UgYXJlIHJlbGV2YW50LCBtYWtpbmcgdGhpcyBhbiBpbnRlcmVzdGluZyB0YXJnZXQuIENoZWNrLlxuXG5UaGlyZCwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHM/IEknbSBsaXN0aW5nIHRoZXNlOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLiBJdCdzIGNydWNpYWwgdGhhdCBJIHVuZGVyc3RhbmQgdGhlc2UgYW5kIHRoZWlyIGNvbnRleHQuIENoZWNrLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgZ2VuZXJpYyBwYWdlIGFsbG9jYXRvciB0aGF0IHdvdWxkIHByb2R1Y2UgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzIGR1cmluZyBmdXp6aW5nLiBOb25lIG9mIHRoZSBsaXN0ZWQgc3ltYm9scyBhcmUgdWJpcXVpdG91cyBvciBnZW5lcmFsIGFsbG9jYXRvcnMgbGlrZSBgYWxsb2NfcGFnZXNgLCBgcGFnZV9mYXVsdGAsIG9yIGBrbWFsbG9jYC4gVGhleSdyZSBzcGVjaWZpYyB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGFyZSBhbGwgdGlnaHRseSBib3VuZCB0byB0aGUgSHVnZVRMQiBmZWF0dXJlLiBDaGVjay5cblxuU28sIGxldCdzIHJlaXRlcmF0ZSB0byB2ZXJpZnk6XG5cbjEuICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuMi4gIGBGb2N1c1N5bWJvbHNgOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBgSFVHRVRMQkZTYCwgYE1FTUNHYFxuNC4gIGBSZWFzb25pbmdgOiBIYW5kbGluZyBgLUVOT01FTWAgd2l0aCBgVk1fRkFVTFRfT09NYCBsZWFkcyB0byBmdXRpbGUgcmV0cmllcyBvbiBIdWdlVExCIHBhZ2VzLCBhbmQgY2hhbmdpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGAtRU5PU1BDYCBhbmQgYFZNX0ZBVUxUX1NJR0JVU2Agc2VlbXMgdG8gYmUgYSB2YWxpZCBpbXByb3ZlbWVudC4gVGhlIGlkZW50aWZpZWQgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgSHVnZVRMQiBmZWF0dXJlIGFuZCB0aHVzIGEgZ29vZCBmdXp6aW5nIHRhcmdldC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzMsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NDcuMzczNjg4MjU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTA3NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2V0bGIuYyAoaHVnZXRsYl9hbGxvY19mb2xpbykgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxzLCByZXBsYWNpbmcgZnJlZV9odWdlX2ZvbGlvIHdpdGggZm9saW9fcHV0IGFuZCByZXR1cm5pbmcgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCBmdXRpbGUgZmF1bHQgcmV0cmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFyZ2luZyBwYXRocyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGh1Z2V0bGJmcyBvcGVyYXRpb25zIGFuZCBNQVBfSFVHRVRMQiBmYXVsdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3ItaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZXRsYi5jIChodWdldGxiX2FsbG9jX2ZvbGlvKSB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbHMsIHJlcGxhY2luZyBmcmVlX2h1Z2VfZm9saW8gd2l0aCBmb2xpb19wdXQgYW5kIHJldHVybmluZyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IGZ1dGlsZSBmYXVsdCByZXRyaWVzLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYXJnaW5nIHBhdGhzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgaHVnZXRsYmZzIG9wZXJhdGlvbnMgYW5kIE1BUF9IVUdFVExCIGZhdWx0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjQ3LjQ4MjIwNzYxMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzYyMDY4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDo0Ny40ODI5OTU5OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjEzNTQwOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYDogaXQgcmVwbGFjZXMgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgdG8gYC1FTk9TUENgLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgZm9saW8gcmVmZXJlbmNlIGNvdW50aW5nLCBmcmVlaW5nIG1lY2hhbmljcywgYW5kIGVycm9yIGNvZGUgcHJvcGFnYXRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgYm91bmRzIG9yIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxpZmV0aW1lICh1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSksIG9yIGFsbG9jYXRpb24gbG9naWMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjkzNzU3MjM0MjE4NzFkYTkwMWE0MTZhMDdmY2FiMjM1NjY5ZDliYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLmY1Yjg1M2E1Mzc3YzIgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjUsNyArMjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTIsMTMgKzI4OTEsMTcgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbiBcbiBcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZXR1cm4gLUVOT1NQQywgc2luY2UgcmV0cnlpbmcgdGhlIGZhdWx0IGlzIGZ1dGlsZTpcbitcdFx0ICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi5cbitcdFx0ICovXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NDcuNDgyOTk3MzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMDkwMDkyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSB6ZXJvaW5nIGluIG9uIGBtbS9odWdldGxiLmNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gVGhhdCdzIHVzdWFsbHkgYSBjcml0aWNhbCBzcG90IGZvciBhbGxvY2F0aW9uIGxvZ2ljIGluIHRoZSBodWdlIHBhZ2Ugc3lzdGVtLCBzbyB3b3J0aCBhIGNsb3NlciBsb29rLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIEknbSBnb2luZyB0byBwdWxsIHVwIGBodWdldGxiLmNgIGFuZCBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmVzIDI4MjUgdG8gMjkwMC4gSSBjYW4gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGlzb2xhdGUgdGhhdCBzZWN0aW9uIGFuZCBnaXZlIG15c2VsZiBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zIHRoZSBwYXRjaCBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDo1MS43OTIwMDk5OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTcxMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MjUsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MjU6XFx0ICpcXG4yODI2OlxcdCAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cXG4yODI3OlxcdCAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLlxcbjI4Mjg6XFx0ICovXFxuMjgyOTpcXHRzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4yODMwOlxcdFxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG4yODMxOlxcdHtcXG4yODMyOlxcdFxcdGJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyBcXHUwMDI2XFxuMjgzMzpcXHRcXHRcXHRcXHRcXHRcXHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XFxuMjgzNDpcXHRcXHRib29sIHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gPSBhbGxvY19mbGFncyBcXHUwMDI2XFxuMjgzNTpcXHRcXHRcXHRcXHRcXHQgICAgICBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xcbjI4MzY6XFx0XFx0c2l6ZV90IG5yX3BhZ2VzID0gcGFnZXNfcGVyX2h1Z2VfcGFnZShoKTtcXG4yODM3OlxcdFxcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcXG4yODM4OlxcdFxcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XFxuMjgzOTpcXHRcXHRnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuMjg0MDpcXHRcXHRpbnQgaWR4ID0gaHN0YXRlX2luZGV4KGgpO1xcbjI4NDE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yODQyOlxcdFxcdGludCByZXQ7XFxuMjg0MzpcXHRcXG4yODQ0OlxcdFxcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCBcXHUwMDI2XFx1MDAyNlxcbjI4NDU6XFx0XFx0ICAgIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIG5yX3BhZ2VzLCBcXHUwMDI2aF9jZ19yc3ZkKSlcXG4yODQ2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI4NDc6XFx0XFxuMjg0ODpcXHRcXHRpZiAoaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBcXHUwMDI2aF9jZykpIHtcXG4yODQ5OlxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMjg1MDpcXHRcXHRcXHRnb3RvIGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkO1xcbjI4NTE6XFx0XFx0fVxcbjI4NTI6XFx0XFxuMjg1MzpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHRmb2xpbyA9IE5VTEw7XFxuMjg1NjpcXHRcXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbiB8fCBhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcXG4yODU3OlxcdFxcdFxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xcbjI4NTg6XFx0XFxuMjg1OTpcXHRcXHRpZiAoIWZvbGlvKSB7XFxuMjg2MDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjg2MTpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBtcG9saSk7XFxuMjg2MjpcXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuMjg2MzpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbjI4NjQ6XFx0XFx0XFx0XFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA7XFxuMjg2NTpcXHRcXHRcXHR9XFxuMjg2NjpcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4Njc6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZoLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG4yODY4OlxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XFxuMjg2OTpcXHRcXHR9XFxuMjg3MDpcXHRcXG4yODcxOlxcdFxcdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XFxuMjg3MjpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbjI4NzM6XFx0XFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuMjg3NDpcXHRcXHR9XFxuMjg3NTpcXHRcXG4yODc2OlxcdFxcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2UoaWR4LCBucl9wYWdlcywgaF9jZywgZm9saW8pO1xcbjI4Nzc6XFx0XFxuMjg3ODpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpIHtcXG4yODc5OlxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2VfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQsXFxuMjg4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZvbGlvKTtcXG4yODgxOlxcdFxcdH1cXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4ODQ6XFx0XFxuMjg4NTpcXHRcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4yODg2OlxcdFxcdC8qXFxuMjg4NzpcXHRcXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxuMjg4ODpcXHRcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXFxuMjg4OTpcXHRcXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4yODkwOlxcdFxcdCAqL1xcbjI4OTE6XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XFxuMjg5MjpcXHRcXG4yODkzOlxcdFxcdGlmIChyZXQgPT0gLUVOT01FTSkge1xcbjI4OTQ6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yODk1OlxcdFxcdFxcdC8qXFxuMjg5NjpcXHRcXHRcXHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcXG4yODk3OlxcdFxcdFxcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cXG4yODk4OlxcdFxcdFxcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cXG4yODk5OlxcdFxcdFxcdCAqL1xcbjI5MDA6XFx0XFx0XFx0LypcXG4yOTAxOlxcdFxcdFxcdCAqIFJldHVybiAtRU5PU1BDLCBzaW5jZSByZXRyeWluZyB0aGUgZmF1bHQgaXMgZnV0aWxlOlxcbjI5MDI6XFx0XFx0XFx0ICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi5cXG4yOTAzOlxcdFxcdFxcdCAqL1xcbjI5MDQ6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuMjkwNTpcXHRcXHR9XFxuMjkwNjpcXHRcXG4yOTA3OlxcdFxcdHJldHVybiBmb2xpbztcXG4yOTA4OlxcdFxcbjI5MDk6XFx0IGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDpcXG4yOTEwOlxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBoX2NnKTtcXG4yOTExOlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDpcXG4yOTEyOlxcdFxcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZClcXG4yOTEzOlxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCk7XFxuMjkxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NTEuNzkyNzEwODQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4MjU2NTc5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmVhc29uaW5nOiBIdWdlVExCIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgdGhlIGNvZGUgY2hhbmdlZCB3aXRoaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW9gOiB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5zIGAtRU5PTUVNYCwgaXQgbm93IHVzZXMgYGZvbGlvX3B1dChmb2xpbylgIGluc3RlYWQgb2YgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgLCBhbmQgcmV0dXJucyBgLUVOT1NQQ2AgaW5zdGVhZCBvZiBgLUVOT01FTWAuIFRoZSBjaGFuZ2UgaXMgYWJvdXQgcmVmY291bnRpbmcgYW5kIGZhdWx0IGxvb3BzIG9uIG1lbWNnIGNoYXJnaW5nIGZhaWx1cmU7IHN3aXRjaGluZyBgLUVOT01FTWAgdG8gYC1FTk9TUENgIGlzIHRoZSBrZXkuXG5cblNvLCBgZnJlZV9odWdlX2ZvbGlvYCB2cyBgZm9saW9fcHV0YDogdGhlIGZvcm1lciBkaXJlY3RseSBmcmVlcywgdGhlIGxhdHRlciBkZWNyZW1lbnRzIHRoZSByZWZjb3VudCwgd2hpY2ggdGhlbiAqbWF5KiBmcmVlLiBXaGVuIGBmb2xpb2AgaXMgYXQgcmVmY291bnQgMSwgYGZvbGlvX3B1dGAgZG9lcyB0aGUgc2FtZSBhcyBgZnJlZV9odWdlX2ZvbGlvYC4gVGhlIHJldHVybiBjb2RlIGNoYW5nZSBpcyB0byBwcmV2ZW50IHJldHJ5aW5nIGZhdWx0IGxvb3BzIG9uIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHVyZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBLTVNBTiBxdWVzdGlvbnMuIERvZXMgdGhpcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cbjEuICBEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IE5vLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuMi4gIERvZXMgaXQgYWRkIG9yIG1vZGlmeSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBUaGUgY3JpdGljYWwgdmFyaWFibGUsIGByZXRgLCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBieSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuXG4zLiAgRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vLCB0aGlzIGNvZGUgZGVhbHMgd2l0aCBgZm9saW9gIHN0cnVjdHVyZXMsIHdoaWNoIGFyZSBhbHJlYWR5IHdlbGwtZGVmaW5lZCBtZW1vcnkgb2JqZWN0cyBpbiB0aGUga2VybmVsLlxuNC4gIERvZXMgaXQgY2hhbmdlIGJvdW5kcyBjaGVja3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBtZW1vcnkgY29weSBvcGVyYXRpb25zPyBObywgdGhpcyBwYXRjaCBpcyBpc29sYXRlZC5cbjUuICBUaGlzIGlzIGFsbCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlZmVyZW5jZSBjb3VudGluZy4gSXQncyBoYW5kbGluZyB0aGUgcmVmY291bnQgb2YgdGhlIGBmb2xpb2Agd2l0aCB0aGUgY2hhbmdlcyBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIHRvIGBmb2xpb19wdXRgIGFuZCBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi5cblxuQW55IGlzc3VlcyBoZXJlIChyZWZjb3VudCBpbWJhbGFuY2UsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgYmFkIGVycm9yIGNvZGUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy9hc3NlcnRpb25zLiBUaGlzIGlzbid0IGEgS01TQU4gaXNzdWUgc2luY2UgdGhlcmUgYXJlIG5vIHJpc2tzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVwbGFjaW5nIG9uZSBtZW1vcnkgZnJlZWluZyBmdW5jdGlvbiB3aXRoIGFub3RoZXIsIHdoaWxlIGFkanVzdGluZyB0aGUgZXJyb3IgcmV0dXJuLiBUaGVyZSdzIG5vIHN1YnRsZSwgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhc3BlY3QgaGVyZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIGNoYW5nZSBpcyBzYWZlIGluIHJlZ2FyZCB0byBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5OCwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDo1OS42MTgzNzMxMjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 17:42:31 +0000 UTC FinishedAt: 2026-09-09 17:45:00 +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": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "333b8b2a-6b55-446b-ad1b-e461edc67def" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_alloc_folio", "alloc_hugetlb_folio", "mem_cgroup_charge_hugetlb" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYDogaXQgcmVwbGFjZXMgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgdG8gYC1FTk9TUENgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvci1oYW5kbGluZyBsb2dpYyBpbiBtbS9odWdldGxiLmMgKGh1Z2V0bGJfYWxsb2NfZm9saW8pIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlscywgcmVwbGFjaW5nIGZyZWVfaHVnZV9mb2xpbyB3aXRoIGZvbGlvX3B1dCBhbmQgcmV0dXJuaW5nIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgZnV0aWxlIGZhdWx0IHJldHJpZXMuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhcmdpbmcgcGF0aHMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBodWdldGxiZnMgb3BlcmF0aW9ucyBhbmQgTUFQX0hVR0VUTEIgZmF1bHRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY5Mzc1NzIzNDIxODcxZGE5MDFhNDE2YTA3ZmNhYjIzNTY2OWQ5YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjQzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNGY2ZjU4YmYzZGI2Yy4uZjViODUzYTUzNzdjMiAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMjgyNSw3ICYjNDM7MjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTIsMTMgJiM0MzsyODkxLDE3IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XG4gXG4gXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcbi1cdFx0ZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdC8qXG4gXHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuIFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4gXHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6XG4mIzQzO1x0XHQgKiB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkIGZvciBIdWdlVExCLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiBcdH1cbiBcbiBcdHJldHVybiBmb2xpbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvci1oYW5kbGluZyBsb2dpYyBpbiBtbS9odWdldGxiLmMgKGh1Z2V0bGJfYWxsb2NfZm9saW8pIHdoZW4gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlscywgcmVwbGFjaW5nIGZyZWVfaHVnZV9mb2xpbyB3aXRoIGZvbGlvX3B1dCBhbmQgcmV0dXJuaW5nIC1FTk9TUEMgaW5zdGVhZCBvZiAtRU5PTUVNIHRvIHByZXZlbnQgZnV0aWxlIGZhdWx0IHJldHJpZXMuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgY2hhcmdpbmcgcGF0aHMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBodWdldGxiZnMgb3BlcmF0aW9ucyBhbmQgTUFQX0hVR0VUTEIgZmF1bHRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY5Mzc1NzIzNDIxODcxZGE5MDFhNDE2YTA3ZmNhYjIzNTY2OWQ5YmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE3OjQzOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDRmNmY1OGJmM2RiNmMuLmY1Yjg1M2E1Mzc3YzIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTI4MjUsNyAmIzQzOzI4MjUsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpCiAgKgogICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLgogICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuCi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy4KICAqLwogc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncykKQEAgLTI4OTIsMTMgJiM0MzsyODkxLDE3IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpOwogCiAJaWYgKHJldCA9PSAtRU5PTUVNKSB7Ci0JCWZyZWVfaHVnZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogCQkvKgogCQkgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXMKIAkJICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpbwogCQkgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuCiAJCSAqLwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJldHVybiAtRU5PU1BDLCBzaW5jZSByZXRyeWluZyB0aGUgZmF1bHQgaXMgZnV0aWxlOgomIzQzOwkJICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJfQogCiAJcmV0dXJuIGZvbGlvOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2VUTEIgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgYW5kIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZW1vdmFsIG9mIHRoZSBgLUVOT01FTWAgZXJyb3IgcmV0dXJuLiBTcGVjaWZpY2FsbHksIHRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgLUVOT1NQQ2AgaW5zdGVhZC4gTGV0IG1lIGdvIGxpbmUgYnkgbGluZSB0aHJvdWdoIHRoYXQgYGRpZmZgIGJsb2NrLCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKSSBzZWUgdGhleSYjMzk7dmUgcmVtb3ZlZCBhIHNwZWNpZmljIGVycm9yIGNoZWNrIGFuZCBzdWJzZXF1ZW50IGZvbGlvIGZyZWVpbmcgbG9naWMuIFRoZSBvcmlnaW5hbCBjb2RlIHBhdGggc2VlbXMgdG8gaGF2ZSBoYW5kbGVkIGEgYC1FTk9NRU1gIHJldHVybiBmcm9tIGNncm91cCBjaGFyZ2luZywgZnJlZWQgdGhlIGZvbGlvLCBhbmQgdGhlbiByZXR1cm5lZCB0aGUgZXJyb3IuIE5vdywgaXQgYXBwZWFycyB0aGF0IHRoZSBmb2xpbyBpcyBiZWluZyBgZm9saW9fcHV0YCByYXRoZXIgdGhhbiBgZnJlZV9odWdlX2ZvbGlvYCwgYW5kIGAtRU5PU1BDYCBpcyByZXR1cm5lZCBpbnN0ZWFkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIFdhcyB0aGVyZSBhbiBpc3N1ZSB3aXRoIGhvdyBgLUVOT01FTWAgd2FzIGJlaW5nIGhhbmRsZWQgcHJldmlvdXNseT8gSXMgYC1FTk9TUENgIGEgbW9yZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgYW5kIHdoeSBpcyB0aGF0PyBUaGUgY29tbWVudCBtZW50aW9ucyB0aGUgT09NIGtpbGxlciBub3QgYmVpbmcgaW52b2x2ZWQgaW4gSHVnZVRMQi4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhhdCB0aGUgY2hhbmdlIGFpbXMgdG8gcHJldmVudCBhIGZ1dGlsZSByZXRyeSBzY2VuYXJpbyBpbiB0aGUgZmF1bHQgaGFuZGxlciwgc2luY2UgdGhlIE9PTSBraWxsZXIgaXNuJiMzOTt0IHRyaWdnZXJlZCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uLiBSZXR1cm5pbmcgYC1FTk9TUENgIG1pZ2h0IHNpZ25hbCBhIG1vcmUgcGVyc2lzdGVudCByZXNvdXJjZSBleGhhdXN0aW9uLCB3aGljaCBpcyB0aGUgaW50ZW50aW9uIGluIHRoaXMgY2FzZSwgcmF0aGVyIHRoYW4gaW5kaWNhdGluZyBqdXN0IGEgdGVtcG9yYXJ5IG1lbW9yeSBzaG9ydGFnZS4gVG8gY29uZmlybSB0aGlzIGludHVpdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGhvdyBjYWxsZXJzIGhhbmRsZSBgLUVOT1NQQ2AuIFBlcmhhcHMgdGhlIHJldHVybiBvZiBgLUVOT1NQQ2AgcHJvdmlkZXMgY2xhcml0eSBhbmQgcmVkdWNlcyB0aGUgb3Bwb3J0dW5pdHkgZm9yIGEgZmF1bHQgaGFuZGxlciB0byByZXRyeSBvbiB0aGUgc2FtZSBjb25kaXRpb24uCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL2h1Z2V0bGIuY2AgYXJvdW5kIGxpbmVzIDI4MjUtMjkxMCwgbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgaW4gdGhpcyBmdW5jdGlvbiB0byBnZXQgbW9yZSBiYWNrZ3JvdW5kLiBMZXQgbWUgdXNlIGByZWFkLWZpbGVgIHRvIGRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MjU6XHQgKlxuMjgyNjpcdCAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbjI4Mjc6XHQgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbjI4Mjg6XHQgKi9cbjI4Mjk6XHRzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbjI4MzA6XHRcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuMjgzMTpcdHtcbjI4MzI6XHRcdGJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyBcdTAwMjZcbjI4MzM6XHRcdFx0XHRcdFx0ICBIVUdFVExCX0FMTE9DX0NIQVJHX0NHUk9VUF9SU1ZEO1xuMjgzNDpcdFx0Ym9vbCB1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uID0gYWxsb2NfZmxhZ3MgXHUwMDI2XG4yODM1Olx0XHRcdFx0XHQgICAgICBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xuMjgzNjpcdFx0c2l6ZV90IG5yX3BhZ2VzID0gcGFnZXNfcGVyX2h1Z2VfcGFnZShoKTtcbjI4Mzc6XHRcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcbjI4Mzg6XHRcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XG4yODM5Olx0XHRnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7XG4yODQwOlx0XHRpbnQgaWR4ID0gaHN0YXRlX2luZGV4KGgpO1xuMjg0MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjI4NDI6XHRcdGludCByZXQ7XG4yODQzOlx0XG4yODQ0Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgXHUwMDI2XHUwMDI2XG4yODQ1Olx0XHQgICAgaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgbnJfcGFnZXMsIFx1MDAyNmhfY2dfcnN2ZCkpXG4yODQ2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuMjg0NzpcdFxuMjg0ODpcdFx0aWYgKGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgXHUwMDI2aF9jZykpIHtcbjI4NDk6XHRcdFx0cmV0ID0gLUVOT1NQQztcbjI4NTA6XHRcdFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcbjI4NTE6XHRcdH1cbjI4NTI6XHRcbjI4NTM6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI4NTQ6XHRcbjI4NTU6XHRcdGZvbGlvID0gTlVMTDtcbjI4NTY6XHRcdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uIHx8IGF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKVxuMjg1NzpcdFx0XHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIG1wb2xpKTtcbjI4NTg6XHRcbjI4NTk6XHRcdGlmICghZm9saW8pIHtcbjI4NjA6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yODYxOlx0XHRcdGZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIG1wb2xpKTtcbjI4NjI6XHRcdFx0aWYgKCFmb2xpbykge1xuMjg2MzpcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4yODY0Olx0XHRcdFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA7XG4yODY1Olx0XHRcdH1cbjI4NjY6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg2NzpcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmgtXHUwMDNlaHVnZXBhZ2VfYWN0aXZlbGlzdCk7XG4yODY4Olx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4yODY5Olx0XHR9XG4yODcwOlx0XG4yODcxOlx0XHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xuMjg3MjpcdFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xuMjg3MzpcdFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xuMjg3NDpcdFx0fVxuMjg3NTpcdFxuMjg3NjpcdFx0aHVnZXRsYl9jZ3JvdXBfY29tbWl0X2NoYXJnZShpZHgsIG5yX3BhZ2VzLCBoX2NnLCBmb2xpbyk7XG4yODc3Olx0XG4yODc4Olx0XHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpIHtcbjI4Nzk6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfY29tbWl0X2NoYXJnZV9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCxcbjI4ODA6XHRcdFx0XHRcdFx0XHQgIGZvbGlvKTtcbjI4ODE6XHRcdH1cbjI4ODI6XHRcbjI4ODM6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg4NDpcdFxuMjg4NTpcdFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG4yODg2Olx0XHQvKlxuMjg4NzpcdFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxuMjg4ODpcdFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxuMjg4OTpcdFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXG4yODkwOlx0XHQgKi9cbjI4OTE6XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xuMjg5MjpcdFxuMjg5MzpcdFx0aWYgKHJldCA9PSAtRU5PTUVNKSB7XG4yODk0Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4yODk1Olx0XHRcdC8qXG4yODk2Olx0XHRcdCAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlc1xuMjg5NzpcdFx0XHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXG4yODk4Olx0XHRcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cbjI4OTk6XHRcdFx0ICovXG4yOTAwOlx0XHRcdC8qXG4yOTAxOlx0XHRcdCAqIFJldHVybiAtRU5PU1BDLCBzaW5jZSByZXRyeWluZyB0aGUgZmF1bHQgaXMgZnV0aWxlOlxuMjkwMjpcdFx0XHQgKiB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkIGZvciBIdWdlVExCLlxuMjkwMzpcdFx0XHQgKi9cbjI5MDQ6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4yOTA1Olx0XHR9XG4yOTA2Olx0XG4yOTA3Olx0XHRyZXR1cm4gZm9saW87XG4yOTA4Olx0XG4yOTA5Olx0IGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDcyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaHVnZXRsYl9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IGNhbGxlcnMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2hhdCogaGFzIGNoYW5nZWQgaW4gaXRzIHVzYWdlIHJlY2VudGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIG5vdyBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbWUgdG8gaGF2ZSBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiByZWNlbnQgbW9kaWZpY2F0aW9ucy4KClRoZW4sIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYG1tL2h1Z2V0bGIuY2AgYW5kIGh1Z2V0bGIgbW9yZSBnZW5lcmFsbHkuIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGJsaW5kc2lkZWQgYnkgc29tZSBidWlsZC10aW1lIGRlcGVuZGVuY3kgdGhhdCBJIG1pc3NlZC4gVGhpcyBzdGVwIGlzIGEgbXVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1lbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAxOnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yODA5PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNy0vKipcbm1tL2h1Z2V0bGIuYzoyODE4OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxOS0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjk6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgzMC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAyNy1cbm1tL2h1Z2V0bGIuYzozMDI4Olx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGl0cyBDYWxsIFNpdGVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBodWdlIHBhZ2UgYWxsb2NhdGlvbi4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgdGhpcyBmdW5jdGlvbiwgb3IgaXRzIGFsaWFzIGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgaXMgYmVpbmcgaW52b2tlZC4gVGhhdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGRvZXMgdGhlIHN5c3RlbSBkZWNpZGUgaXQgbmVlZHMgYSBodWdlIHBhZ2U/IFdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoaXMgYWxsb2NhdGlvbj8mIzM0OyBCeSB0cmFjaW5nIGJhY2sgZnJvbSB0aGUgY2FsbCBzaXRlcywgSSBjYW4gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMuIEZvciBpbnN0YW5jZSwgSSYjMzk7bGwgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2FsbGVycyBhcmUgaW4gdXNlci1zcGFjZSwga2VybmVsLXNwYWNlLCBvciBib3RoLiBBbmQsIGZ1cnRoZXIsIHdoZXRoZXIgb3Igbm90IHRoZSBjYWxsZXJzIGhhdmUgdGhlaXIgb3duIGFsbG9jYXRpb24gc3RyYXRlZ3kgd2hpY2ggd2lsbCBhbHRlciBob3cgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGJlaGF2ZXMuCgpCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtub3cgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgdGhpcyBmdW5jdGlvbiBjcml0aWNhbCBwYXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcz8gTG9va2luZyBhdCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGF0IGVhY2ggY2FsbCBzaXRlIHdpbGwgYmUga2V5LiBEb2VzIGl0IGRldGVybWluZSB0aGUgc2l6ZT8gQXJlIHNwZWNpZmljIGZsYWdzIHNldCBmb3IgbWVtb3J5IGF0dHJpYnV0ZXMgb3IgcGVybWlzc2lvbnM/IFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIGNvbXBvbmVudCBhbmQgaXRzIGRlcGVuZGVuY3kgdHJlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTgxPWFyZSBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXBwaW5nLiAgVGhlIGFsbG9jYXRpb25cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTgyOmlzIHBlcmZvcm1lZCB3aXRoaW4gdGhlIHJvdXRpbmUgYWxsb2NfaHVnZXRsYl9mb2xpbygpOjpcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTgzLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODQ6XHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4NS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg2LVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODc6YWxsb2NfaHVnZXRsYl9mb2xpbyBpcyBwYXNzZWQgYSBWTUEgcG9pbnRlciBhbmQgYSB2aXJ0dWFsIGFkZHJlc3MsIHNvIGl0IGNhblxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODgtY29uc3VsdCB0aGUgcmVzZXJ2YXRpb24gbWFwIHRvIGRldGVybWluZSBpZiBhIHJlc2VydmF0aW9uIGV4aXN0cy4gIEluIGFkZGl0aW9uLFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODk6YWxsb2NfaHVnZXRsYl9mb2xpbyB0YWtlcyB0aGUgYXJndW1lbnQgYXZvaWRfcmVzZXJ2ZSB3aGljaCBpbmRpY2F0ZXMgcmVzZXJ2ZXNcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTkwLXNob3VsZCBub3QgYmUgdXNlZCBldmVuIGlmIGl0IGFwcGVhcnMgdGhleSBoYXZlIGJlZW4gc2V0IGFzaWRlIGZvciB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTIwNz1pcyBjYWxsZWQuICBUaGlzIHJvdXRpbmUgdGFrZXMgdHdvIGFyZ3VtZW50cyByZWxhdGVkIHRvIHJlc2VydmF0aW9uczpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwOS0tIGF2b2lkX3Jlc2VydmUsIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUvYXJndW1lbnQgcGFzc2VkIHRvXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjIxMDogIGFsbG9jX2h1Z2V0bGJfZm9saW8oKS5cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjExLS0gY2hnLCBldmVuIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIG9mIHR5cGUgbG9uZyBvbmx5IHRoZSB2YWx1ZXMgMCBvciAxIGFyZVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjQ3PUl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHJlc2VydmUgbWFwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGhlIGNhbGxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ4OnRvIHZtYV9uZWVkc19yZXNlcnZhdGlvbigpIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NfaHVnZXRsYl9mb2xpbygpIGFuZCB0aGVcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ5LWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTExNj1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQ1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ2OuW9k+S4jumihOeVmeebuOWFs+eahOW3qOmhteWcqOebuOW6lOeahOaYoOWwhOS4reiiq+WIhumFjeWSjOWunuS+i+WMluaXtu+8jOmihOeVmeWwseiiq+a2iOiAl+S6huOAguivpeWIhumFjeaYr+WcqOWHveaVsGFsbG9jX2h1Z2V0bGJfZm9saW8uLi5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0Ny3kuK3ov5vooYznmoQ6OlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTQ4LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ5Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBhdm9pZF9yZXNlcnZlKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUyOmFsbG9jX2h1Z2V0bGJfZm9saW/ooqvkvKDpgJLnu5nkuIDkuKpWTUHmjIfpkojlkozkuIDkuKromZrmi5/lnLDlnYDvvIzlm6DmraTlroPlj6/ku6Xmn6XpmIXpooTnlZnmmKDlsITku6Xnoa7lrprmmK/lkKblrZjlnKjpooTnlZnjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MzrmraTlpJbvvIxhbGxvY19odWdldGxiX2ZvbGlv6ZyA6KaB5LiA5Liq5Y+C5pWwYXZvaWRfcmVzZXJ2Ze+8jOivpeWPguaVsOihqOekuuWNs+S9v+eci+i1t+adpeW3sue7j+S4uuaMh+WumueahOWcsOWdgOmihOeVmeS6hlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTU0LemihOeVme+8jOS5n+S4jeW6lOivpeS9v+eUqOmihOeVmeOAgmF2b2lkX3Jlc2VydmXlj4LmlbDmnIDluLjooqvnlKjkuo7lhpnml7bmi7fotJ3lkozpobXpnaLov4Hnp7vnmoTmg4XlhrXkuIvvvIzljbPnjrDmnInpobXpnaLnmoTpop1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNjA9dm1hX25lZWRzX3Jlc2VydmF0aW9uKCnov5Tlm57nmoTlgLzpgJrluLjkuLow5oiWMeOAguWmguaenOivpeWcsOWdgOWtmOWcqOmihOeVme+8jOWImeS4ujDvvIzlpoLmnpzkuI3lrZjlnKjpooTnlZnvvIzliJnkuLox44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTY1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTY2Oi0gYXZvaWRfcmVzZXJ2Ze+8jOi/meaYr+S8oOmAkue7mWFsbG9jX2h1Z2V0bGJfZm9saW8oKeeahOWQjOS4gOS4quWAvC/lj4LmlbDjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2Ny0tIGNoZ++8jOWwveeuoei/meS4quWPguaVsOeahOexu+Wei+aYr2xvbmfvvIzkvYblj6rmnIkw5oiWMeeahOWAvOiiq+S8oOmAkue7mWRlcXVldWVfaHVnZV9wYWdlX3ZtYeOAguWmguaenOivpeWAvOS4ujDvvIxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjAyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjAzOuWcqGFsbG9jX2h1Z2V0bGJfZm9saW8oKeW8gOWni+iwg+eUqHZtYV9uZWVkc19yZXNlcnZhdGlvbigp5ZKM6aG16Z2i5YiG6YWN5ZCO6LCD55SoXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDQtdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NzAwPXN0YXRpYyBsb25nIGh1Z2V0bGJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5Mi1cdFx0ICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3OTM6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhcdTAwMjZwc2V1ZG9fdm1hLCBhZGRyLCBmYWxzZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTQtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODEzLVx0XHQgKiBmb2xpb191bmxvY2sgYmVjYXVzZSBsb2NrZWQgYnkgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MTQ6XHRcdCAqIGZvbGlvX3B1dCgpIGR1ZSB0byByZWZlcmVuY2UgZnJvbSBhbGxvY19odWdldGxiX2ZvbGlvKClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxNS1cdFx0ICovXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NzAxPXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAzOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDU6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA2LVx0XHRcdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVx0XHRcdFx0Ym9vbCBhbGxvd19hbGxvY19mYWxsYmFjayk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTIyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjUtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEyNy1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEzNDphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTM1LVx0XHRcdCAgICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTE0MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTQxOmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTQyLVx0XHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmM9MjE0ND1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjE2Ny1cbm1tL2h1Z2V0bGIuYzoyMTY4OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxNjktXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMjE4OC0vKiBmb2xpbyBtaWdyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gKi9cbm1tL2h1Z2V0bGIuYzoyMTg5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMTkwLVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spXG4tLVxubW0vaHVnZXRsYi5jPTI1MjI9c3RhdGljIGxvbmcgdm1hX2RlbF9yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cbm1tL2h1Z2V0bGIuYzoyNTMwOiAqIEl0IHNob3VsZCBPTkxZIGJlIGNhbGxlZCBmb3IgZm9saW9zIGFsbG9jYXRlZCB2aWEgYWxsb2NfaHVnZXRsYl9mb2xpbygpLFxubW0vaHVnZXRsYi5jLTI1MzEtICogYW5kIHRoZSBodWdldGxiIG11dGV4IHNob3VsZCByZW1haW4gaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyByb3V0aW5lLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTM2LSAqIDIpIE5vIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBmb3IgdGhlIHBhZ2UsIHNvIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzXG5tbS9odWdldGxiLmM6MjUzNzogKiAgICBub3Qgc2V0LiAgSG93ZXZlciwgYWxsb2NfaHVnZXRsYl9mb2xpbyBhbHdheXMgdXBkYXRlcyB0aGUgcmVzZXJ2ZSBtYXAuXG5tbS9odWdldGxiLmMtMjUzOC0gKlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQ1LSAqXG5tbS9odWdldGxiLmM6MjU0NjogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxubW0vaHVnZXRsYi5jLTI1NDctICovXG5tbS9odWdldGxiLmM9MjU0OD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMjU3NC1cdFx0XHQgKiBUaGlzIGluZGljYXRlcyB0aGVyZSBpcyBhbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZSBtYXBcbm1tL2h1Z2V0bGIuYzoyNTc1Olx0XHRcdCAqIG5vdCBhZGRlZCBieSBhbGxvY19odWdldGxiX2ZvbGlvLiAgV2Uga25vdyBpdCB3YXMgYWRkZWRcbm1tL2h1Z2V0bGIuYzoyNTc2Olx0XHRcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2Vcbm1tL2h1Z2V0bGIuYy0yNTc3LVx0XHRcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHdvdWxkIGJlIHNldCBvbiB0aGUgZm9saW8uXG4tLVxubW0vaHVnZXRsYi5jPTI5MTg9dHlwZWRlZiBlbnVtIHtcbi0tXG5tbS9odWdldGxiLmMtMjk0My0gKi9cbm1tL2h1Z2V0bGIuYzoyOTQ0OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy0yOTQ1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbi0tXG5tbS9odWdldGxiLmM9NDg4OT1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTUwMTAtXHRcdFx0XHQvKiBEbyBub3QgdXNlIHJlc2VydmUgYXMgaXQmIzM5O3MgcHJpdmF0ZSBvd25lZCAqL1xubW0vaHVnZXRsYi5jOjUwMTE6XHRcdFx0XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGFkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy01MDEyLVx0XHRcdFx0aWYgKElTX0VSUihuZXdfZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTU0ODI9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTU2My1cdHNwaW5fdW5sb2NrKHZtZi1cdTAwM2VwdGwpO1xubW0vaHVnZXRsYi5jOjU1NjQ6XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGNvd19mcm9tX293bmVyKTtcbm1tL2h1Z2V0bGIuYy01NTY1LVxuLS1cbm1tL2h1Z2V0bGIuYz01NzU0PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTgyMy1cbm1tL2h1Z2V0bGIuYzo1ODI0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTU4MjUtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTYwMDQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjIzOS0gKi9cbm1tL2h1Z2V0bGIuYzo2MjQwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtNjI0MS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS9odWdldGxiLmMtNjI1Ni1cdCAqL1xubW0vaHVnZXRsYi5jOjYyNTc6XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbm9kZSwgbm9kZW1hc2ssIGdmcF9tYXNrLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjI1OC1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vaHVnZXRsYi5jPTYyNjc9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjMyMy1cbm1tL2h1Z2V0bGIuYzo2MzI0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02MzI1LVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYy02MzQ5LVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjYzNTA6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3ZtYShoLCBkc3Rfdm1hLCBkc3RfYWRkcik7XG5tbS9odWdldGxiLmMtNjM1MS1cdFx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vaHVnZXRsYi5jLTYzNzAtXG5tbS9odWdldGxiLmM6NjM3MTpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjM3Mi1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NjY2ND1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL2h1Z2V0bGIuYy02Nzg0LVx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG5tbS9odWdldGxiLmM6Njc4NTpcdFx0XHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxubW0vaHVnZXRsYi5jLTY3ODYtXHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG4tLVxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4tLVxubW0vbWVtZmQuYy05My1cbm1tL21lbWZkLmM6OTQ6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG5tbS9tZW1mZC5jLTk1LVx0XHRcdFx0XHRcdCAgICBudW1hX25vZGVfaWQoKSxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDU2LVx0XHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgaWx4LCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6MTQ1NzpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLCBub2RlbWFzaywgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cdFx0XHRcdGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soTVJfTUVNUE9MSUNZX01CSU5EKSk7XG4tLVxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyMTQtXHRcdGdmcF9tYXNrID0gaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhoLCBnZnBfbWFzayk7XG5tbS9taWdyYXRlLmM6MjIxNTpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLFxubW0vbWlncmF0ZS5jLTIyMTYtXHRcdFx0XHRcdFx0bXRjLVx1MDAzZW5tYXNrLCBnZnBfbWFzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSHVnZXRsYiBBbGxvY2F0aW9uIEJ1Z2ZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGluIGBtbS9odWdldGxiLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmYWlscywgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcmV0dXJucyBgLUVOT01FTWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGNhbGwgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGFuZCB0aGVuIHJldHVybiB0aGUgb3JpZ2luYWwgYC1FTk9NRU1gIGVycm9yLiBOb3csIGl0IGFwcGVhcnMgdGhleSYjMzk7cmUgdXNpbmcgYGZvbGlvX3B1dChmb2xpbylgIGFuZCByZXR1cm5pbmcgYC1FTk9TUENgIGluc3RlYWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSo/ICBXaGF0JiMzOTtzIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlPyBUaGUgYmVoYXZpb3Igc2VlbXMgc3VidGxlLiBJcyB0aGlzIGEgYnVnZml4LCBvciBhIGRlbGliZXJhdGUgY2hhbmdlIGluIHNlbWFudGljcz8KClRvIHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIHJldHVybiB2YWx1ZSBvZiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgaXMgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGNvZGUgYW5kIGFueSByZWxhdGVkIGZhdWx0IGhhbmRsZXJzIHJlYWN0IHRvIGEgcG90ZW50aWFsIGVycm9yLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyByb3VnaGx5IGZyb20gMjk0MCB0byAzMDUwLCB3aGVyZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGZhdWx0IGhhbmRsaW5nIGFyZSBtb3N0IGxpa2VseSBkZWZpbmVkLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIHN3YXAgZnJvbSBgLUVOT01FTWAgdG8gYC1FTk9TUENgLiBQZXJoYXBzIGAtRU5PU1BDYCBpcyBtb3JlIGFjY3VyYXRlIGluIHRoaXMgY29udGV4dCwgb3IgbWF5YmUgdGhlIGNoYW5nZSBpcyB0aWVkIHRvIHNvbWUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvciBvciBpbnRlcmFjdGlvbnMgd2l0aCBgZm9saW9fcHV0YCB0aGF0IEkmIzM5O20gbm90IHNlZWluZyBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHNlZSB0aGUgbGFyZ2VyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTQwOlx0ICogd2hpY2ggY2FzZSBldmVuIGlmIHRoZXJlJiMzOTtzIGEgcHJpdmF0ZSB2bWEgcmVzdiBtYXAgaXQgd29uJiMzOTt0IGNvdmVyIHN1Y2hcbjI5NDE6XHQgKiBhbGxvY2F0aW9uKS4gIE5ldyBjYWxsIHNpdGVzIHNob3VsZCAocHJvYmFibHkpIG5ldmVyIHNldCBpdCB0byB0cnVlISFcbjI5NDI6XHQgKiBXaGVuIGl0JiMzOTtzIHNldCwgdGhlIGFsbG9jYXRpb24gd2lsbCBieXBhc3MgYWxsIHZtYSBsZXZlbCByZXNlcnZhdGlvbnMuXG4yOTQzOlx0ICovXG4yOTQ0Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjk0NTpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbjI5NDY6XHR7XG4yOTQ3Olx0XHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX3ZtYSh2bWEpO1xuMjk0ODpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbjI5NDk6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yOTUwOlx0XHRsb25nIHJldHZhbCwgZ2JsX2NoZywgZ2JsX3Jlc2VydmU7XG4yOTUxOlx0XHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4yOTUyOlx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuMjk1MzpcdFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuMjk1NDpcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbjI5NTU6XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuMjk1NjpcdFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xuMjk1NzpcdFx0aW50IG5pZDtcbjI5NTg6XHRcdGludCByZXQ7XG4yOTU5Olx0XG4yOTYwOlx0XHQvKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBwZXItdm1hIHJlc2VydmF0aW9uPyAqL1xuMjk2MTpcdFx0aWYgKGNvd19mcm9tX293bmVyKSB7XG4yOTYyOlx0XHRcdC8qXG4yOTYzOlx0XHRcdCAqIFNwZWNpYWwgY2FzZSEgIFNpbmNlIGl0JiMzOTtzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXG4yOTY0Olx0XHRcdCAqIHBhZ2UsIHRoZSBwcml2YXRlIHJlc3YgbWFwIGRvZXNuJiMzOTt0IGNvdW50LiAgU28gaXQgY2Fubm90XG4yOTY1Olx0XHRcdCAqIGNvbnN1bWUgdGhlIHBlci12bWEgcmVzdiBtYXAgZXZlbiBpZiBpdCYjMzk7cyByZXNlcnZlZC5cbjI5NjY6XHRcdFx0ICovXG4yOTY3Olx0XHRcdG1hcF9jaGcgPSBNQVBfQ0hHX0VORk9SQ0VEO1xuMjk2ODpcdFx0fSBlbHNlIHtcbjI5Njk6XHRcdFx0LypcbjI5NzA6XHRcdFx0ICogRXhhbWluZSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwIHRvIGRldGVybWluZSBpZiB0aGUgcHJvY2Vzc1xuMjk3MTpcdFx0XHQgKiBoYXMgYSByZXNlcnZhdGlvbiBmb3IgdGhlIHBhZ2UgdG8gYmUgYWxsb2NhdGVkLiAgQSByZXR1cm5cbjI5NzI6XHRcdFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cbjI5NzM6XHRcdFx0ICovXG4yOTc0Olx0XHRcdHJldHZhbCA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xuMjk3NTpcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMjk3NjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMjk3NzpcdFx0XHRtYXBfY2hnID0gcmV0dmFsID8gTUFQX0NIR19ORUVERUQgOiBNQVBfQ0hHX1JFVVNFO1xuMjk3ODpcdFx0fVxuMjk3OTpcdFxuMjk4MDpcdFx0LypcbjI5ODE6XHRcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cbjI5ODI6XHRcdCAqXG4yOTgzOlx0XHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cbjI5ODQ6XHRcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xuMjk4NTpcdFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXG4yOTg2Olx0XHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuMjk4NzpcdFx0ICovXG4yOTg4Olx0XHRpZiAobWFwX2NoZykge1xuMjk4OTpcdFx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuMjk5MDpcdFx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuMjk5MTpcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4yOTkyOlx0XHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuMjk5MzpcdFx0XHR9XG4yOTk0Olx0XHR9IGVsc2Uge1xuMjk5NTpcdFx0XHQvKlxuMjk5NjpcdFx0XHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXG4yOTk3Olx0XHRcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cbjI5OTg6XHRcdFx0ICovXG4yOTk5Olx0XHRcdGdibF9jaGcgPSAwO1xuMzAwMDpcdFx0fVxuMzAwMTpcdFxuMzAwMjpcdFx0LypcbjMwMDM6XHRcdCAqIElmIGFsbG9jYXRpb24gZG9lc24mIzM5O3QgcmV1c2UgYSByZXNlcnZhdGlvbiBpbiB0aGUgcmVzdl9tYXAsXG4zMDA0Olx0XHQgKiBjaGFyZ2UgZm9yIHRoZSByZXNlcnZhdGlvbi5cbjMwMDU6XHRcdCAqL1xuMzAwNjpcdFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19SRVVTRSlcbjMwMDc6XHRcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbjMwMDg6XHRcbjMwMDk6XHRcdC8qXG4zMDEwOlx0XHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4zMDExOlx0XHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuMzAxMjpcdFx0ICovXG4zMDEzOlx0XHRpZiAoZ2JsX2NoZyA9PSAwKVxuMzAxNDpcdFx0XHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xuMzAxNTpcdFxuMzAxNjpcdFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXG4zMDE3Olx0XHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnAsIFx1MDAyNm1wb2wsIFx1MDAyNm5vZGVtYXNrKTtcbjMwMTg6XHRcdG1wb2xpID0gKHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQpe1xuMzAxOTpcdFx0XHQubmlkID0gbmlkLFxuMzAyMDpcdCNpZmRlZiBDT05GSUdfTlVNQVxuMzAyMTpcdFx0XHQubW9kZSA9IG1wb2wgPyBtcG9sLVx1MDAzZW1vZGUgOiBNUE9MX0RFRkFVTFQsXG4zMDIyOlx0I2Vsc2VcbjMwMjM6XHRcdFx0Lm1vZGUgPSBNUE9MX0RFRkFVTFQsXG4zMDI0Olx0I2VuZGlmXG4zMDI1Olx0XHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuMzAyNjpcdFx0fTtcbjMwMjc6XHRcbjMwMjg6XHRcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuMzAyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBmb3IgYG1tL2h1Z2V0bGIuY2Agd2l0aCBhIEZ1enplcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL2h1Z2V0bGIuY2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIGh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRpbWUgdG8gYXBwbHkgbXkgbWVudGFsIGNoZWNrbGlzdC4KCkZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY29kZSBldmVuIGZhbGxzIHVuZGVyIHRoZSBjcml0ZXJpYS4gU2VjdGlvbiAzIGxpc3RzIHRoZSBqdWljeSBiaXRzOiBtbSwgbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIG5ldHdvcmtpbmcsIFZGUywgc3lzY2FsbHMuIFllcCwgbWVtb3J5IG1hbmFnZW1lbnQgaXMgb24gdGhlIGxpc3QsIGFuZCB0aGF0IGNvdmVycyBgbW0vaHVnZXRsYi5jYC4gQ2hlY2suCgpOZXh0LCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGNvZGU/IElzIHRoZXJlIGEgc3RyYWlnaHRmb3J3YXJkIHBhdGggdmlhIFFFTVUgYW5kIHN5emthbGxlcj8gRm9ydHVuYXRlbHksIHllcy4gSSBjYW4gdXNlIG1tYXAgd2l0aCBNQVBfSFVHRVRMQiwgbW91bnQgaHVnZXRsYmZzLCB1c2Ugc2htZ2V0IHdpdGggU0hNX0hVR0VUTEIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBNZW0gY2dyb3VwcyByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvby4gU2VlbXMgbGlrZSBpdCYjMzk7cyByZWFjaGFibGUuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBmb3IgYG1tL2h1Z2V0bGIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVx0JiM0Mzs9IGRtYXBvb2wub1xubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGh1Z2UgcGFnZSBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZzL2h1Z2V0bGJmcy9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhlIGRlZmluaXRpb25zIG9mIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBUaGVzZSBhcmUgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSYjMzk7cyBodWdlIHBhZ2UgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkLiBLbm93aW5nIHRoZWlyIHN0YXR1cyB3aWxsIGJlIGZ1bmRhbWVudGFsIHRvIGRpYWdub3Npbmcgb3Igb3B0aW1pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDY3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIGZvciBgY29uZmlnIEhVR0VUTEJGU2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyBvZiBgY29uZmlnIEhVR0VUTEJGU2AgYWNyb3NzIG91ciBLY29uZmlnIGZpbGVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgc2ltcGxlIGdyZXA7IEkgbmVlZCB0byBiZSBwcmVjaXNlLCBlbnN1cmluZyBJIGNhdGNoIGFsbCB2YXJpYXRpb25zIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCB0cmVlLiBJJiMzOTtsbCBwcm9iYWJseSBsZXZlcmFnZSBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgdmFyaWF0aW9ucyBsaWtlIGAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldGAgd2hpY2ggSSB3aWxsIHdhbnQgdG8gZXhjbHVkZS4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IGxpbmVzIHdoaWxlIHNraXBwaW5nIG92ZXIgdGhlIGNvbW1lbnQgbGluZXMuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIG91dCBmb3IgYW55dGhpbmcgY29uZGl0aW9uYWxseSBkZWZpbmVkLiBPbmNlIEkgaGF2ZSB0aGUgaW5pdGlhbCBoaXQgbGlzdCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gZWFjaCBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQg4oCTIHdoaWNoIGFyY2hpdGVjdHVyZShzKSBvciBzdWJzeXN0ZW0ocykgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoLCB3aGF0IG90aGVyIG9wdGlvbnMgaXQgZGVwZW5kcyBvbiBvciBpcyBkZXBlbmRlbnQgb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIGNvbXBsZXRlIG1hcCBvZiBob3cgYEhVR0VUTEJGU2AgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIHNvbWUgbWFudWFsIGluc3BlY3Rpb24gb2YgdGhlIHJlc3VsdHMgdG8gZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBhbmQgdW5kZXJzdGFuZCB0aGUgbnVhbmNlZCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGlzIG9yZ2FuaXplZCwgbWF5YmUgdXNlIGEgc2NyaXB0IHRvIHBhcnNlIHRoZSBvdXRwdXQgaW50byBhIG1vcmUgdXNhYmxlIGZvcm1hdCBhcyBJIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4ODIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgcHJpb3IgZXhwZXJpZW5jZSwgSSBhbnRpY2lwYXRlIHRoYXQgc2VjdGlvbiBvZiB0aGUgZmlsZSB0byBwcm92aWRlIHNvbWUgaGlnaC1sZXZlbCBjb250ZXh0LCBhbmQgYXQgbGluZSAyNDcgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgSSBjYW4gb2Z0ZW4gZmluZCBpbml0aWFsIGRlY2xhcmF0aW9ucyBpbiB0aGF0IGdlbmVyYWwgYXJlYS4gSSYjMzk7bGwgcmVhZCBhcm91bmQgdGhlcmUgYW5kIHF1aWNrbHkgc2NhbiBmb3IgYW55IHJlbGF0ZWQgc3ltYm9scyBvciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjQ2Olx0XG4gMjQ3Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjQ4Olx0XHRkZWZfYm9vbCBuXG4gMjQ5Olx0XG4gMjUwOlx0bWVudWNvbmZpZyBIVUdFVExCRlNcbiAyNTE6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMjUyOlx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjUzOlx0XHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4gMjU0Olx0XHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxuIDI1NTpcdFx0aGVscFxuIDI1NjpcdFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG4gMjU3Olx0XHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcbiAyNTg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAyNTk6XHRcbiAyNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjE6XHRcbiAyNjI6XHRpZiBIVUdFVExCRlNcbiAyNjM6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuIDI2NDpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4gMjY1Olx0XHRkZWZhdWx0IG5cbiAyNjY6XHRcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNjc6XHRcdGhlbHBcbiAyNjg6XHRcdCAgVGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb2ZmLiBTYXkgWSBoZXJlIHRvXG4gMjY5Olx0XHQgIGVuYWJsZSBIVk8gYnkgZGVmYXVsdC4gSXQgY2FuIGJlIGRpc2FibGVkIHZpYSBodWdldGxiX2ZyZWVfdm1lbW1hcD1vZmZcbiAyNzA6XHRcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG4gMjcxOlx0ZW5kaWYgIyBIVUdFVExCRlNcbiAyNzI6XHRcbiAyNzM6XHRjb25maWcgSFVHRVRMQl9QQUdFXG4gMjc0Olx0XHRkZWZfYm9vbCBIVUdFVExCRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MzgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBjZ3JvdXBzIGFuZCBodWdldGxiIGNoYXJnaW5nIGFyZSBpbnRlcmFjdGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aWVkIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gV2hhdCBhcmUgdGhlIGtub2JzIHRoYXQgcmVhbGx5IGFmZmVjdCBob3cgaHVnZXRsYiBtZW1vcnkgaXMgYWNjb3VudGVkIGZvciBhbmQgY2hhcmdlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgbWFuYWdlbWVudC4gR290dGEgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTUzPXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNTk6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTYwLXtcbi0tXG5tbS9odWdldGxiLmM9MjgyOT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjg4NC1cbm1tL2h1Z2V0bGIuYzoyODg1Olx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG5tbS9odWdldGxiLmMtMjg4Ni1cdC8qXG5tbS9odWdldGxiLmMtMjg4Ny1cdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbm1tL2h1Z2V0bGIuYzoyODg4Olx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxubW0vaHVnZXRsYi5jLTI4ODktXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cbi0tXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUyMzUtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUyNDQtICovXG5tbS9tZW1jb250cm9sLmM6NTI0NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTI0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgTWVtb3J5IENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBHdWFyZHMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIGd1YXJkcyBpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIExldCYjMzk7cyBzdGFydCBhcm91bmQgbGluZSA1MjQ1LiBJIHN1c3BlY3QgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtYWNyb3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZlcyBiYXNlZCBvbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgZ3VhcmRzIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBjb250cm9sIGZsb3cgYW5kIHdoYXQgaW1wYWN0IHRoZXkgaGF2ZSBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGlzIHNob3VsZCBjbGFyaWZ5IGhvdyB0aGlzIGZlYXR1cmUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyMzA6XHRcdHJldHVybiByZXQ7XG41MjMxOlx0fVxuNTIzMjpcdFxuNTIzMzpcdC8qKlxuNTIzNDpcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbjUyMzU6XHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbjUyMzY6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjUyMzc6XHQgKlxuNTIzODpcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXG41MjM5Olx0ICogYWxyZWFkeSBiZWVuIG9idGFpbmVkIGFuZCBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBodWdldGxiIGNncm91cFxuNTI0MDpcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxuNTI0MTpcdCAqXG41MjQyOlx0ICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cbjUyNDM6XHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxuNTI0NDpcdCAqL1xuNTI0NTpcdGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbjUyNDY6XHR7XG41MjQ3Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbjUyNDg6XHRcdGludCByZXQgPSAwO1xuNTI0OTpcdFxuNTI1MDpcdFx0LypcbjUyNTE6XHRcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcbjUyNTI6XHRcdCAqIHN5c3RlbS1sZXZlbCBzdGF0cyB2aWEgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvLiBSZXR1cm4gMCwgYW5kIHNraXBcbjUyNTM6XHRcdCAqIGNoYXJnaW5nIHRoZSBtZW1jZy5cbjUyNTQ6XHRcdCAqL1xuNTI1NTpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XG41MjU2Olx0XHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjUyNTc6XHRcdFx0Z290byBvdXQ7XG41MjU4Olx0XG41MjU5Olx0XHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbjUyNjA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjUyNjE6XHRcbjUyNjI6XHRvdXQ6XG41MjYzOlx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG41MjY0Olx0XHRyZXR1cm4gcmV0O1xuNTI2NTpcdH1cbjUyNjY6XHRcbjUyNjc6XHQvKipcbjUyNjg6XHQgKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cbjUyNjk6XHQgKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIHdpdGggSHVnZVRMQnMuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgYW5kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBtZW1jZ19hY2NvdW50c19odWdldGxiKClgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGxpa2VseSB0aWVkIHRvIHNvbWUga2VybmVsIGNvbXBpbGUtdGltZSBmbGFnIG9yIG1vZHVsZSBwYXJhbWV0ZXIuIEdyYWJiaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgdGFraW5nIGEgcXVpY2sgbG9vayB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGlzIGNoZWNrIGlzIGRvbmUgdG8gZGVjaWRlIHdoZXRoZXIgYWNjb3VudGluZyBpcyBlbmFibGVkIG9yIG5vdC4gRnJvbSB0aGVyZSBJJiMzOTtsbCBiZSBhYmxlIHRvIHRyYWNlIGhvdyB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQmIzM5O3MgdGhlIGJlc3QgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfYWNjb3VudHNfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MTcxOT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MjYtI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYzoxNzI3OnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcbm1tL21lbWNvbnRyb2wuYy0xNzI4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTczMS0jZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9tZW1jb250cm9sLmM6MTczMjpzdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19odWdldGxiKHZvaWQpXG5tbS9tZW1jb250cm9sLmMtMTczMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc1OC1cdFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6MTc1OTpcdFx0XHQhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpKVxubW0vbWVtY29udHJvbC5jLTE3NjAtXHRcdFx0Y29udGludWU7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyNDU9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjU0LVx0ICovXG5tbS9tZW1jb250cm9sLmM6NTI1NTpcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxubW0vbWVtY29udHJvbC5jLTUyNTYtXHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBBY2NvdW50aW5nIHdpdGhpbiBNZW1vcnkgQ29udHJvbCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IGh1Z2UgcGFnZXMgYXJlIGFjY291bnRlZCBmb3IgdW5kZXIgbWVtb3J5IGNvbnRyb2wuIFRoZSBzdGFydGluZyBwb2ludCBpcyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAsIHNwZWNpZmljYWxseSBpbiBgbW0vbWVtY29udHJvbC5jOjE3MjdgLiBUaGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgKnNob3VsZCogYmUgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkgY2hhbmdlcyBvciBpZiB0aGlzIGlzIHBlcmZvcm1pbmcgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseT8gSSB3YW50IHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGFjY291bnRpbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYmVjYXVzZSBtaXNtYW5hZ2VkIEh1Z2VUTEIgYWxsb2NhdGlvbiBjYW4gbGVhZCB0byBzZXJpb3VzIHBlcmZvcm1hbmNlIGlzc3VlcywgcmlnaHQ/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhbGwgd29ya2luZyBhcyBleHBlY3RlZCB1bmRlciBhbGwgc2NlbmFyaW9zLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiBvbiBzZWVpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gQW55IGNoYW5jZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3IgZGVhZGxvY2sgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgbG9ja3Mgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGUgaW50ZXJmYWNlIGlzIHNjYWxhYmxlIGFuZCByb2J1c3QgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFRoZXJlIGFyZSBnb2luZyB0byBiZSBhIGxvdCBvZiBsaXR0bGUgZGV0YWlscyBpbiBoZXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzI1Olx0XG4xNzI2Olx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbjE3Mjc6XHRzdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19odWdldGxiKHZvaWQpXG4xNzI4Olx0e1xuMTcyOTpcdFx0cmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfSFVHRVRMQl9BQ0NPVU5USU5HO1xuMTczMDpcdH1cbjE3MzE6XHQjZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4xNzMyOlx0c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxuMTczMzpcdHtcbjE3MzQ6XHRcdHJldHVybiBmYWxzZTtcbjE3MzU6XHR9XG4xNzM2Olx0I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbjE3Mzc6XHRcbjE3Mzg6XHRzdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuMTczOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2VwYWdlIEFsbG9jYXRpb24gYW5kIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBNRU1DR2AsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIG9yIGNhbGxlcnMgdGhhdCBhcmUgaW52b2x2ZWQgaGVyZS4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBkb2luZy4gUmlnaHQsIGl0JiMzOTtzIHRoZSBjb3JlIG9mIGh1Z2VwYWdlIGFsbG9jYXRpb24uIEkgc2VlIHRoYXQsIGlmIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmYWlscywgdGhlIGxvZ2ljIGhhcyBiZWVuIHVwZGF0ZWQuIFByZXZpb3VzbHksIGl0IHdvdWxkIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCBhbmQgcmV0dXJuIGAtRU5PTUVNYC4gTm93LCBpdCBjYWxscyBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybnMgYEVSUl9QVFIoLUVOT1NQQylgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgKndoeSogdGhlIGNoYW5nZSBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIHRvIGBmb2xpb19wdXRgLiBBaCwgdGhlIHJlZmNvdW50aW5nISBXaGVuIGEgaHVnZSBwYWdlIGlzIGFsbG9jYXRlZCBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIHRoZSByZWZjb3VudCBnZXRzIGVpdGhlciBmcm96ZW4gYW5kIHVuZnJvemVuIHdpdGggYGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSlgIG9yIGluY3JlbWVudGVkIHdpdGggYGRlcXVldWVfaHVnZXRsYl9mb2xpb2AuIElmIHdlIGp1c3QgY2FsbGVkIGBmcmVlX2h1Z2VfZm9saW9gIGRpcmVjdGx5LCB0aGUgcmVmY291bnQgbWlnaHQgbm90IGhhdmUgYmVlbiBwcm9wZXJseSBkZWNyZW1lbnRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBwYWdlIGRlc3RydWN0b3JzIG9yIG90aGVyIHJlZmNvdW50IGlzc3Vlcy4gYGZvbGlvX3B1dGAsIG9uIHRoZSBvdGhlciBoYW5kLCAqYWx3YXlzKiBkZWNyZW1lbnRzIHRoZSByZWZjb3VudCBhbmQsIHdoZW4gaXQgaGl0cyB6ZXJvLCB0cmlnZ2VycyB0aGUgY29ycmVjdCBkZXN0cnVjdG9yIHdoaWNoIGZyZWVzIHRoZSBodWdlIGZvbGlvIGFuZCB1bmNoYXJnZXMgdGhlIGNncm91cCBwcm9wZXJseS4KClRoZSBvdGhlciBwb2ludCBpcyB0aGUgZXJyb3IgY29kZSBjaGFuZ2UgdG8gYC1FTk9TUENgIGluc3RlYWQgb2YgYC1FTk9NRU1gLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIGhvdyB0aGUgY2FsbGVycyBoYW5kbGUgdGhlIGVycm9yLiBGb3IgZXhhbXBsZSwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBmYXVsdCBoYW5kbGVycywgcmV0dXJuaW5nIGAtRU5PU1BDYCB0cmFuc2xhdGVzIHRvIGBWTV9GQVVMVF9TSUdCVVNgIGluc3RlYWQgb2YgYFZNX0ZBVUxUX09PTWAuIFRoaXMgd2lsbCBiZSBrZXkuIEkgbmVlZCB0byBleGFtaW5lIGhvdyB0aGVzZSBjYWxsZXJzIHJlYWN0IHRvIHRoZXNlIGRpZmZlcmVudCBlcnJvciBjb2Rlcy4gSXQmIzM5O3MgdGltZSB0byByZWFkIHRocm91Z2ggYG1tL2h1Z2V0bGIuY2AgYXJvdW5kIGZ1bmN0aW9ucyBsaWtlIGBodWdldGxiX25vX3BhZ2VgIGFuZCBgaHVnZXRsYl93cGAgdG8gZ2V0IHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTgyMDpcdFx0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuNTgyMTpcdFx0XHRcdFx0Z290byBvdXQ7XG41ODIyOlx0XHRcdH1cbjU4MjM6XHRcbjU4MjQ6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcbjU4MjU6XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjU4MjY6XHRcdFx0XHQvKlxuNTgyNzpcdFx0XHRcdCAqIFJldHVybmluZyBlcnJvciB3aWxsIHJlc3VsdCBpbiBmYXVsdGluZyB0YXNrIGJlaW5nXG41ODI4Olx0XHRcdFx0ICogc2VudCBTSUdCVVMuICBUaGUgaHVnZXRsYiBmYXVsdCBtdXRleCBwcmV2ZW50cyB0d29cbjU4Mjk6XHRcdFx0XHQgKiB0YXNrcyBmcm9tIHJhY2luZyB0byBmYXVsdCBpbiB0aGUgc2FtZSBwYWdlIHdoaWNoXG41ODMwOlx0XHRcdFx0ICogY291bGQgcmVzdWx0IGluIGZhbHNlIHVuYWJsZSB0byBhbGxvY2F0ZSBlcnJvcnMuXG41ODMxOlx0XHRcdFx0ICogUGFnZSBtaWdyYXRpb24gZG9lcyBub3QgdGFrZSB0aGUgZmF1bHQgbXV0ZXgsIGJ1dFxuNTgzMjpcdFx0XHRcdCAqIGRvZXMgYSBjbGVhciB0aGVuIHdyaXRlIG9mIHB0ZSYjMzk7cyB1bmRlciBwYWdlIHRhYmxlXG41ODMzOlx0XHRcdFx0ICogbG9jay4gIFBhZ2UgZmF1bHQgY29kZSBjb3VsZCByYWNlIHdpdGggbWlncmF0aW9uLFxuNTgzNDpcdFx0XHRcdCAqIG5vdGljZSB0aGUgY2xlYXIgcHRlIGFuZCB0cnkgdG8gYWxsb2NhdGUgYSBwYWdlXG41ODM1Olx0XHRcdFx0ICogaGVyZS4gIEJlZm9yZSByZXR1cm5pbmcgZXJyb3IsIGdldCBwdGwgYW5kIG1ha2VcbjU4MzY6XHRcdFx0XHQgKiBzdXJlIHRoZXJlIHJlYWxseSBpcyBubyBwdGUgZW50cnkuXG41ODM3Olx0XHRcdFx0ICovXG41ODM4Olx0XHRcdFx0aWYgKGh1Z2V0bGJfcHRlX3N0YWJsZShoLCBtbSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VvcmlnX3B0ZSkpXG41ODM5Olx0XHRcdFx0XHRyZXQgPSB2bWZfZXJyb3IoUFRSX0VSUihmb2xpbykpO1xuNTg0MDpcdFx0XHRcdGVsc2VcbjU4NDE6XHRcdFx0XHRcdHJldCA9IDA7XG41ODQyOlx0XHRcdFx0Z290byBvdXQ7XG41ODQzOlx0XHRcdH1cbjU4NDQ6XHRcdFx0Zm9saW9femVyb191c2VyKGZvbGlvLCB2bWYtXHUwMDNlcmVhbF9hZGRyZXNzKTtcbjU4NDU6XHRcdFx0X19mb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbjU4NDY6XHRcdFx0bmV3X2ZvbGlvID0gdHJ1ZTtcbjU4NDc6XHRcbjU4NDg6XHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpIHtcbjU4NDk6XHRcdFx0XHRpbnQgZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywgbWFwcGluZyxcbjU4NTA6XHRcdFx0XHRcdFx0XHRcdHZtZi1cdTAwM2VwZ29mZik7XG41ODUxOlx0XHRcdFx0aWYgKGVycikge1xuNTg1MjpcdFx0XHRcdFx0LypcbjU4NTM6XHRcdFx0XHRcdCAqIGVyciBjYW4mIzM5O3QgYmUgLUVFWElTVCB3aGljaCBpbXBsaWVzIHNvbWVvbmVcbjU4NTQ6XHRcdFx0XHRcdCAqIGVsc2UgY29uc3VtZWQgdGhlIHJlc2VydmF0aW9uIHNpbmNlIGh1Z2V0bGJcbjU4NTU6XHRcdFx0XHRcdCAqIGZhdWx0IG11dGV4IGlzIGhlbGQgd2hlbiBhZGQgYSBodWdldGxiIHBhZ2VcbjU4NTY6XHRcdFx0XHRcdCAqIHRvIHRoZSBwYWdlIGNhY2hlLiBTbyBpdCYjMzk7cyBzYWZlIHRvIGNhbGxcbjU4NTc6XHRcdFx0XHRcdCAqIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcigpIGhlcmUuXG41ODU4Olx0XHRcdFx0XHQgKi9cbjU4NTk6XHRcdFx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCB2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk3MwoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA1OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IEh1Z2VUTEIgTWVtb3J5IEFsbG9jYXRpb24gRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSA1ODM5IGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ6IGByZXQgPSB2bWZfZXJyb3IoUFRSX0VSUihmb2xpbykpO2AuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGB2bWZfZXJyb3JgIGhhbmRsZXMgdGhlIGAtRU5PTUVNYCBhbmQgYC1FTk9TUENgIGVycm9ycy4gYHZtZl9lcnJvcigtRU5PTUVNKWAgdHJhbnNsYXRlcyB0byBgVk1fRkFVTFRfT09NYCwgYW5kIGB2bWZfZXJyb3IoLUVOT1NQQylgIG1hcHMgdG8gYFZNX0ZBVUxUX1NJR0JVU2AuIFByZXZpb3VzbHksIGFuIGAtRU5PTUVNYCB3b3VsZCB0cmlnZ2VyIGFuIE9PTSByZXNwb25zZSwgd2hpY2ggaXMgcHJvYmxlbWF0aWMgZm9yIEh1Z2VUTEIgYmVjYXVzZSB0aGUgT09NIGtpbGxlciAqZG9lc24mIzM5O3QqIHJlY2xhaW0gSHVnZVRMQiBwYWdlcy4gVGhpcyByZXN1bHRzIGluIGZ1dGlsZSByZXRyaWVzLiBTd2l0Y2hpbmcgdG8gYC1FTk9TUENgIGFuZCB0aHVzIGBWTV9GQVVMVF9TSUdCVVNgIHNlZW1zIGxpa2UgYSBtb3JlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgoKTm93LCBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSByZWFjaGFibGU/IEFic29sdXRlbHkuIFRoZSBgbW0vaHVnZXRsYi5jYCBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBgbWFkdmlzZWAsIGFuZCBvcGVyYXRpb25zIG9uIHRoZSBgaHVnZXRsYmZzYCBmaWxlc3lzdGVtLiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGUgZnV6emluZyBzdWl0YWJpbGl0eSBhcHBlYXJzIGhpZ2guCgpGaXJzdCwgSSBjb25maXJtIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnLiBDaGVjay4KClNlY29uZCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIGluIHBsYWNlLiBXZSBuZWVkIGBIVUdFVExCRlNgIChvciBgSFVHRVRMQl9QQUdFYCwgYnV0IGBIVUdFVExCRlNgIGlzIHdoYXQgdGhlIHVzZXIgY29uZmlndXJlcyBpbiBgbWVudWNvbmZpZ2ApLiBXZSBhbHNvIG5lZWQgYE1FTUNHYCBmb3IgdGhlIG1lbV9jZ3JvdXAgY2hhcmdpbmcgb24gaHVnZSBwYWdlcyBhbmQgYENHUk9VUF9IVUdFVExCYCBmb3Igb3B0aW9uYWwgc3VwcG9ydC4gQWxsIG9mIHRoZXNlIGFyZSByZWxldmFudCwgbWFraW5nIHRoaXMgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0LiBDaGVjay4KClRoaXJkLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgZm9jdXMgc3ltYm9scz8gSSYjMzk7bSBsaXN0aW5nIHRoZXNlOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgSSB1bmRlcnN0YW5kIHRoZXNlIGFuZCB0aGVpciBjb250ZXh0LiBDaGVjay4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBub3QgYSBnZW5lcmljIHBhZ2UgYWxsb2NhdG9yIHRoYXQgd291bGQgcHJvZHVjZSB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMgZHVyaW5nIGZ1enppbmcuIE5vbmUgb2YgdGhlIGxpc3RlZCBzeW1ib2xzIGFyZSB1YmlxdWl0b3VzIG9yIGdlbmVyYWwgYWxsb2NhdG9ycyBsaWtlIGBhbGxvY19wYWdlc2AsIGBwYWdlX2ZhdWx0YCwgb3IgYGttYWxsb2NgLiBUaGV5JiMzOTtyZSBzcGVjaWZpYyB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGFyZSBhbGwgdGlnaHRseSBib3VuZCB0byB0aGUgSHVnZVRMQiBmZWF0dXJlLiBDaGVjay4KClNvLCBsZXQmIzM5O3MgcmVpdGVyYXRlIHRvIHZlcmlmeToKCjEuICBgV29ydGhGdXp6aW5nOiB0cnVlYAoyLiAgYEZvY3VzU3ltYm9sc2A6IGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAKMy4gIGBFbmFibGVDb25maWdzYDogYEhVR0VUTEJGU2AsIGBNRU1DR2AKNC4gIGBSZWFzb25pbmdgOiBIYW5kbGluZyBgLUVOT01FTWAgd2l0aCBgVk1fRkFVTFRfT09NYCBsZWFkcyB0byBmdXRpbGUgcmV0cmllcyBvbiBIdWdlVExCIHBhZ2VzLCBhbmQgY2hhbmdpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGAtRU5PU1BDYCBhbmQgYFZNX0ZBVUxUX1NJR0JVU2Agc2VlbXMgdG8gYmUgYSB2YWxpZCBpbXByb3ZlbWVudC4gVGhlIGlkZW50aWZpZWQgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgSHVnZVRMQiBmZWF0dXJlIGFuZCB0aHVzIGEgZ29vZCBmdXp6aW5nIHRhcmdldC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3ItaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZXRsYi5jIChodWdldGxiX2FsbG9jX2ZvbGlvKSB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbHMsIHJlcGxhY2luZyBmcmVlX2h1Z2VfZm9saW8gd2l0aCBmb2xpb19wdXQgYW5kIHJldHVybmluZyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IGZ1dGlsZSBmYXVsdCByZXRyaWVzLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYXJnaW5nIHBhdGhzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgaHVnZXRsYmZzIG9wZXJhdGlvbnMgYW5kIE1BUF9IVUdFVExCIGZhdWx0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2V0bGIuYyAoaHVnZXRsYl9hbGxvY19mb2xpbykgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxzLCByZXBsYWNpbmcgZnJlZV9odWdlX2ZvbGlvIHdpdGggZm9saW9fcHV0IGFuZCByZXR1cm5pbmcgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCBmdXRpbGUgZmF1bHQgcmV0cmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFyZ2luZyBwYXRocyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGh1Z2V0bGJmcyBvcGVyYXRpb25zIGFuZCBNQVBfSFVHRVRMQiBmYXVsdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYDogaXQgcmVwbGFjZXMgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgdG8gYC1FTk9TUENgLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjkzNzU3MjM0MjE4NzFkYTkwMWE0MTZhMDdmY2FiMjM1NjY5ZDliYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTc6NDM6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNGY2ZjU4YmYzZGI2Yy4uZjViODUzYTUzNzdjMiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjgyNSw3ICYjNDM7MjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCkKICAqCiAgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZvbGlvLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuCiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS4KLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLgogICovCiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKQpAQCAtMjg5MiwxMyAmIzQzOzI4OTEsMTcgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7CiAKIAlpZiAocmV0ID09IC1FTk9NRU0pIHsKLQkJZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCWZvbGlvX3B1dChmb2xpbyk7CiAJCS8qCiAJCSAqIFNraXAgdW5jaGFyZ2luZyBodWdldGxiX2Nncm91cCBzaW5jZSB0aGUgY2hhcmdlcwogCQkgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvCiAJCSAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC4KIAkJICovCi0JCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CQkvKgomIzQzOwkJICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6CiYjNDM7CQkgKiB0aGUgT09NIGtpbGxlciBpcyBub3QgdHJpZ2dlcmVkIGZvciBIdWdlVExCLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIAl9CiAKIAlyZXR1cm4gZm9saW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIGBtbS9odWdldGxiLmNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgY3JpdGljYWwgc3BvdCBmb3IgYWxsb2NhdGlvbiBsb2dpYyBpbiB0aGUgaHVnZSBwYWdlIHN5c3RlbSwgc28gd29ydGggYSBjbG9zZXIgbG9vay4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgc28gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBodWdldGxiLmNgIGFuZCBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmVzIDI4MjUgdG8gMjkwMC4gSSBjYW4gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGlzb2xhdGUgdGhhdCBzZWN0aW9uIGFuZCBnaXZlIG15c2VsZiBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zIHRoZSBwYXRjaCBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjgyNTpcdCAqXG4yODI2Olx0ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmb2xpbywgb3IgYW4gRVJSX1BUUiBvbiBmYWlsdXJlLlxuMjgyNzpcdCAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLlxuMjgyODpcdCAqL1xuMjgyOTpcdHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuMjgzMDpcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4yODMxOlx0e1xuMjgzMjpcdFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuMjgzMzpcdFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG4yODM0Olx0XHRib29sIHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gPSBhbGxvY19mbGFncyBcdTAwMjZcbjI4MzU6XHRcdFx0XHRcdCAgICAgIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4yODM2Olx0XHRzaXplX3QgbnJfcGFnZXMgPSBwYWdlc19wZXJfaHVnZV9wYWdlKGgpO1xuMjgzNzpcdFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnX3JzdmQgPSBOVUxMO1xuMjgzODpcdFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbjI4Mzk6XHRcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbjI4NDA6XHRcdGludCBpZHggPSBoc3RhdGVfaW5kZXgoaCk7XG4yODQxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMjg0MjpcdFx0aW50IHJldDtcbjI4NDM6XHRcbjI4NDQ6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCBcdTAwMjZcdTAwMjZcbjI4NDU6XHRcdCAgICBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgXHUwMDI2aF9jZ19yc3ZkKSlcbjI4NDY6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XG4yODQ3Olx0XG4yODQ4Olx0XHRpZiAoaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBcdTAwMjZoX2NnKSkge1xuMjg0OTpcdFx0XHRyZXQgPSAtRU5PU1BDO1xuMjg1MDpcdFx0XHRnb3RvIGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkO1xuMjg1MTpcdFx0fVxuMjg1MjpcdFxuMjg1MzpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjg1NDpcdFxuMjg1NTpcdFx0Zm9saW8gPSBOVUxMO1xuMjg1NjpcdFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4yODU3Olx0XHRcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xuMjg1ODpcdFxuMjg1OTpcdFx0aWYgKCFmb2xpbykge1xuMjg2MDpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI4NjE6XHRcdFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xuMjg2MjpcdFx0XHRpZiAoIWZvbGlvKSB7XG4yODYzOlx0XHRcdFx0cmV0ID0gLUVOT1NQQztcbjI4NjQ6XHRcdFx0XHRnb3RvIGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDtcbjI4NjU6XHRcdFx0fVxuMjg2NjpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yODY3Olx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2aC1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbjI4Njg6XHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcbjI4Njk6XHRcdH1cbjI4NzA6XHRcbjI4NzE6XHRcdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XG4yODcyOlx0XHRcdGZvbGlvX3NldF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG4yODczOlx0XHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XG4yODc0Olx0XHR9XG4yODc1Olx0XG4yODc2Olx0XHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlKGlkeCwgbnJfcGFnZXMsIGhfY2csIGZvbGlvKTtcbjI4Nzc6XHRcbjI4Nzg6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCkge1xuMjg3OTpcdFx0XHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxuMjg4MDpcdFx0XHRcdFx0XHRcdCAgZm9saW8pO1xuMjg4MTpcdFx0fVxuMjg4MjpcdFxuMjg4MzpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4yODg0Olx0XG4yODg1Olx0XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbjI4ODY6XHRcdC8qXG4yODg3Olx0XHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXG4yODg4Olx0XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG4yODg5Olx0XHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cbjI4OTA6XHRcdCAqL1xuMjg5MTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XG4yODkyOlx0XG4yODkzOlx0XHRpZiAocmV0ID09IC1FTk9NRU0pIHtcbjI4OTQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjI4OTU6XHRcdFx0LypcbjI4OTY6XHRcdFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXG4yODk3Olx0XHRcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cbjI4OTg6XHRcdFx0ICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLlxuMjg5OTpcdFx0XHQgKi9cbjI5MDA6XHRcdFx0LypcbjI5MDE6XHRcdFx0ICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6XG4yOTAyOlx0XHRcdCAqIHRoZSBPT00ga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQgZm9yIEh1Z2VUTEIuXG4yOTAzOlx0XHRcdCAqL1xuMjkwNDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbjI5MDU6XHRcdH1cbjI5MDY6XHRcbjI5MDc6XHRcdHJldHVybiBmb2xpbztcbjI5MDg6XHRcbjI5MDk6XHQgZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwOlxuMjkxMDpcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwKGlkeCwgbnJfcGFnZXMsIGhfY2cpO1xuMjkxMTpcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDpcbjI5MTI6XHRcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZClcbjI5MTM6XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkKTtcbjI5MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5OAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA1OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nOiBIdWdlVExCIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNvcmUgY2hhbmdlcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEZpcnN0LCB0aGUgY29kZSBjaGFuZ2VkIHdpdGhpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2A6IHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHJldHVybnMgYC1FTk9NRU1gLCBpdCBub3cgdXNlcyBgZm9saW9fcHV0KGZvbGlvKWAgaW5zdGVhZCBvZiBgZnJlZV9odWdlX2ZvbGlvKGZvbGlvKWAsIGFuZCByZXR1cm5zIGAtRU5PU1BDYCBpbnN0ZWFkIG9mIGAtRU5PTUVNYC4gVGhlIGNoYW5nZSBpcyBhYm91dCByZWZjb3VudGluZyBhbmQgZmF1bHQgbG9vcHMgb24gbWVtY2cgY2hhcmdpbmcgZmFpbHVyZTsgc3dpdGNoaW5nIGAtRU5PTUVNYCB0byBgLUVOT1NQQ2AgaXMgdGhlIGtleS4KClNvLCBgZnJlZV9odWdlX2ZvbGlvYCB2cyBgZm9saW9fcHV0YDogdGhlIGZvcm1lciBkaXJlY3RseSBmcmVlcywgdGhlIGxhdHRlciBkZWNyZW1lbnRzIHRoZSByZWZjb3VudCwgd2hpY2ggdGhlbiAqbWF5KiBmcmVlLiBXaGVuIGBmb2xpb2AgaXMgYXQgcmVmY291bnQgMSwgYGZvbGlvX3B1dGAgZG9lcyB0aGUgc2FtZSBhcyBgZnJlZV9odWdlX2ZvbGlvYC4gVGhlIHJldHVybiBjb2RlIGNoYW5nZSBpcyB0byBwcmV2ZW50IHJldHJ5aW5nIGZhdWx0IGxvb3BzIG9uIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHVyZS4KCk5vdywgdGhlIGNydWNpYWwgS01TQU4gcXVlc3Rpb25zLiBEb2VzIHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4KCjEuICBEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IE5vLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LgoyLiAgRG9lcyBpdCBhZGQgb3IgbW9kaWZ5IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIFRoZSBjcml0aWNhbCB2YXJpYWJsZSwgYHJldGAsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4KMy4gIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBObywgdGhpcyBjb2RlIGRlYWxzIHdpdGggYGZvbGlvYCBzdHJ1Y3R1cmVzLCB3aGljaCBhcmUgYWxyZWFkeSB3ZWxsLWRlZmluZWQgbWVtb3J5IG9iamVjdHMgaW4gdGhlIGtlcm5lbC4KNC4gIERvZXMgaXQgY2hhbmdlIGJvdW5kcyBjaGVja3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBtZW1vcnkgY29weSBvcGVyYXRpb25zPyBObywgdGhpcyBwYXRjaCBpcyBpc29sYXRlZC4KNS4gIFRoaXMgaXMgYWxsIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCYjMzk7cyBoYW5kbGluZyB0aGUgcmVmY291bnQgb2YgdGhlIGBmb2xpb2Agd2l0aCB0aGUgY2hhbmdlcyBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIHRvIGBmb2xpb19wdXRgIGFuZCBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4KCkFueSBpc3N1ZXMgaGVyZSAocmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGJhZCBlcnJvciBjb2RlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMvYXNzZXJ0aW9ucy4gVGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZSBzaW5jZSB0aGVyZSBhcmUgbm8gcmlza3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gVGhlIHBhdGNoIGlzIHNpbXBseSByZXBsYWNpbmcgb25lIG1lbW9yeSBmcmVlaW5nIGZ1bmN0aW9uIHdpdGggYW5vdGhlciwgd2hpbGUgYWRqdXN0aW5nIHRoZSBlcnJvciByZXR1cm4uIFRoZXJlJiMzOTtzIG5vIHN1YnRsZSwgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhc3BlY3QgaGVyZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFRoZSBjaGFuZ2UgaXMgc2FmZSBpbiByZWdhcmQgdG8gS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGZyZWVpbmcgbWVjaGFuaWNzLCBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3Iga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZywgbGlmZXRpbWUgKHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlKSwgb3IgYWxsb2NhdGlvbiBsb2dpYyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGZyZWVpbmcgbWVjaGFuaWNzLCBhbmQgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3Iga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlZmVyZW5jZSBjb3VudGluZywgbGlmZXRpbWUgKHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlKSwgb3IgYWxsb2NhdGlvbiBsb2dpYyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDYuMDM4ODk3ODEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1Nzk1MzM0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2V0bGIuYyAoaHVnZXRsYl9hbGxvY19mb2xpbykgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxzLCByZXBsYWNpbmcgZnJlZV9odWdlX2ZvbGlvIHdpdGggZm9saW9fcHV0IGFuZCByZXR1cm5pbmcgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCBmdXRpbGUgZmF1bHQgcmV0cmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFyZ2luZyBwYXRocyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGh1Z2V0bGJmcyBvcGVyYXRpb25zIGFuZCBNQVBfSFVHRVRMQiBmYXVsdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0Ni4wMzg5MDM4OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODM0ODgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY5Mzc1NzIzNDIxODcxZGE5MDFhNDE2YTA3ZmNhYjIzNTY2OWQ5YmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzo0Mzo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA0ZjZmNThiZjNkYjZjLi5mNWI4NTNhNTM3N2MyIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yODI1LDcgKzI4MjUsNiBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuICAqXFxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cXG4gICogICAgICAgICAtRU5PU1BDIGlmIGNncm91cCBjaGFyZ2luZyBmYWlscyBvciBubyBmb2xpbyBpcyBhdmFpbGFibGUuXFxuLSAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxcbiAgKi9cXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG5AQCAtMjg5MiwxMyArMjg5MSwxNyBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XFxuIFxcbiBcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4tXFx0XFx0ZnJlZV9odWdlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuIFxcdFxcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cXG4gXFx0XFx0ICogd291bGQgaGF2ZSBjbGVhcmVkIHRob3NlIHVwLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmV0dXJuIC1FTk9TUEMsIHNpbmNlIHJldHJ5aW5nIHRoZSBmYXVsdCBpcyBmdXRpbGU6XFxuK1xcdFxcdCAqIHRoZSBPT00ga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQgZm9yIEh1Z2VUTEIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGZvbGlvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0Mzo0Ni40OTc5MDk5MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwOTg0MjkwODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3ItaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZXRsYi5jIChodWdldGxiX2FsbG9jX2ZvbGlvKSB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbHMsIHJlcGxhY2luZyBmcmVlX2h1Z2VfZm9saW8gd2l0aCBmb2xpb19wdXQgYW5kIHJldHVybmluZyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IGZ1dGlsZSBmYXVsdCByZXRyaWVzLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYXJnaW5nIHBhdGhzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgaHVnZXRsYmZzIG9wZXJhdGlvbnMgYW5kIE1BUF9IVUdFVExCIGZhdWx0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjkzNzU3MjM0MjE4NzFkYTkwMWE0MTZhMDdmY2FiMjM1NjY5ZDliYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLmY1Yjg1M2E1Mzc3YzIgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjUsNyArMjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTIsMTMgKzI4OTEsMTcgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbiBcbiBcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZXR1cm4gLUVOT1NQQywgc2luY2UgcmV0cnlpbmcgdGhlIGZhdWx0IGlzIGZ1dGlsZTpcbitcdFx0ICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi5cbitcdFx0ICovXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NDYuNDk3OTExMzAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0Mjg5NDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBIdWdlVExCIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBhbmQgYXNzZXNzIGl0cyBpbXBhY3Qgb24gdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgdGhlIGRpZmYsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlbW92YWwgb2YgdGhlIGAtRU5PTUVNYCBlcnJvciByZXR1cm4uIFNwZWNpZmljYWxseSwgdGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIGAtRU5PU1BDYCBpbnN0ZWFkLiBMZXQgbWUgZ28gbGluZSBieSBsaW5lIHRocm91Z2ggdGhhdCBgZGlmZmAgYmxvY2ssIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbkkgc2VlIHRoZXkndmUgcmVtb3ZlZCBhIHNwZWNpZmljIGVycm9yIGNoZWNrIGFuZCBzdWJzZXF1ZW50IGZvbGlvIGZyZWVpbmcgbG9naWMuIFRoZSBvcmlnaW5hbCBjb2RlIHBhdGggc2VlbXMgdG8gaGF2ZSBoYW5kbGVkIGEgYC1FTk9NRU1gIHJldHVybiBmcm9tIGNncm91cCBjaGFyZ2luZywgZnJlZWQgdGhlIGZvbGlvLCBhbmQgdGhlbiByZXR1cm5lZCB0aGUgZXJyb3IuIE5vdywgaXQgYXBwZWFycyB0aGF0IHRoZSBmb2xpbyBpcyBiZWluZyBgZm9saW9fcHV0YCByYXRoZXIgdGhhbiBgZnJlZV9odWdlX2ZvbGlvYCwgYW5kIGAtRU5PU1BDYCBpcyByZXR1cm5lZCBpbnN0ZWFkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIFdhcyB0aGVyZSBhbiBpc3N1ZSB3aXRoIGhvdyBgLUVOT01FTWAgd2FzIGJlaW5nIGhhbmRsZWQgcHJldmlvdXNseT8gSXMgYC1FTk9TUENgIGEgbW9yZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgYW5kIHdoeSBpcyB0aGF0PyBUaGUgY29tbWVudCBtZW50aW9ucyB0aGUgT09NIGtpbGxlciBub3QgYmVpbmcgaW52b2x2ZWQgaW4gSHVnZVRMQi5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoYXQgdGhlIGNoYW5nZSBhaW1zIHRvIHByZXZlbnQgYSBmdXRpbGUgcmV0cnkgc2NlbmFyaW8gaW4gdGhlIGZhdWx0IGhhbmRsZXIsIHNpbmNlIHRoZSBPT00ga2lsbGVyIGlzbid0IHRyaWdnZXJlZCBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uLiBSZXR1cm5pbmcgYC1FTk9TUENgIG1pZ2h0IHNpZ25hbCBhIG1vcmUgcGVyc2lzdGVudCByZXNvdXJjZSBleGhhdXN0aW9uLCB3aGljaCBpcyB0aGUgaW50ZW50aW9uIGluIHRoaXMgY2FzZSwgcmF0aGVyIHRoYW4gaW5kaWNhdGluZyBqdXN0IGEgdGVtcG9yYXJ5IG1lbW9yeSBzaG9ydGFnZS4gVG8gY29uZmlybSB0aGlzIGludHVpdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGhvdyBjYWxsZXJzIGhhbmRsZSBgLUVOT1NQQ2AuIFBlcmhhcHMgdGhlIHJldHVybiBvZiBgLUVOT1NQQ2AgcHJvdmlkZXMgY2xhcml0eSBhbmQgcmVkdWNlcyB0aGUgb3Bwb3J0dW5pdHkgZm9yIGEgZmF1bHQgaGFuZGxlciB0byByZXRyeSBvbiB0aGUgc2FtZSBjb25kaXRpb24uXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgbW0vaHVnZXRsYi5jYCBhcm91bmQgbGluZXMgMjgyNS0yOTEwLCBsZXQncyBzZWUgd2hhdCBlbHNlIGlzIGluIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IG1vcmUgYmFja2dyb3VuZC4gTGV0IG1lIHVzZSBgcmVhZC1maWxlYCB0byBkbyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NTAuOTQwODA4Mjc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODI1LFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODI1OlxcdCAqXFxuMjgyNjpcXHQgKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZvbGlvLCBvciBhbiBFUlJfUFRSIG9uIGZhaWx1cmUuXFxuMjgyNzpcXHQgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cXG4yODI4OlxcdCAqL1xcbjI4Mjk6XFx0c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuMjgzMDpcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXFxuMjgzMTpcXHR7XFxuMjgzMjpcXHRcXHRib29sIGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkID0gYWxsb2NfZmxhZ3MgXFx1MDAyNlxcbjI4MzM6XFx0XFx0XFx0XFx0XFx0XFx0ICBIVUdFVExCX0FMTE9DX0NIQVJHX0NHUk9VUF9SU1ZEO1xcbjI4MzQ6XFx0XFx0Ym9vbCB1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uID0gYWxsb2NfZmxhZ3MgXFx1MDAyNlxcbjI4MzU6XFx0XFx0XFx0XFx0XFx0ICAgICAgSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcXG4yODM2OlxcdFxcdHNpemVfdCBucl9wYWdlcyA9IHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCk7XFxuMjgzNzpcXHRcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2dfcnN2ZCA9IE5VTEw7XFxuMjgzODpcXHRcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbjI4Mzk6XFx0XFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjI4NDA6XFx0XFx0aW50IGlkeCA9IGhzdGF0ZV9pbmRleChoKTtcXG4yODQxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMjg0MjpcXHRcXHRpbnQgcmV0O1xcbjI4NDM6XFx0XFxuMjg0NDpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgXFx1MDAyNlxcdTAwMjZcXG4yODQ1OlxcdFxcdCAgICBodWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwX3JzdmQoaWR4LCBucl9wYWdlcywgXFx1MDAyNmhfY2dfcnN2ZCkpXFxuMjg0NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4yODQ3OlxcdFxcbjI4NDg6XFx0XFx0aWYgKGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXAoaWR4LCBucl9wYWdlcywgXFx1MDAyNmhfY2cpKSB7XFxuMjg0OTpcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbjI4NTA6XFx0XFx0XFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4yODUxOlxcdFxcdH1cXG4yODUyOlxcdFxcbjI4NTM6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODU0OlxcdFxcbjI4NTU6XFx0XFx0Zm9saW8gPSBOVUxMO1xcbjI4NTY6XFx0XFx0aWYgKHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gfHwgYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXFxuMjg1NzpcXHRcXHRcXHRmb2xpbyA9IGRlcXVldWVfaHVnZXRsYl9mb2xpbyhoLCBnZnAsIG1wb2xpKTtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0aWYgKCFmb2xpbykge1xcbjI4NjA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4NjE6XFx0XFx0XFx0Zm9saW8gPSBhbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xcbjI4NjI6XFx0XFx0XFx0aWYgKCFmb2xpbykge1xcbjI4NjM6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT1NQQztcXG4yODY0OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3VuY2hhcmdlX2h1Z2V0bGJfY2dyb3VwO1xcbjI4NjU6XFx0XFx0XFx0fVxcbjI4NjY6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODY3OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2aC1cXHUwMDNlaHVnZXBhZ2VfYWN0aXZlbGlzdCk7XFxuMjg2ODpcXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xcbjI4Njk6XFx0XFx0fVxcbjI4NzA6XFx0XFxuMjg3MTpcXHRcXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbikge1xcbjI4NzI6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG4yODczOlxcdFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcy0tO1xcbjI4NzQ6XFx0XFx0fVxcbjI4NzU6XFx0XFxuMjg3NjpcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlKGlkeCwgbnJfcGFnZXMsIGhfY2csIGZvbGlvKTtcXG4yODc3OlxcdFxcbjI4Nzg6XFx0XFx0aWYgKGNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkKSB7XFxuMjg3OTpcXHRcXHRcXHRodWdldGxiX2Nncm91cF9jb21taXRfY2hhcmdlX3JzdmQoaWR4LCBucl9wYWdlcywgaF9jZ19yc3ZkLFxcbjI4ODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuMjg4MTpcXHRcXHR9XFxuMjg4MjpcXHRcXG4yODgzOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yODg0OlxcdFxcbjI4ODU6XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuMjg4NjpcXHRcXHQvKlxcbjI4ODc6XFx0XFx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxcbjI4ODg6XFx0XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbjI4ODk6XFx0XFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuMjg5MDpcXHRcXHQgKi9cXG4yODkxOlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfSFVHRVRMQiwgbnJfcGFnZXMpO1xcbjI4OTI6XFx0XFxuMjg5MzpcXHRcXHRpZiAocmV0ID09IC1FTk9NRU0pIHtcXG4yODk0OlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMjg5NTpcXHRcXHRcXHQvKlxcbjI4OTY6XFx0XFx0XFx0ICogU2tpcCB1bmNoYXJnaW5nIGh1Z2V0bGJfY2dyb3VwIHNpbmNlIHRoZSBjaGFyZ2VzXFxuMjg5NzpcXHRcXHRcXHQgKiB3ZXJlIGNvbW1pdHRlZCB0byB0aGUgZm9saW8gYW5kIGZyZWVpbmcgdGhlIGZvbGlvXFxuMjg5ODpcXHRcXHRcXHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXFxuMjg5OTpcXHRcXHRcXHQgKi9cXG4yOTAwOlxcdFxcdFxcdC8qXFxuMjkwMTpcXHRcXHRcXHQgKiBSZXR1cm4gLUVOT1NQQywgc2luY2UgcmV0cnlpbmcgdGhlIGZhdWx0IGlzIGZ1dGlsZTpcXG4yOTAyOlxcdFxcdFxcdCAqIHRoZSBPT00ga2lsbGVyIGlzIG5vdCB0cmlnZ2VyZWQgZm9yIEh1Z2VUTEIuXFxuMjkwMzpcXHRcXHRcXHQgKi9cXG4yOTA0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI5MDU6XFx0XFx0fVxcbjI5MDY6XFx0XFxuMjkwNzpcXHRcXHRyZXR1cm4gZm9saW87XFxuMjkwODpcXHRcXG4yOTA5OlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQzOjUwLjk0MTA5MDQ3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDk3OTY5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgY2FsbGVycyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aGF0KiBoYXMgY2hhbmdlZCBpbiBpdHMgdXNhZ2UgcmVjZW50bHkuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgbm93IGFuZCBob3cgaXQncyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uIEl0J3MgY3J1Y2lhbCBmb3IgbWUgdG8gaGF2ZSBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiByZWNlbnQgbW9kaWZpY2F0aW9ucy5cblxuVGhlbiwgSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBtbS9odWdldGxiLmNgIGFuZCBodWdldGxiIG1vcmUgZ2VuZXJhbGx5LiBJIGRvbid0IHdhbnQgdG8gZ2V0IGJsaW5kc2lkZWQgYnkgc29tZSBidWlsZC10aW1lIGRlcGVuZGVuY3kgdGhhdCBJIG1pc3NlZC4gVGhpcyBzdGVwIGlzIGEgbXVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NTMuODkwODg5Mzg2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDU0NjU0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9ZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAwLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwMTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODA5PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODE3LS8qKlxcbm1tL2h1Z2V0bGIuYzoyODE4OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXFxubW0vaHVnZXRsYi5jLTI4MTktICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyODI5OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0yODMwLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDI3LVxcbm1tL2h1Z2V0bGIuYzozMDI4OlxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtMzAyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDM6NTUuODM2MzY0NTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAwNzk5NjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBpdHMgQ2FsbCBTaXRlcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhpcyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGh1Z2UgcGFnZSBhbGxvY2F0aW9uLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgaW4gdGhlIGtlcm5lbCB3aGVyZSB0aGlzIGZ1bmN0aW9uLCBvciBpdHMgYWxpYXMgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBpcyBiZWluZyBpbnZva2VkLiBUaGF0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuXG5JJ20gdGhpbmtpbmcsIFwiV2hlcmUgZG9lcyB0aGUgc3lzdGVtIGRlY2lkZSBpdCBuZWVkcyBhIGh1Z2UgcGFnZT8gV2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhpcyBhbGxvY2F0aW9uP1wiIEJ5IHRyYWNpbmcgYmFjayBmcm9tIHRoZSBjYWxsIHNpdGVzLCBJIGNhbiBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3MgdGhpcyBmdW5jdGlvbiBzdXBwb3J0cy4gRm9yIGluc3RhbmNlLCBJJ2xsIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNhbGxlcnMgYXJlIGluIHVzZXItc3BhY2UsIGtlcm5lbC1zcGFjZSwgb3IgYm90aC4gQW5kLCBmdXJ0aGVyLCB3aGV0aGVyIG9yIG5vdCB0aGUgY2FsbGVycyBoYXZlIHRoZWlyIG93biBhbGxvY2F0aW9uIHN0cmF0ZWd5IHdoaWNoIHdpbGwgYWx0ZXIgaG93IGBhbGxvY19odWdldGxiX2ZvbGlvYCBiZWhhdmVzLlxuXG5CZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtub3cgKmhvdyogaXQncyBiZWluZyB1c2VkLiBJcyB0aGlzIGZ1bmN0aW9uIGNyaXRpY2FsIHBhdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzPyBMb29raW5nIGF0IHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXQgZWFjaCBjYWxsIHNpdGUgd2lsbCBiZSBrZXkuIERvZXMgaXQgZGV0ZXJtaW5lIHRoZSBzaXplPyBBcmUgc3BlY2lmaWMgZmxhZ3Mgc2V0IGZvciBtZW1vcnkgYXR0cmlidXRlcyBvciBwZXJtaXNzaW9ucz8gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgY29tcG9uZW50IGFuZCBpdHMgZGVwZW5kZW5jeSB0cmVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MDEuODQ0MzYzNjI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYyMTkwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE4MT1hcmUgYWxsb2NhdGVkIGFuZCBpbnN0YW50aWF0ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWFwcGluZy4gIFRoZSBhbGxvY2F0aW9uXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODI6aXMgcGVyZm9ybWVkIHdpdGhpbiB0aGUgcm91dGluZSBhbGxvY19odWdldGxiX2ZvbGlvKCk6OlxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTgzLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg0OlxcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4NS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODYtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODc6YWxsb2NfaHVnZXRsYl9mb2xpbyBpcyBwYXNzZWQgYSBWTUEgcG9pbnRlciBhbmQgYSB2aXJ0dWFsIGFkZHJlc3MsIHNvIGl0IGNhblxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg4LWNvbnN1bHQgdGhlIHJlc2VydmF0aW9uIG1hcCB0byBkZXRlcm1pbmUgaWYgYSByZXNlcnZhdGlvbiBleGlzdHMuICBJbiBhZGRpdGlvbixcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4OTphbGxvY19odWdldGxiX2ZvbGlvIHRha2VzIHRoZSBhcmd1bWVudCBhdm9pZF9yZXNlcnZlIHdoaWNoIGluZGljYXRlcyByZXNlcnZlc1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTkwLXNob3VsZCBub3QgYmUgdXNlZCBldmVuIGlmIGl0IGFwcGVhcnMgdGhleSBoYXZlIGJlZW4gc2V0IGFzaWRlIGZvciB0aGVcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjA3PWlzIGNhbGxlZC4gIFRoaXMgcm91dGluZSB0YWtlcyB0d28gYXJndW1lbnRzIHJlbGF0ZWQgdG8gcmVzZXJ2YXRpb25zOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDktLSBhdm9pZF9yZXNlcnZlLCB0aGlzIGlzIHRoZSBzYW1lIHZhbHVlL2FyZ3VtZW50IHBhc3NlZCB0b1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjEwOiAgYWxsb2NfaHVnZXRsYl9mb2xpbygpLlxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjExLS0gY2hnLCBldmVuIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIG9mIHR5cGUgbG9uZyBvbmx5IHRoZSB2YWx1ZXMgMCBvciAxIGFyZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yNDc9SXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcmVzZXJ2ZSBtYXAgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aGUgY2FsbFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ4OnRvIHZtYV9uZWVkc19yZXNlcnZhdGlvbigpIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsb2NfaHVnZXRsYl9mb2xpbygpIGFuZCB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0OS1jYWxsIHRvIHZtYV9jb21taXRfcmVzZXJ2YXRpb24oKSBhZnRlciB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZC4gIFRoaXMgd291bGRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTExNj1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ2OuW9k+S4jumihOeVmeebuOWFs+eahOW3qOmhteWcqOebuOW6lOeahOaYoOWwhOS4reiiq+WIhumFjeWSjOWunuS+i+WMluaXtu+8jOmihOeVmeWwseiiq+a2iOiAl+S6huOAguivpeWIhumFjeaYr+WcqOWHveaVsGFsbG9jX2h1Z2V0bGJfZm9saW8uLi5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDct5Lit6L+b6KGM55qEOjpcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDgtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTQ5OlxcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBhdm9pZF9yZXNlcnZlKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTI6YWxsb2NfaHVnZXRsYl9mb2xpb+iiq+S8oOmAkue7meS4gOS4qlZNQeaMh+mSiOWSjOS4gOS4quiZmuaLn+WcsOWdgO+8jOWboOatpOWug+WPr+S7peafpemYhemihOeVmeaYoOWwhOS7peehruWumuaYr+WQpuWtmOWcqOmihOeVmeOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MzrmraTlpJbvvIxhbGxvY19odWdldGxiX2ZvbGlv6ZyA6KaB5LiA5Liq5Y+C5pWwYXZvaWRfcmVzZXJ2Ze+8jOivpeWPguaVsOihqOekuuWNs+S9v+eci+i1t+adpeW3sue7j+S4uuaMh+WumueahOWcsOWdgOmihOeVmeS6hlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1NC3pooTnlZnvvIzkuZ/kuI3lupTor6Xkvb/nlKjpooTnlZnjgIJhdm9pZF9yZXNlcnZl5Y+C5pWw5pyA5bi46KKr55So5LqO5YaZ5pe25ou36LSd5ZKM6aG16Z2i6L+B56e755qE5oOF5Ya15LiL77yM5Y2z546w5pyJ6aG16Z2i55qE6aKdXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNjA9dm1hX25lZWRzX3Jlc2VydmF0aW9uKCnov5Tlm57nmoTlgLzpgJrluLjkuLow5oiWMeOAguWmguaenOivpeWcsOWdgOWtmOWcqOmihOeVme+8jOWImeS4ujDvvIzlpoLmnpzkuI3lrZjlnKjpooTnlZnvvIzliJnkuLox44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTY2Oi0gYXZvaWRfcmVzZXJ2Ze+8jOi/meaYr+S8oOmAkue7mWFsbG9jX2h1Z2V0bGJfZm9saW8oKeeahOWQjOS4gOS4quWAvC/lj4LmlbDjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjctLSBjaGfvvIzlsL3nrqHov5nkuKrlj4LmlbDnmoTnsbvlnovmmK9sb25n77yM5L2G5Y+q5pyJMOaIljHnmoTlgLzooqvkvKDpgJLnu5lkZXF1ZXVlX2h1Z2VfcGFnZV92bWHjgILlpoLmnpzor6XlgLzkuLow77yMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xOTM9U2V0UGFnZVByaXZhdGUocGFnZSnlkoxyZXN2X2h1Z2VfcGFnZXMt44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjAzOuWcqGFsbG9jX2h1Z2V0bGJfZm9saW8oKeW8gOWni+iwg+eUqHZtYV9uZWVkc19yZXNlcnZhdGlvbigp5ZKM6aG16Z2i5YiG6YWN5ZCO6LCD55SoXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA0LXZtYV9jb21taXRfcmVzZXJ2YXRpb24oKeS5i+mXtO+8jOmihOeVmeaYoOWwhOacieWPr+iDveiiq+aUueWPmOOAguWmguaenGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc+WcqOWFsVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NzAwPXN0YXRpYyBsb25nIGh1Z2V0bGJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzkyLVxcdFxcdCAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjc5MzpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oXFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTQtXFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxMy1cXHRcXHQgKiBmb2xpb191bmxvY2sgYmVjYXVzZSBsb2NrZWQgYnkgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODE0OlxcdFxcdCAqIGZvbGlvX3B1dCgpIGR1ZSB0byByZWZlcmVuY2UgZnJvbSBhbGxvY19odWdldGxiX2ZvbGlvKClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MTUtXFx0XFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03MDE9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAzOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDU6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNi1cXHRcXHRcXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA3LVxcdFxcdFxcdFxcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwODpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDktXFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEyMj1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjUtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEyNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI3LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzQ6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzUtXFx0XFx0XFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExNDE6YWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTQyLVxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQ0PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjctXFxubW0vaHVnZXRsYi5jOjIxNjg6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjktXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODgtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIxODk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTkwLVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTIyPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cXG5tbS9odWdldGxiLmM6MjUzMDogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9odWdldGxiLmMtMjUzMS0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXFxuLS1cXG5tbS9odWdldGxiLmMtMjUzNi0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xcbm1tL2h1Z2V0bGIuYzoyNTM3OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cXG5tbS9odWdldGxiLmMtMjUzOC0gKlxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NDUtICpcXG5tbS9odWdldGxiLmM6MjU0NjogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTQ3LSAqL1xcbm1tL2h1Z2V0bGIuYz0yNTQ4PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NzQtXFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXFxubW0vaHVnZXRsYi5jOjI1NzU6XFx0XFx0XFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxcbm1tL2h1Z2V0bGIuYzoyNTc2OlxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmMtMjU3Ny1cXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5MTg9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTQzLSAqL1xcbm1tL2h1Z2V0bGIuYzoyOTQ0OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjk0NS1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4ODk9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwMTAtXFx0XFx0XFx0XFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0J3MgcHJpdmF0ZSBvd25lZCAqL1xcbm1tL2h1Z2V0bGIuYzo1MDExOlxcdFxcdFxcdFxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01MDEyLVxcdFxcdFxcdFxcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTU0ODI9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTYzLVxcdHNwaW5fdW5sb2NrKHZtZi1cXHUwMDNlcHRsKTtcXG5tbS9odWdldGxiLmM6NTU2NDpcXHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XFxubW0vaHVnZXRsYi5jLTU1NjUtXFxuLS1cXG5tbS9odWdldGxiLmM9NTc1ND1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgyMy1cXG5tbS9odWdldGxiLmM6NTgyNDpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNTgyNS1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYwMDQ9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjM5LSAqL1xcbm1tL2h1Z2V0bGIuYzo2MjQwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTYyNDEtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjU2LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MjU3OlxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjI1OC1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTYyNjc9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzIzLVxcbm1tL2h1Z2V0bGIuYzo2MzI0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MzI1LVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM0OS1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NjM1MDpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcXG5tbS9odWdldGxiLmMtNjM1MS1cXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM3MC1cXG5tbS9odWdldGxiLmM6NjM3MTpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjM3Mi1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2NjQ9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02Nzg0LVxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jOjY3ODU6XFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG5tbS9odWdldGxiLmMtNjc4Ni1cXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0NTYtXFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6MTQ1NzpcXHRcXHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cXHRcXHRcXHRcXHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjIxNC1cXHRcXHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xcbm1tL21pZ3JhdGUuYzoyMjE1OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcXG5tbS9taWdyYXRlLmMtMjIxNi1cXHRcXHRcXHRcXHRcXHRcXHRtdGMtXFx1MDAzZW5tYXNrLCBnZnBfbWFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MDMuODMwNTg3NTY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIzNTgxMDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSHVnZXRsYiBBbGxvY2F0aW9uIEJ1Z2ZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYi5jYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGNoYW5naW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmYWlscywgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcmV0dXJucyBgLUVOT01FTWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGNhbGwgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGFuZCB0aGVuIHJldHVybiB0aGUgb3JpZ2luYWwgYC1FTk9NRU1gIGVycm9yLiBOb3csIGl0IGFwcGVhcnMgdGhleSdyZSB1c2luZyBgZm9saW9fcHV0KGZvbGlvKWAgYW5kIHJldHVybmluZyBgLUVOT1NQQ2AgaW5zdGVhZC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzICp3aHkqPyAgV2hhdCdzIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlPyBUaGUgYmVoYXZpb3Igc2VlbXMgc3VidGxlLiBJcyB0aGlzIGEgYnVnZml4LCBvciBhIGRlbGliZXJhdGUgY2hhbmdlIGluIHNlbWFudGljcz9cblxuVG8gdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBhY3R1YWxseSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gY29kZSBhbmQgYW55IHJlbGF0ZWQgZmF1bHQgaGFuZGxlcnMgcmVhY3QgdG8gYSBwb3RlbnRpYWwgZXJyb3IuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbW0vaHVnZXRsYi5jYCBhbmQgZm9jdXMgb24gbGluZXMgcm91Z2hseSBmcm9tIDI5NDAgdG8gMzA1MCwgd2hlcmUgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBmYXVsdCBoYW5kbGluZyBhcmUgbW9zdCBsaWtlbHkgZGVmaW5lZC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBzd2FwIGZyb20gYC1FTk9NRU1gIHRvIGAtRU5PU1BDYC4gUGVyaGFwcyBgLUVOT1NQQ2AgaXMgbW9yZSBhY2N1cmF0ZSBpbiB0aGlzIGNvbnRleHQsIG9yIG1heWJlIHRoZSBjaGFuZ2UgaXMgdGllZCB0byBzb21lIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3Igb3IgaW50ZXJhY3Rpb25zIHdpdGggYGZvbGlvX3B1dGAgdGhhdCBJJ20gbm90IHNlZWluZyBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHNlZSB0aGUgbGFyZ2VyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjA3LjA2NjQwMTI2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NDAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NDA6XFx0ICogd2hpY2ggY2FzZSBldmVuIGlmIHRoZXJlJ3MgYSBwcml2YXRlIHZtYSByZXN2IG1hcCBpdCB3b24ndCBjb3ZlciBzdWNoXFxuMjk0MTpcXHQgKiBhbGxvY2F0aW9uKS4gIE5ldyBjYWxsIHNpdGVzIHNob3VsZCAocHJvYmFibHkpIG5ldmVyIHNldCBpdCB0byB0cnVlISFcXG4yOTQyOlxcdCAqIFdoZW4gaXQncyBzZXQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgYnlwYXNzIGFsbCB2bWEgbGV2ZWwgcmVzZXJ2YXRpb25zLlxcbjI5NDM6XFx0ICovXFxuMjk0NDpcXHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjk0NTpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbjI5NDY6XFx0e1xcbjI5NDc6XFx0XFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcXG4yOTQ4OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XFxuMjk0OTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI5NTA6XFx0XFx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xcbjI5NTE6XFx0XFx0bWFwX2NoZ19zdGF0ZSBtYXBfY2hnO1xcbjI5NTI6XFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTtcXG4yOTUzOlxcdFxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4yOTU0OlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuMjk1NTpcXHRcXHRub2RlbWFza190ICpub2RlbWFzaztcXG4yOTU2OlxcdFxcdHU4IGFsbG9jX2ZsYWdzID0gMDtcXG4yOTU3OlxcdFxcdGludCBuaWQ7XFxuMjk1ODpcXHRcXHRpbnQgcmV0O1xcbjI5NTk6XFx0XFxuMjk2MDpcXHRcXHQvKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBwZXItdm1hIHJlc2VydmF0aW9uPyAqL1xcbjI5NjE6XFx0XFx0aWYgKGNvd19mcm9tX293bmVyKSB7XFxuMjk2MjpcXHRcXHRcXHQvKlxcbjI5NjM6XFx0XFx0XFx0ICogU3BlY2lhbCBjYXNlISAgU2luY2UgaXQncyBhIENvVyBvbiB0b3Agb2YgYSByZXNlcnZlZFxcbjI5NjQ6XFx0XFx0XFx0ICogcGFnZSwgdGhlIHByaXZhdGUgcmVzdiBtYXAgZG9lc24ndCBjb3VudC4gIFNvIGl0IGNhbm5vdFxcbjI5NjU6XFx0XFx0XFx0ICogY29uc3VtZSB0aGUgcGVyLXZtYSByZXN2IG1hcCBldmVuIGlmIGl0J3MgcmVzZXJ2ZWQuXFxuMjk2NjpcXHRcXHRcXHQgKi9cXG4yOTY3OlxcdFxcdFxcdG1hcF9jaGcgPSBNQVBfQ0hHX0VORk9SQ0VEO1xcbjI5Njg6XFx0XFx0fSBlbHNlIHtcXG4yOTY5OlxcdFxcdFxcdC8qXFxuMjk3MDpcXHRcXHRcXHQgKiBFeGFtaW5lIHRoZSByZWdpb24vcmVzZXJ2ZSBtYXAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9jZXNzXFxuMjk3MTpcXHRcXHRcXHQgKiBoYXMgYSByZXNlcnZhdGlvbiBmb3IgdGhlIHBhZ2UgdG8gYmUgYWxsb2NhdGVkLiAgQSByZXR1cm5cXG4yOTcyOlxcdFxcdFxcdCAqIGNvZGUgb2YgemVybyBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgKG5vIGNoYW5nZSkuXFxuMjk3MzpcXHRcXHRcXHQgKi9cXG4yOTc0OlxcdFxcdFxcdHJldHZhbCA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xcbjI5NzU6XFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuMjk3NjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4yOTc3OlxcdFxcdFxcdG1hcF9jaGcgPSByZXR2YWwgPyBNQVBfQ0hHX05FRURFRCA6IE1BUF9DSEdfUkVVU0U7XFxuMjk3ODpcXHRcXHR9XFxuMjk3OTpcXHRcXG4yOTgwOlxcdFxcdC8qXFxuMjk4MTpcXHRcXHQgKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBnbG9iYWwgcmVzZXJ2YXRpb24/XFxuMjk4MjpcXHRcXHQgKlxcbjI5ODM6XFx0XFx0ICogUHJvY2Vzc2VzIHRoYXQgZGlkIG5vdCBjcmVhdGUgdGhlIG1hcHBpbmcgd2lsbCBoYXZlIG5vXFxuMjk4NDpcXHRcXHQgKiByZXNlcnZlcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcC4gQ2hlY2tcXG4yOTg1OlxcdFxcdCAqIHRoYXQgdGhlIGFsbG9jYXRpb24gd2lsbCBub3QgZXhjZWVkIHRoZSBzdWJwb29sIGxpbWl0LlxcbjI5ODY6XFx0XFx0ICogT3IgaWYgaXQgY2FuIGdldCBvbmUgZnJvbSB0aGUgcG9vbCByZXNlcnZhdGlvbiBkaXJlY3RseS5cXG4yOTg3OlxcdFxcdCAqL1xcbjI5ODg6XFx0XFx0aWYgKG1hcF9jaGcpIHtcXG4yOTg5OlxcdFxcdFxcdGdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XFxuMjk5MDpcXHRcXHRcXHRpZiAoZ2JsX2NoZyBcXHUwMDNjIDApIHtcXG4yOTkxOlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMjk5MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuMjk5MzpcXHRcXHRcXHR9XFxuMjk5NDpcXHRcXHR9IGVsc2Uge1xcbjI5OTU6XFx0XFx0XFx0LypcXG4yOTk2OlxcdFxcdFxcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcXG4yOTk3OlxcdFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4yOTk4OlxcdFxcdFxcdCAqL1xcbjI5OTk6XFx0XFx0XFx0Z2JsX2NoZyA9IDA7XFxuMzAwMDpcXHRcXHR9XFxuMzAwMTpcXHRcXG4zMDAyOlxcdFxcdC8qXFxuMzAwMzpcXHRcXHQgKiBJZiBhbGxvY2F0aW9uIGRvZXNuJ3QgcmV1c2UgYSByZXNlcnZhdGlvbiBpbiB0aGUgcmVzdl9tYXAsXFxuMzAwNDpcXHRcXHQgKiBjaGFyZ2UgZm9yIHRoZSByZXNlcnZhdGlvbi5cXG4zMDA1OlxcdFxcdCAqL1xcbjMwMDY6XFx0XFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19SRVVTRSlcXG4zMDA3OlxcdFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XFxuMzAwODpcXHRcXG4zMDA5OlxcdFxcdC8qXFxuMzAxMDpcXHRcXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXFxuMzAxMTpcXHRcXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxcbjMwMTI6XFx0XFx0ICovXFxuMzAxMzpcXHRcXHRpZiAoZ2JsX2NoZyA9PSAwKVxcbjMwMTQ6XFx0XFx0XFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcXG4zMDE1OlxcdFxcbjMwMTY6XFx0XFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuMzAxNzpcXHRcXHRuaWQgPSBodWdlX25vZGUodm1hLCBhZGRyLCBnZnAsIFxcdTAwMjZtcG9sLCBcXHUwMDI2bm9kZW1hc2spO1xcbjMwMTg6XFx0XFx0bXBvbGkgPSAoc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCl7XFxuMzAxOTpcXHRcXHRcXHQubmlkID0gbmlkLFxcbjMwMjA6XFx0I2lmZGVmIENPTkZJR19OVU1BXFxuMzAyMTpcXHRcXHRcXHQubW9kZSA9IG1wb2wgPyBtcG9sLVxcdTAwM2Vtb2RlIDogTVBPTF9ERUZBVUxULFxcbjMwMjI6XFx0I2Vsc2VcXG4zMDIzOlxcdFxcdFxcdC5tb2RlID0gTVBPTF9ERUZBVUxULFxcbjMwMjQ6XFx0I2VuZGlmXFxuMzAyNTpcXHRcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4zMDI2OlxcdFxcdH07XFxuMzAyNzpcXHRcXG4zMDI4OlxcdFxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG4zMDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDowNy4wNjY3MzIwMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE5NTUzNTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBmb3IgYG1tL2h1Z2V0bGIuY2Agd2l0aCBhIEZ1enplcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtbS9odWdldGxiLmNgIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIGh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRpbWUgdG8gYXBwbHkgbXkgbWVudGFsIGNoZWNrbGlzdC5cblxuRmlyc3QsIGxldCdzIHNlZSBpZiB0aGlzIGNvZGUgZXZlbiBmYWxscyB1bmRlciB0aGUgY3JpdGVyaWEuIFNlY3Rpb24gMyBsaXN0cyB0aGUganVpY3kgYml0czogbW0sIGxvY2tpbmcsIEJQRiwgc2NoZWR1bGVyLCBuZXR3b3JraW5nLCBWRlMsIHN5c2NhbGxzLiBZZXAsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIG9uIHRoZSBsaXN0LCBhbmQgdGhhdCBjb3ZlcnMgYG1tL2h1Z2V0bGIuY2AuIENoZWNrLlxuXG5OZXh0LCBjYW4gSSBldmVuIGdldCB0byB0aGlzIGNvZGU/IElzIHRoZXJlIGEgc3RyYWlnaHRmb3J3YXJkIHBhdGggdmlhIFFFTVUgYW5kIHN5emthbGxlcj8gRm9ydHVuYXRlbHksIHllcy4gSSBjYW4gdXNlIG1tYXAgd2l0aCBNQVBfSFVHRVRMQiwgbW91bnQgaHVnZXRsYmZzLCB1c2Ugc2htZ2V0IHdpdGggU0hNX0hVR0VUTEIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIE1lbSBjZ3JvdXBzIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG9vLiBTZWVtcyBsaWtlIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGZvciBgbW0vaHVnZXRsYi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2ODgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxMS4yNjIyNjk0NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzM2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxMS4zMTU2MTA2ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY3NzQzMjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaHVnZSBwYWdlIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoaXMgc3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQncyBzdGFydCB3aXRoIGBmcy9odWdldGxiZnMvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYC4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhlIGRlZmluaXRpb25zIG9mIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBUaGVzZSBhcmUgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSdzIGh1Z2UgcGFnZSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuIEtub3dpbmcgdGhlaXIgc3RhdHVzIHdpbGwgYmUgZnVuZGFtZW50YWwgdG8gZGlhZ25vc2luZyBvciBvcHRpbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjEyLjk5MzA0NzE4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTY5ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaHVnZXRsYmZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MTMuMDQwODE0MjQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2OTc4NTY0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBmb3IgYGNvbmZpZyBIVUdFVExCRlNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyBvZiBgY29uZmlnIEhVR0VUTEJGU2AgYWNyb3NzIG91ciBLY29uZmlnIGZpbGVzLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgZ3JlcDsgSSBuZWVkIHRvIGJlIHByZWNpc2UsIGVuc3VyaW5nIEkgY2F0Y2ggYWxsIHZhcmlhdGlvbnMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCB0cmVlLiBJJ2xsIHByb2JhYmx5IGxldmVyYWdlIGBmaW5kYCBjb21iaW5lZCB3aXRoIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgcG90ZW50aWFsIHZhcmlhdGlvbnMgbGlrZSBgIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXRgIHdoaWNoIEkgd2lsbCB3YW50IHRvIGV4Y2x1ZGUuIEknbGwgbmVlZCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IGxpbmVzIHdoaWxlIHNraXBwaW5nIG92ZXIgdGhlIGNvbW1lbnQgbGluZXMuIEknbGwgYWxzbyB3YW50IHRvIGxvb2sgb3V0IGZvciBhbnl0aGluZyBjb25kaXRpb25hbGx5IGRlZmluZWQuIE9uY2UgSSBoYXZlIHRoZSBpbml0aWFsIGhpdCBsaXN0LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGVhY2ggZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB3aGljaCBhcmNoaXRlY3R1cmUocykgb3Igc3Vic3lzdGVtKHMpIGl0J3MgYXNzb2NpYXRlZCB3aXRoLCB3aGF0IG90aGVyIG9wdGlvbnMgaXQgZGVwZW5kcyBvbiBvciBpcyBkZXBlbmRlbnQgb24uIEVzc2VudGlhbGx5LCBJJ20gYWltaW5nIHRvIGJ1aWxkIGEgY29tcGxldGUgbWFwIG9mIGhvdyBgSFVHRVRMQkZTYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgc29tZSBtYW51YWwgaW5zcGVjdGlvbiBvZiB0aGUgcmVzdWx0cyB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGFuZCB1bmRlcnN0YW5kIHRoZSBudWFuY2VkIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhpcyBvcmdhbml6ZWQsIG1heWJlIHVzZSBhIHNjcmlwdCB0byBwYXJzZSB0aGUgb3V0cHV0IGludG8gYSBtb3JlIHVzYWJsZSBmb3JtYXQgYXMgSSBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxNS43Mzg2NzMxNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjQ5MTY5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoxNy41NjM1OTYwMzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIxNDU0MDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBNeSBpbnN0aW5jdCBzYXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgcHJpb3IgZXhwZXJpZW5jZSwgSSBhbnRpY2lwYXRlIHRoYXQgc2VjdGlvbiBvZiB0aGUgZmlsZSB0byBwcm92aWRlIHNvbWUgaGlnaC1sZXZlbCBjb250ZXh0LCBhbmQgYXQgbGluZSAyNDcgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgSSBjYW4gb2Z0ZW4gZmluZCBpbml0aWFsIGRlY2xhcmF0aW9ucyBpbiB0aGF0IGdlbmVyYWwgYXJlYS4gSSdsbCByZWFkIGFyb3VuZCB0aGVyZSBhbmQgcXVpY2tseSBzY2FuIGZvciBhbnkgcmVsYXRlZCBzeW1ib2xzIG9yIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoyMi43NzgxMzkwODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDY6XFx0XFxuIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoyMi43NzgyMjU5ODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxNzI3NjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBjZ3JvdXBzIGFuZCBodWdldGxiIGNoYXJnaW5nIGFyZSBpbnRlcmFjdGluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aWVkIHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gV2hhdCBhcmUgdGhlIGtub2JzIHRoYXQgcmVhbGx5IGFmZmVjdCBob3cgaHVnZXRsYiBtZW1vcnkgaXMgYWNjb3VudGVkIGZvciBhbmQgY2hhcmdlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgbWFuYWdlbWVudC4gR290dGEgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMgZG93biB0aGUgbGluZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTM4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDoyNS41OTU1MDUwMzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDM1MzM1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NTc9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY1OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE1Mz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTU5OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAte1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4Mjk9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjg4NC1cXG5tbS9odWdldGxiLmM6Mjg4NTpcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG5tbS9odWdldGxiLmMtMjg4Ni1cXHQvKlxcbm1tL2h1Z2V0bGIuYy0yODg3LVxcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcXG5tbS9odWdldGxiLmM6Mjg4ODpcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXFxubW0vaHVnZXRsYi5jLTI4ODktXFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01MjM1LSAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNDQtICovXFxubW0vbWVtY29udHJvbC5jOjUyNDU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbm1tL21lbWNvbnRyb2wuYy01MjQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6MjcuNDM5MDQ2MjQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NjI1MDI4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIE1lbW9yeSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gR3VhcmRzKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIGd1YXJkcyBpbiB0aGF0IGFyZWEgb2YgdGhlIGNvZGUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDUyNDUuIEkgc3VzcGVjdCB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBtYWNyb3MgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZlcyBiYXNlZCBvbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBndWFyZHMgaW50ZXJhY3Qgd2l0aCB0aGUgbGFyZ2VyIGNvbnRyb2wgZmxvdyBhbmQgd2hhdCBpbXBhY3QgdGhleSBoYXZlIG9uIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoaXMgc2hvdWxkIGNsYXJpZnkgaG93IHRoaXMgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjI5LjMwMTU1MjMyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyMzA6XFx0XFx0cmV0dXJuIHJldDtcXG41MjMxOlxcdH1cXG41MjMyOlxcdFxcbjUyMzM6XFx0LyoqXFxuNTIzNDpcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxuNTIzNTpcXHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG41MjM2OlxcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbjUyMzc6XFx0ICpcXG41MjM4OlxcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXFxuNTIzOTpcXHQgKiBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYW5kIGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGh1Z2V0bGIgY2dyb3VwXFxuNTI0MDpcXHQgKiBjb250cm9sbGVyIChpZiBpdCBpcyBlbmFibGVkKS5cXG41MjQxOlxcdCAqXFxuNTI0MjpcXHQgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxcbjUyNDM6XFx0ICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cXG41MjQ0OlxcdCAqL1xcbjUyNDU6XFx0aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbjUyNDY6XFx0e1xcbjUyNDc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuNTI0ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG41MjQ5OlxcdFxcbjUyNTA6XFx0XFx0LypcXG41MjUxOlxcdFxcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcXG41MjUyOlxcdFxcdCAqIHN5c3RlbS1sZXZlbCBzdGF0cyB2aWEgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvLiBSZXR1cm4gMCwgYW5kIHNraXBcXG41MjUzOlxcdFxcdCAqIGNoYXJnaW5nIHRoZSBtZW1jZy5cXG41MjU0OlxcdFxcdCAqL1xcbjUyNTU6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XFxuNTI1NjpcXHRcXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuNTI1NzpcXHRcXHRcXHRnb3RvIG91dDtcXG41MjU4OlxcdFxcbjUyNTk6XFx0XFx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXFxuNTI2MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjUyNjE6XFx0XFxuNTI2MjpcXHRvdXQ6XFxuNTI2MzpcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuNTI2NDpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyNjU6XFx0fVxcbjUyNjY6XFx0XFxuNTI2NzpcXHQvKipcXG41MjY4OlxcdCAqIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyBmb3Igc3dhcGluLlxcbjUyNjk6XFx0ICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjI5LjMwMTgwNDEwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA1MTIwMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlVExCIE1lbW9yeSBBY2NvdW50aW5nKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgd2l0aCBIdWdlVExCcy4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24sIGFuZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29uZmlndXJhdGlvbiBzaWRlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpYC4gVGhhdCBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGxpa2VseSB0aWVkIHRvIHNvbWUga2VybmVsIGNvbXBpbGUtdGltZSBmbGFnIG9yIG1vZHVsZSBwYXJhbWV0ZXIuIEdyYWJiaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgdGFraW5nIGEgcXVpY2sgbG9vayB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGlzIGNoZWNrIGlzIGRvbmUgdG8gZGVjaWRlIHdoZXRoZXIgYWNjb3VudGluZyBpcyBlbmFibGVkIG9yIG5vdC4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gVGhhdCdzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTU2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDozMS40MDY5MjgxODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDMwNDA2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfYWNjb3VudHNfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTcxOT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTcyNi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbWNvbnRyb2wuYzoxNzI3OnN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG5tbS9tZW1jb250cm9sLmMtMTcyOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTczMS0jZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jOjE3MzI6c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbm1tL21lbWNvbnRyb2wuYy0xNzMzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc1OC1cXHRcXHRpZiAodW5saWtlbHkobWVtb3J5X3N0YXRzW2ldLmlkeCA9PSBOUl9IVUdFVExCKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoxNzU5OlxcdFxcdFxcdCFtZW1jZ19hY2NvdW50c19odWdldGxiKCkpXFxubW0vbWVtY29udHJvbC5jLTE3NjAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI0NT1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1NC1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1NTpcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcXG5tbS9tZW1jb250cm9sLmMtNTI1Ni1cXHRcXHQhbWVtY2cgfHwgIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjMzLjM0OTk3NDQxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk0NjQxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBIdWdlVExCIEFjY291bnRpbmcgd2l0aGluIE1lbW9yeSBDb250cm9sKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IGh1Z2UgcGFnZXMgYXJlIGFjY291bnRlZCBmb3IgdW5kZXIgbWVtb3J5IGNvbnRyb2wuIFRoZSBzdGFydGluZyBwb2ludCBpcyBgbWVtY2dfYWNjb3VudHNfaHVnZXRsYmAsIHNwZWNpZmljYWxseSBpbiBgbW0vbWVtY29udHJvbC5jOjE3MjdgLiBUaGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgKnNob3VsZCogYmUgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkgY2hhbmdlcyBvciBpZiB0aGlzIGlzIHBlcmZvcm1pbmcgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseT8gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgYWNjb3VudGluZy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBiZWNhdXNlIG1pc21hbmFnZWQgSHVnZVRMQiBhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIHNlcmlvdXMgcGVyZm9ybWFuY2UgaXNzdWVzLCByaWdodD8gSSdsbCBwcm9iYWJseSBiZSB0cmFjaW5nIGV4ZWN1dGlvbiBwYXRocyB0byBjb25maXJtIHRoYXQgaXQncyBhbGwgd29ya2luZyBhcyBleHBlY3RlZCB1bmRlciBhbGwgc2NlbmFyaW9zLiBJJ20gZXNwZWNpYWxseSBrZWVuIG9uIHNlZWluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBBbnkgY2hhbmNlIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrIGhlcmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgdXNlIG9mIGxvY2tzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBJIGFsc28gd2FudCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBpcyBzY2FsYWJsZSBhbmQgcm9idXN0IGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBUaGVyZSBhcmUgZ29pbmcgdG8gYmUgYSBsb3Qgb2YgbGl0dGxlIGRldGFpbHMgaW4gaGVyZS4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjM2LjE0NDYxNzgzNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MjUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MjU6XFx0XFxuMTcyNjpcXHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbjE3Mjc6XFx0c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbjE3Mjg6XFx0e1xcbjE3Mjk6XFx0XFx0cmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0hVR0VUTEJfQUNDT1VOVElORztcXG4xNzMwOlxcdH1cXG4xNzMxOlxcdCNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4xNzMyOlxcdHN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG4xNzMzOlxcdHtcXG4xNzM0OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xNzM1OlxcdH1cXG4xNzM2OlxcdCNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuMTczNzpcXHRcXG4xNzM4OlxcdHN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuMTczOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjM2LjE0NDg3NDk5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU0MTQ1MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlcGFnZSBBbGxvY2F0aW9uIGFuZCBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBhbmQgYE1FTUNHYCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEl0J3MgdGltZSB0byBkaWcgaW50byBgbW0vaHVnZXRsYi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBvciBjYWxsZXJzIHRoYXQgYXJlIGludm9sdmVkIGhlcmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBkb2luZy4gUmlnaHQsIGl0J3MgdGhlIGNvcmUgb2YgaHVnZXBhZ2UgYWxsb2NhdGlvbi4gSSBzZWUgdGhhdCwgaWYgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGZhaWxzLCB0aGUgbG9naWMgaGFzIGJlZW4gdXBkYXRlZC4gUHJldmlvdXNseSwgaXQgd291bGQgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIGFuZCByZXR1cm4gYC1FTk9NRU1gLiBOb3csIGl0IGNhbGxzIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgcmV0dXJucyBgRVJSX1BUUigtRU5PU1BDKWAuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBjaGFuZ2UgZnJvbSBgZnJlZV9odWdlX2ZvbGlvYCB0byBgZm9saW9fcHV0YC4gQWgsIHRoZSByZWZjb3VudGluZyEgV2hlbiBhIGh1Z2UgcGFnZSBpcyBhbGxvY2F0ZWQgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCB0aGUgcmVmY291bnQgZ2V0cyBlaXRoZXIgZnJvemVuIGFuZCB1bmZyb3plbiB3aXRoIGBmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpYCBvciBpbmNyZW1lbnRlZCB3aXRoIGBkZXF1ZXVlX2h1Z2V0bGJfZm9saW9gLiBJZiB3ZSBqdXN0IGNhbGxlZCBgZnJlZV9odWdlX2ZvbGlvYCBkaXJlY3RseSwgdGhlIHJlZmNvdW50IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcHJvcGVybHkgZGVjcmVtZW50ZWQuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcGFnZSBkZXN0cnVjdG9ycyBvciBvdGhlciByZWZjb3VudCBpc3N1ZXMuIGBmb2xpb19wdXRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmFsd2F5cyogZGVjcmVtZW50cyB0aGUgcmVmY291bnQgYW5kLCB3aGVuIGl0IGhpdHMgemVybywgdHJpZ2dlcnMgdGhlIGNvcnJlY3QgZGVzdHJ1Y3RvciB3aGljaCBmcmVlcyB0aGUgaHVnZSBmb2xpbyBhbmQgdW5jaGFyZ2VzIHRoZSBjZ3JvdXAgcHJvcGVybHkuXG5cblRoZSBvdGhlciBwb2ludCBpcyB0aGUgZXJyb3IgY29kZSBjaGFuZ2UgdG8gYC1FTk9TUENgIGluc3RlYWQgb2YgYC1FTk9NRU1gLiBUaGlzIHN1YnRseSBidXQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIGhvdyB0aGUgY2FsbGVycyBoYW5kbGUgdGhlIGVycm9yLiBGb3IgZXhhbXBsZSwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBmYXVsdCBoYW5kbGVycywgcmV0dXJuaW5nIGAtRU5PU1BDYCB0cmFuc2xhdGVzIHRvIGBWTV9GQVVMVF9TSUdCVVNgIGluc3RlYWQgb2YgYFZNX0ZBVUxUX09PTWAuIFRoaXMgd2lsbCBiZSBrZXkuIEkgbmVlZCB0byBleGFtaW5lIGhvdyB0aGVzZSBjYWxsZXJzIHJlYWN0IHRvIHRoZXNlIGRpZmZlcmVudCBlcnJvciBjb2Rlcy4gSXQncyB0aW1lIHRvIHJlYWQgdGhyb3VnaCBgbW0vaHVnZXRsYi5jYCBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfbm9fcGFnZWAgYW5kIGBodWdldGxiX3dwYCB0byBnZXQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NDEuMDk5MDI0MTYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTgyMDpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG41ODIxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjU4MjI6XFx0XFx0XFx0fVxcbjU4MjM6XFx0XFxuNTgyNDpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG41ODI1OlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuNTgyNjpcXHRcXHRcXHRcXHQvKlxcbjU4Mjc6XFx0XFx0XFx0XFx0ICogUmV0dXJuaW5nIGVycm9yIHdpbGwgcmVzdWx0IGluIGZhdWx0aW5nIHRhc2sgYmVpbmdcXG41ODI4OlxcdFxcdFxcdFxcdCAqIHNlbnQgU0lHQlVTLiAgVGhlIGh1Z2V0bGIgZmF1bHQgbXV0ZXggcHJldmVudHMgdHdvXFxuNTgyOTpcXHRcXHRcXHRcXHQgKiB0YXNrcyBmcm9tIHJhY2luZyB0byBmYXVsdCBpbiB0aGUgc2FtZSBwYWdlIHdoaWNoXFxuNTgzMDpcXHRcXHRcXHRcXHQgKiBjb3VsZCByZXN1bHQgaW4gZmFsc2UgdW5hYmxlIHRvIGFsbG9jYXRlIGVycm9ycy5cXG41ODMxOlxcdFxcdFxcdFxcdCAqIFBhZ2UgbWlncmF0aW9uIGRvZXMgbm90IHRha2UgdGhlIGZhdWx0IG11dGV4LCBidXRcXG41ODMyOlxcdFxcdFxcdFxcdCAqIGRvZXMgYSBjbGVhciB0aGVuIHdyaXRlIG9mIHB0ZSdzIHVuZGVyIHBhZ2UgdGFibGVcXG41ODMzOlxcdFxcdFxcdFxcdCAqIGxvY2suICBQYWdlIGZhdWx0IGNvZGUgY291bGQgcmFjZSB3aXRoIG1pZ3JhdGlvbixcXG41ODM0OlxcdFxcdFxcdFxcdCAqIG5vdGljZSB0aGUgY2xlYXIgcHRlIGFuZCB0cnkgdG8gYWxsb2NhdGUgYSBwYWdlXFxuNTgzNTpcXHRcXHRcXHRcXHQgKiBoZXJlLiAgQmVmb3JlIHJldHVybmluZyBlcnJvciwgZ2V0IHB0bCBhbmQgbWFrZVxcbjU4MzY6XFx0XFx0XFx0XFx0ICogc3VyZSB0aGVyZSByZWFsbHkgaXMgbm8gcHRlIGVudHJ5LlxcbjU4Mzc6XFx0XFx0XFx0XFx0ICovXFxuNTgzODpcXHRcXHRcXHRcXHRpZiAoaHVnZXRsYl9wdGVfc3RhYmxlKGgsIG1tLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG41ODM5OlxcdFxcdFxcdFxcdFxcdHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7XFxuNTg0MDpcXHRcXHRcXHRcXHRlbHNlXFxuNTg0MTpcXHRcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbjU4NDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNTg0MzpcXHRcXHRcXHR9XFxuNTg0NDpcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIHZtZi1cXHUwMDNlcmVhbF9hZGRyZXNzKTtcXG41ODQ1OlxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuNTg0NjpcXHRcXHRcXHRuZXdfZm9saW8gPSB0cnVlO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB7XFxuNTg0OTpcXHRcXHRcXHRcXHRpbnQgZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywgbWFwcGluZyxcXG41ODUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGdvZmYpO1xcbjU4NTE6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjU4NTI6XFx0XFx0XFx0XFx0XFx0LypcXG41ODUzOlxcdFxcdFxcdFxcdFxcdCAqIGVyciBjYW4ndCBiZSAtRUVYSVNUIHdoaWNoIGltcGxpZXMgc29tZW9uZVxcbjU4NTQ6XFx0XFx0XFx0XFx0XFx0ICogZWxzZSBjb25zdW1lZCB0aGUgcmVzZXJ2YXRpb24gc2luY2UgaHVnZXRsYlxcbjU4NTU6XFx0XFx0XFx0XFx0XFx0ICogZmF1bHQgbXV0ZXggaXMgaGVsZCB3aGVuIGFkZCBhIGh1Z2V0bGIgcGFnZVxcbjU4NTY6XFx0XFx0XFx0XFx0XFx0ICogdG8gdGhlIHBhZ2UgY2FjaGUuIFNvIGl0J3Mgc2FmZSB0byBjYWxsXFxuNTg1NzpcXHRcXHRcXHRcXHRcXHQgKiByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoKSBoZXJlLlxcbjU4NTg6XFx0XFx0XFx0XFx0XFx0ICovXFxuNTg1OTpcXHRcXHRcXHRcXHRcXHRyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjQxLjA5OTQ0NTc3MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mjc0MjM4NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBIdWdlVExCIE1lbW9yeSBBbGxvY2F0aW9uIEVycm9yIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDU4MzkgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZDogYHJldCA9IHZtZl9lcnJvcihQVFJfRVJSKGZvbGlvKSk7YC4gSSdtIGZvY3VzaW5nIG9uIGhvdyBgdm1mX2Vycm9yYCBoYW5kbGVzIHRoZSBgLUVOT01FTWAgYW5kIGAtRU5PU1BDYCBlcnJvcnMuIGB2bWZfZXJyb3IoLUVOT01FTSlgIHRyYW5zbGF0ZXMgdG8gYFZNX0ZBVUxUX09PTWAsIGFuZCBgdm1mX2Vycm9yKC1FTk9TUEMpYCBtYXBzIHRvIGBWTV9GQVVMVF9TSUdCVVNgLiBQcmV2aW91c2x5LCBhbiBgLUVOT01FTWAgd291bGQgdHJpZ2dlciBhbiBPT00gcmVzcG9uc2UsIHdoaWNoIGlzIHByb2JsZW1hdGljIGZvciBIdWdlVExCIGJlY2F1c2UgdGhlIE9PTSBraWxsZXIgKmRvZXNuJ3QqIHJlY2xhaW0gSHVnZVRMQiBwYWdlcy4gVGhpcyByZXN1bHRzIGluIGZ1dGlsZSByZXRyaWVzLiBTd2l0Y2hpbmcgdG8gYC1FTk9TUENgIGFuZCB0aHVzIGBWTV9GQVVMVF9TSUdCVVNgIHNlZW1zIGxpa2UgYSBtb3JlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLlxuXG5Ob3csIGlzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhlIGBtbS9odWdldGxiLmNgIGNvZGUgaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBtbWFwYCB3aXRoIGBNQVBfSFVHRVRMQmAsIGBtYWR2aXNlYCwgYW5kIG9wZXJhdGlvbnMgb24gdGhlIGBodWdldGxiZnNgIGZpbGVzeXN0ZW0uIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjcml0ZXJpYS4gVGhlIGZ1enppbmcgc3VpdGFiaWxpdHkgYXBwZWFycyBoaWdoLlxuXG5GaXJzdCwgSSBjb25maXJtIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnLiBDaGVjay5cblxuU2Vjb25kLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UuIFdlIG5lZWQgYEhVR0VUTEJGU2AgKG9yIGBIVUdFVExCX1BBR0VgLCBidXQgYEhVR0VUTEJGU2AgaXMgd2hhdCB0aGUgdXNlciBjb25maWd1cmVzIGluIGBtZW51Y29uZmlnYCkuIFdlIGFsc28gbmVlZCBgTUVNQ0dgIGZvciB0aGUgbWVtX2Nncm91cCBjaGFyZ2luZyBvbiBodWdlIHBhZ2VzIGFuZCBgQ0dST1VQX0hVR0VUTEJgIGZvciBvcHRpb25hbCBzdXBwb3J0LiBBbGwgb2YgdGhlc2UgYXJlIHJlbGV2YW50LCBtYWtpbmcgdGhpcyBhbiBpbnRlcmVzdGluZyB0YXJnZXQuIENoZWNrLlxuXG5UaGlyZCwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHM/IEknbSBsaXN0aW5nIHRoZXNlOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgaHVnZXRsYl9ub19wYWdlYCwgYGh1Z2V0bGJfd3BgLiBJdCdzIGNydWNpYWwgdGhhdCBJIHVuZGVyc3RhbmQgdGhlc2UgYW5kIHRoZWlyIGNvbnRleHQuIENoZWNrLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgZ2VuZXJpYyBwYWdlIGFsbG9jYXRvciB0aGF0IHdvdWxkIHByb2R1Y2UgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzIGR1cmluZyBmdXp6aW5nLiBOb25lIG9mIHRoZSBsaXN0ZWQgc3ltYm9scyBhcmUgdWJpcXVpdG91cyBvciBnZW5lcmFsIGFsbG9jYXRvcnMgbGlrZSBgYWxsb2NfcGFnZXNgLCBgcGFnZV9mYXVsdGAsIG9yIGBrbWFsbG9jYC4gVGhleSdyZSBzcGVjaWZpYyB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGFyZSBhbGwgdGlnaHRseSBib3VuZCB0byB0aGUgSHVnZVRMQiBmZWF0dXJlLiBDaGVjay5cblxuU28sIGxldCdzIHJlaXRlcmF0ZSB0byB2ZXJpZnk6XG5cbjEuICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuMi4gIGBGb2N1c1N5bWJvbHNgOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBgSFVHRVRMQkZTYCwgYE1FTUNHYFxuNC4gIGBSZWFzb25pbmdgOiBIYW5kbGluZyBgLUVOT01FTWAgd2l0aCBgVk1fRkFVTFRfT09NYCBsZWFkcyB0byBmdXRpbGUgcmV0cmllcyBvbiBIdWdlVExCIHBhZ2VzLCBhbmQgY2hhbmdpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGAtRU5PU1BDYCBhbmQgYFZNX0ZBVUxUX1NJR0JVU2Agc2VlbXMgdG8gYmUgYSB2YWxpZCBpbXByb3ZlbWVudC4gVGhlIGlkZW50aWZpZWQgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgSHVnZVRMQiBmZWF0dXJlIGFuZCB0aHVzIGEgZ29vZCBmdXp6aW5nIHRhcmdldC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzMsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NDcuMzczNjg4MjU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTA3NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yLWhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2V0bGIuYyAoaHVnZXRsYl9hbGxvY19mb2xpbykgd2hlbiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxzLCByZXBsYWNpbmcgZnJlZV9odWdlX2ZvbGlvIHdpdGggZm9saW9fcHV0IGFuZCByZXR1cm5pbmcgLUVOT1NQQyBpbnN0ZWFkIG9mIC1FTk9NRU0gdG8gcHJldmVudCBmdXRpbGUgZmF1bHQgcmV0cmllcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBjaGFyZ2luZyBwYXRocyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGh1Z2V0bGJmcyBvcGVyYXRpb25zIGFuZCBNQVBfSFVHRVRMQiBmYXVsdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3ItaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZXRsYi5jIChodWdldGxiX2FsbG9jX2ZvbGlvKSB3aGVuIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbHMsIHJlcGxhY2luZyBmcmVlX2h1Z2VfZm9saW8gd2l0aCBmb2xpb19wdXQgYW5kIHJldHVybmluZyAtRU5PU1BDIGluc3RlYWQgb2YgLUVOT01FTSB0byBwcmV2ZW50IGZ1dGlsZSBmYXVsdCByZXRyaWVzLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGNoYXJnaW5nIHBhdGhzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgaHVnZXRsYmZzIG9wZXJhdGlvbnMgYW5kIE1BUF9IVUdFVExCIGZhdWx0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjQ0OjQ3LjQ4MjIwNzYxMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzYyMDY4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDo0Ny40ODI5OTU5OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjEzNTQwOTI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW8oKWAgd2hlbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYigpYCBmYWlscyB3aXRoIGAtRU5PTUVNYDogaXQgcmVwbGFjZXMgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgIHdpdGggYGZvbGlvX3B1dChmb2xpbylgIGFuZCBjaGFuZ2VzIHRoZSBlcnJvciByZXR1cm4gdmFsdWUgdG8gYC1FTk9TUENgLlxcblxcblRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgZm9saW8gcmVmZXJlbmNlIGNvdW50aW5nLCBmcmVlaW5nIG1lY2hhbmljcywgYW5kIGVycm9yIGNvZGUgcHJvcGFnYXRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgYm91bmRzIG9yIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxpZmV0aW1lICh1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSksIG9yIGFsbG9jYXRpb24gbG9naWMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjkzNzU3MjM0MjE4NzFkYTkwMWE0MTZhMDdmY2FiMjM1NjY5ZDliYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6NDM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDRmNmY1OGJmM2RiNmMuLmY1Yjg1M2E1Mzc3YzIgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTI4MjUsNyArMjgyNSw2IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKlxuICAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cbiAgKiAgICAgICAgIC1FTk9TUEMgaWYgY2dyb3VwIGNoYXJnaW5nIGZhaWxzIG9yIG5vIGZvbGlvIGlzIGF2YWlsYWJsZS5cbi0gKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuQEAgLTI4OTIsMTMgKzI4OTEsMTcgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0hVR0VUTEIsIG5yX3BhZ2VzKTtcbiBcbiBcdGlmIChyZXQgPT0gLUVOT01FTSkge1xuLVx0XHRmcmVlX2h1Z2VfZm9saW8oZm9saW8pO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcbiBcdFx0ICogd2VyZSBjb21taXR0ZWQgdG8gdGhlIGZvbGlvIGFuZCBmcmVlaW5nIHRoZSBmb2xpb1xuIFx0XHQgKiB3b3VsZCBoYXZlIGNsZWFyZWQgdGhvc2UgdXAuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZXR1cm4gLUVOT1NQQywgc2luY2UgcmV0cnlpbmcgdGhlIGZhdWx0IGlzIGZ1dGlsZTpcbitcdFx0ICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi5cbitcdFx0ICovXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGZvbGlvO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NDcuNDgyOTk3MzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMDkwMDkyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSB6ZXJvaW5nIGluIG9uIGBtbS9odWdldGxiLmNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gVGhhdCdzIHVzdWFsbHkgYSBjcml0aWNhbCBzcG90IGZvciBhbGxvY2F0aW9uIGxvZ2ljIGluIHRoZSBodWdlIHBhZ2Ugc3lzdGVtLCBzbyB3b3J0aCBhIGNsb3NlciBsb29rLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIEknbSBnb2luZyB0byBwdWxsIHVwIGBodWdldGxiLmNgIGFuZCBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmVzIDI4MjUgdG8gMjkwMC4gSSBjYW4gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGlzb2xhdGUgdGhhdCBzZWN0aW9uIGFuZCBnaXZlIG15c2VsZiBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zIHRoZSBwYXRjaCBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDo1MS43OTIwMDk5OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTcxMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MjUsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4MjU6XFx0ICpcXG4yODI2OlxcdCAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZm9saW8sIG9yIGFuIEVSUl9QVFIgb24gZmFpbHVyZS5cXG4yODI3OlxcdCAqICAgICAgICAgLUVOT1NQQyBpZiBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMgb3Igbm8gZm9saW8gaXMgYXZhaWxhYmxlLlxcbjI4Mjg6XFx0ICovXFxuMjgyOTpcXHRzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4yODMwOlxcdFxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncylcXG4yODMxOlxcdHtcXG4yODMyOlxcdFxcdGJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyBcXHUwMDI2XFxuMjgzMzpcXHRcXHRcXHRcXHRcXHRcXHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XFxuMjgzNDpcXHRcXHRib29sIHVzZV9nbG9iYWxfcmVzZXJ2YXRpb24gPSBhbGxvY19mbGFncyBcXHUwMDI2XFxuMjgzNTpcXHRcXHRcXHRcXHRcXHQgICAgICBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xcbjI4MzY6XFx0XFx0c2l6ZV90IG5yX3BhZ2VzID0gcGFnZXNfcGVyX2h1Z2VfcGFnZShoKTtcXG4yODM3OlxcdFxcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZ19yc3ZkID0gTlVMTDtcXG4yODM4OlxcdFxcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XFxuMjgzOTpcXHRcXHRnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuMjg0MDpcXHRcXHRpbnQgaWR4ID0gaHN0YXRlX2luZGV4KGgpO1xcbjI4NDE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yODQyOlxcdFxcdGludCByZXQ7XFxuMjg0MzpcXHRcXG4yODQ0OlxcdFxcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCBcXHUwMDI2XFx1MDAyNlxcbjI4NDU6XFx0XFx0ICAgIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZChpZHgsIG5yX3BhZ2VzLCBcXHUwMDI2aF9jZ19yc3ZkKSlcXG4yODQ2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbjI4NDc6XFx0XFxuMjg0ODpcXHRcXHRpZiAoaHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBcXHUwMDI2aF9jZykpIHtcXG4yODQ5OlxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMjg1MDpcXHRcXHRcXHRnb3RvIGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cF9yc3ZkO1xcbjI4NTE6XFx0XFx0fVxcbjI4NTI6XFx0XFxuMjg1MzpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHRmb2xpbyA9IE5VTEw7XFxuMjg1NjpcXHRcXHRpZiAodXNlX2dsb2JhbF9yZXNlcnZhdGlvbiB8fCBhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcXG4yODU3OlxcdFxcdFxcdGZvbGlvID0gZGVxdWV1ZV9odWdldGxiX2ZvbGlvKGgsIGdmcCwgbXBvbGkpO1xcbjI4NTg6XFx0XFxuMjg1OTpcXHRcXHRpZiAoIWZvbGlvKSB7XFxuMjg2MDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjg2MTpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oaCwgZ2ZwLCBtcG9saSk7XFxuMjg2MjpcXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuMjg2MzpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbjI4NjQ6XFx0XFx0XFx0XFx0Z290byBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXA7XFxuMjg2NTpcXHRcXHRcXHR9XFxuMjg2NjpcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4Njc6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZoLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG4yODY4OlxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XFxuMjg2OTpcXHRcXHR9XFxuMjg3MDpcXHRcXG4yODcxOlxcdFxcdGlmICh1c2VfZ2xvYmFsX3Jlc2VydmF0aW9uKSB7XFxuMjg3MjpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbjI4NzM6XFx0XFx0XFx0aC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzLS07XFxuMjg3NDpcXHRcXHR9XFxuMjg3NTpcXHRcXG4yODc2OlxcdFxcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2UoaWR4LCBucl9wYWdlcywgaF9jZywgZm9saW8pO1xcbjI4Nzc6XFx0XFxuMjg3ODpcXHRcXHRpZiAoY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQpIHtcXG4yODc5OlxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX2NvbW1pdF9jaGFyZ2VfcnN2ZChpZHgsIG5yX3BhZ2VzLCBoX2NnX3JzdmQsXFxuMjg4MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGZvbGlvKTtcXG4yODgxOlxcdFxcdH1cXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjI4ODQ6XFx0XFxuMjg4NTpcXHRcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4yODg2OlxcdFxcdC8qXFxuMjg4NzpcXHRcXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxuMjg4ODpcXHRcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXFxuMjg4OTpcXHRcXHQgKiBkZWNyZW1lbnQgTlJfSFVHRVRMQi5cXG4yODkwOlxcdFxcdCAqL1xcbjI4OTE6XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9IVUdFVExCLCBucl9wYWdlcyk7XFxuMjg5MjpcXHRcXG4yODkzOlxcdFxcdGlmIChyZXQgPT0gLUVOT01FTSkge1xcbjI4OTQ6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4yODk1OlxcdFxcdFxcdC8qXFxuMjg5NjpcXHRcXHRcXHQgKiBTa2lwIHVuY2hhcmdpbmcgaHVnZXRsYl9jZ3JvdXAgc2luY2UgdGhlIGNoYXJnZXNcXG4yODk3OlxcdFxcdFxcdCAqIHdlcmUgY29tbWl0dGVkIHRvIHRoZSBmb2xpbyBhbmQgZnJlZWluZyB0aGUgZm9saW9cXG4yODk4OlxcdFxcdFxcdCAqIHdvdWxkIGhhdmUgY2xlYXJlZCB0aG9zZSB1cC5cXG4yODk5OlxcdFxcdFxcdCAqL1xcbjI5MDA6XFx0XFx0XFx0LypcXG4yOTAxOlxcdFxcdFxcdCAqIFJldHVybiAtRU5PU1BDLCBzaW5jZSByZXRyeWluZyB0aGUgZmF1bHQgaXMgZnV0aWxlOlxcbjI5MDI6XFx0XFx0XFx0ICogdGhlIE9PTSBraWxsZXIgaXMgbm90IHRyaWdnZXJlZCBmb3IgSHVnZVRMQi5cXG4yOTAzOlxcdFxcdFxcdCAqL1xcbjI5MDQ6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7XFxuMjkwNTpcXHRcXHR9XFxuMjkwNjpcXHRcXG4yOTA3OlxcdFxcdHJldHVybiBmb2xpbztcXG4yOTA4OlxcdFxcbjI5MDk6XFx0IGVycl91bmNoYXJnZV9odWdldGxiX2Nncm91cDpcXG4yOTEwOlxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cChpZHgsIG5yX3BhZ2VzLCBoX2NnKTtcXG4yOTExOlxcdCBlcnJfdW5jaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZDpcXG4yOTEyOlxcdFxcdGlmIChjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZClcXG4yOTEzOlxcdFxcdFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGlkeCwgbnJfcGFnZXMsIGhfY2dfcnN2ZCk7XFxuMjkxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6NDQ6NTEuNzkyNzEwODQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4MjU2NTc5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmVhc29uaW5nOiBIdWdlVExCIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgdGhlIGNvZGUgY2hhbmdlZCB3aXRoaW4gYGh1Z2V0bGJfYWxsb2NfZm9saW9gOiB3aGVuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCByZXR1cm5zIGAtRU5PTUVNYCwgaXQgbm93IHVzZXMgYGZvbGlvX3B1dChmb2xpbylgIGluc3RlYWQgb2YgYGZyZWVfaHVnZV9mb2xpbyhmb2xpbylgLCBhbmQgcmV0dXJucyBgLUVOT1NQQ2AgaW5zdGVhZCBvZiBgLUVOT01FTWAuIFRoZSBjaGFuZ2UgaXMgYWJvdXQgcmVmY291bnRpbmcgYW5kIGZhdWx0IGxvb3BzIG9uIG1lbWNnIGNoYXJnaW5nIGZhaWx1cmU7IHN3aXRjaGluZyBgLUVOT01FTWAgdG8gYC1FTk9TUENgIGlzIHRoZSBrZXkuXG5cblNvLCBgZnJlZV9odWdlX2ZvbGlvYCB2cyBgZm9saW9fcHV0YDogdGhlIGZvcm1lciBkaXJlY3RseSBmcmVlcywgdGhlIGxhdHRlciBkZWNyZW1lbnRzIHRoZSByZWZjb3VudCwgd2hpY2ggdGhlbiAqbWF5KiBmcmVlLiBXaGVuIGBmb2xpb2AgaXMgYXQgcmVmY291bnQgMSwgYGZvbGlvX3B1dGAgZG9lcyB0aGUgc2FtZSBhcyBgZnJlZV9odWdlX2ZvbGlvYC4gVGhlIHJldHVybiBjb2RlIGNoYW5nZSBpcyB0byBwcmV2ZW50IHJldHJ5aW5nIGZhdWx0IGxvb3BzIG9uIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHVyZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBLTVNBTiBxdWVzdGlvbnMuIERvZXMgdGhpcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuXG5cbjEuICBEb2VzIGl0IHRvdWNoIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IE5vLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuMi4gIERvZXMgaXQgYWRkIG9yIG1vZGlmeSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBUaGUgY3JpdGljYWwgdmFyaWFibGUsIGByZXRgLCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBieSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuXG4zLiAgRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vLCB0aGlzIGNvZGUgZGVhbHMgd2l0aCBgZm9saW9gIHN0cnVjdHVyZXMsIHdoaWNoIGFyZSBhbHJlYWR5IHdlbGwtZGVmaW5lZCBtZW1vcnkgb2JqZWN0cyBpbiB0aGUga2VybmVsLlxuNC4gIERvZXMgaXQgY2hhbmdlIGJvdW5kcyBjaGVja3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBtZW1vcnkgY29weSBvcGVyYXRpb25zPyBObywgdGhpcyBwYXRjaCBpcyBpc29sYXRlZC5cbjUuICBUaGlzIGlzIGFsbCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHJlZmVyZW5jZSBjb3VudGluZy4gSXQncyBoYW5kbGluZyB0aGUgcmVmY291bnQgb2YgdGhlIGBmb2xpb2Agd2l0aCB0aGUgY2hhbmdlcyBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIHRvIGBmb2xpb19wdXRgIGFuZCBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZSBwcm9wYWdhdGlvbi5cblxuQW55IGlzc3VlcyBoZXJlIChyZWZjb3VudCBpbWJhbGFuY2UsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgYmFkIGVycm9yIGNvZGUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy9hc3NlcnRpb25zLiBUaGlzIGlzbid0IGEgS01TQU4gaXNzdWUgc2luY2UgdGhlcmUgYXJlIG5vIHJpc2tzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVwbGFjaW5nIG9uZSBtZW1vcnkgZnJlZWluZyBmdW5jdGlvbiB3aXRoIGFub3RoZXIsIHdoaWxlIGFkanVzdGluZyB0aGUgZXJyb3IgcmV0dXJuLiBUaGVyZSdzIG5vIHN1YnRsZSwgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhc3BlY3QgaGVyZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIGNoYW5nZSBpcyBzYWZlIGluIHJlZ2FyZCB0byBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5OCwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzo0NDo1OS42MTgzNzMxMjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIGBodWdldGxiX2FsbG9jX2ZvbGlvKClgIHdoZW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoKWAgZmFpbHMgd2l0aCBgLUVOT01FTWA6IGl0IHJlcGxhY2VzIGBmcmVlX2h1Z2VfZm9saW8oZm9saW8pYCB3aXRoIGBmb2xpb19wdXQoZm9saW8pYCBhbmQgY2hhbmdlcyB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlIHRvIGAtRU5PU1BDYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgZnJlZWluZyBtZWNoYW5pY3MsIGFuZCBlcnJvciBjb2RlIHByb3BhZ2F0aW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZldGltZSAodXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUpLCBvciBhbGxvY2F0aW9uIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[1] Phase: Succeeded StartedAt: 2026-09-09 17:45:10 +0000 UTC FinishedAt: 2026-09-09 17:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 17:45:10 +0000 UTC FinishedAt: 2026-09-09 17:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2] Phase: Succeeded StartedAt: 2026-09-09 17:45:10 +0000 UTC FinishedAt: 2026-09-09 21:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 17:45:10 +0000 UTC FinishedAt: 2026-09-09 21:28:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 17:45:10 +0000 UTC FinishedAt: 2026-09-09 17:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 17:45:10 +0000 UTC FinishedAt: 2026-09-09 17:45:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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-workflowxtkf5/series-workflowxtkf5-convert-artifact-49312226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 17:45:21 +0000 UTC FinishedAt: 2026-09-09 18:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 17:45:21 +0000 UTC FinishedAt: 2026-09-09 18:02:35 +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:*772c3d85-8fcd-4351-ba0e-a693341d7e5f,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-workflowxtkf5/series-workflowxtkf5-convert-artifact-49312226/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": "437f09e3-81b4-476b-b10c-ddc3e872a783", "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-workflowxtkf5/series-workflowxtkf5-build-action-308005280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 17:45:21 +0000 UTC FinishedAt: 2026-09-09 18:02:25 +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:*772c3d85-8fcd-4351-ba0e-a693341d7e5f,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-workflowxtkf5/series-workflowxtkf5-convert-artifact-49312226/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": "437f09e3-81b4-476b-b10c-ddc3e872a783", "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-workflowxtkf5/series-workflowxtkf5-build-action-308005280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:02:35 +0000 UTC FinishedAt: 2026-09-09 18:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:02:35 +0000 UTC FinishedAt: 2026-09-09 18:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:02:35 +0000 UTC FinishedAt: 2026-09-09 18:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:02:35 +0000 UTC FinishedAt: 2026-09-09 18:02:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-workflowxtkf5/series-workflowxtkf5-convert-artifact-2787729725/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:02:45 +0000 UTC FinishedAt: 2026-09-09 18:04:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:02:45 +0000 UTC FinishedAt: 2026-09-09 18:04:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*437f09e3-81b4-476b-b10c-ddc3e872a783,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-workflowxtkf5/series-workflowxtkf5-build-action-308005280/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-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:04:40 +0000 UTC FinishedAt: 2026-09-09 18:04:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:04:40 +0000 UTC FinishedAt: 2026-09-09 18:04:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:04:40 +0000 UTC FinishedAt: 2026-09-09 18:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:04:40 +0000 UTC FinishedAt: 2026-09-09 18:21: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:*772c3d85-8fcd-4351-ba0e-a693341d7e5f,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-workflowxtkf5/series-workflowxtkf5-convert-artifact-2787729725/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": "9b428e7e-9bff-431e-add6-7e06922a434f", "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-workflowxtkf5/series-workflowxtkf5-build-action-4210557081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:04:40 +0000 UTC FinishedAt: 2026-09-09 18:21: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:*772c3d85-8fcd-4351-ba0e-a693341d7e5f,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-workflowxtkf5/series-workflowxtkf5-convert-artifact-2787729725/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": "9b428e7e-9bff-431e-add6-7e06922a434f", "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-workflowxtkf5/series-workflowxtkf5-build-action-4210557081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:21:48 +0000 UTC FinishedAt: 2026-09-09 18:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:21:48 +0000 UTC FinishedAt: 2026-09-09 18:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:21:48 +0000 UTC FinishedAt: 2026-09-09 18:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:21:48 +0000 UTC FinishedAt: 2026-09-09 18:23:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b428e7e-9bff-431e-add6-7e06922a434f,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-workflowxtkf5/series-workflowxtkf5-build-action-4210557081/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-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 21:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 21:28:01 +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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"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:*437f09e3-81b4-476b-b10c-ddc3e872a783,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b428e7e-9bff-431e-add6-7e06922a434f,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-workflowxtkf5/series-workflowxtkf5-build-action-308005280/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-workflowxtkf5/series-workflowxtkf5-build-action-4210557081/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 18:23:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 18:23:35 +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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"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-workflowxtkf5/series-workflowxtkf5-convert-artifact-706421954/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 18:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 18:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:30 +0000 UTC FinishedAt: 2026-09-09 18:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:40 +0000 UTC FinishedAt: 2026-09-09 21:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxtkf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"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":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"333b8b2a-6b55-446b-ad1b-e461edc67def","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-09-09 18:23:40 +0000 UTC FinishedAt: 2026-09-09 21:27:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*437f09e3-81b4-476b-b10c-ddc3e872a783,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b428e7e-9bff-431e-add6-7e06922a434f,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-workflowxtkf5/series-workflowxtkf5-build-action-308005280/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-workflowxtkf5/series-workflowxtkf5-build-action-4210557081/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-workflowxtkf5/series-workflowxtkf5-convert-artifact-706421954/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,}