Name: series-workflowxjrgn Phase: Succeeded StartedAt: 2026-09-04 23:53:52 +0000 UTC FinishedAt: 2026-09-05 03:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[0] Phase: Succeeded StartedAt: 2026-09-04 23:53:52 +0000 UTC FinishedAt: 2026-09-05 00:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 23:53:52 +0000 UTC FinishedAt: 2026-09-05 00:14:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET" ], "series_id": "d73ff491-07c1-454a-8d51-3a7c106ed72e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_policy_lookup_bytype", "xfrm_policy_lookup", "xfrm_policy_eval_candidates", "xfrm_policy_find_inexact_candidates", "__xfrm_policy_check", "xfrm_lookup_with_ifid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2xvb2t1cCYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMmIzM0OywKICAgICYjMzQ7X194ZnJtX3BvbGljeV9jaGVjayYjMzQ7LAogICAgJiMzNDt4ZnJtX2xvb2t1cF93aXRoX2lmaWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVx1MDAzZWNvdW50YCkgYXJvdW5kIGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBsb29rdXAgYW5kIGV2YWx1YXRpb24gKGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgKSBpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSgpYCB0byBoYW5kbGUgY29uY3VycmVudCB0cmVlIG1vZGlmaWNhdGlvbnMgcHJvcGVybHkuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGluZXhhY3Rfc2VxdWVuY2VgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIGJ5IGByZWFkX3NlcWNvdW50X2JlZ2luKClgLlxuLSBUaGUgY2FuZGlkYXRlIHN0cnVjdHVyZSBgY2FuZGAgY29udGludWVzIHRvIGJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoKWAgaW4gYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKClgLlxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuXG4yLiBLQVNBTiB2cyBLTVNBTjpcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXG4tIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSBpbiBuZXQveGZybS94ZnJtX3BvbGljeS5jIHRvIHByb3RlY3QgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGV2YWx1YXRpb24gd2l0aCB0aGUgaW5leGFjdCBiaW4mIzM5O3Mgc2VxY291bnQgKHJldHJ5aW5nIG9uIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgZXhlcmNpc2VkIHdoZW5ldmVyIElQc2VjL1hGUk0gcG9saWNpZXMgYXJlIGxvb2tlZCB1cCBvciBtYXRjaGVkIGFnYWluc3QgbmV0d29yayB0cmFmZmljIGFuZCBzb2NrZXQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNzgxNWVjZDQ5YjNkM2ExZWM5ZWQzOTQwN2ZjMGE3YmFmYzkxOWRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMDoxMzoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuaW5kZXggOTMyYTMxM2I5NDYwYS4uNWQ0ZTg2Mzg2M2RmZSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbkBAIC0yMTU3LDYgJiM0MzsyMTU3LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4gXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcbiBcdHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0O1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKmNoYWluO1xuJiM0MztcdHVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlO1xuIFx0dW5zaWduZWQgaW50IHNlcXVlbmNlO1xuIFx0aW50IGVycjtcbiBcbkBAIC0yMTkxLDEyICYjNDM7MjE5MiwxOCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcbiBcdFx0Z290byBza2lwX2luZXhhY3Q7XG4gXG4gXHRiaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpO1xuLVx0aWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsXG4tXHRcdFx0XHRcdFx0XHQgZGFkZHIpKVxuJiM0MztcdGlmICghYmluKVxuJiM0MztcdFx0Z290byBza2lwX2luZXhhY3Q7XG4mIzQzO1xuJiM0MztcdGluZXhhY3Rfc2VxdWVuY2UgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmJpbi1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXG4gXHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuIFxuIFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXG4gXHRcdFx0XHRcdCAgZmFtaWx5LCBpZl9pZCk7XG4mIzQzO1x0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2YmluLVx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuIFx0aWYgKHBvbCkge1xuIFx0XHRyZXQgPSBwb2w7XG4gXHRcdGlmIChJU19FUlIocG9sKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXAmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O19feGZybV9wb2xpY3lfY2hlY2smIzM0OywKICAgICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUgaW4gbmV0L3hmcm0veGZybV9wb2xpY3kuYyB0byBwcm90ZWN0IGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBldmFsdWF0aW9uIHdpdGggdGhlIGluZXhhY3QgYmluJiMzOTtzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjc4MTVlY2Q0OWIzZDNhMWVjOWVkMzk0MDdmYzBhN2JhZmM5MTlkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDA6MTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA5MzJhMzEzYjk0NjBhLi41ZDRlODYzODYzZGZlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwKIAlzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CiYjNDM7CXVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlOwogCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKIAlpbnQgZXJyOwogCkBAIC0yMTkxLDEyICYjNDM7MjE5MiwxOCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwKIAkJZ290byBza2lwX2luZXhhY3Q7CiAKIAliaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpOwotCWlmICghYmluIHx8ICF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygmYW1wO2NhbmQsIGJpbiwgc2FkZHIsCi0JCQkJCQkJIGRhZGRyKSkKJiM0MzsJaWYgKCFiaW4pCiYjNDM7CQlnb3RvIHNraXBfaW5leGFjdDsKJiM0MzsKJiM0MzsJaW5leGFjdF9zZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtiaW4tJmd0O2NvdW50KTsKJiM0MzsJaWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygmYW1wO2NhbmQsIGJpbiwgc2FkZHIsIGRhZGRyKSkKIAkJZ290byBza2lwX2luZXhhY3Q7CiAKIAlwb2wgPSB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMoJmFtcDtjYW5kLCByZXQsIGZsLCB0eXBlLAogCQkJCQkgIGZhbWlseSwgaWZfaWQpOwomIzQzOwlpZiAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2Jpbi0mZ3Q7Y291bnQsIGluZXhhY3Rfc2VxdWVuY2UpKQomIzQzOwkJZ290byByZXRyeTsKJiM0MzsKIAlpZiAocG9sKSB7CiAJCXJldCA9IHBvbDsKIAkJaWYgKElTX0VSUihwb2wpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU29tZW9uZSB3YW50cyBtZSB0byBldmFsdWF0ZSBhIHBhdGNoIHRvIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaXMgdHlwaWNhbC4gVGhlIGRpZmYgZm9jdXNlcyBvbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgcmVhZF9zZXFjb3VudF9iZWdpbmAgYW5kIGByZWFkX3NlcWNvdW50X3JldHJ5YCBmb3IgaW5leGFjdCBwb2xpY3kgbG9va3Vwcy4gSWYgYSByZXRyeSBpcyBuZWVkZWQsIGl0IGp1bXBzIHRvIHRoZSBgcmV0cnlgIGxhYmVsLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIHJlYWQtY29weS11cGRhdGUtbGlrZSBjb25zdHJ1Y3QsIHBvc3NpYmx5IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZS4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgYWJvdmUgYm9hcmQuIFN0YW5kYXJkIGRldi9RQS9kZWZlbnNlIGFjdGl2aXR5IOKAkyBldmFsdWF0aW5nIHBhdGNoZXMsIGlkZW50aWZ5aW5nIGludGVyZXN0aW5nIHN5bWJvbHMsIGNvbmZpZ3MgZm9yIHN5emthbGxlcuKApiB0aGF0JiMzOTtzIGFsbCBiZW5pZ24uIE5vIHdvcnJpZXMgdGhlcmUuIEkmIzM5O20gbm90IGdlbmVyYXRpbmcgZXhwbG9pdHMgb3IgZGVhbGluZyB3aXRoIGFueXRoaW5nIG1hbGljaW91cy4KClRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTtsbCB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBpbnNwZWN0IHRoZSBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSwgYW5kIHdoYXQgdGhlIGByZWFkX3NlcWNvdW50YCBvcGVyYXRpb25zIGFyZSBwcm90ZWN0aW5nLiBPbmNlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBJIGNhbiBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIuIElzIGl0IGxpa2VseSB0byBleHBvc2UgbmV3IGNvZGUgcGF0aHMsIGFuZCBwb3RlbnRpYWxseSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBvciBpcyBpdCB0b28gbmFycm93IGluIHNjb3BlPyBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlY2lkaW5nIHdoZXRoZXIgd2UgbmVlZCB0byBicmluZyBvdXQgdGhlIGhlYXZ5IGFydGlsbGVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNTU6XHRcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbjIxNTY6XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgKnNhZGRyO1xuMjE1NzpcdFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiaW47XG4yMTU4Olx0XHRzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDtcbjIxNTk6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjtcbjIxNjA6XHRcdHVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlO1xuMjE2MTpcdFx0dW5zaWduZWQgaW50IHNlcXVlbmNlO1xuMjE2MjpcdFx0aW50IGVycjtcbjIxNjM6XHRcbjIxNjQ6XHRcdGRhZGRyID0geGZybV9mbG93aV9kYWRkcihmbCwgZmFtaWx5KTtcbjIxNjU6XHRcdHNhZGRyID0geGZybV9mbG93aV9zYWRkcihmbCwgZmFtaWx5KTtcbjIxNjY6XHRcdGlmICh1bmxpa2VseSghZGFkZHIgfHwgIXNhZGRyKSlcbjIxNjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMTY4Olx0XG4yMTY5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTcwOlx0IHJldHJ5OlxuMjE3MTpcdFx0ZG8ge1xuMjE3MjpcdFx0XHRzZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uKTtcbjIxNzM6XHRcdFx0Y2hhaW4gPSBwb2xpY3lfaGFzaF9kaXJlY3QobmV0LCBkYWRkciwgc2FkZHIsIGZhbWlseSwgZGlyKTtcbjIxNzQ6XHRcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpO1xuMjE3NTpcdFxuMjE3NjpcdFx0cmV0ID0gTlVMTDtcbjIxNzc6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb2wsIGNoYWluLCBieWRzdCkge1xuMjE3ODpcdFx0XHRlcnIgPSB4ZnJtX3BvbGljeV9tYXRjaChwb2wsIGZsLCB0eXBlLCBmYW1pbHksIGlmX2lkKTtcbjIxNzk6XHRcdFx0aWYgKGVycikge1xuMjE4MDpcdFx0XHRcdGlmIChlcnIgPT0gLUVTUkNIKVxuMjE4MTpcdFx0XHRcdFx0Y29udGludWU7XG4yMTgyOlx0XHRcdFx0ZWxzZSB7XG4yMTgzOlx0XHRcdFx0XHRyZXQgPSBFUlJfUFRSKGVycik7XG4yMTg0Olx0XHRcdFx0XHRnb3RvIGZhaWw7XG4yMTg1Olx0XHRcdFx0fVxuMjE4NjpcdFx0XHR9IGVsc2Uge1xuMjE4NzpcdFx0XHRcdHJldCA9IHBvbDtcbjIxODg6XHRcdFx0XHRicmVhaztcbjIxODk6XHRcdFx0fVxuMjE5MDpcdFx0fVxuMjE5MTpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0LVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxuMjE5MjpcdFx0XHRnb3RvIHNraXBfaW5leGFjdDtcbjIxOTM6XHRcbjIxOTQ6XHRcdGJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7XG4yMTk1Olx0XHRpZiAoIWJpbilcbjIxOTY6XHRcdFx0Z290byBza2lwX2luZXhhY3Q7XG4yMTk3Olx0XG4yMTk4Olx0XHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZiaW4tXHUwMDNlY291bnQpO1xuMjE5OTpcdFx0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXG4yMjAwOlx0XHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuMjIwMTpcdFxuMjIwMjpcdFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXG4yMjAzOlx0XHRcdFx0XHRcdCAgZmFtaWx5LCBpZl9pZCk7XG4yMjA0Olx0XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZiaW4tXHUwMDNlY291bnQsIGluZXhhY3Rfc2VxdWVuY2UpKVxuMjIwNTpcdFx0XHRnb3RvIHJldHJ5O1xuMjIwNjpcdFxuMjIwNzpcdFx0aWYgKHBvbCkge1xuMjIwODpcdFx0XHRyZXQgPSBwb2w7XG4yMjA5Olx0XHRcdGlmIChJU19FUlIocG9sKSlcbjIyMTA6XHRcdFx0XHRnb3RvIGZhaWw7XG4yMjExOlx0XHR9XG4yMjEyOlx0XG4yMjEzOlx0c2tpcF9pbmV4YWN0OlxuMjIxNDpcdFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpXG4yMjE1Olx0XHRcdGdvdG8gcmV0cnk7XG4yMjE2Olx0XG4yMjE3Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAheGZybV9wb2xfaG9sZF9yY3UocmV0KSlcbjIyMTg6XHRcdFx0Z290byByZXRyeTtcbjIyMTk6XHRmYWlsOlxuMjIyMDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMjIxOlx0XG4yMjIyOlx0XHRyZXR1cm4gcmV0O1xuMjIyMzpcdH1cbjIyMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBUaGF0IHBsYWNlcyB1cyBzcXVhcmVseSB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCB0aGUgaGVhcnQgb2YgSVBzZWMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2ssIEkga25vdyB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQsIGFjY2Vzc2libGUgdmlhIHNvY2tldHMsIG5ldGxpbmsgKHNwZWNpZmljYWxseSB0aGUgeGZybSBuZXRsaW5rIGludGVyZmFjZSwgYW5kIFBGX0tFWSksIGFuZCBldmVuIHN0YW5kYXJkIElQIHRyYWZmaWMgdGhhdCB0cmlnZ2VycyBwb2xpY3kgbG9va3Vwcy4gVGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkuCgpXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHNlcXVlbmNlIGNvdW50IGxvY2tpbmcgYW5kIHJldHJ5IGxvZ2ljICpkdXJpbmcqIGFuIGluZXhhY3QgcG9saWN5IGxvb2t1cC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IOKAkyB0aGlzIGlzbiYjMzk7dCBqdXN0IHNvbWUgaXNvbGF0ZWQgZnVuY3Rpb247IGl0JiMzOTtzIGludHJpY2F0ZWx5IGludm9sdmVkIGluIHRoZSBwcm9jZXNzIG9mIG1ha2luZyBwb2xpY3kgZGVjaXNpb25zLiBJdCYjMzk7cyBhY3RpdmVseSBleGVjdXRlZCBjb2RlLCByZWFjaGFibGUgdGhyb3VnaCB2YXJpb3VzIG5ldHdvcmsgcGF0aHMuIFRoZXJlZm9yZSwgdGhlIHByb2JhYmlsaXR5IG9mIHJlYWNoaW5nIHRoaXMgY29kZSBwYXRoIHdpdGggY3JhZnRlZCBpbnB1dCBpcyBoaWdoLgoKU28sICpXb3J0aEZ1enppbmcqIGlzIGRlZmluaXRlbHkgYHRydWVgLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBwb2xpY3kgbW9kdWxlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgcG9saWNpZXMgYXJlIG1hbmlwdWxhdGVkLCBob3cgdGhleSYjMzk7cmUgbG9va2VkIHVwLCBhbmQgd2hhdCBwb3RlbnRpYWwgdHJpZ2dlcnMgZXhpc3QuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBiZXN0IHBvaW50cyB0byBpbnNlcnQgZnV6emluZyB2ZWN0b3JzLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIGNyYWZ0IGVmZmVjdGl2ZSBmdXp6aW5nIGhhcm5lc3Nlcy4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jPTIxMjc9eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTQ5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTUwOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTUxLVx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyMjU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzI6XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9TVUIsIGZsLCBmYW1pbHksXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzMtXHRcdFx0XHRcdGRpciwgaWZfaWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzNi0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzNzpcdHJldHVybiB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLCBmbCwgZmFtaWx5LFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM4LVx0XHRcdFx0XHQgZGlyLCBpZl9pZCk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yODExPXN0YXRpYyBpbnQgeGZybV9leHBhbmRfcG9saWNpZXMoY29uc3Qgc3RydWN0IGZsb3dpICpmbCwgdTE2IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzEtXHQgICAgcG9sc1swXS1cdTAwM2V0eXBlICE9IFhGUk1fUE9MSUNZX1RZUEVfTUFJTikge1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyODMyOlx0XHRwb2xzWzFdID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSh4cF9uZXQocG9sc1swXSksXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzMtXHRcdFx0XHRcdFx0ICAgIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4Mi1cdGlmIChwb2xzWzBdLVx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM3ODM6XHRcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzg0LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZmbCwgZmFtaWx5LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQ5NT1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX21pZ3JhdGVfcG9saWN5X2ZpbmQoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MjktXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ1MzA6XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgdHlwZSwgXHUwMDI2ZmwsIHNlbC1cdTAwM2VmYW1pbHksIGRpciwgaWZfaWQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTMxLVx0aWYgKElTX0VSUl9PUl9OVUxMKHBvbCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBQb2xpY3kgTG9va3VwIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU2luY2UgaXQmIzM5O3Mgc3RhdGljLCBJIGtub3cgSSB3b24mIzM5O3QgZmluZCBpdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoYXQgZmlsZS4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUsIGFuZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBgbmV0L3hmcm0vYCBkaXJlY3RvcnksIHRoYXQgbWlnaHQgaW5kaXJlY3RseSB1dGlsaXplIHRoaXMgbG9va3VwIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgcG9saWN5IHJldHJpZXZhbC4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBnbG9iYWwgc3ltYm9scz8KClRoZW4sIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBnb2luZyB0byBiZSB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBjYWxsZXJzIG9mIGB4ZnJtX3BvbGljeV9sb29rdXBgIGluIGdlbmVyYWwuIFNlZWluZyBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHNob3VsZCBxdWlja2x5IGlsbHVtaW5hdGUgdGhlIG92ZXJhbGwgcG9saWN5IGxvb2t1cCBsb2dpYyBhbmQgcmV2ZWFsIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAuIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGlzIHNvbWV3aGVyZSBpbiB0aGUgYnJvYWRlciBwb2xpY3kgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgY2FsbGVycyBhbmQgZm9sbG93IHRoZSB0cmFpbCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fcG9saWN5X2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTY0PXN0YXRpYyBpbnQgeGZybV9wb2xpY3lfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTc5LVx0aWYgKG1hdGNoKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTgwOlx0XHRyZXQgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLVx1MDAzZXNlY3VyaXR5LCBmbC1cdTAwM2VmbG93aV9zZWNpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5ODEtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTk4ND1zdGF0aWMgc3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfbm9kZSAqXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5ODU6eGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqcixcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk4Ni1cdFx0XHRcdHNlcWNvdW50X3NwaW5sb2NrX3QgKmNvdW50LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjAyMj14ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAzNi1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjAzNzpcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFx1MDAyNmItXHUwMDNlcm9vdF9kLCBcdTAwMjZiLVx1MDAzZWNvdW50LCBkYWRkcixcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAzOC1cdFx0XHRcdFx0ICAgIGZhbWlseSk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQwLVx0XHRjYW5kLVx1MDAzZXJlc1tYRlJNX1BPTF9DQU5EX0RBRERSXSA9IFx1MDAyNm4tXHUwMDNlaGhlYWQ7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwNDE6XHRcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFx1MDAyNm4tXHUwMDNlcm9vdCwgXHUwMDI2Yi1cdTAwM2Vjb3VudCwgc2FkZHIsXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDItXHRcdFx0XHRcdFx0ICAgIGZhbWlseSk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQ2LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMDQ3Olx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXHUwMDI2Yi1cdTAwM2Vyb290X3MsIFx1MDAyNmItXHUwMDNlY291bnQsIHNhZGRyLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQ4LVx0XHRcdFx0XHQgICAgZmFtaWx5KTtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIxMjc9eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTQ5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTUwOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTUxLVx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMjQtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMjU6c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIyNi1cdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzI6XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9TVUIsIGZsLCBmYW1pbHksXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzMtXHRcdFx0XHRcdGRpciwgaWZfaWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzNi0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzNzpcdHJldHVybiB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLCBmbCwgZmFtaWx5LFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM4LVx0XHRcdFx0XHQgZGlyLCBpZl9pZCk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMjQxPXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjY1LVx0XHRcdH1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjI2NjpcdFx0XHRlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLVx1MDAzZXNlY3VyaXR5LFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjY3LVx0XHRcdFx0XHRcdCAgICAgIGZsLVx1MDAzZWZsb3dpX3NlY2lkKTtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTI4MTE9c3RhdGljIGludCB4ZnJtX2V4cGFuZF9wb2xpY2llcyhjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLCB1MTYgZmFtaWx5LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjgzMS1cdCAgICBwb2xzWzBdLVx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjI4MzI6XHRcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHhwX25ldChwb2xzWzBdKSxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjgzMy1cdFx0XHRcdFx0XHQgICAgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzA4NT1zdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2J1bmRsZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzA5Ni1cdG51bV9wb2xzID0gMTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzA5NzpcdHBvbHNbMF0gPSB4ZnJtX3BvbGljeV9sb29rdXAobmV0LCBmbCwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzA5OC1cdGVyciA9IHhmcm1fZXhwYW5kX3BvbGljaWVzKGZsLCBmYW1pbHksIHBvbHMsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjI2PXhmcm1fcG9saWN5ICp4ZnJtX2luX2Z3ZF9pY21wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNjM4LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNjM5Olx0XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXAobmV0LCBcdTAwMjZmbDEsIGZhbWlseSwgWEZSTV9QT0xJQ1lfRldELCBpZl9pZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2NDAtXHRcdGlmIChJU19FUlIocG9sKSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc0OC1cdGlmICghcG9sKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzQ5Olx0XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXAobmV0LCBcdTAwMjZmbCwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc1MC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3ODItXHRpZiAocG9sc1swXS1cdTAwM2V0eXBlICE9IFhGUk1fUE9MSUNZX1RZUEVfTUFJTikge1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzgzOlx0XHRwb2xzWzFdID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4NC1cdFx0XHRcdFx0XHQgICAgXHUwMDI2ZmwsIGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTI5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTMwOlx0cG9sID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIHR5cGUsIFx1MDAyNmZsLCBzZWwtXHUwMDNlZmFtaWx5LCBkaXIsIGlmX2lkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDUzMS1cdGlmIChJU19FUlJfT1JfTlVMTChwb2wpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgeGZybV9idW5kbGVfbG9va3VwYCBEZXBlbmRlbmN5KioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkgYXJvdW5kIGB4ZnJtX2J1bmRsZV9sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgY2FsbGluZyBpdCwgb3IsIG1vcmUgYnJvYWRseSwgd2hpY2ggZnVuY3Rpb25zIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBhcmUgZW50cnkgcG9pbnRzIG9yIGV4cG9ydGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgLSBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2ggd2l0aGluIHRoZSBwb2xpY3kgbW9kdWxlLCBpdCYjMzk7bGwgcHJvdmlkZSBhIG5pY2UgYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0yNzY9c3RydWN0IGRzdF9lbnRyeSAqX194ZnJtX2RzdF9sb29rdXAoaW50IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI5MS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjI5MjpFWFBPUlRfU1lNQk9MKF9feGZybV9kc3RfbG9va3VwKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjkzLVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDMxPXN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBnZnBfdCBnZnApXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTEtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTI6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9hbGxvYyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1My1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2ND12b2lkIHhmcm1fcG9saWN5X2Rlc3Ryb3koc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3kpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzMtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NzQ6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9kZXN0cm95KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDc1LVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NzE1PXZvaWQgeGZybV9zcGRfZ2V0aW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJta19zcGRpbmZvICpzaSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjcyNjpFWFBPUlRfU1lNQk9MKHhmcm1fc3BkX2dldGluZm8pO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MjctXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xMzk5PXZvaWQgeGZybV9wb2xpY3lfaGFzaF9yZWJ1aWxkKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0MDItfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNDAzOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfaGFzaF9yZWJ1aWxkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTQwNC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE1NzI9aW50IHhmcm1fcG9saWN5X2luc2VydChpbnQgZGlyLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwgaW50IGV4Y2wpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNjE5LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTYyMDpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2luc2VydCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE2MjEtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNjQ1PXhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3MTEtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzEyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYnlzZWxfY3R4KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTcxMy1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE3MTU9eGZybV9wb2xpY3lfYnlpZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NTEtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzUyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYnlpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NTMtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODEyPWludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NDgtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxODQ5OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfZmx1c2gpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODUwLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODUxPWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTg4OC19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE4ODk6RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9wb2xpY3lfZmx1c2gpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODkwLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODkxPWludCB4ZnJtX3BvbGljeV93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTM2LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTkzNzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGspO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTM4LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTM5PXZvaWQgeGZybV9wb2xpY3lfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLCB1OCB0eXBlKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk0NS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5NDY6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV93YWxrX2luaXQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTQ3LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTQ4PXZvaWQgeGZybV9wb2xpY3lfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTU2LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTk1NzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGtfZG9uZSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NTgtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzY1PWludCB4ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzc3LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjM3ODpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2RlbGV0ZSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNzktXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMTczPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI1LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMyNjpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwX3dpdGhfaWZpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMjctXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMzMzPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzM4LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMzOTpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzM0MC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTMzNDQ9c3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZyxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzNTktfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozMzYwOkVYUE9SVF9TWU1CT0woeGZybV9sb29rdXBfcm91dGUpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzYxLVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzUwMz1pbnQgX194ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM1MzgtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNTM5OkVYUE9SVF9TWU1CT0woX194ZnJtX2RlY29kZV9zZXNzaW9uKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzU0MC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3Ni19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM4Nzc6RVhQT1JUX1NZTUJPTChfX3hmcm1fcG9saWN5X2NoZWNrKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3OC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9Mzg3OT1pbnQgX194ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzkxNC19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM5MTU6RVhQT1JUX1NZTUJPTChfX3hmcm1fcm91dGVfZm9yd2FyZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5MTYtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zOTUzPXZvaWQgeGZybV9kc3RfaWZkb3duKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5NjAtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozOTYxOkVYUE9SVF9TWU1CT0woeGZybV9kc3RfaWZkb3duKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzk2Mi1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTg9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTUxLX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE1MjpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxNTMtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxNTQ9dm9pZCB4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTcyLX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE3MzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3VucmVnaXN0ZXJfYWZpbmZvKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE3NC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDE3NT12b2lkIHhmcm1faWZfcmVnaXN0ZXJfY2IoY29uc3Qgc3RydWN0IHhmcm1faWZfY2IgKmlmY2IpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTgwLX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE4MTpFWFBPUlRfU1lNQk9MKHhmcm1faWZfcmVnaXN0ZXJfY2IpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTgyLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MTgzPXZvaWQgeGZybV9pZl91bnJlZ2lzdGVyX2NiKHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTg3LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE4ODpFWFBPUlRfU1lNQk9MKHhmcm1faWZfdW5yZWdpc3Rlcl9jYik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxODktXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDY0PXZvaWQgeGZybV9hdWRpdF9wb2xpY3lfYWRkKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCByZXN1bHQsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0NzUtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NDc2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYXVkaXRfcG9saWN5X2FkZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0NzctXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0Nzg9dm9pZCB4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IHJlc3VsdCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTAtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NDkxOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYXVkaXRfcG9saWN5X2RlbGV0ZSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTItI2VuZGlmXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjYzPWludCB4ZnJtX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDc0NC19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ3NDU6RVhQT1JUX1NZTUJPTCh4ZnJtX21pZ3JhdGUpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzQ2LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgdGhlIHN5bWJvbCAqc2hvdWxkKiBiZSBwcmVzZW50IHVubGVzcyBpdCYjMzk7cyBpbmxpbmVkLiBCdXQgd2FpdCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgeGZybV9wb2xpY3lfbG9va3VwYCwgYHhmcm1fZXhwYW5kX3BvbGljaWVzYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1fbWlncmF0ZV9wb2xpY3lfZmluZGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmdW5jdGlvbnMuCgpOb3csIGxldCBtZSBjb25maXJtLiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBsaW5lIDIxNTA6ICBgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSguLi4pYC4uLiBZZXAsIGl0JiMzOTtzICpub3QqIGlubGluZWQuIFdoaWNoIG1lYW5zIHRoZSBzeW1ib2wgc2hvdWxkIGRlZmluaXRlbHkgYmUgdmlzaWJsZS4KClRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgYWxzbyBzcGVjaWZpY2FsbHkgdmVyaWZ5IGEgZmV3IHJlbGF0ZWQgc3ltYm9scyB0byBzZWUgaWYgc29tZXRoaW5nIGlzIGdvaW5nIG9uIHdpdGggdGhlbTogYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBgeGZybV9wb2xpY3lfbG9va3VwYCwgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AsIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AsIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgLCBhbmQgYF9feGZybV9wb2xpY3lfY2hlY2tgLgoKTmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L3hmcm0vS2NvbmZpZ2AgKG9yIHBlcmhhcHMgYG5ldC9LY29uZmlnYCBpZiBpdCYjMzk7cyBpbmNsdWRlZCB0aGVyZSkuIEdvdHRhIGVuc3VyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZC4gQW5kIG9mIGNvdXJzZSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIGFzIHdlbGwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYmVpbmcgYnVpbHQgY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fcG9saWN5XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGU9MTI9ZW5kaWZcbm5ldC94ZnJtL01ha2VmaWxlLTEzLVxubmV0L3hmcm0vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNS1cdFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBYRlJNKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQ09ORklHX1hGUk1gIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgbmV0L0tjb25maWdgIGZpcnN0LiBJZiBpdCYjMzk7cyBub3QgdGhlcmUsIHdoaWNoIGlzIGEgcG9zc2liaWxpdHkgZ2l2ZW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBjb2RlLCB0aGVuIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgd2l0aGluIHRoZSBtb3JlIHNwZWNpZmljIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYm90aCBwbGFjZXMgdG8gYmUgc3VyZS4gSXTigJlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSB0byBsb2NhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgc3ViZGlyZWN0b3J5LCBzbyB0aGlzIGlzIGEgc2Vuc2libGUgZmlyc3QgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBYRlJNLCBwYXJ0aWN1bGFybHkgd2hhdCBmbGlwcyB0aG9zZSBjcnVjaWFsIHN3aXRjaGVzLiBNeSBicmFpbiBpcyBhbHJlYWR5IGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgaXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zIHdpdGggZW5hYmxpbmcgWEZSTSBhbmQgaXRzIHZhcmlvdXMgY29tcG9uZW50cy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIG9uIGBYRlJNYCBpdHNlbGYsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgdXNlci1zcGFjZSBzdXBwb3J0IChgWEZSTV9VU0VSYCkuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYWxsIHRoZSBkaWZmZXJlbnQgSVBzZWMgdHJhbnNmb3JtIG1vZGVzOiBgSU5FVF9YRlJNX01PREVfKmAuIFRoZSBFU1AgYW5kIEFIIHByb3RvY29scyAoYElORVRfRVNQYCBhbmQgYElORVRfQUhgKSBhcmUsIG9mIGNvdXJzZSwgY3JpdGljYWwgcGllY2VzIG9mIHRoYXQsIHNvIEkmIzM5O2xsIHNlZSBob3cgdGhvc2UgbGluayBpbi4gRmluYWxseSwgSSYjMzk7bGwgYWxzbyBjaGVjayBob3cgYFhGUk1fU1VCX1BPTElDWWAsIGFuZCBvdGhlciBwb2xpY3ktcmVsYXRlZCBvcHRpb25zIGFyZSBoYW5kbGVkLCBzaW5jZSB0aGV5IGFyZSB2aXRhbCB0byBjb21wbGV0ZSB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB3aWxsIGJlIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBzaG91bGQgZ3VpZGUgbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFhGUk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgWEZSTVxuICAgNjpcdFx0Ym9vbFxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgWEZSTV9PRkZMT0FEXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFhGUk1fQUxHT1xuICAxNTpcdFx0dHJpc3RhdGVcbiAgMTY6XHRcdHNlbGVjdCBYRlJNXG4gIDE3Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDE4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFQURcbiAgMTk6XHRcdHNlbGVjdCBDUllQVE9fSEFTSFxuICAyMDpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICAyMTpcdFxuICAyMjpcdGlmIElORVRcbiAgMjM6XHRjb25maWcgWEZSTV9VU0VSXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4gIDI1Olx0XHRzZWxlY3QgWEZSTV9BTEdPXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAgMjg6XHRcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXHUwMDI2XHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcdTAwMjZcdTAwMjYgXFxcbiAgMzU6XHRcdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuICAzNjpcdFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzc6XHRcdGhlbHBcbiAgMzg6XHRcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXG4gIDM5Olx0XHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFhGUk1fSU5URVJGQUNFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVwmIzM0O1xuICA0NTpcdFx0ZGVwZW5kcyBvbiBYRlJNIFx1MDAyNlx1MDAyNiBJUFY2XG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgcHJvdmlkZXMgYSB2aXJ0dWFsIGludGVyZmFjZSB0byByb3V0ZSBJUHNlYyB0cmFmZmljLlxuICA0ODpcdFxuICA0OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1MDpcdFxuICA1MTpcdGNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbiAgNTI6XHRcdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4gIDUzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNTQ6XHRcdGhlbHBcbiAgNTU6XHRcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxuICA1NjpcdFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cbiAgNTc6XHRcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxuICA1ODpcdFxuICA1OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkzOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKlRyYWNpbmcgdGhlIFhGUk0gRGVwZW5kZW5jeSBUcmVlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgQ09ORklHX1hGUk1gIGdldHMgZW5hYmxlZCBpbiB0aGUga2VybmVsLiBDbGVhcmx5LCBpdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIG9wdGlvbjsgaXQmIzM5O3MgcHVsbGVkIGluIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBUaGUgbW9zdCBpbW1lZGlhdGUgcGF0aCBzZWVtcyB0byBiZSB0aHJvdWdoIGBYRlJNX0FMR09gLCB3aGljaCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIHRoaW5ncyBsaWtlIGBYRlJNX1VTRVJgIGFuZCBgTkVUX0tFWWAsIGFuZCBwb3RlbnRpYWxseSBkaXJlY3RseSBpbiB0aGUgSVBzZWMgb3IgSU5FVCBzdWJzeXN0ZW1zLgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IHRyZWUgYW5kIHNlZSBleGFjdGx5IHdoYXQgc2VsZWN0cyBYRlJNLiBXaGVyZSBhcmUgYWxsIHRoZSBkaWZmZXJlbnQgcGxhY2VzIHRoYXQgYXJlIHB1bGxpbmcgdGhpcyBpbj8gVW5kZXJzdGFuZGluZyB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgZW5hYmxpbmcgYENPTkZJR19YRlJNYCB3aWxsIHByb3ZpZGUgZGVlcGVyIGluc2lnaHRzIGludG8gdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBmZWF0dXJlcyBidWlsdCB1cG9uIHRoaXMgZm91bmRhdGlvbmFsIGJsb2NrLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgYWxsIHRoZSBzZWxlY3Rpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDctXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjQvS2NvbmZpZy0zMDktXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNTMtXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTE1LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6MTY6XHRzZWxlY3QgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy0xNy1cdHNlbGVjdCBDUllQVE9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDIKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUG9saWN5IExvb2t1cCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGluIHRoZSBYRlJNIHBvbGljeSBsb29rdXAgY29kZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHdvcnRoIHB1cnN1aW5nLiBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfWEZSTWAsIGBDT05GSUdfWEZSTV9VU0VSYCwgYW5kIGBDT05GSUdfSU5FVGAuIFRoZXNlLCBhbG9uZyB3aXRoIGBDT05GSUdfTkVUX0tFWWAsIGFyZSBhbGwga2V5IHRvIHVzZXItc3BhY2UgY29udHJvbCBhbmQgdGVzdGluZy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGFjdGl2ZS4KCk5leHQsIEkgemVyb2VkIGluIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBzcGVjaWZpY2FsbHkgY2hlY2tlZDogYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBgeGZybV9wb2xpY3lfbG9va3VwYCwgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AsIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AsIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgLCBhbmQgYF9feGZybV9wb2xpY3lfY2hlY2tgLiBJdCYjMzk7cyBnb29kIHRoYXQgbm9uZSBvZiB0aGVzZSBhcmUgZ2VuZXJpYywgbG93LWxldmVsIHN5c3RlbSBmdW5jdGlvbnMsIGJ1dCBhcmUgYWxsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIElQc2VjL1hGUk0gcG9saWN5IGhhbmRsaW5nLiBUaGF0IGZvY3VzZXMgdGhlIHNjb3BlLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB1c2Ugb2YgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AuIFRoZSBhZGRpdGlvbiBvZiB0aGUgc2VxY291bnQgdmVyaWZpY2F0aW9uIChgcmVhZF9zZXFjb3VudF9iZWdpbmAgYW5kIGByZWFkX3NlcWNvdW50X3JldHJ5YCkgc3Ryb25nbHkgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBjb25jdXJyZW50IGluZXhhY3QgcG9saWN5IGxvb2t1cHMgYW5kIHVwZGF0ZXMuIFRoYXQgc291bmRzIGxpa2UgYSBjb25jdXJyZW5jeSBidWcsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLgoKQ29uc2lkZXJpbmcgdGhlIGF0dGFjayBzdXJmYWNlLCB0aGlzIGlzIHByaW1lIGZ1enppbmcgdGVycml0b3J5LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb2RlIHRoYXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggbmV0d29yayB0cmFmZmljLCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIFBGX0tFWSBzb2NrZXRzLCBvciBwb3RlbnRpYWxseSBldmVuIHNvY2tldCBjYWxscyB0aGF0IHRyaWdnZXIgSVBzZWMgcG9saWN5IGV2YWx1YXRpb25zLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHJvdXRlIGludG8gdGhlIGtlcm5lbCBhbmQgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvci4KCkZpbmFsIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlnczogYFhGUk1gLCBgWEZSTV9VU0VSYCwgYElORVRgLi4uYWxsIGdvb2QuIFRpbWUgdG8gbW92ZSBmb3J3YXJkIGFuZCB0ZXN0LiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXAmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O19feGZybV9wb2xpY3lfY2hlY2smIzM0OywKICAgICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUgaW4gbmV0L3hmcm0veGZybV9wb2xpY3kuYyB0byBwcm90ZWN0IGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBldmFsdWF0aW9uIHdpdGggdGhlIGluZXhhY3QgYmluJiMzOTtzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXAmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O19feGZybV9wb2xpY3lfY2hlY2smIzM0OywKICAgICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUgaW4gbmV0L3hmcm0veGZybV9wb2xpY3kuYyB0byBwcm90ZWN0IGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBldmFsdWF0aW9uIHdpdGggdGhlIGluZXhhY3QgYmluJiMzOTtzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyAoYGJpbi1cdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cbi0gVGhlIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUgYGNhbmRgIGNvbnRpbnVlcyB0byBiZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KClgIGluIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygpYC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cblxuMi4gS0FTQU4gdnMgS01TQU46XG4tIENvbmN1cnJlbmN5IGlzc3VlcywgUkNVIGxpZmV0aW1lIGlzc3VlcywgYW5kIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNzgxNWVjZDQ5YjNkM2ExZWM5ZWQzOTQwN2ZjMGE3YmFmYzkxOWRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMDoxMzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDkzMmEzMTNiOTQ2MGEuLjVkNGU4NjM4NjNkZmUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjE1Nyw2ICYjNDM7MjE1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLAogCXN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYmluOwogCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0OwogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKJiM0MzsJdW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7CiAJdW5zaWduZWQgaW50IHNlcXVlbmNlOwogCWludCBlcnI7CiAKQEAgLTIxOTEsMTIgJiM0MzsyMTkyLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLAogCQlnb3RvIHNraXBfaW5leGFjdDsKIAogCWJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7Ci0JaWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKCZhbXA7Y2FuZCwgYmluLCBzYWRkciwKLQkJCQkJCQkgZGFkZHIpKQomIzQzOwlpZiAoIWJpbikKJiM0MzsJCWdvdG8gc2tpcF9pbmV4YWN0OwomIzQzOwomIzQzOwlpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO2Jpbi0mZ3Q7Y291bnQpOwomIzQzOwlpZiAoIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKCZhbXA7Y2FuZCwgYmluLCBzYWRkciwgZGFkZHIpKQogCQlnb3RvIHNraXBfaW5leGFjdDsKIAogCXBvbCA9IHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcygmYW1wO2NhbmQsIHJldCwgZmwsIHR5cGUsCiAJCQkJCSAgZmFtaWx5LCBpZl9pZCk7CiYjNDM7CWlmIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7YmluLSZndDtjb3VudCwgaW5leGFjdF9zZXF1ZW5jZSkpCiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwogCWlmIChwb2wpIHsKIAkJcmV0ID0gcG9sOwogCQlpZiAoSVNfRVJSKHBvbCkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG9saWN5IExvb2t1cCBDaGFuZ2UgaW4gWEZSTSoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgaGl0dGluZyBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHBvbGljeSBsb29rdXBzIGJhc2VkIG9uIHRoZWlyIHR5cGUgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdGhvcm91Z2hseSwgc28gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZS4KCk15IGZpcnN0IG1vdmUgaXMgdG8gdXNlIGByZWFkLWZpbGVgIChvciBwb3RlbnRpYWxseSBgZ3JlcHBlcmAgZGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5KSB0byBnZXQgYSBsb2NhbCBjb250ZXh0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMjE1NyB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgIC0gdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGFyZWEgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBCeSBleGFtaW5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGdhaW4gYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgZnVuY3Rpb24gaXMgdXNlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHBvbGljeSBsb29rdXAgbG9naWMgbG9va3MgbGlrZSwgYmVmb3JlIGV2ZW4gbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBUaGlzIGNvbnRleHR1YWwgYXdhcmVuZXNzIHdpbGwgYmUgY3JpdGljYWwgdG8gcXVpY2tseSBncmFzcCB0aGUgaW50ZW50aW9uIGFuZCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTUwOlx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4yMTUxOlx0XHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxuMjE1MjpcdFx0XHRcdFx0XHRcdCAgICAgdTE2IGZhbWlseSwgdTggZGlyLFxuMjE1MzpcdFx0XHRcdFx0XHRcdCAgICAgdTMyIGlmX2lkKVxuMjE1NDpcdHtcbjIxNTU6XHRcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbjIxNTY6XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgKnNhZGRyO1xuMjE1NzpcdFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiaW47XG4yMTU4Olx0XHRzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDtcbjIxNTk6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjtcbjIxNjA6XHRcdHVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlO1xuMjE2MTpcdFx0dW5zaWduZWQgaW50IHNlcXVlbmNlO1xuMjE2MjpcdFx0aW50IGVycjtcbjIxNjM6XHRcbjIxNjQ6XHRcdGRhZGRyID0geGZybV9mbG93aV9kYWRkcihmbCwgZmFtaWx5KTtcbjIxNjU6XHRcdHNhZGRyID0geGZybV9mbG93aV9zYWRkcihmbCwgZmFtaWx5KTtcbjIxNjY6XHRcdGlmICh1bmxpa2VseSghZGFkZHIgfHwgIXNhZGRyKSlcbjIxNjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMTY4Olx0XG4yMTY5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTcwOlx0IHJldHJ5OlxuMjE3MTpcdFx0ZG8ge1xuMjE3MjpcdFx0XHRzZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uKTtcbjIxNzM6XHRcdFx0Y2hhaW4gPSBwb2xpY3lfaGFzaF9kaXJlY3QobmV0LCBkYWRkciwgc2FkZHIsIGZhbWlseSwgZGlyKTtcbjIxNzQ6XHRcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpO1xuMjE3NTpcdFxuMjE3NjpcdFx0cmV0ID0gTlVMTDtcbjIxNzc6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb2wsIGNoYWluLCBieWRzdCkge1xuMjE3ODpcdFx0XHRlcnIgPSB4ZnJtX3BvbGljeV9tYXRjaChwb2wsIGZsLCB0eXBlLCBmYW1pbHksIGlmX2lkKTtcbjIxNzk6XHRcdFx0aWYgKGVycikge1xuMjE4MDpcdFx0XHRcdGlmIChlcnIgPT0gLUVTUkNIKVxuMjE4MTpcdFx0XHRcdFx0Y29udGludWU7XG4yMTgyOlx0XHRcdFx0ZWxzZSB7XG4yMTgzOlx0XHRcdFx0XHRyZXQgPSBFUlJfUFRSKGVycik7XG4yMTg0Olx0XHRcdFx0XHRnb3RvIGZhaWw7XG4yMTg1Olx0XHRcdFx0fVxuMjE4NjpcdFx0XHR9IGVsc2Uge1xuMjE4NzpcdFx0XHRcdHJldCA9IHBvbDtcbjIxODg6XHRcdFx0XHRicmVhaztcbjIxODk6XHRcdFx0fVxuMjE5MDpcdFx0fVxuMjE5MTpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0LVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxuMjE5MjpcdFx0XHRnb3RvIHNraXBfaW5leGFjdDtcbjIxOTM6XHRcbjIxOTQ6XHRcdGJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7XG4yMTk1Olx0XHRpZiAoIWJpbilcbjIxOTY6XHRcdFx0Z290byBza2lwX2luZXhhY3Q7XG4yMTk3Olx0XG4yMTk4Olx0XHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZiaW4tXHUwMDNlY291bnQpO1xuMjE5OTpcdFx0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXG4yMjAwOlx0XHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuMjIwMTpcdFxuMjIwMjpcdFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXG4yMjAzOlx0XHRcdFx0XHRcdCAgZmFtaWx5LCBpZl9pZCk7XG4yMjA0Olx0XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZiaW4tXHUwMDNlY291bnQsIGluZXhhY3Rfc2VxdWVuY2UpKVxuMjIwNTpcdFx0XHRnb3RvIHJldHJ5O1xuMjIwNjpcdFxuMjIwNzpcdFx0aWYgKHBvbCkge1xuMjIwODpcdFx0XHRyZXQgPSBwb2w7XG4yMjA5Olx0XHRcdGlmIChJU19FUlIocG9sKSlcbjIyMTA6XHRcdFx0XHRnb3RvIGZhaWw7XG4yMjExOlx0XHR9XG4yMjEyOlx0XG4yMjEzOlx0c2tpcF9pbmV4YWN0OlxuMjIxNDpcdFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpXG4yMjE1Olx0XHRcdGdvdG8gcmV0cnk7XG4yMjE2Olx0XG4yMjE3Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAheGZybV9wb2xfaG9sZF9yY3UocmV0KSlcbjIyMTg6XHRcdFx0Z290byByZXRyeTtcbjIyMTk6XHRmYWlsOlxuMjIyMDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMjIxOlx0XG4yMjIyOlx0XHRyZXR1cm4gcmV0O1xuMjIyMzpcdH1cbjIyMjQ6XHRcbjIyMjU6XHRzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuMjIyNjpcdFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxuMjIyNzpcdFx0XHRcdFx0XHQgICAgICB1MTYgZmFtaWx5LCB1OCBkaXIsIHUzMiBpZl9pZClcbjIyMjg6XHR7XG4yMjI5Olx0I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbW1pdDogQSBEZWVwZXIgRGl2ZSBpbnRvIFBvbGljeSBMb29rdXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAsIHdoZXJlIHdlJiMzOTtyZSBzZWVpbmcgdGhlIGFkZGl0aW9uIG9mIGEgc2VxbG9jay9zZXFjb3VudCBjaGVjayBzcGVjaWZpY2FsbHkgYXJvdW5kIGNhbGxzIHRvIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgLiBMb29raW5nIGF0IHRoZSBiZWZvcmUgYW5kIGFmdGVyIHNuaXBwZXRzLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgcmFjZSBjb25kaXRpb24uCgpCZWZvcmUsIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb29rdXA6IGZpbmQgdGhlICYjMzQ7YmluJiMzNDssIGNoZWNrIGlmIHdlIGV2ZW4gKmhhdmUqIGEgJiMzNDtiaW4mIzM0OywgYW5kIGlmIHNvLCBjYWxsIHRob3NlIGNhbmRpZGF0ZXMvZXZhbHVhdGUgZnVuY3Rpb25zLiBOb3csIHdlIHJlYWQgYGJpbi0mZ3Q7Y291bnRgLCBhbmQgaWYsIGFmdGVyIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLCB3ZSBmaW5kIHRoZSBzZXF1ZW5jZSBjb3VudCBoYXMgY2hhbmdlZCwgd2UgKnJldHJ5Ki4gVGhhdCYjMzk7cyB0aGUgZXNzZW5jZSBvZiBhIHJlYWQtY29weS11cGRhdGUgbWVjaGFuaXNtLCBvciBhdCBsZWFzdCBhIGZsYXZvciBvZiBpdC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB3aGF0IGlzIGBjYW5kYCwgd2hhdCBpcyBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgLCB3aGF0IGlzIGBiaW4tJmd0O2NvdW50YCBhY3R1YWxseSBwcm90ZWN0aW5nPyBJdOKAmXMgbm90IGVub3VnaCB0byBzZWUgYSBzZXF1ZW5jZSBjb3VudDsgd2UgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiBpcyBiZWluZyBndWFyZGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgd2hlcmUgSSBuZWVkIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzdGF0ZSBjaGFuZ2VzIG1pZ2h0IGludmFsaWRhdGUgdGhvc2UgY2FuZGlkYXRlcy4KClRpbWUgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBmaWxlIGl0c2VsZi4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzYCBhbmQgYHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlc2AgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTQ1PWVudW0geGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVfdHlwZSB7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNTMtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1NDpzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzIHtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTU1LVx0c3RydWN0IGhsaXN0X2hlYWQgKnJlc1tYRlJNX1BPTF9DQU5EX01BWF07XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMDU9c3RhdGljIGJvb2xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjA2Onhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNy1cdFx0XHRcdCAgICBzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmIsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNjQ1PXhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE2NTYtXHRpZiAoIWNoYWluKSB7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2NTc6XHRcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTY1OC1cdFx0aW50IGk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMDIxPXN0YXRpYyBib29sXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwMjI6eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAyMy1cdFx0XHRcdCAgICBzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmIsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMTI2PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKlxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTI3Onhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTI4LVx0XHRcdCAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnByZWZlcixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIxNTA9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTU0LXtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjE1NTpcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjE1Ni1cdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgKnNhZGRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgSW5leGFjdCBQb2xpY3kgTWF0Y2hpbmcgaW4gWEZSTSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIElQc2VjIHBvbGljeSBsb29rdXAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbF9pbmV4YWN0X2JpbmAgd29yayBpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlaXIgZGVmaW5pdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgc2NlbmFyaW9zIHdoZXJlIHRoZXJlIGlzbiYjMzk7dCBhICpwZXJmZWN0KiBwb2xpY3kgbWF0Y2ggYW5kIGhvdyBpdCBuYXJyb3dzIGRvd24gdGhlIGNhbmRpZGF0ZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlICYjMzk7aW5leGFjdCYjMzk7IGFzcGVjdCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWxseSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBwb2xpY3kgc2VsZWN0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBsb2dpYyBpbnZvbHZlZCBpbiBidWlsZGluZyB0aGUgJiMzNDtiaW5zJiMzNDsgb3IgY2FuZGlkYXRlIGxpc3RzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSB3YW50IHRvIGxvb2sgYXQgYWxsIG9mIHRoZSBmYWN0b3JzIHRoYXQgY2FuIGFmZmVjdCBob3cgdGhpcyB3b3JrcyBhdCB0aGlzIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMjA6XHRcbjIwMjE6XHRzdGF0aWMgYm9vbFxuMjAyMjpcdHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG4yMDIzOlx0XHRcdFx0XHQgICAgc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiLFxuMjAyNDpcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbjIwMjU6XHRcdFx0XHRcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIpXG4yMDI2Olx0e1xuMjAyNzpcdFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfbm9kZSAqbjtcbjIwMjg6XHRcdHUxNiBmYW1pbHk7XG4yMDI5Olx0XG4yMDMwOlx0XHRpZiAoIWIpXG4yMDMxOlx0XHRcdHJldHVybiBmYWxzZTtcbjIwMzI6XHRcbjIwMzM6XHRcdGZhbWlseSA9IGItXHUwMDNlay5mYW1pbHk7XG4yMDM0Olx0XHRtZW1zZXQoY2FuZCwgMCwgc2l6ZW9mKCpjYW5kKSk7XG4yMDM1Olx0XHRjYW5kLVx1MDAzZXJlc1tYRlJNX1BPTF9DQU5EX0FOWV0gPSBcdTAwMjZiLVx1MDAzZWhoZWFkO1xuMjAzNjpcdFxuMjAzNzpcdFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXHUwMDI2Yi1cdTAwM2Vyb290X2QsIFx1MDAyNmItXHUwMDNlY291bnQsIGRhZGRyLFxuMjAzODpcdFx0XHRcdFx0XHQgICAgZmFtaWx5KTtcbjIwMzk6XHRcdGlmIChuKSB7XG4yMDQwOlx0XHRcdGNhbmQtXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfREFERFJdID0gXHUwMDI2bi1cdTAwM2VoaGVhZDtcbjIwNDE6XHRcdFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXHUwMDI2bi1cdTAwM2Vyb290LCBcdTAwMjZiLVx1MDAzZWNvdW50LCBzYWRkcixcbjIwNDI6XHRcdFx0XHRcdFx0XHQgICAgZmFtaWx5KTtcbjIwNDM6XHRcdFx0aWYgKG4pXG4yMDQ0Olx0XHRcdFx0Y2FuZC1cdTAwM2VyZXNbWEZSTV9QT0xfQ0FORF9CT1RIXSA9IFx1MDAyNm4tXHUwMDNlaGhlYWQ7XG4yMDQ1Olx0XHR9XG4yMDQ2Olx0XG4yMDQ3Olx0XHRuID0geGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihcdTAwMjZiLVx1MDAzZXJvb3RfcywgXHUwMDI2Yi1cdTAwM2Vjb3VudCwgc2FkZHIsXG4yMDQ4Olx0XHRcdFx0XHRcdCAgICBmYW1pbHkpO1xuMjA0OTpcdFx0aWYgKG4pXG4yMDUwOlx0XHRcdGNhbmQtXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfU0FERFJdID0gXHUwMDI2bi1cdTAwM2VoaGVhZDtcbjIwNTE6XHRcbjIwNTI6XHRcdHJldHVybiB0cnVlO1xuMjA1MzpcdH1cbjIwNTQ6XHRcbjIwNTU6XHRzdGF0aWMgc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpcbjIwNTY6XHR4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3Uoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCB1MTYgZmFtaWx5LFxuMjA1NzpcdFx0XHRcdCAgICAgICB1OCBkaXIsIHUzMiBpZl9pZClcbjIwNTg6XHR7XG4yMDU5Olx0XHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9rZXkgayA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM5OQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWRkaW5nIGEgc2VxdWVuY2UgY291bnQgdmFsaWRhdGlvbiAoYGJpbi0mZ3Q7Y291bnRgKSBhcm91bmQgdGhlIGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBsb29rdXAgYW5kIGV2YWx1YXRpb24gcHJvY2Vzc2VzIHdpdGhpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSgpYC4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVuIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyAodXBkYXRlcywgcmVtb3ZhbHMsIGluc2VydGlvbnMpIG1vZGlmeSB0aGUgaW5leGFjdCBwb2xpY3kgdHJlZSB1bmRlciBSQ1UuCgpJJiMzOTt2ZSBnb3QgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZS4gTGV0JiMzOTtzIHNlZSBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZSB2YXJpYWJsZSBgY2FuZGAgaXMgY2xlYXJseSBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXQoY2FuZCwgMCwgc2l6ZW9mKCpjYW5kKSlgLiBUaGUgc2VxdWVuY2UgY291bnRlciBpdHNlbGYsIGBpbmV4YWN0X3NlcXVlbmNlYCwgaXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgZnJvbSBgcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO2Jpbi0mZ3Q7Y291bnQpYC4gVGhlcmUmIzM5O3Mgbm8gaW52b2x2ZW1lbnQgb2YgbmV3bHkgY3JlYXRlZCBidWZmZXJzIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU28sIG5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCBpbmZvIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgY29kZSByZS1ldmFsdWF0ZXMgdmFyaWFibGVzIG9uIGByZXRyeWAgYWZ0ZXIgY2hlY2tpbmcgdGhlIGBzZXFjb3VudGAsIHNvIG5vIHN0YWxlIHBvaW50ZXJzIG9yIGRhdGEgc2hvdWxkIGJlIHVzZWQuCgpOb3csIEtNU0FOIHZzLiBLQVNBTi4uLiBkb2VzIEtNU0FOIG9mZmVyIGFueSBzcGVjaWZpYyBhZHZhbnRhZ2VzIGhlcmU/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBTaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzLCBLTVNBTiBpcyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bCBoZXJlLiBLQVNBTiBpcyBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gUkNVLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIHVzYWdlLiBUaGlzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2sgaGVscHMgZ3VhcmQgYWdhaW5zdCB0aG9zZSBraW5kcyBvZiByYWNlIGNvbmRpdGlvbnMuCgpJbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggcHJpbWFyaWx5IHRhY2tsZXMgY29uY3VycmVuY3kgY29uY2VybnMgZHVyaW5nIHBvbGljeSBsb29rdXBzLiBJdCBlbnN1cmVzIGRhdGEgY29uc2lzdGVuY3kgdW5kZXIgUkNVLCBhbmQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IG1lbW9yeSBzYWZldHkgcHJvYmxlbXMgdGhpcyBjb2RlIG1pZ2h0IGhhdmUuIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBsb29raW5nIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlciBjaGVja3MgKGBiaW4tXHUwMDNlY291bnRgKSBhcm91bmQgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGxvb2t1cCBhbmQgZXZhbHVhdGlvbiAoYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzYCBhbmQgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2ApIGluIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKClgIHRvIGhhbmRsZSBjb25jdXJyZW50IHRyZWUgbW9kaWZpY2F0aW9ucyBwcm9wZXJseS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XG4tIFRoZSBsb2NhbCB2YXJpYWJsZSBgaW5leGFjdF9zZXF1ZW5jZWAgaXMgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgYnkgYHJlYWRfc2VxY291bnRfYmVnaW4oKWAuXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG5cbjIuIEtBU0FOIHZzIEtNU0FOOlxuLSBDb25jdXJyZW5jeSBpc3N1ZXMsIFJDVSBsaWZldGltZSBpc3N1ZXMsIGFuZCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyAoYGJpbi1cdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cbi0gVGhlIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUgYGNhbmRgIGNvbnRpbnVlcyB0byBiZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KClgIGluIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygpYC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cblxuMi4gS0FTQU4gdnMgS01TQU46XG4tIENvbmN1cnJlbmN5IGlzc3VlcywgUkNVIGxpZmV0aW1lIGlzc3VlcywgYW5kIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjE0LjQyMTQzNzYzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTQzMTA2OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVcIixcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cFwiLFxuICAgIFwieGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc1wiLFxuICAgIFwiX194ZnJtX3BvbGljeV9jaGVja1wiLFxuICAgIFwieGZybV9sb29rdXBfd2l0aF9pZmlkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVxcdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOOlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSBpbiBuZXQveGZybS94ZnJtX3BvbGljeS5jIHRvIHByb3RlY3QgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGV2YWx1YXRpb24gd2l0aCB0aGUgaW5leGFjdCBiaW4ncyBzZXFjb3VudCAocmV0cnlpbmcgb24gY29uY3VycmVudCBtb2RpZmljYXRpb24pLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBleGVyY2lzZWQgd2hlbmV2ZXIgSVBzZWMvWEZSTSBwb2xpY2llcyBhcmUgbG9va2VkIHVwIG9yIG1hdGNoZWQgYWdhaW5zdCBuZXR3b3JrIHRyYWZmaWMgYW5kIHNvY2tldCBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6MTQuNDIxNDQzNjkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgzNjM2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNzgxNWVjZDQ5YjNkM2ExZWM5ZWQzOTQwN2ZjMGE3YmFmYzkxOWRiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDA6MTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41ZDRlODYzODYzZGZlIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuQEAgLTIxNTcsNiArMjE1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxcbiBcXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcXG4gXFx0c3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpyZXQ7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjtcXG4rXFx0dW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7XFxuIFxcdHVuc2lnbmVkIGludCBzZXF1ZW5jZTtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTIxOTEsMTIgKzIxOTIsMTggQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXFxuIFxcdFxcdGdvdG8gc2tpcF9pbmV4YWN0O1xcbiBcXG4gXFx0YmluID0geGZybV9wb2xpY3lfaW5leGFjdF9sb29rdXBfcmN1KG5ldCwgdHlwZSwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG4tXFx0aWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFxcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgZGFkZHIpKVxcbitcXHRpZiAoIWJpbilcXG4rXFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuK1xcbitcXHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2YmluLVxcdTAwM2Vjb3VudCk7XFxuK1xcdGlmICgheGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoXFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsIGRhZGRyKSlcXG4gXFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuIFxcbiBcXHRwb2wgPSB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMoXFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZmFtaWx5LCBpZl9pZCk7XFxuK1xcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZiaW4tXFx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFxuIFxcdGlmIChwb2wpIHtcXG4gXFx0XFx0cmV0ID0gcG9sO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBvbCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjE0LjgzMDU0NjM1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk5NjM0MzUwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZVwiLFxuICAgIFwieGZybV9wb2xpY3lfbG9va3VwXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNcIixcbiAgICBcInhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzXCIsXG4gICAgXCJfX3hmcm1fcG9saWN5X2NoZWNrXCIsXG4gICAgXCJ4ZnJtX2xvb2t1cF93aXRoX2lmaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlIGluIG5ldC94ZnJtL3hmcm1fcG9saWN5LmMgdG8gcHJvdGVjdCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgZXZhbHVhdGlvbiB3aXRoIHRoZSBpbmV4YWN0IGJpbidzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI3ODE1ZWNkNDliM2QzYTFlYzllZDM5NDA3ZmMwYTdiYWZjOTE5ZGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjEzOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbmluZGV4IDkzMmEzMTNiOTQ2MGEuLjVkNGU4NjM4NjNkZmUgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5AQCAtMjE1Nyw2ICsyMTU3LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4gXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcbiBcdHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0O1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKmNoYWluO1xuK1x0dW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7XG4gXHR1bnNpZ25lZCBpbnQgc2VxdWVuY2U7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTIxOTEsMTIgKzIxOTIsMTggQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4gXHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuIFxuIFx0YmluID0geGZybV9wb2xpY3lfaW5leGFjdF9sb29rdXBfcmN1KG5ldCwgdHlwZSwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcbi1cdGlmICghYmluIHx8ICF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLFxuLVx0XHRcdFx0XHRcdFx0IGRhZGRyKSlcbitcdGlmICghYmluKVxuK1x0XHRnb3RvIHNraXBfaW5leGFjdDtcbitcbitcdGluZXhhY3Rfc2VxdWVuY2UgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmJpbi1cdTAwM2Vjb3VudCk7XG4rXHRpZiAoIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsIGRhZGRyKSlcbiBcdFx0Z290byBza2lwX2luZXhhY3Q7XG4gXG4gXHRwb2wgPSB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMoXHUwMDI2Y2FuZCwgcmV0LCBmbCwgdHlwZSxcbiBcdFx0XHRcdFx0ICBmYW1pbHksIGlmX2lkKTtcbitcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmJpbi1cdTAwM2Vjb3VudCwgaW5leGFjdF9zZXF1ZW5jZSkpXG4rXHRcdGdvdG8gcmV0cnk7XG4rXG4gXHRpZiAocG9sKSB7XG4gXHRcdHJldCA9IHBvbDtcbiBcdFx0aWYgKElTX0VSUihwb2wpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6MTQuODMwNTQ4MTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI3ODc0MTA5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyBhIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU29tZW9uZSB3YW50cyBtZSB0byBldmFsdWF0ZSBhIHBhdGNoIHRvIHNlZSBpZiBpdCdzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBpcyB0eXBpY2FsLiBUaGUgZGlmZiBmb2N1c2VzIG9uIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgZnVuY3Rpb24uIExvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYHJlYWRfc2VxY291bnRfYmVnaW5gIGFuZCBgcmVhZF9zZXFjb3VudF9yZXRyeWAgZm9yIGluZXhhY3QgcG9saWN5IGxvb2t1cHMuIElmIGEgcmV0cnkgaXMgbmVlZGVkLCBpdCBqdW1wcyB0byB0aGUgYHJldHJ5YCBsYWJlbC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYSByZWFkLWNvcHktdXBkYXRlLWxpa2UgY29uc3RydWN0LCBwb3NzaWJseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVudCBhY2Nlc3MgaXNzdWUuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgYWJvdmUgYm9hcmQuIFN0YW5kYXJkIGRldi9RQS9kZWZlbnNlIGFjdGl2aXR5IOKAkyBldmFsdWF0aW5nIHBhdGNoZXMsIGlkZW50aWZ5aW5nIGludGVyZXN0aW5nIHN5bWJvbHMsIGNvbmZpZ3MgZm9yIHN5emthbGxlcuKApiB0aGF0J3MgYWxsIGJlbmlnbi4gTm8gd29ycmllcyB0aGVyZS4gSSdtIG5vdCBnZW5lcmF0aW5nIGV4cGxvaXRzIG9yIGRlYWxpbmcgd2l0aCBhbnl0aGluZyBtYWxpY2lvdXMuXG5cblRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhlIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjb2RlLCBhbmQgd2hhdCB0aGUgYHJlYWRfc2VxY291bnRgIG9wZXJhdGlvbnMgYXJlIHByb3RlY3RpbmcuIE9uY2UgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMsIEkgY2FuIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlci4gSXMgaXQgbGlrZWx5IHRvIGV4cG9zZSBuZXcgY29kZSBwYXRocywgYW5kIHBvdGVudGlhbGx5IG5ldyB2dWxuZXJhYmlsaXRpZXMsIG9yIGlzIGl0IHRvbyBuYXJyb3cgaW4gc2NvcGU/IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVjaWRpbmcgd2hldGhlciB3ZSBuZWVkIHRvIGJyaW5nIG91dCB0aGUgaGVhdnkgYXJ0aWxsZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTUwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6MjcuNjE3OTYyNzE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1NSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE1NTpcXHRcXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzIGNhbmQ7XFxuMjE1NjpcXHRcXHRjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsICpzYWRkcjtcXG4yMTU3OlxcdFxcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYmluO1xcbjIxNTg6XFx0XFx0c3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpyZXQ7XFxuMjE1OTpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47XFxuMjE2MDpcXHRcXHR1bnNpZ25lZCBpbnQgaW5leGFjdF9zZXF1ZW5jZTtcXG4yMTYxOlxcdFxcdHVuc2lnbmVkIGludCBzZXF1ZW5jZTtcXG4yMTYyOlxcdFxcdGludCBlcnI7XFxuMjE2MzpcXHRcXG4yMTY0OlxcdFxcdGRhZGRyID0geGZybV9mbG93aV9kYWRkcihmbCwgZmFtaWx5KTtcXG4yMTY1OlxcdFxcdHNhZGRyID0geGZybV9mbG93aV9zYWRkcihmbCwgZmFtaWx5KTtcXG4yMTY2OlxcdFxcdGlmICh1bmxpa2VseSghZGFkZHIgfHwgIXNhZGRyKSlcXG4yMTY3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjIxNjg6XFx0XFxuMjE2OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE3MDpcXHQgcmV0cnk6XFxuMjE3MTpcXHRcXHRkbyB7XFxuMjE3MjpcXHRcXHRcXHRzZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9oYXNoX2dlbmVyYXRpb24pO1xcbjIxNzM6XFx0XFx0XFx0Y2hhaW4gPSBwb2xpY3lfaGFzaF9kaXJlY3QobmV0LCBkYWRkciwgc2FkZHIsIGZhbWlseSwgZGlyKTtcXG4yMTc0OlxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9oYXNoX2dlbmVyYXRpb24sIHNlcXVlbmNlKSk7XFxuMjE3NTpcXHRcXG4yMTc2OlxcdFxcdHJldCA9IE5VTEw7XFxuMjE3NzpcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9sLCBjaGFpbiwgYnlkc3QpIHtcXG4yMTc4OlxcdFxcdFxcdGVyciA9IHhmcm1fcG9saWN5X21hdGNoKHBvbCwgZmwsIHR5cGUsIGZhbWlseSwgaWZfaWQpO1xcbjIxNzk6XFx0XFx0XFx0aWYgKGVycikge1xcbjIxODA6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRVNSQ0gpXFxuMjE4MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMTgyOlxcdFxcdFxcdFxcdGVsc2Uge1xcbjIxODM6XFx0XFx0XFx0XFx0XFx0cmV0ID0gRVJSX1BUUihlcnIpO1xcbjIxODQ6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxODU6XFx0XFx0XFx0XFx0fVxcbjIxODY6XFx0XFx0XFx0fSBlbHNlIHtcXG4yMTg3OlxcdFxcdFxcdFxcdHJldCA9IHBvbDtcXG4yMTg4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxODk6XFx0XFx0XFx0fVxcbjIxOTA6XFx0XFx0fVxcbjIxOTE6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQtXFx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxcbjIxOTI6XFx0XFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdGJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7XFxuMjE5NTpcXHRcXHRpZiAoIWJpbilcXG4yMTk2OlxcdFxcdFxcdGdvdG8gc2tpcF9pbmV4YWN0O1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2YmluLVxcdTAwM2Vjb3VudCk7XFxuMjE5OTpcXHRcXHRpZiAoIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFxcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXFxuMjIwMDpcXHRcXHRcXHRnb3RvIHNraXBfaW5leGFjdDtcXG4yMjAxOlxcdFxcbjIyMDI6XFx0XFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFxcdTAwMjZjYW5kLCByZXQsIGZsLCB0eXBlLFxcbjIyMDM6XFx0XFx0XFx0XFx0XFx0XFx0ICBmYW1pbHksIGlmX2lkKTtcXG4yMjA0OlxcdFxcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZiaW4tXFx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcXG4yMjA1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjIwNjpcXHRcXG4yMjA3OlxcdFxcdGlmIChwb2wpIHtcXG4yMjA4OlxcdFxcdFxcdHJldCA9IHBvbDtcXG4yMjA5OlxcdFxcdFxcdGlmIChJU19FUlIocG9sKSlcXG4yMjEwOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMjExOlxcdFxcdH1cXG4yMjEyOlxcdFxcbjIyMTM6XFx0c2tpcF9pbmV4YWN0OlxcbjIyMTQ6XFx0XFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9oYXNoX2dlbmVyYXRpb24sIHNlcXVlbmNlKSlcXG4yMjE1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjIxNjpcXHRcXG4yMjE3OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIXhmcm1fcG9sX2hvbGRfcmN1KHJldCkpXFxuMjIxODpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjIyMTk6XFx0ZmFpbDpcXG4yMjIwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIyMjE6XFx0XFxuMjIyMjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMjM6XFx0fVxcbjIyMjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjI3LjYxODE2NTU3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMTQ4OTc1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AuIFRoYXQgcGxhY2VzIHVzIHNxdWFyZWx5IHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHRoZSBoZWFydCBvZiBJUHNlYyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgSSBrbm93IHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCwgYWNjZXNzaWJsZSB2aWEgc29ja2V0cywgbmV0bGluayAoc3BlY2lmaWNhbGx5IHRoZSB4ZnJtIG5ldGxpbmsgaW50ZXJmYWNlLCBhbmQgUEZfS0VZKSwgYW5kIGV2ZW4gc3RhbmRhcmQgSVAgdHJhZmZpYyB0aGF0IHRyaWdnZXJzIHBvbGljeSBsb29rdXBzLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeS5cblxuV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHNlcXVlbmNlIGNvdW50IGxvY2tpbmcgYW5kIHJldHJ5IGxvZ2ljICpkdXJpbmcqIGFuIGluZXhhY3QgcG9saWN5IGxvb2t1cC4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQg4oCTIHRoaXMgaXNuJ3QganVzdCBzb21lIGlzb2xhdGVkIGZ1bmN0aW9uOyBpdCdzIGludHJpY2F0ZWx5IGludm9sdmVkIGluIHRoZSBwcm9jZXNzIG9mIG1ha2luZyBwb2xpY3kgZGVjaXNpb25zLiBJdCdzIGFjdGl2ZWx5IGV4ZWN1dGVkIGNvZGUsIHJlYWNoYWJsZSB0aHJvdWdoIHZhcmlvdXMgbmV0d29yayBwYXRocy4gVGhlcmVmb3JlLCB0aGUgcHJvYmFiaWxpdHkgb2YgcmVhY2hpbmcgdGhpcyBjb2RlIHBhdGggd2l0aCBjcmFmdGVkIGlucHV0IGlzIGhpZ2guXG5cblNvLCAqV29ydGhGdXp6aW5nKiBpcyBkZWZpbml0ZWx5IGB0cnVlYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcG9saWN5IG1vZHVsZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgcG9saWNpZXMgYXJlIG1hbmlwdWxhdGVkLCBob3cgdGhleSdyZSBsb29rZWQgdXAsIGFuZCB3aGF0IHBvdGVudGlhbCB0cmlnZ2VycyBleGlzdC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgcG9pbnRzIHRvIGluc2VydCBmdXp6aW5nIHZlY3RvcnMuIFdlIG5lZWQgdG8gZmluZCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgdG8gY3JhZnQgZWZmZWN0aXZlIGZ1enppbmcgaGFybmVzc2VzLiBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMwLjgzMzA2NTE0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU0MTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jPTIxMjc9eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIxNDktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTUwOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjE1MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyMjU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzMS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzI6XFx0cG9sID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIFhGUk1fUE9MSUNZX1RZUEVfU1VCLCBmbCwgZmFtaWx5LFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzMy1cXHRcXHRcXHRcXHRcXHRkaXIsIGlmX2lkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzNi0jZW5kaWZcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzc6XFx0cmV0dXJuIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUobmV0LCBYRlJNX1BPTElDWV9UWVBFX01BSU4sIGZsLCBmYW1pbHksXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM4LVxcdFxcdFxcdFxcdFxcdCBkaXIsIGlmX2lkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjgxMT1zdGF0aWMgaW50IHhmcm1fZXhwYW5kX3BvbGljaWVzKGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsIHUxNiBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzEtXFx0ICAgIHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyODMyOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHhwX25ldChwb2xzWzBdKSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzY3Nz1pbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3ODItXFx0aWYgKHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzgzOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsLCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MjktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTMwOlxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUobmV0LCB0eXBlLCBcXHUwMDI2ZmwsIHNlbC1cXHUwMDNlZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MzEtXFx0aWYgKElTX0VSUl9PUl9OVUxMKHBvbCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMwLjg4MjYxMTMxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjI0NDI5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFBvbGljeSBMb29rdXAgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLCBhbmQgaXQncyBsb29raW5nIGxpa2UgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIEkgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU2luY2UgaXQncyBzdGF0aWMsIEkga25vdyBJIHdvbid0IGZpbmQgaXQgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGF0IGZpbGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUsIGFuZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBgbmV0L3hmcm0vYCBkaXJlY3RvcnksIHRoYXQgbWlnaHQgaW5kaXJlY3RseSB1dGlsaXplIHRoaXMgbG9va3VwIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgcG9saWN5IHJldHJpZXZhbC4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBnbG9iYWwgc3ltYm9scz9cblxuVGhlbiwgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGNhbGxlcnMgb2YgYHhmcm1fcG9saWN5X2xvb2t1cGAgaW4gZ2VuZXJhbC4gU2VlaW5nIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCBwb2xpY3kgbG9va3VwIGxvZ2ljIGFuZCByZXZlYWwgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYC4gSSBzdXNwZWN0IHRoZSBhbnN3ZXIgaXMgc29tZXdoZXJlIGluIHRoZSBicm9hZGVyIHBvbGljeSBoYW5kbGluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGNhbGxlcnMgYW5kIGZvbGxvdyB0aGUgdHJhaWwgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMzLjMwNTA1NzEzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgzMjM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3BvbGljeV9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jPTE5NjQ9c3RhdGljIGludCB4ZnJtX3BvbGljeV9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk3OS1cXHRpZiAobWF0Y2gpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTgwOlxcdFxcdHJldCA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChwb2wtXFx1MDAzZXNlY3VyaXR5LCBmbC1cXHUwMDNlZmxvd2lfc2VjaWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk4MS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTg0PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9ub2RlICpcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5ODU6eGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqcixcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5ODYtXFx0XFx0XFx0XFx0c2VxY291bnRfc3BpbmxvY2tfdCAqY291bnQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIwMjI9eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAzNi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwMzc6XFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXFx1MDAyNmItXFx1MDAzZXJvb3RfZCwgXFx1MDAyNmItXFx1MDAzZWNvdW50LCBkYWRkcixcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwMzgtXFx0XFx0XFx0XFx0XFx0ICAgIGZhbWlseSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDAtXFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfREFERFJdID0gXFx1MDAyNm4tXFx1MDAzZWhoZWFkO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjA0MTpcXHRcXHRuID0geGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihcXHUwMDI2bi1cXHUwMDNlcm9vdCwgXFx1MDAyNmItXFx1MDAzZWNvdW50LCBzYWRkcixcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbWlseSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDYtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMDQ3OlxcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFxcdTAwMjZiLVxcdTAwM2Vyb290X3MsIFxcdTAwMjZiLVxcdTAwM2Vjb3VudCwgc2FkZHIsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQ4LVxcdFxcdFxcdFxcdFxcdCAgICBmYW1pbHkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMTI3PXhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTQ5LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjE1MDpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIxNTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjI0LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIyNTpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIyNi1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjMxLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzMjpcXHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9TVUIsIGZsLCBmYW1pbHksXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjMzLVxcdFxcdFxcdFxcdFxcdGRpciwgaWZfaWQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM2LSNlbmRpZlxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzNzpcXHRyZXR1cm4geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIFhGUk1fUE9MSUNZX1RZUEVfTUFJTiwgZmwsIGZhbWlseSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzgtXFx0XFx0XFx0XFx0XFx0IGRpciwgaWZfaWQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMjQxPXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNjUtXFx0XFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjI2NjpcXHRcXHRcXHRlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLVxcdTAwM2VzZWN1cml0eSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmwtXFx1MDAzZWZsb3dpX3NlY2lkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjgxMT1zdGF0aWMgaW50IHhmcm1fZXhwYW5kX3BvbGljaWVzKGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsIHUxNiBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzEtXFx0ICAgIHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyODMyOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHhwX25ldChwb2xzWzBdKSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzA4NT1zdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2J1bmRsZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMDk2LVxcdG51bV9wb2xzID0gMTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMwOTc6XFx0cG9sc1swXSA9IHhmcm1fcG9saWN5X2xvb2t1cChuZXQsIGZsLCBmYW1pbHksIGRpciwgaWZfaWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzA5OC1cXHRlcnIgPSB4ZnJtX2V4cGFuZF9wb2xpY2llcyhmbCwgZmFtaWx5LCBwb2xzLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjI2PXhmcm1fcG9saWN5ICp4ZnJtX2luX2Z3ZF9pY21wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MzgtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNjM5OlxcdFxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cChuZXQsIFxcdTAwMjZmbDEsIGZhbWlseSwgWEZSTV9QT0xJQ1lfRldELCBpZl9pZCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNjQwLVxcdFxcdGlmIChJU19FUlIocG9sKSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzY3Nz1pbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3NDgtXFx0aWYgKCFwb2wpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzQ5OlxcdFxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cChuZXQsIFxcdTAwMjZmbCwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3NTAtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3ODItXFx0aWYgKHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzgzOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsLCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MjktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTMwOlxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUobmV0LCB0eXBlLCBcXHUwMDI2ZmwsIHNlbC1cXHUwMDNlZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MzEtXFx0aWYgKElTX0VSUl9PUl9OVUxMKHBvbCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMzLjM3Njg5NTcxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDA1MjUyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHhmcm1fYnVuZGxlX2xvb2t1cGAgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkgYXJvdW5kIGB4ZnJtX2J1bmRsZV9sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgY2FsbGluZyBpdCwgb3IsIG1vcmUgYnJvYWRseSwgd2hpY2ggZnVuY3Rpb25zIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBhcmUgZW50cnkgcG9pbnRzIG9yIGV4cG9ydGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCAtIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIHdpdGhpbiB0aGUgcG9saWN5IG1vZHVsZSwgaXQnbGwgcHJvdmlkZSBhIG5pY2UgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjM1LjUxNzQyNDA1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNTk1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9Mjc2PXN0cnVjdCBkc3RfZW50cnkgKl9feGZybV9kc3RfbG9va3VwKGludCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI5MS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyOTI6RVhQT1JUX1NZTUJPTChfX3hmcm1fZHN0X2xvb2t1cCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yOTMtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQzMT1zdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTEtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDUyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYWxsb2MpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDUzLVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjQ9dm9pZCB4ZnJtX3BvbGljeV9kZXN0cm95KHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzMtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDc0OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfZGVzdHJveSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzUtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTcxNT12b2lkIHhmcm1fc3BkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc3BkaW5mbyAqc2kpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo3MjY6RVhQT1JUX1NZTUJPTCh4ZnJtX3NwZF9nZXRpbmZvKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNy1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTM5OT12b2lkIHhmcm1fcG9saWN5X2hhc2hfcmVidWlsZChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0MDItfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTQwMzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2hhc2hfcmVidWlsZCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNDA0LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTcyPWludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNjE5LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2MjA6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9pbnNlcnQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYyMS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTY0NT14ZnJtX3BvbGljeV9ieXNlbF9jdHgoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1MzIgaWZfaWQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3MTEtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTcxMjpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2J5c2VsX2N0eCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzEzLVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNzE1PXhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1MzIgaWZfaWQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NTEtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTc1MjpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2J5aWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTc1My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTgxMj1pbnQgeGZybV9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCBib29sIHRhc2tfdmFsaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NDgtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2ZsdXNoKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NTAtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODUxPWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODg4LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE4ODk6RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9wb2xpY3lfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTg5MC1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE4OTE9aW50IHhmcm1fcG9saWN5X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTkzNi19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTM3OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfd2Fsayk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTM4LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTkzOT12b2lkIHhmcm1fcG9saWN5X3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqd2FsaywgdTggdHlwZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk0NS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTQ2OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfd2Fsa19pbml0KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NDctXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTQ4PXZvaWQgeGZybV9wb2xpY3lfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NTYtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTk1NzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGtfZG9uZSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTU4LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzY1PWludCB4ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNzctfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjM3ODpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2RlbGV0ZSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzc5LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMTczPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMjUtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMyNjpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwX3dpdGhfaWZpZCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI3LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMzMzPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMzgtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMzOTpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzNDAtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTMzNDQ9c3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzM1OS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozMzYwOkVYUE9SVF9TWU1CT0woeGZybV9sb29rdXBfcm91dGUpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzM2MS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzUwMz1pbnQgX194ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzUzOC19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNTM5OkVYUE9SVF9TWU1CT0woX194ZnJtX2RlY29kZV9zZXNzaW9uKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM1NDAtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zODc2LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM4Nzc6RVhQT1JUX1NZTUJPTChfX3hmcm1fcG9saWN5X2NoZWNrKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4NzgtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zODc5PWludCBfX3hmcm1fcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5MTQtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzkxNTpFWFBPUlRfU1lNQk9MKF9feGZybV9yb3V0ZV9mb3J3YXJkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5MTYtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM5NTM9dm9pZCB4ZnJtX2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zOTYwLX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM5NjE6RVhQT1JUX1NZTUJPTCh4ZnJtX2RzdF9pZmRvd24pO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzk2Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDExOD1pbnQgeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbywgaW50IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE1MS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTUyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxNTMtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MTU0PXZvaWQgeGZybV9wb2xpY3lfdW5yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTcyLX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxNzM6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTc0LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDE3NT12b2lkIHhmcm1faWZfcmVnaXN0ZXJfY2IoY29uc3Qgc3RydWN0IHhmcm1faWZfY2IgKmlmY2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxODAtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE4MTpFWFBPUlRfU1lNQk9MKHhmcm1faWZfcmVnaXN0ZXJfY2IpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE4Mi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxODM9dm9pZCB4ZnJtX2lmX3VucmVnaXN0ZXJfY2Iodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE4Ny19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTg4OkVYUE9SVF9TWU1CT0woeGZybV9pZl91bnJlZ2lzdGVyX2NiKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxODktXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0NjQ9dm9pZCB4ZnJtX2F1ZGl0X3BvbGljeV9hZGQoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IHJlc3VsdCwgYm9vbCB0YXNrX3ZhbGlkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDc1LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0NzY6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hdWRpdF9wb2xpY3lfYWRkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0NzctXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDc4PXZvaWQgeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCByZXN1bHQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTAtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQ5MTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQ5Mi0jZW5kaWZcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDY2Mz1pbnQgeGZybV9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDc0NC19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NzQ1OkVYUE9SVF9TWU1CT0woeGZybV9taWdyYXRlKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ3NDYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjM1LjU2NjQ4OTM0OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDY3Mjg2MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCBpbiB0aGUgWEZSTSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIHRoZSBzeW1ib2wgKnNob3VsZCogYmUgcHJlc2VudCB1bmxlc3MgaXQncyBpbmxpbmVkLiBCdXQgd2FpdCwgaXQncyBjYWxsZWQgYnkgYSBidW5jaCBvZiBmdW5jdGlvbnM6IGB4ZnJtX3BvbGljeV9sb29rdXBgLCBgeGZybV9leHBhbmRfcG9saWNpZXNgLCBgX194ZnJtX3BvbGljeV9jaGVja2AsIGFuZCBgeGZybV9taWdyYXRlX3BvbGljeV9maW5kYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQgbWUgY29uZmlybS4gQSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgbGluZSAyMTUwOiAgYHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoLi4uKWAuLi4gWWVwLCBpdCdzICpub3QqIGlubGluZWQuIFdoaWNoIG1lYW5zIHRoZSBzeW1ib2wgc2hvdWxkIGRlZmluaXRlbHkgYmUgdmlzaWJsZS5cblxuVG8gYmUgdGhvcm91Z2gsIGxldCdzIGFsc28gc3BlY2lmaWNhbGx5IHZlcmlmeSBhIGZldyByZWxhdGVkIHN5bWJvbHMgdG8gc2VlIGlmIHNvbWV0aGluZyBpcyBnb2luZyBvbiB3aXRoIHRoZW06IGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCwgYHhmcm1fcG9saWN5X2xvb2t1cGAsIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgLCBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYW5kIGBfX3hmcm1fcG9saWN5X2NoZWNrYC5cblxuTmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCAob3IgcGVyaGFwcyBgbmV0L0tjb25maWdgIGlmIGl0J3MgaW5jbHVkZWQgdGhlcmUpLiBHb3R0YSBlbnN1cmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGVuYWJsZWQuIEFuZCBvZiBjb3Vyc2UsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgYmVpbmcgYnVpbHQgY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQwLjYzMzc3OTY3NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3NDE1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9wb2xpY3lcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xMj1lbmRpZlxcbm5ldC94ZnJtL01ha2VmaWxlLTEzLVxcbm5ldC94ZnJtL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTUtXFx0XFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxMzo0MC43MDg1MzA5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYyNzU1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBYRlJNKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBDT05GSUdfWEZSTWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYG5ldC9LY29uZmlnYCBmaXJzdC4gSWYgaXQncyBub3QgdGhlcmUsIHdoaWNoIGlzIGEgcG9zc2liaWxpdHkgZ2l2ZW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBjb2RlLCB0aGVuIGl0J3MgYWxtb3N0IGNlcnRhaW5seSB3aXRoaW4gdGhlIG1vcmUgc3BlY2lmaWMgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBsb29rIGluIGJvdGggcGxhY2VzIHRvIGJlIHN1cmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgdG8gbG9jYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IHN1YmRpcmVjdG9yeSwgc28gdGhpcyBpcyBhIHNlbnNpYmxlIGZpcnN0IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQyLjY3MTI4OTQyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3NzIxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NDIuNzQ1MDY2NTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI1Mjc1NjA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIFhGUk0sIHBhcnRpY3VsYXJseSB3aGF0IGZsaXBzIHRob3NlIGNydWNpYWwgc3dpdGNoZXMuIE15IGJyYWluIGlzIGFscmVhZHkgaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0J3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zIHdpdGggZW5hYmxpbmcgWEZSTSBhbmQgaXRzIHZhcmlvdXMgY29tcG9uZW50cy4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcyBvbiBgWEZSTWAgaXRzZWxmLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIHVzZXItc3BhY2Ugc3VwcG9ydCAoYFhGUk1fVVNFUmApLiBUaGVuLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYWxsIHRoZSBkaWZmZXJlbnQgSVBzZWMgdHJhbnNmb3JtIG1vZGVzOiBgSU5FVF9YRlJNX01PREVfKmAuIFRoZSBFU1AgYW5kIEFIIHByb3RvY29scyAoYElORVRfRVNQYCBhbmQgYElORVRfQUhgKSBhcmUsIG9mIGNvdXJzZSwgY3JpdGljYWwgcGllY2VzIG9mIHRoYXQsIHNvIEknbGwgc2VlIGhvdyB0aG9zZSBsaW5rIGluLiBGaW5hbGx5LCBJJ2xsIGFsc28gY2hlY2sgaG93IGBYRlJNX1NVQl9QT0xJQ1lgLCBhbmQgb3RoZXIgcG9saWN5LXJlbGF0ZWQgb3B0aW9ucyBhcmUgaGFuZGxlZCwgc2luY2UgdGhleSBhcmUgdml0YWwgdG8gY29tcGxldGUgdGhlIHdob2xlIHBpY3R1cmUuIEknbSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB3aWxsIGJlIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBzaG91bGQgZ3VpZGUgbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NDYuOTk3ODI1MjAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgWEZSTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgWEZSTVxcbiAgIDY6XFx0XFx0Ym9vbFxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuICAgOTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgWEZSTV9BTEdPXFxuICAxNTpcXHRcXHR0cmlzdGF0ZVxcbiAgMTY6XFx0XFx0c2VsZWN0IFhGUk1cXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDE4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVBRFxcbiAgMTk6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuICAyMTpcXHRcXG4gIDIyOlxcdGlmIElORVRcXG4gIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG4gIDMzOlxcdFxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXFx1MDAyNlxcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDM1OlxcdFxcdFxcdEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4gIDM2OlxcdFxcdHNlbGVjdCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBJUHNlY1xcbiAgMzk6XFx0XFx0ICB1c2VkIGJ5IGNvbXBhdGlibGUgTGludXggYXBwbGljYXRpb25zLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBYRlJNX0lOVEVSRkFDRVxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElQVjZcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBwcm92aWRlcyBhIHZpcnR1YWwgaW50ZXJmYWNlIHRvIHJvdXRlIElQc2VjIHRyYWZmaWMuXFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDUwOlxcdFxcbiAgNTE6XFx0Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbiAgNTI6XFx0XFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNXFxuICA1NDpcXHRcXHRoZWxwXFxuICA1NTpcXHRcXHQgIFN1cHBvcnQgc3ViIHBvbGljeSBmb3IgZGV2ZWxvcGVycy4gQnkgdXNpbmcgc3ViIHBvbGljeSB3aXRoIG1haW5cXG4gIDU2OlxcdFxcdCAgb25lLCB0d28gcG9saWNpZXMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIHNhbWUgcGFja2V0IGF0IG9uY2UuXFxuICA1NzpcXHRcXHQgIFBvbGljeSB3aGljaCBsaXZlcyBzaG9ydGVyIHRpbWUgaW4ga2VybmVsIHNob3VsZCBiZSBhIHN1Yi5cXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQ2Ljk5NzkwNzczM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDIwMDAxNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgdGhlIFhGUk0gRGVwZW5kZW5jeSBUcmVlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYENPTkZJR19YRlJNYCBnZXRzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gQ2xlYXJseSwgaXQncyBub3QgYSBzdGFuZGFsb25lIG9wdGlvbjsgaXQncyBwdWxsZWQgaW4gYnkgb3RoZXIgY29uZmlndXJhdGlvbnMuIFRoZSBtb3N0IGltbWVkaWF0ZSBwYXRoIHNlZW1zIHRvIGJlIHRocm91Z2ggYFhGUk1fQUxHT2AsIHdoaWNoIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gdGhpbmdzIGxpa2UgYFhGUk1fVVNFUmAgYW5kIGBORVRfS0VZYCwgYW5kIHBvdGVudGlhbGx5IGRpcmVjdGx5IGluIHRoZSBJUHNlYyBvciBJTkVUIHN1YnN5c3RlbXMuXG5cblJpZ2h0LCBzbyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIEkgbmVlZCB0byB0cmFjZSB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSB0cmVlIGFuZCBzZWUgZXhhY3RseSB3aGF0IHNlbGVjdHMgWEZSTS4gV2hlcmUgYXJlIGFsbCB0aGUgZGlmZmVyZW50IHBsYWNlcyB0aGF0IGFyZSBwdWxsaW5nIHRoaXMgaW4/IFVuZGVyc3RhbmRpbmcgdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGVuYWJsaW5nIGBDT05GSUdfWEZSTWAgd2lsbCBwcm92aWRlIGRlZXBlciBpbnNpZ2h0cyBpbnRvIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBmZWF0dXJlcyBidWlsdCB1cG9uIHRoaXMgZm91bmRhdGlvbmFsIGJsb2NrLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCBhbGwgdGhlIHNlbGVjdGlvbiBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MzgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQ5LjQxNzkxMTk3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NzQ1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhGUk1cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzA3LVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2NC9LY29uZmlnLTMwOS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTExMj1jb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbm5ldC9pcHY2L0tjb25maWc6MTE0OlxcdHNlbGVjdCBYRlJNXFxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1My1cXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTU0OlxcdHNlbGVjdCBYRlJNXFxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6MTY6XFx0c2VsZWN0IFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTE3LVxcdHNlbGVjdCBDUllQVE9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NDkuNDk0ODk0NTUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMTg5OTgyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEZSTSBQb2xpY3kgTG9va3VwIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGluIHRoZSBYRlJNIHBvbGljeSBsb29rdXAgY29kZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3Mgd29ydGggcHVyc3VpbmcuIEkndmUgcGlucG9pbnRlZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgQ09ORklHX1hGUk1gLCBgQ09ORklHX1hGUk1fVVNFUmAsIGFuZCBgQ09ORklHX0lORVRgLiBUaGVzZSwgYWxvbmcgd2l0aCBgQ09ORklHX05FVF9LRVlgLCBhcmUgYWxsIGtleSB0byB1c2VyLXNwYWNlIGNvbnRyb2wgYW5kIHRlc3RpbmcuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGFjdGl2ZS5cblxuTmV4dCwgSSB6ZXJvZWQgaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNwZWNpZmljYWxseSBjaGVja2VkOiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAsIGB4ZnJtX3BvbGljeV9sb29rdXBgLCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCwgYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzYCwgYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGFuZCBgX194ZnJtX3BvbGljeV9jaGVja2AuIEl0J3MgZ29vZCB0aGF0IG5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyaWMsIGxvdy1sZXZlbCBzeXN0ZW0gZnVuY3Rpb25zLCBidXQgYXJlIGFsbCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBJUHNlYy9YRlJNIHBvbGljeSBoYW5kbGluZy4gVGhhdCBmb2N1c2VzIHRoZSBzY29wZS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB1c2Ugb2YgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AuIFRoZSBhZGRpdGlvbiBvZiB0aGUgc2VxY291bnQgdmVyaWZpY2F0aW9uIChgcmVhZF9zZXFjb3VudF9iZWdpbmAgYW5kIGByZWFkX3NlcWNvdW50X3JldHJ5YCkgc3Ryb25nbHkgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBjb25jdXJyZW50IGluZXhhY3QgcG9saWN5IGxvb2t1cHMgYW5kIHVwZGF0ZXMuIFRoYXQgc291bmRzIGxpa2UgYSBjb25jdXJyZW5jeSBidWcsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5Db25zaWRlcmluZyB0aGUgYXR0YWNrIHN1cmZhY2UsIHRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29kZSB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggbmV0d29yayB0cmFmZmljLCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIFBGX0tFWSBzb2NrZXRzLCBvciBwb3RlbnRpYWxseSBldmVuIHNvY2tldCBjYWxscyB0aGF0IHRyaWdnZXIgSVBzZWMgcG9saWN5IGV2YWx1YXRpb25zLiBUaGF0J3MgYSBkaXJlY3Qgcm91dGUgaW50byB0aGUga2VybmVsIGFuZCBhIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9yLlxuXG5GaW5hbCBzYW5pdHkgY2hlY2sgb24gdGhlIGNvbmZpZ3M6IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUYC4uLmFsbCBnb29kLiBUaW1lIHRvIG1vdmUgZm9yd2FyZCBhbmQgdGVzdC4gSSdtIGdvaW5nIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQyLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxMzo1NC43MTM4OTQ4NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDA4MjcwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZVwiLFxuICAgIFwieGZybV9wb2xpY3lfbG9va3VwXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNcIixcbiAgICBcInhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzXCIsXG4gICAgXCJfX3hmcm1fcG9saWN5X2NoZWNrXCIsXG4gICAgXCJ4ZnJtX2xvb2t1cF93aXRoX2lmaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlIGluIG5ldC94ZnJtL3hmcm1fcG9saWN5LmMgdG8gcHJvdGVjdCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgZXZhbHVhdGlvbiB3aXRoIHRoZSBpbmV4YWN0IGJpbidzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVcIixcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cFwiLFxuICAgIFwieGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc1wiLFxuICAgIFwiX194ZnJtX3BvbGljeV9jaGVja1wiLFxuICAgIFwieGZybV9sb29rdXBfd2l0aF9pZmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSBpbiBuZXQveGZybS94ZnJtX3BvbGljeS5jIHRvIHByb3RlY3QgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGV2YWx1YXRpb24gd2l0aCB0aGUgaW5leGFjdCBiaW4ncyBzZXFjb3VudCAocmV0cnlpbmcgb24gY29uY3VycmVudCBtb2RpZmljYXRpb24pLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBleGVyY2lzZWQgd2hlbmV2ZXIgSVBzZWMvWEZSTSBwb2xpY2llcyBhcmUgbG9va2VkIHVwIG9yIG1hdGNoZWQgYWdhaW5zdCBuZXR3b3JrIHRyYWZmaWMgYW5kIHNvY2tldCBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NTQuNzkzOTg2MTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3MDU0OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjU0Ljc5NDUyODUzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NzcwMDAzNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVxcdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOOlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjc4MTVlY2Q0OWIzZDNhMWVjOWVkMzk0MDdmYzBhN2JhZmM5MTlkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDA6MTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuaW5kZXggOTMyYTMxM2I5NDYwYS4uNWQ0ZTg2Mzg2M2RmZSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbkBAIC0yMTU3LDYgKzIxNTcsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcbiBcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYmluO1xuIFx0c3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpyZXQ7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47XG4rXHR1bnNpZ25lZCBpbnQgaW5leGFjdF9zZXF1ZW5jZTtcbiBcdHVuc2lnbmVkIGludCBzZXF1ZW5jZTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjE5MSwxMiArMjE5MiwxOCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcbiBcdFx0Z290byBza2lwX2luZXhhY3Q7XG4gXG4gXHRiaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpO1xuLVx0aWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsXG4tXHRcdFx0XHRcdFx0XHQgZGFkZHIpKVxuK1x0aWYgKCFiaW4pXG4rXHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuK1xuK1x0aW5leGFjdF9zZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2YmluLVx1MDAzZWNvdW50KTtcbitcdGlmICgheGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoXHUwMDI2Y2FuZCwgYmluLCBzYWRkciwgZGFkZHIpKVxuIFx0XHRnb3RvIHNraXBfaW5leGFjdDtcbiBcbiBcdHBvbCA9IHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCByZXQsIGZsLCB0eXBlLFxuIFx0XHRcdFx0XHQgIGZhbWlseSwgaWZfaWQpO1xuK1x0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2YmluLVx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcbitcdFx0Z290byByZXRyeTtcbitcbiBcdGlmIChwb2wpIHtcbiBcdFx0cmV0ID0gcG9sO1xuIFx0XHRpZiAoSVNfRVJSKHBvbCkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxMzo1NC43OTQ1MjkzNTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk0MTkzMTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG9saWN5IExvb2t1cCBDaGFuZ2UgaW4gWEZSTSoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBoaXR0aW5nIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSBwb2xpY3kgbG9va3VwcyBiYXNlZCBvbiB0aGVpciB0eXBlIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRob3JvdWdobHksIHNvIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZS5cblxuTXkgZmlyc3QgbW92ZSBpcyB0byB1c2UgYHJlYWQtZmlsZWAgKG9yIHBvdGVudGlhbGx5IGBncmVwcGVyYCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkpIHRvIGdldCBhIGxvY2FsIGNvbnRleHQgb2YgdGhlIGNvZGUuIExldCdzIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDIxNTcgd2l0aGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCAtIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gQnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBnYWluIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uIGlzIHVzZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG9wZXJhdGVzIG9uLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBwb2xpY3kgbG9va3VwIGxvZ2ljIGxvb2tzIGxpa2UsIGJlZm9yZSBldmVuIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBjb250ZXh0dWFsIGF3YXJlbmVzcyB3aWxsIGJlIGNyaXRpY2FsIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVudGlvbiBhbmQgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjU5LjczNjQ2NDI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNTA6XFx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXFxuMjE1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxuMjE1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBmYW1pbHksIHU4IGRpcixcXG4yMTUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGlmX2lkKVxcbjIxNTQ6XFx0e1xcbjIxNTU6XFx0XFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyBjYW5kO1xcbjIxNTY6XFx0XFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCAqc2FkZHI7XFxuMjE1NzpcXHRcXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcXG4yMTU4OlxcdFxcdHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0O1xcbjIxNTk6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmNoYWluO1xcbjIxNjA6XFx0XFx0dW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7XFxuMjE2MTpcXHRcXHR1bnNpZ25lZCBpbnQgc2VxdWVuY2U7XFxuMjE2MjpcXHRcXHRpbnQgZXJyO1xcbjIxNjM6XFx0XFxuMjE2NDpcXHRcXHRkYWRkciA9IHhmcm1fZmxvd2lfZGFkZHIoZmwsIGZhbWlseSk7XFxuMjE2NTpcXHRcXHRzYWRkciA9IHhmcm1fZmxvd2lfc2FkZHIoZmwsIGZhbWlseSk7XFxuMjE2NjpcXHRcXHRpZiAodW5saWtlbHkoIWRhZGRyIHx8ICFzYWRkcikpXFxuMjE2NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMTY4OlxcdFxcbjIxNjk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjIxNzA6XFx0IHJldHJ5OlxcbjIxNzE6XFx0XFx0ZG8ge1xcbjIxNzI6XFx0XFx0XFx0c2VxdWVuY2UgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uKTtcXG4yMTczOlxcdFxcdFxcdGNoYWluID0gcG9saWN5X2hhc2hfZGlyZWN0KG5ldCwgZGFkZHIsIHNhZGRyLCBmYW1pbHksIGRpcik7XFxuMjE3NDpcXHRcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpO1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRyZXQgPSBOVUxMO1xcbjIxNzc6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvbCwgY2hhaW4sIGJ5ZHN0KSB7XFxuMjE3ODpcXHRcXHRcXHRlcnIgPSB4ZnJtX3BvbGljeV9tYXRjaChwb2wsIGZsLCB0eXBlLCBmYW1pbHksIGlmX2lkKTtcXG4yMTc5OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4yMTgwOlxcdFxcdFxcdFxcdGlmIChlcnIgPT0gLUVTUkNIKVxcbjIxODE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjE4MjpcXHRcXHRcXHRcXHRlbHNlIHtcXG4yMTgzOlxcdFxcdFxcdFxcdFxcdHJldCA9IEVSUl9QVFIoZXJyKTtcXG4yMTg0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMTg1OlxcdFxcdFxcdFxcdH1cXG4yMTg2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjE4NzpcXHRcXHRcXHRcXHRyZXQgPSBwb2w7XFxuMjE4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTg5OlxcdFxcdFxcdH1cXG4yMTkwOlxcdFxcdH1cXG4yMTkxOlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0LVxcdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcXG4yMTkyOlxcdFxcdFxcdGdvdG8gc2tpcF9pbmV4YWN0O1xcbjIxOTM6XFx0XFxuMjE5NDpcXHRcXHRiaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpO1xcbjIxOTU6XFx0XFx0aWYgKCFiaW4pXFxuMjE5NjpcXHRcXHRcXHRnb3RvIHNraXBfaW5leGFjdDtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0aW5leGFjdF9zZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmJpbi1cXHUwMDNlY291bnQpO1xcbjIxOTk6XFx0XFx0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcXHUwMDI2Y2FuZCwgYmluLCBzYWRkciwgZGFkZHIpKVxcbjIyMDA6XFx0XFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdHBvbCA9IHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhcXHUwMDI2Y2FuZCwgcmV0LCBmbCwgdHlwZSxcXG4yMjAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgZmFtaWx5LCBpZl9pZCk7XFxuMjIwNDpcXHRcXHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2YmluLVxcdTAwM2Vjb3VudCwgaW5leGFjdF9zZXF1ZW5jZSkpXFxuMjIwNTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjIyMDY6XFx0XFxuMjIwNzpcXHRcXHRpZiAocG9sKSB7XFxuMjIwODpcXHRcXHRcXHRyZXQgPSBwb2w7XFxuMjIwOTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBvbCkpXFxuMjIxMDpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjIxMTpcXHRcXHR9XFxuMjIxMjpcXHRcXG4yMjEzOlxcdHNraXBfaW5leGFjdDpcXG4yMjE0OlxcdFxcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpXFxuMjIxNTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjIyMTY6XFx0XFxuMjIxNzpcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2ICF4ZnJtX3BvbF9ob2xkX3JjdShyZXQpKVxcbjIyMTg6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yMjE5OlxcdGZhaWw6XFxuMjIyMDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMjIxOlxcdFxcbjIyMjI6XFx0XFx0cmV0dXJuIHJldDtcXG4yMjIzOlxcdH1cXG4yMjI0OlxcdFxcbjIyMjU6XFx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4yMjI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxuMjIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MTYgZmFtaWx5LCB1OCBkaXIsIHUzMiBpZl9pZClcXG4yMjI4OlxcdHtcXG4yMjI5OlxcdCNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjU5LjczNjc3ODY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjg4OTE1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQ6IEEgRGVlcGVyIERpdmUgaW50byBQb2xpY3kgTG9va3VwKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvbW1pdC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCwgd2hlcmUgd2UncmUgc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBhIHNlcWxvY2svc2VxY291bnQgY2hlY2sgc3BlY2lmaWNhbGx5IGFyb3VuZCBjYWxscyB0byBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYC4gTG9va2luZyBhdCB0aGUgYmVmb3JlIGFuZCBhZnRlciBzbmlwcGV0cywgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgcmFjZSBjb25kaXRpb24uXG5cbkJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGxvb2t1cDogZmluZCB0aGUgXCJiaW5cIiwgY2hlY2sgaWYgd2UgZXZlbiAqaGF2ZSogYSBcImJpblwiLCBhbmQgaWYgc28sIGNhbGwgdGhvc2UgY2FuZGlkYXRlcy9ldmFsdWF0ZSBmdW5jdGlvbnMuIE5vdywgd2UgcmVhZCBgYmluLVx1MDAzZWNvdW50YCwgYW5kIGlmLCBhZnRlciBjYWxsaW5nIHRob3NlIGZ1bmN0aW9ucywgd2UgZmluZCB0aGUgc2VxdWVuY2UgY291bnQgaGFzIGNoYW5nZWQsIHdlICpyZXRyeSouIFRoYXQncyB0aGUgZXNzZW5jZSBvZiBhIHJlYWQtY29weS11cGRhdGUgbWVjaGFuaXNtLCBvciBhdCBsZWFzdCBhIGZsYXZvciBvZiBpdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHdoYXQgaXMgYGNhbmRgLCB3aGF0IGlzIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AsIHdoYXQgaXMgYGJpbi1cdTAwM2Vjb3VudGAgYWN0dWFsbHkgcHJvdGVjdGluZz8gSXTigJlzIG5vdCBlbm91Z2ggdG8gc2VlIGEgc2VxdWVuY2UgY291bnQ7IHdlIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogaXMgYmVpbmcgZ3VhcmRlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgY2hhbmdlcyBtaWdodCBpbnZhbGlkYXRlIHRob3NlIGNhbmRpZGF0ZXMuXG5cblRpbWUgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBmaWxlIGl0c2VsZi4gSSdsbCBzZWFyY2ggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNDowMy41NjU2NzQ2OTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDI2NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTQ1PWVudW0geGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVfdHlwZSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1My1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1NDpzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzIHtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1NS1cXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcmVzW1hGUk1fUE9MX0NBTkRfTUFYXTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjA1PXN0YXRpYyBib29sXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMDY6eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNjQ1PXhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTY1Ni1cXHRpZiAoIWNoYWluKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNjU3OlxcdFxcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE2NTgtXFx0XFx0aW50IGk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIwMjE9c3RhdGljIGJvb2xcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwMjI6eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwMjMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjEyNj1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIxMjc6eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTI4LVxcdFxcdFxcdCAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnByZWZlcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjE1MD1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjE1NC17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTU1OlxcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIxNTYtXFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCAqc2FkZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE0OjAzLjYxNTcwNjU1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczNzk1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBJbmV4YWN0IFBvbGljeSBNYXRjaGluZyBpbiBYRlJNKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBJUHNlYyBwb2xpY3kgbG9va3VwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xfaW5leGFjdF9iaW5gIHdvcmsgaW4gdGhlIFhGUk0gZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IHRoZWlyIGRlZmluaXRpb25zIGFuZCBob3cgdGhleSBhcmUgdXNlZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNjZW5hcmlvcyB3aGVyZSB0aGVyZSBpc24ndCBhICpwZXJmZWN0KiBwb2xpY3kgbWF0Y2ggYW5kIGhvdyBpdCBuYXJyb3dzIGRvd24gdGhlIGNhbmRpZGF0ZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgJ2luZXhhY3QnIGFzcGVjdCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWxseSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBwb2xpY3kgc2VsZWN0aW9uIHByb2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGxvZ2ljIGludm9sdmVkIGluIGJ1aWxkaW5nIHRoZSBcImJpbnNcIiBvciBjYW5kaWRhdGUgbGlzdHMgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gbG9vayBhdCBhbGwgb2YgdGhlIGZhY3RvcnMgdGhhdCBjYW4gYWZmZWN0IGhvdyB0aGlzIHdvcmtzIGF0IHRoaXMgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNDowNS44ODk1MDQ3MjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXG4yMDIxOlxcdHN0YXRpYyBib29sXFxuMjAyMjpcXHR4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxcbjIwMjM6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYixcXG4yMDI0OlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuMjAyNTpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyKVxcbjIwMjY6XFx0e1xcbjIwMjc6XFx0XFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfbm9kZSAqbjtcXG4yMDI4OlxcdFxcdHUxNiBmYW1pbHk7XFxuMjAyOTpcXHRcXG4yMDMwOlxcdFxcdGlmICghYilcXG4yMDMxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMDMyOlxcdFxcbjIwMzM6XFx0XFx0ZmFtaWx5ID0gYi1cXHUwMDNlay5mYW1pbHk7XFxuMjAzNDpcXHRcXHRtZW1zZXQoY2FuZCwgMCwgc2l6ZW9mKCpjYW5kKSk7XFxuMjAzNTpcXHRcXHRjYW5kLVxcdTAwM2VyZXNbWEZSTV9QT0xfQ0FORF9BTlldID0gXFx1MDAyNmItXFx1MDAzZWhoZWFkO1xcbjIwMzY6XFx0XFxuMjAzNzpcXHRcXHRuID0geGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihcXHUwMDI2Yi1cXHUwMDNlcm9vdF9kLCBcXHUwMDI2Yi1cXHUwMDNlY291bnQsIGRhZGRyLFxcbjIwMzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbWlseSk7XFxuMjAzOTpcXHRcXHRpZiAobikge1xcbjIwNDA6XFx0XFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfREFERFJdID0gXFx1MDAyNm4tXFx1MDAzZWhoZWFkO1xcbjIwNDE6XFx0XFx0XFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXFx1MDAyNm4tXFx1MDAzZXJvb3QsIFxcdTAwMjZiLVxcdTAwM2Vjb3VudCwgc2FkZHIsXFxuMjA0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmFtaWx5KTtcXG4yMDQzOlxcdFxcdFxcdGlmIChuKVxcbjIwNDQ6XFx0XFx0XFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfQk9USF0gPSBcXHUwMDI2bi1cXHUwMDNlaGhlYWQ7XFxuMjA0NTpcXHRcXHR9XFxuMjA0NjpcXHRcXG4yMDQ3OlxcdFxcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFxcdTAwMjZiLVxcdTAwM2Vyb290X3MsIFxcdTAwMjZiLVxcdTAwM2Vjb3VudCwgc2FkZHIsXFxuMjA0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmFtaWx5KTtcXG4yMDQ5OlxcdFxcdGlmIChuKVxcbjIwNTA6XFx0XFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfU0FERFJdID0gXFx1MDAyNm4tXFx1MDAzZWhoZWFkO1xcbjIwNTE6XFx0XFxuMjA1MjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yMDUzOlxcdH1cXG4yMDU0OlxcdFxcbjIwNTU6XFx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqXFxuMjA1NjpcXHR4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3Uoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCB1MTYgZmFtaWx5LFxcbjIwNTc6XFx0XFx0XFx0XFx0ICAgICAgIHU4IGRpciwgdTMyIGlmX2lkKVxcbjIwNTg6XFx0e1xcbjIwNTk6XFx0XFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfa2V5IGsgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE0OjA1Ljg4OTgwMjQ4OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Njc0NzA4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYSBzZXF1ZW5jZSBjb3VudCB2YWxpZGF0aW9uIChgYmluLVx1MDAzZWNvdW50YCkgYXJvdW5kIHRoZSBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIHByb2Nlc3NlcyB3aXRoaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAuIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2hlbiBjb25jdXJyZW50IG9wZXJhdGlvbnMgKHVwZGF0ZXMsIHJlbW92YWxzLCBpbnNlcnRpb25zKSBtb2RpZnkgdGhlIGluZXhhY3QgcG9saWN5IHRyZWUgdW5kZXIgUkNVLlxuXG5JJ3ZlIGdvdCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBMZXQncyBzZWUgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGUgdmFyaWFibGUgYGNhbmRgIGlzIGNsZWFybHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KGNhbmQsIDAsIHNpemVvZigqY2FuZCkpYC4gVGhlIHNlcXVlbmNlIGNvdW50ZXIgaXRzZWxmLCBgaW5leGFjdF9zZXF1ZW5jZWAsIGlzIGluaXRpYWxpemVkIGRpcmVjdGx5IGZyb20gYHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2YmluLVx1MDAzZWNvdW50KWAuIFRoZXJlJ3Mgbm8gaW52b2x2ZW1lbnQgb2YgbmV3bHkgY3JlYXRlZCBidWZmZXJzIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU28sIG5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCBpbmZvIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgY29kZSByZS1ldmFsdWF0ZXMgdmFyaWFibGVzIG9uIGByZXRyeWAgYWZ0ZXIgY2hlY2tpbmcgdGhlIGBzZXFjb3VudGAsIHNvIG5vIHN0YWxlIHBvaW50ZXJzIG9yIGRhdGEgc2hvdWxkIGJlIHVzZWQuXG5cbk5vdywgS01TQU4gdnMuIEtBU0FOLi4uIGRvZXMgS01TQU4gb2ZmZXIgYW55IHNwZWNpZmljIGFkdmFudGFnZXMgaGVyZT8gSSBkb24ndCB0aGluayBzby4gU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcywgS01TQU4gaXMgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwgaGVyZS4gS0FTQU4gaXMgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIFJDVSwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG91dC1vZi1ib3VuZHMgcG9pbnRlciB1c2FnZS4gVGhpcyBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrIGhlbHBzIGd1YXJkIGFnYWluc3QgdGhvc2Uga2luZHMgb2YgcmFjZSBjb25kaXRpb25zLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggcHJpbWFyaWx5IHRhY2tsZXMgY29uY3VycmVuY3kgY29uY2VybnMgZHVyaW5nIHBvbGljeSBsb29rdXBzLiBJdCBlbnN1cmVzIGRhdGEgY29uc2lzdGVuY3kgdW5kZXIgUkNVLCBhbmQgaXQgZG9lc24ndCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcyB0aGlzIGNvZGUgbWlnaHQgaGF2ZS4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGxvb2tpbmcgZ29vZC4gVGltZSB0byBzZXQgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM5OSwiT3V0cHV0VG9rZW5zIjoyNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNDoxMS41NjQ1MTMzOThaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlciBjaGVja3MgKGBiaW4tXFx1MDAzZWNvdW50YCkgYXJvdW5kIGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBsb29rdXAgYW5kIGV2YWx1YXRpb24gKGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgKSBpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSgpYCB0byBoYW5kbGUgY29uY3VycmVudCB0cmVlIG1vZGlmaWNhdGlvbnMgcHJvcGVybHkuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XFxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGluZXhhY3Rfc2VxdWVuY2VgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIGJ5IGByZWFkX3NlcWNvdW50X2JlZ2luKClgLlxcbi0gVGhlIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUgYGNhbmRgIGNvbnRpbnVlcyB0byBiZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KClgIGluIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygpYC5cXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU46XFxuLSBDb25jdXJyZW5jeSBpc3N1ZXMsIFJDVSBsaWZldGltZSBpc3N1ZXMsIGFuZCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cXG4tIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVxcdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOOlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 23:53:52 +0000 UTC FinishedAt: 2026-09-05 00:14:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET" ], "series_id": "d73ff491-07c1-454a-8d51-3a7c106ed72e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_policy_lookup_bytype", "xfrm_policy_lookup", "xfrm_policy_eval_candidates", "xfrm_policy_find_inexact_candidates", "__xfrm_policy_check", "xfrm_lookup_with_ifid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2xvb2t1cCYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMmIzM0OywKICAgICYjMzQ7X194ZnJtX3BvbGljeV9jaGVjayYjMzQ7LAogICAgJiMzNDt4ZnJtX2xvb2t1cF93aXRoX2lmaWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVx1MDAzZWNvdW50YCkgYXJvdW5kIGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBsb29rdXAgYW5kIGV2YWx1YXRpb24gKGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgKSBpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSgpYCB0byBoYW5kbGUgY29uY3VycmVudCB0cmVlIG1vZGlmaWNhdGlvbnMgcHJvcGVybHkuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGluZXhhY3Rfc2VxdWVuY2VgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIGJ5IGByZWFkX3NlcWNvdW50X2JlZ2luKClgLlxuLSBUaGUgY2FuZGlkYXRlIHN0cnVjdHVyZSBgY2FuZGAgY29udGludWVzIHRvIGJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdmlhIGBtZW1zZXQoKWAgaW4gYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKClgLlxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuXG4yLiBLQVNBTiB2cyBLTVNBTjpcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXG4tIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSBpbiBuZXQveGZybS94ZnJtX3BvbGljeS5jIHRvIHByb3RlY3QgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGV2YWx1YXRpb24gd2l0aCB0aGUgaW5leGFjdCBiaW4mIzM5O3Mgc2VxY291bnQgKHJldHJ5aW5nIG9uIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgZXhlcmNpc2VkIHdoZW5ldmVyIElQc2VjL1hGUk0gcG9saWNpZXMgYXJlIGxvb2tlZCB1cCBvciBtYXRjaGVkIGFnYWluc3QgbmV0d29yayB0cmFmZmljIGFuZCBzb2NrZXQgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNzgxNWVjZDQ5YjNkM2ExZWM5ZWQzOTQwN2ZjMGE3YmFmYzkxOWRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMDoxMzoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuaW5kZXggOTMyYTMxM2I5NDYwYS4uNWQ0ZTg2Mzg2M2RmZSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbkBAIC0yMTU3LDYgJiM0MzsyMTU3LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4gXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcbiBcdHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0O1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKmNoYWluO1xuJiM0MztcdHVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlO1xuIFx0dW5zaWduZWQgaW50IHNlcXVlbmNlO1xuIFx0aW50IGVycjtcbiBcbkBAIC0yMTkxLDEyICYjNDM7MjE5MiwxOCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcbiBcdFx0Z290byBza2lwX2luZXhhY3Q7XG4gXG4gXHRiaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpO1xuLVx0aWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsXG4tXHRcdFx0XHRcdFx0XHQgZGFkZHIpKVxuJiM0MztcdGlmICghYmluKVxuJiM0MztcdFx0Z290byBza2lwX2luZXhhY3Q7XG4mIzQzO1xuJiM0MztcdGluZXhhY3Rfc2VxdWVuY2UgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmJpbi1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXG4gXHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuIFxuIFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXG4gXHRcdFx0XHRcdCAgZmFtaWx5LCBpZl9pZCk7XG4mIzQzO1x0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2YmluLVx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuIFx0aWYgKHBvbCkge1xuIFx0XHRyZXQgPSBwb2w7XG4gXHRcdGlmIChJU19FUlIocG9sKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXAmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O19feGZybV9wb2xpY3lfY2hlY2smIzM0OywKICAgICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUgaW4gbmV0L3hmcm0veGZybV9wb2xpY3kuYyB0byBwcm90ZWN0IGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBldmFsdWF0aW9uIHdpdGggdGhlIGluZXhhY3QgYmluJiMzOTtzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjc4MTVlY2Q0OWIzZDNhMWVjOWVkMzk0MDdmYzBhN2JhZmM5MTlkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDA6MTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA5MzJhMzEzYjk0NjBhLi41ZDRlODYzODYzZGZlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwKIAlzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CiYjNDM7CXVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlOwogCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKIAlpbnQgZXJyOwogCkBAIC0yMTkxLDEyICYjNDM7MjE5MiwxOCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwKIAkJZ290byBza2lwX2luZXhhY3Q7CiAKIAliaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpOwotCWlmICghYmluIHx8ICF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygmYW1wO2NhbmQsIGJpbiwgc2FkZHIsCi0JCQkJCQkJIGRhZGRyKSkKJiM0MzsJaWYgKCFiaW4pCiYjNDM7CQlnb3RvIHNraXBfaW5leGFjdDsKJiM0MzsKJiM0MzsJaW5leGFjdF9zZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtiaW4tJmd0O2NvdW50KTsKJiM0MzsJaWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygmYW1wO2NhbmQsIGJpbiwgc2FkZHIsIGRhZGRyKSkKIAkJZ290byBza2lwX2luZXhhY3Q7CiAKIAlwb2wgPSB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMoJmFtcDtjYW5kLCByZXQsIGZsLCB0eXBlLAogCQkJCQkgIGZhbWlseSwgaWZfaWQpOwomIzQzOwlpZiAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2Jpbi0mZ3Q7Y291bnQsIGluZXhhY3Rfc2VxdWVuY2UpKQomIzQzOwkJZ290byByZXRyeTsKJiM0MzsKIAlpZiAocG9sKSB7CiAJCXJldCA9IHBvbDsKIAkJaWYgKElTX0VSUihwb2wpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU29tZW9uZSB3YW50cyBtZSB0byBldmFsdWF0ZSBhIHBhdGNoIHRvIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggaXMgdHlwaWNhbC4gVGhlIGRpZmYgZm9jdXNlcyBvbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBgcmVhZF9zZXFjb3VudF9iZWdpbmAgYW5kIGByZWFkX3NlcWNvdW50X3JldHJ5YCBmb3IgaW5leGFjdCBwb2xpY3kgbG9va3Vwcy4gSWYgYSByZXRyeSBpcyBuZWVkZWQsIGl0IGp1bXBzIHRvIHRoZSBgcmV0cnlgIGxhYmVsLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIHJlYWQtY29weS11cGRhdGUtbGlrZSBjb25zdHJ1Y3QsIHBvc3NpYmx5IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZS4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgYWJvdmUgYm9hcmQuIFN0YW5kYXJkIGRldi9RQS9kZWZlbnNlIGFjdGl2aXR5IOKAkyBldmFsdWF0aW5nIHBhdGNoZXMsIGlkZW50aWZ5aW5nIGludGVyZXN0aW5nIHN5bWJvbHMsIGNvbmZpZ3MgZm9yIHN5emthbGxlcuKApiB0aGF0JiMzOTtzIGFsbCBiZW5pZ24uIE5vIHdvcnJpZXMgdGhlcmUuIEkmIzM5O20gbm90IGdlbmVyYXRpbmcgZXhwbG9pdHMgb3IgZGVhbGluZyB3aXRoIGFueXRoaW5nIG1hbGljaW91cy4KClRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTtsbCB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBpbnNwZWN0IHRoZSBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSwgYW5kIHdoYXQgdGhlIGByZWFkX3NlcWNvdW50YCBvcGVyYXRpb25zIGFyZSBwcm90ZWN0aW5nLiBPbmNlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBJIGNhbiBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIuIElzIGl0IGxpa2VseSB0byBleHBvc2UgbmV3IGNvZGUgcGF0aHMsIGFuZCBwb3RlbnRpYWxseSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBvciBpcyBpdCB0b28gbmFycm93IGluIHNjb3BlPyBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlY2lkaW5nIHdoZXRoZXIgd2UgbmVlZCB0byBicmluZyBvdXQgdGhlIGhlYXZ5IGFydGlsbGVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNTU6XHRcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbjIxNTY6XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgKnNhZGRyO1xuMjE1NzpcdFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiaW47XG4yMTU4Olx0XHRzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDtcbjIxNTk6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjtcbjIxNjA6XHRcdHVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlO1xuMjE2MTpcdFx0dW5zaWduZWQgaW50IHNlcXVlbmNlO1xuMjE2MjpcdFx0aW50IGVycjtcbjIxNjM6XHRcbjIxNjQ6XHRcdGRhZGRyID0geGZybV9mbG93aV9kYWRkcihmbCwgZmFtaWx5KTtcbjIxNjU6XHRcdHNhZGRyID0geGZybV9mbG93aV9zYWRkcihmbCwgZmFtaWx5KTtcbjIxNjY6XHRcdGlmICh1bmxpa2VseSghZGFkZHIgfHwgIXNhZGRyKSlcbjIxNjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMTY4Olx0XG4yMTY5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTcwOlx0IHJldHJ5OlxuMjE3MTpcdFx0ZG8ge1xuMjE3MjpcdFx0XHRzZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uKTtcbjIxNzM6XHRcdFx0Y2hhaW4gPSBwb2xpY3lfaGFzaF9kaXJlY3QobmV0LCBkYWRkciwgc2FkZHIsIGZhbWlseSwgZGlyKTtcbjIxNzQ6XHRcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpO1xuMjE3NTpcdFxuMjE3NjpcdFx0cmV0ID0gTlVMTDtcbjIxNzc6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb2wsIGNoYWluLCBieWRzdCkge1xuMjE3ODpcdFx0XHRlcnIgPSB4ZnJtX3BvbGljeV9tYXRjaChwb2wsIGZsLCB0eXBlLCBmYW1pbHksIGlmX2lkKTtcbjIxNzk6XHRcdFx0aWYgKGVycikge1xuMjE4MDpcdFx0XHRcdGlmIChlcnIgPT0gLUVTUkNIKVxuMjE4MTpcdFx0XHRcdFx0Y29udGludWU7XG4yMTgyOlx0XHRcdFx0ZWxzZSB7XG4yMTgzOlx0XHRcdFx0XHRyZXQgPSBFUlJfUFRSKGVycik7XG4yMTg0Olx0XHRcdFx0XHRnb3RvIGZhaWw7XG4yMTg1Olx0XHRcdFx0fVxuMjE4NjpcdFx0XHR9IGVsc2Uge1xuMjE4NzpcdFx0XHRcdHJldCA9IHBvbDtcbjIxODg6XHRcdFx0XHRicmVhaztcbjIxODk6XHRcdFx0fVxuMjE5MDpcdFx0fVxuMjE5MTpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0LVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxuMjE5MjpcdFx0XHRnb3RvIHNraXBfaW5leGFjdDtcbjIxOTM6XHRcbjIxOTQ6XHRcdGJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7XG4yMTk1Olx0XHRpZiAoIWJpbilcbjIxOTY6XHRcdFx0Z290byBza2lwX2luZXhhY3Q7XG4yMTk3Olx0XG4yMTk4Olx0XHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZiaW4tXHUwMDNlY291bnQpO1xuMjE5OTpcdFx0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXG4yMjAwOlx0XHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuMjIwMTpcdFxuMjIwMjpcdFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXG4yMjAzOlx0XHRcdFx0XHRcdCAgZmFtaWx5LCBpZl9pZCk7XG4yMjA0Olx0XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZiaW4tXHUwMDNlY291bnQsIGluZXhhY3Rfc2VxdWVuY2UpKVxuMjIwNTpcdFx0XHRnb3RvIHJldHJ5O1xuMjIwNjpcdFxuMjIwNzpcdFx0aWYgKHBvbCkge1xuMjIwODpcdFx0XHRyZXQgPSBwb2w7XG4yMjA5Olx0XHRcdGlmIChJU19FUlIocG9sKSlcbjIyMTA6XHRcdFx0XHRnb3RvIGZhaWw7XG4yMjExOlx0XHR9XG4yMjEyOlx0XG4yMjEzOlx0c2tpcF9pbmV4YWN0OlxuMjIxNDpcdFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpXG4yMjE1Olx0XHRcdGdvdG8gcmV0cnk7XG4yMjE2Olx0XG4yMjE3Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAheGZybV9wb2xfaG9sZF9yY3UocmV0KSlcbjIyMTg6XHRcdFx0Z290byByZXRyeTtcbjIyMTk6XHRmYWlsOlxuMjIyMDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMjIxOlx0XG4yMjIyOlx0XHRyZXR1cm4gcmV0O1xuMjIyMzpcdH1cbjIyMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBUaGF0IHBsYWNlcyB1cyBzcXVhcmVseSB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLCB0aGUgaGVhcnQgb2YgSVBzZWMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2ssIEkga25vdyB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQsIGFjY2Vzc2libGUgdmlhIHNvY2tldHMsIG5ldGxpbmsgKHNwZWNpZmljYWxseSB0aGUgeGZybSBuZXRsaW5rIGludGVyZmFjZSwgYW5kIFBGX0tFWSksIGFuZCBldmVuIHN0YW5kYXJkIElQIHRyYWZmaWMgdGhhdCB0cmlnZ2VycyBwb2xpY3kgbG9va3Vwcy4gVGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkuCgpXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHNlcXVlbmNlIGNvdW50IGxvY2tpbmcgYW5kIHJldHJ5IGxvZ2ljICpkdXJpbmcqIGFuIGluZXhhY3QgcG9saWN5IGxvb2t1cC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IOKAkyB0aGlzIGlzbiYjMzk7dCBqdXN0IHNvbWUgaXNvbGF0ZWQgZnVuY3Rpb247IGl0JiMzOTtzIGludHJpY2F0ZWx5IGludm9sdmVkIGluIHRoZSBwcm9jZXNzIG9mIG1ha2luZyBwb2xpY3kgZGVjaXNpb25zLiBJdCYjMzk7cyBhY3RpdmVseSBleGVjdXRlZCBjb2RlLCByZWFjaGFibGUgdGhyb3VnaCB2YXJpb3VzIG5ldHdvcmsgcGF0aHMuIFRoZXJlZm9yZSwgdGhlIHByb2JhYmlsaXR5IG9mIHJlYWNoaW5nIHRoaXMgY29kZSBwYXRoIHdpdGggY3JhZnRlZCBpbnB1dCBpcyBoaWdoLgoKU28sICpXb3J0aEZ1enppbmcqIGlzIGRlZmluaXRlbHkgYHRydWVgLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBwb2xpY3kgbW9kdWxlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgcG9saWNpZXMgYXJlIG1hbmlwdWxhdGVkLCBob3cgdGhleSYjMzk7cmUgbG9va2VkIHVwLCBhbmQgd2hhdCBwb3RlbnRpYWwgdHJpZ2dlcnMgZXhpc3QuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBiZXN0IHBvaW50cyB0byBpbnNlcnQgZnV6emluZyB2ZWN0b3JzLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIGNyYWZ0IGVmZmVjdGl2ZSBmdXp6aW5nIGhhcm5lc3Nlcy4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jPTIxMjc9eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTQ5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTUwOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTUxLVx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyMjU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzI6XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9TVUIsIGZsLCBmYW1pbHksXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzMtXHRcdFx0XHRcdGRpciwgaWZfaWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzNi0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzNzpcdHJldHVybiB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLCBmbCwgZmFtaWx5LFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM4LVx0XHRcdFx0XHQgZGlyLCBpZl9pZCk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yODExPXN0YXRpYyBpbnQgeGZybV9leHBhbmRfcG9saWNpZXMoY29uc3Qgc3RydWN0IGZsb3dpICpmbCwgdTE2IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzEtXHQgICAgcG9sc1swXS1cdTAwM2V0eXBlICE9IFhGUk1fUE9MSUNZX1RZUEVfTUFJTikge1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyODMyOlx0XHRwb2xzWzFdID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSh4cF9uZXQocG9sc1swXSksXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzMtXHRcdFx0XHRcdFx0ICAgIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4Mi1cdGlmIChwb2xzWzBdLVx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM3ODM6XHRcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzg0LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZmbCwgZmFtaWx5LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQ5NT1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX21pZ3JhdGVfcG9saWN5X2ZpbmQoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MjktXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ1MzA6XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgdHlwZSwgXHUwMDI2ZmwsIHNlbC1cdTAwM2VmYW1pbHksIGRpciwgaWZfaWQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTMxLVx0aWYgKElTX0VSUl9PUl9OVUxMKHBvbCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBQb2xpY3kgTG9va3VwIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU2luY2UgaXQmIzM5O3Mgc3RhdGljLCBJIGtub3cgSSB3b24mIzM5O3QgZmluZCBpdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoYXQgZmlsZS4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUsIGFuZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBgbmV0L3hmcm0vYCBkaXJlY3RvcnksIHRoYXQgbWlnaHQgaW5kaXJlY3RseSB1dGlsaXplIHRoaXMgbG9va3VwIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgcG9saWN5IHJldHJpZXZhbC4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBnbG9iYWwgc3ltYm9scz8KClRoZW4sIHRoZSBtb3N0IGRpcmVjdCBhcHByb2FjaCBpcyBnb2luZyB0byBiZSB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBjYWxsZXJzIG9mIGB4ZnJtX3BvbGljeV9sb29rdXBgIGluIGdlbmVyYWwuIFNlZWluZyBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHNob3VsZCBxdWlja2x5IGlsbHVtaW5hdGUgdGhlIG92ZXJhbGwgcG9saWN5IGxvb2t1cCBsb2dpYyBhbmQgcmV2ZWFsIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAuIEkgc3VzcGVjdCB0aGUgYW5zd2VyIGlzIHNvbWV3aGVyZSBpbiB0aGUgYnJvYWRlciBwb2xpY3kgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgY2FsbGVycyBhbmQgZm9sbG93IHRoZSB0cmFpbCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fcG9saWN5X2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTY0PXN0YXRpYyBpbnQgeGZybV9wb2xpY3lfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTc5LVx0aWYgKG1hdGNoKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTgwOlx0XHRyZXQgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLVx1MDAzZXNlY3VyaXR5LCBmbC1cdTAwM2VmbG93aV9zZWNpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5ODEtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTk4ND1zdGF0aWMgc3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfbm9kZSAqXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5ODU6eGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqcixcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk4Ni1cdFx0XHRcdHNlcWNvdW50X3NwaW5sb2NrX3QgKmNvdW50LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjAyMj14ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAzNi1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjAzNzpcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFx1MDAyNmItXHUwMDNlcm9vdF9kLCBcdTAwMjZiLVx1MDAzZWNvdW50LCBkYWRkcixcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAzOC1cdFx0XHRcdFx0ICAgIGZhbWlseSk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQwLVx0XHRjYW5kLVx1MDAzZXJlc1tYRlJNX1BPTF9DQU5EX0RBRERSXSA9IFx1MDAyNm4tXHUwMDNlaGhlYWQ7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwNDE6XHRcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFx1MDAyNm4tXHUwMDNlcm9vdCwgXHUwMDI2Yi1cdTAwM2Vjb3VudCwgc2FkZHIsXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDItXHRcdFx0XHRcdFx0ICAgIGZhbWlseSk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQ2LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMDQ3Olx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXHUwMDI2Yi1cdTAwM2Vyb290X3MsIFx1MDAyNmItXHUwMDNlY291bnQsIHNhZGRyLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQ4LVx0XHRcdFx0XHQgICAgZmFtaWx5KTtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIxMjc9eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTQ5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTUwOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTUxLVx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMjQtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMjU6c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIyNi1cdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzI6XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9TVUIsIGZsLCBmYW1pbHksXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzMtXHRcdFx0XHRcdGRpciwgaWZfaWQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzNi0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzNzpcdHJldHVybiB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLCBmbCwgZmFtaWx5LFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM4LVx0XHRcdFx0XHQgZGlyLCBpZl9pZCk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMjQxPXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjY1LVx0XHRcdH1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjI2NjpcdFx0XHRlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLVx1MDAzZXNlY3VyaXR5LFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjY3LVx0XHRcdFx0XHRcdCAgICAgIGZsLVx1MDAzZWZsb3dpX3NlY2lkKTtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTI4MTE9c3RhdGljIGludCB4ZnJtX2V4cGFuZF9wb2xpY2llcyhjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLCB1MTYgZmFtaWx5LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjgzMS1cdCAgICBwb2xzWzBdLVx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjI4MzI6XHRcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHhwX25ldChwb2xzWzBdKSxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjgzMy1cdFx0XHRcdFx0XHQgICAgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzA4NT1zdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2J1bmRsZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzA5Ni1cdG51bV9wb2xzID0gMTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzA5NzpcdHBvbHNbMF0gPSB4ZnJtX3BvbGljeV9sb29rdXAobmV0LCBmbCwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzA5OC1cdGVyciA9IHhmcm1fZXhwYW5kX3BvbGljaWVzKGZsLCBmYW1pbHksIHBvbHMsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjI2PXhmcm1fcG9saWN5ICp4ZnJtX2luX2Z3ZF9pY21wKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNjM4LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNjM5Olx0XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXAobmV0LCBcdTAwMjZmbDEsIGZhbWlseSwgWEZSTV9QT0xJQ1lfRldELCBpZl9pZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2NDAtXHRcdGlmIChJU19FUlIocG9sKSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc0OC1cdGlmICghcG9sKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzQ5Olx0XHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXAobmV0LCBcdTAwMjZmbCwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc1MC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3ODItXHRpZiAocG9sc1swXS1cdTAwM2V0eXBlICE9IFhGUk1fUE9MSUNZX1RZUEVfTUFJTikge1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzgzOlx0XHRwb2xzWzFdID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4NC1cdFx0XHRcdFx0XHQgICAgXHUwMDI2ZmwsIGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTI5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTMwOlx0cG9sID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIHR5cGUsIFx1MDAyNmZsLCBzZWwtXHUwMDNlZmFtaWx5LCBkaXIsIGlmX2lkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDUzMS1cdGlmIChJU19FUlJfT1JfTlVMTChwb2wpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgeGZybV9idW5kbGVfbG9va3VwYCBEZXBlbmRlbmN5KioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkgYXJvdW5kIGB4ZnJtX2J1bmRsZV9sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgY2FsbGluZyBpdCwgb3IsIG1vcmUgYnJvYWRseSwgd2hpY2ggZnVuY3Rpb25zIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBhcmUgZW50cnkgcG9pbnRzIG9yIGV4cG9ydGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgLSBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2ggd2l0aGluIHRoZSBwb2xpY3kgbW9kdWxlLCBpdCYjMzk7bGwgcHJvdmlkZSBhIG5pY2UgYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0yNzY9c3RydWN0IGRzdF9lbnRyeSAqX194ZnJtX2RzdF9sb29rdXAoaW50IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI5MS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjI5MjpFWFBPUlRfU1lNQk9MKF9feGZybV9kc3RfbG9va3VwKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjkzLVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDMxPXN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBnZnBfdCBnZnApXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTEtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTI6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9hbGxvYyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1My1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2ND12b2lkIHhmcm1fcG9saWN5X2Rlc3Ryb3koc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3kpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzMtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NzQ6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9kZXN0cm95KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDc1LVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NzE1PXZvaWQgeGZybV9zcGRfZ2V0aW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJta19zcGRpbmZvICpzaSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjcyNjpFWFBPUlRfU1lNQk9MKHhmcm1fc3BkX2dldGluZm8pO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MjctXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xMzk5PXZvaWQgeGZybV9wb2xpY3lfaGFzaF9yZWJ1aWxkKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0MDItfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNDAzOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfaGFzaF9yZWJ1aWxkKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTQwNC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE1NzI9aW50IHhmcm1fcG9saWN5X2luc2VydChpbnQgZGlyLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwgaW50IGV4Y2wpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNjE5LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTYyMDpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2luc2VydCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE2MjEtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNjQ1PXhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3MTEtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzEyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYnlzZWxfY3R4KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTcxMy1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE3MTU9eGZybV9wb2xpY3lfYnlpZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NTEtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzUyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYnlpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NTMtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODEyPWludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NDgtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxODQ5OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfZmx1c2gpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODUwLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODUxPWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTg4OC19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE4ODk6RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9wb2xpY3lfZmx1c2gpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODkwLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODkxPWludCB4ZnJtX3BvbGljeV93YWxrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTM2LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTkzNzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGspO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTM4LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTM5PXZvaWQgeGZybV9wb2xpY3lfd2Fsa19pbml0KHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLCB1OCB0eXBlKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk0NS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5NDY6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV93YWxrX2luaXQpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTQ3LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTQ4PXZvaWQgeGZybV9wb2xpY3lfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTU2LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTk1NzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGtfZG9uZSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NTgtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzY1PWludCB4ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzc3LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjM3ODpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2RlbGV0ZSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNzktXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMTczPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI1LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMyNjpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwX3dpdGhfaWZpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMjctXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMzMzPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzM4LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMzOTpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzM0MC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTMzNDQ9c3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZyxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzNTktfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozMzYwOkVYUE9SVF9TWU1CT0woeGZybV9sb29rdXBfcm91dGUpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzYxLVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzUwMz1pbnQgX194ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM1MzgtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNTM5OkVYUE9SVF9TWU1CT0woX194ZnJtX2RlY29kZV9zZXNzaW9uKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzU0MC1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3Ni19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM4Nzc6RVhQT1JUX1NZTUJPTChfX3hmcm1fcG9saWN5X2NoZWNrKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3OC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9Mzg3OT1pbnQgX194ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzkxNC19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM5MTU6RVhQT1JUX1NZTUJPTChfX3hmcm1fcm91dGVfZm9yd2FyZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5MTYtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zOTUzPXZvaWQgeGZybV9kc3RfaWZkb3duKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5NjAtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozOTYxOkVYUE9SVF9TWU1CT0woeGZybV9kc3RfaWZkb3duKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzk2Mi1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTg9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTUxLX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE1MjpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxNTMtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxNTQ9dm9pZCB4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTcyLX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE3MzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3VucmVnaXN0ZXJfYWZpbmZvKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE3NC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDE3NT12b2lkIHhmcm1faWZfcmVnaXN0ZXJfY2IoY29uc3Qgc3RydWN0IHhmcm1faWZfY2IgKmlmY2IpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTgwLX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE4MTpFWFBPUlRfU1lNQk9MKHhmcm1faWZfcmVnaXN0ZXJfY2IpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTgyLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MTgzPXZvaWQgeGZybV9pZl91bnJlZ2lzdGVyX2NiKHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTg3LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE4ODpFWFBPUlRfU1lNQk9MKHhmcm1faWZfdW5yZWdpc3Rlcl9jYik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxODktXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDY0PXZvaWQgeGZybV9hdWRpdF9wb2xpY3lfYWRkKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCByZXN1bHQsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0NzUtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NDc2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYXVkaXRfcG9saWN5X2FkZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0NzctXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0Nzg9dm9pZCB4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IHJlc3VsdCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTAtfVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NDkxOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYXVkaXRfcG9saWN5X2RlbGV0ZSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTItI2VuZGlmXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjYzPWludCB4ZnJtX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDc0NC19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ3NDU6RVhQT1JUX1NZTUJPTCh4ZnJtX21pZ3JhdGUpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzQ2LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBhIGBzdGF0aWNgIGZ1bmN0aW9uIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgdGhlIHN5bWJvbCAqc2hvdWxkKiBiZSBwcmVzZW50IHVubGVzcyBpdCYjMzk7cyBpbmxpbmVkLiBCdXQgd2FpdCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgeGZybV9wb2xpY3lfbG9va3VwYCwgYHhmcm1fZXhwYW5kX3BvbGljaWVzYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1fbWlncmF0ZV9wb2xpY3lfZmluZGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmdW5jdGlvbnMuCgpOb3csIGxldCBtZSBjb25maXJtLiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBsaW5lIDIxNTA6ICBgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSguLi4pYC4uLiBZZXAsIGl0JiMzOTtzICpub3QqIGlubGluZWQuIFdoaWNoIG1lYW5zIHRoZSBzeW1ib2wgc2hvdWxkIGRlZmluaXRlbHkgYmUgdmlzaWJsZS4KClRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgYWxzbyBzcGVjaWZpY2FsbHkgdmVyaWZ5IGEgZmV3IHJlbGF0ZWQgc3ltYm9scyB0byBzZWUgaWYgc29tZXRoaW5nIGlzIGdvaW5nIG9uIHdpdGggdGhlbTogYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBgeGZybV9wb2xpY3lfbG9va3VwYCwgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AsIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AsIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgLCBhbmQgYF9feGZybV9wb2xpY3lfY2hlY2tgLgoKTmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L3hmcm0vS2NvbmZpZ2AgKG9yIHBlcmhhcHMgYG5ldC9LY29uZmlnYCBpZiBpdCYjMzk7cyBpbmNsdWRlZCB0aGVyZSkuIEdvdHRhIGVuc3VyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZC4gQW5kIG9mIGNvdXJzZSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIGFzIHdlbGwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYmVpbmcgYnVpbHQgY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fcG9saWN5XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGU9MTI9ZW5kaWZcbm5ldC94ZnJtL01ha2VmaWxlLTEzLVxubmV0L3hmcm0vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNS1cdFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBYRlJNKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQ09ORklHX1hGUk1gIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiBgbmV0L0tjb25maWdgIGZpcnN0LiBJZiBpdCYjMzk7cyBub3QgdGhlcmUsIHdoaWNoIGlzIGEgcG9zc2liaWxpdHkgZ2l2ZW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBjb2RlLCB0aGVuIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgd2l0aGluIHRoZSBtb3JlIHNwZWNpZmljIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYm90aCBwbGFjZXMgdG8gYmUgc3VyZS4gSXTigJlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSB0byBsb2NhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgc3ViZGlyZWN0b3J5LCBzbyB0aGlzIGlzIGEgc2Vuc2libGUgZmlyc3QgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBYRlJNLCBwYXJ0aWN1bGFybHkgd2hhdCBmbGlwcyB0aG9zZSBjcnVjaWFsIHN3aXRjaGVzLiBNeSBicmFpbiBpcyBhbHJlYWR5IGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgaXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zIHdpdGggZW5hYmxpbmcgWEZSTSBhbmQgaXRzIHZhcmlvdXMgY29tcG9uZW50cy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIG9uIGBYRlJNYCBpdHNlbGYsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgdXNlci1zcGFjZSBzdXBwb3J0IChgWEZSTV9VU0VSYCkuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYWxsIHRoZSBkaWZmZXJlbnQgSVBzZWMgdHJhbnNmb3JtIG1vZGVzOiBgSU5FVF9YRlJNX01PREVfKmAuIFRoZSBFU1AgYW5kIEFIIHByb3RvY29scyAoYElORVRfRVNQYCBhbmQgYElORVRfQUhgKSBhcmUsIG9mIGNvdXJzZSwgY3JpdGljYWwgcGllY2VzIG9mIHRoYXQsIHNvIEkmIzM5O2xsIHNlZSBob3cgdGhvc2UgbGluayBpbi4gRmluYWxseSwgSSYjMzk7bGwgYWxzbyBjaGVjayBob3cgYFhGUk1fU1VCX1BPTElDWWAsIGFuZCBvdGhlciBwb2xpY3ktcmVsYXRlZCBvcHRpb25zIGFyZSBoYW5kbGVkLCBzaW5jZSB0aGV5IGFyZSB2aXRhbCB0byBjb21wbGV0ZSB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB3aWxsIGJlIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBzaG91bGQgZ3VpZGUgbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFhGUk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgWEZSTVxuICAgNjpcdFx0Ym9vbFxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgWEZSTV9PRkZMT0FEXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFhGUk1fQUxHT1xuICAxNTpcdFx0dHJpc3RhdGVcbiAgMTY6XHRcdHNlbGVjdCBYRlJNXG4gIDE3Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDE4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFQURcbiAgMTk6XHRcdHNlbGVjdCBDUllQVE9fSEFTSFxuICAyMDpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICAyMTpcdFxuICAyMjpcdGlmIElORVRcbiAgMjM6XHRjb25maWcgWEZSTV9VU0VSXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4gIDI1Olx0XHRzZWxlY3QgWEZSTV9BTEdPXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAgMjg6XHRcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXHUwMDI2XHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcdTAwMjZcdTAwMjYgXFxcbiAgMzU6XHRcdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuICAzNjpcdFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzc6XHRcdGhlbHBcbiAgMzg6XHRcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXG4gIDM5Olx0XHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIFhGUk1fSU5URVJGQUNFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVwmIzM0O1xuICA0NTpcdFx0ZGVwZW5kcyBvbiBYRlJNIFx1MDAyNlx1MDAyNiBJUFY2XG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgcHJvdmlkZXMgYSB2aXJ0dWFsIGludGVyZmFjZSB0byByb3V0ZSBJUHNlYyB0cmFmZmljLlxuICA0ODpcdFxuICA0OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1MDpcdFxuICA1MTpcdGNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbiAgNTI6XHRcdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4gIDUzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNTQ6XHRcdGhlbHBcbiAgNTU6XHRcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxuICA1NjpcdFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cbiAgNTc6XHRcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxuICA1ODpcdFxuICA1OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkzOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKlRyYWNpbmcgdGhlIFhGUk0gRGVwZW5kZW5jeSBUcmVlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgQ09ORklHX1hGUk1gIGdldHMgZW5hYmxlZCBpbiB0aGUga2VybmVsLiBDbGVhcmx5LCBpdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIG9wdGlvbjsgaXQmIzM5O3MgcHVsbGVkIGluIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBUaGUgbW9zdCBpbW1lZGlhdGUgcGF0aCBzZWVtcyB0byBiZSB0aHJvdWdoIGBYRlJNX0FMR09gLCB3aGljaCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIHRoaW5ncyBsaWtlIGBYRlJNX1VTRVJgIGFuZCBgTkVUX0tFWWAsIGFuZCBwb3RlbnRpYWxseSBkaXJlY3RseSBpbiB0aGUgSVBzZWMgb3IgSU5FVCBzdWJzeXN0ZW1zLgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IHRyZWUgYW5kIHNlZSBleGFjdGx5IHdoYXQgc2VsZWN0cyBYRlJNLiBXaGVyZSBhcmUgYWxsIHRoZSBkaWZmZXJlbnQgcGxhY2VzIHRoYXQgYXJlIHB1bGxpbmcgdGhpcyBpbj8gVW5kZXJzdGFuZGluZyB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgZW5hYmxpbmcgYENPTkZJR19YRlJNYCB3aWxsIHByb3ZpZGUgZGVlcGVyIGluc2lnaHRzIGludG8gdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBmZWF0dXJlcyBidWlsdCB1cG9uIHRoaXMgZm91bmRhdGlvbmFsIGJsb2NrLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgYWxsIHRoZSBzZWxlY3Rpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDctXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjQvS2NvbmZpZy0zMDktXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNTMtXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTE1LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6MTY6XHRzZWxlY3QgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy0xNy1cdHNlbGVjdCBDUllQVE9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDIKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUG9saWN5IExvb2t1cCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGluIHRoZSBYRlJNIHBvbGljeSBsb29rdXAgY29kZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHdvcnRoIHB1cnN1aW5nLiBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfWEZSTWAsIGBDT05GSUdfWEZSTV9VU0VSYCwgYW5kIGBDT05GSUdfSU5FVGAuIFRoZXNlLCBhbG9uZyB3aXRoIGBDT05GSUdfTkVUX0tFWWAsIGFyZSBhbGwga2V5IHRvIHVzZXItc3BhY2UgY29udHJvbCBhbmQgdGVzdGluZy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGFjdGl2ZS4KCk5leHQsIEkgemVyb2VkIGluIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBzcGVjaWZpY2FsbHkgY2hlY2tlZDogYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBgeGZybV9wb2xpY3lfbG9va3VwYCwgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AsIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AsIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgLCBhbmQgYF9feGZybV9wb2xpY3lfY2hlY2tgLiBJdCYjMzk7cyBnb29kIHRoYXQgbm9uZSBvZiB0aGVzZSBhcmUgZ2VuZXJpYywgbG93LWxldmVsIHN5c3RlbSBmdW5jdGlvbnMsIGJ1dCBhcmUgYWxsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIElQc2VjL1hGUk0gcG9saWN5IGhhbmRsaW5nLiBUaGF0IGZvY3VzZXMgdGhlIHNjb3BlLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB1c2Ugb2YgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AuIFRoZSBhZGRpdGlvbiBvZiB0aGUgc2VxY291bnQgdmVyaWZpY2F0aW9uIChgcmVhZF9zZXFjb3VudF9iZWdpbmAgYW5kIGByZWFkX3NlcWNvdW50X3JldHJ5YCkgc3Ryb25nbHkgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBjb25jdXJyZW50IGluZXhhY3QgcG9saWN5IGxvb2t1cHMgYW5kIHVwZGF0ZXMuIFRoYXQgc291bmRzIGxpa2UgYSBjb25jdXJyZW5jeSBidWcsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLgoKQ29uc2lkZXJpbmcgdGhlIGF0dGFjayBzdXJmYWNlLCB0aGlzIGlzIHByaW1lIGZ1enppbmcgdGVycml0b3J5LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb2RlIHRoYXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggbmV0d29yayB0cmFmZmljLCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIFBGX0tFWSBzb2NrZXRzLCBvciBwb3RlbnRpYWxseSBldmVuIHNvY2tldCBjYWxscyB0aGF0IHRyaWdnZXIgSVBzZWMgcG9saWN5IGV2YWx1YXRpb25zLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHJvdXRlIGludG8gdGhlIGtlcm5lbCBhbmQgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvci4KCkZpbmFsIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlnczogYFhGUk1gLCBgWEZSTV9VU0VSYCwgYElORVRgLi4uYWxsIGdvb2QuIFRpbWUgdG8gbW92ZSBmb3J3YXJkIGFuZCB0ZXN0LiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXAmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O19feGZybV9wb2xpY3lfY2hlY2smIzM0OywKICAgICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUgaW4gbmV0L3hmcm0veGZybV9wb2xpY3kuYyB0byBwcm90ZWN0IGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBldmFsdWF0aW9uIHdpdGggdGhlIGluZXhhY3QgYmluJiMzOTtzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3BvbGljeV9sb29rdXAmIzM0OywKICAgICYjMzQ7eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O3hmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgICAmIzM0O19feGZybV9wb2xpY3lfY2hlY2smIzM0OywKICAgICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUgaW4gbmV0L3hmcm0veGZybV9wb2xpY3kuYyB0byBwcm90ZWN0IGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBldmFsdWF0aW9uIHdpdGggdGhlIGluZXhhY3QgYmluJiMzOTtzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyAoYGJpbi1cdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cbi0gVGhlIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUgYGNhbmRgIGNvbnRpbnVlcyB0byBiZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KClgIGluIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygpYC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cblxuMi4gS0FTQU4gdnMgS01TQU46XG4tIENvbmN1cnJlbmN5IGlzc3VlcywgUkNVIGxpZmV0aW1lIGlzc3VlcywgYW5kIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNzgxNWVjZDQ5YjNkM2ExZWM5ZWQzOTQwN2ZjMGE3YmFmYzkxOWRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMDoxMzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDkzMmEzMTNiOTQ2MGEuLjVkNGU4NjM4NjNkZmUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjE1Nyw2ICYjNDM7MjE1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLAogCXN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYmluOwogCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0OwogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKJiM0MzsJdW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7CiAJdW5zaWduZWQgaW50IHNlcXVlbmNlOwogCWludCBlcnI7CiAKQEAgLTIxOTEsMTIgJiM0MzsyMTkyLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLAogCQlnb3RvIHNraXBfaW5leGFjdDsKIAogCWJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7Ci0JaWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKCZhbXA7Y2FuZCwgYmluLCBzYWRkciwKLQkJCQkJCQkgZGFkZHIpKQomIzQzOwlpZiAoIWJpbikKJiM0MzsJCWdvdG8gc2tpcF9pbmV4YWN0OwomIzQzOwomIzQzOwlpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO2Jpbi0mZ3Q7Y291bnQpOwomIzQzOwlpZiAoIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKCZhbXA7Y2FuZCwgYmluLCBzYWRkciwgZGFkZHIpKQogCQlnb3RvIHNraXBfaW5leGFjdDsKIAogCXBvbCA9IHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcygmYW1wO2NhbmQsIHJldCwgZmwsIHR5cGUsCiAJCQkJCSAgZmFtaWx5LCBpZl9pZCk7CiYjNDM7CWlmIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7YmluLSZndDtjb3VudCwgaW5leGFjdF9zZXF1ZW5jZSkpCiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwogCWlmIChwb2wpIHsKIAkJcmV0ID0gcG9sOwogCQlpZiAoSVNfRVJSKHBvbCkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG9saWN5IExvb2t1cCBDaGFuZ2UgaW4gWEZSTSoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgaGl0dGluZyBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHBvbGljeSBsb29rdXBzIGJhc2VkIG9uIHRoZWlyIHR5cGUgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdGhvcm91Z2hseSwgc28gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZS4KCk15IGZpcnN0IG1vdmUgaXMgdG8gdXNlIGByZWFkLWZpbGVgIChvciBwb3RlbnRpYWxseSBgZ3JlcHBlcmAgZGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5KSB0byBnZXQgYSBsb2NhbCBjb250ZXh0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMjE1NyB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgIC0gdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGFyZWEgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBCeSBleGFtaW5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEkgY2FuIGdhaW4gYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgZnVuY3Rpb24gaXMgdXNlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBvdmVyYWxsIHBvbGljeSBsb29rdXAgbG9naWMgbG9va3MgbGlrZSwgYmVmb3JlIGV2ZW4gbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBUaGlzIGNvbnRleHR1YWwgYXdhcmVuZXNzIHdpbGwgYmUgY3JpdGljYWwgdG8gcXVpY2tseSBncmFzcCB0aGUgaW50ZW50aW9uIGFuZCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTUwOlx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4yMTUxOlx0XHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxuMjE1MjpcdFx0XHRcdFx0XHRcdCAgICAgdTE2IGZhbWlseSwgdTggZGlyLFxuMjE1MzpcdFx0XHRcdFx0XHRcdCAgICAgdTMyIGlmX2lkKVxuMjE1NDpcdHtcbjIxNTU6XHRcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbjIxNTY6XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgKnNhZGRyO1xuMjE1NzpcdFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiaW47XG4yMTU4Olx0XHRzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDtcbjIxNTk6XHRcdHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjtcbjIxNjA6XHRcdHVuc2lnbmVkIGludCBpbmV4YWN0X3NlcXVlbmNlO1xuMjE2MTpcdFx0dW5zaWduZWQgaW50IHNlcXVlbmNlO1xuMjE2MjpcdFx0aW50IGVycjtcbjIxNjM6XHRcbjIxNjQ6XHRcdGRhZGRyID0geGZybV9mbG93aV9kYWRkcihmbCwgZmFtaWx5KTtcbjIxNjU6XHRcdHNhZGRyID0geGZybV9mbG93aV9zYWRkcihmbCwgZmFtaWx5KTtcbjIxNjY6XHRcdGlmICh1bmxpa2VseSghZGFkZHIgfHwgIXNhZGRyKSlcbjIxNjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMTY4Olx0XG4yMTY5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTcwOlx0IHJldHJ5OlxuMjE3MTpcdFx0ZG8ge1xuMjE3MjpcdFx0XHRzZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uKTtcbjIxNzM6XHRcdFx0Y2hhaW4gPSBwb2xpY3lfaGFzaF9kaXJlY3QobmV0LCBkYWRkciwgc2FkZHIsIGZhbWlseSwgZGlyKTtcbjIxNzQ6XHRcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpO1xuMjE3NTpcdFxuMjE3NjpcdFx0cmV0ID0gTlVMTDtcbjIxNzc6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb2wsIGNoYWluLCBieWRzdCkge1xuMjE3ODpcdFx0XHRlcnIgPSB4ZnJtX3BvbGljeV9tYXRjaChwb2wsIGZsLCB0eXBlLCBmYW1pbHksIGlmX2lkKTtcbjIxNzk6XHRcdFx0aWYgKGVycikge1xuMjE4MDpcdFx0XHRcdGlmIChlcnIgPT0gLUVTUkNIKVxuMjE4MTpcdFx0XHRcdFx0Y29udGludWU7XG4yMTgyOlx0XHRcdFx0ZWxzZSB7XG4yMTgzOlx0XHRcdFx0XHRyZXQgPSBFUlJfUFRSKGVycik7XG4yMTg0Olx0XHRcdFx0XHRnb3RvIGZhaWw7XG4yMTg1Olx0XHRcdFx0fVxuMjE4NjpcdFx0XHR9IGVsc2Uge1xuMjE4NzpcdFx0XHRcdHJldCA9IHBvbDtcbjIxODg6XHRcdFx0XHRicmVhaztcbjIxODk6XHRcdFx0fVxuMjE5MDpcdFx0fVxuMjE5MTpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0LVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxuMjE5MjpcdFx0XHRnb3RvIHNraXBfaW5leGFjdDtcbjIxOTM6XHRcbjIxOTQ6XHRcdGJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7XG4yMTk1Olx0XHRpZiAoIWJpbilcbjIxOTY6XHRcdFx0Z290byBza2lwX2luZXhhY3Q7XG4yMTk3Olx0XG4yMTk4Olx0XHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZiaW4tXHUwMDNlY291bnQpO1xuMjE5OTpcdFx0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXG4yMjAwOlx0XHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuMjIwMTpcdFxuMjIwMjpcdFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXG4yMjAzOlx0XHRcdFx0XHRcdCAgZmFtaWx5LCBpZl9pZCk7XG4yMjA0Olx0XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZiaW4tXHUwMDNlY291bnQsIGluZXhhY3Rfc2VxdWVuY2UpKVxuMjIwNTpcdFx0XHRnb3RvIHJldHJ5O1xuMjIwNjpcdFxuMjIwNzpcdFx0aWYgKHBvbCkge1xuMjIwODpcdFx0XHRyZXQgPSBwb2w7XG4yMjA5Olx0XHRcdGlmIChJU19FUlIocG9sKSlcbjIyMTA6XHRcdFx0XHRnb3RvIGZhaWw7XG4yMjExOlx0XHR9XG4yMjEyOlx0XG4yMjEzOlx0c2tpcF9pbmV4YWN0OlxuMjIxNDpcdFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpXG4yMjE1Olx0XHRcdGdvdG8gcmV0cnk7XG4yMjE2Olx0XG4yMjE3Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAheGZybV9wb2xfaG9sZF9yY3UocmV0KSlcbjIyMTg6XHRcdFx0Z290byByZXRyeTtcbjIyMTk6XHRmYWlsOlxuMjIyMDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMjIxOlx0XG4yMjIyOlx0XHRyZXR1cm4gcmV0O1xuMjIyMzpcdH1cbjIyMjQ6XHRcbjIyMjU6XHRzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuMjIyNjpcdFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxuMjIyNzpcdFx0XHRcdFx0XHQgICAgICB1MTYgZmFtaWx5LCB1OCBkaXIsIHUzMiBpZl9pZClcbjIyMjg6XHR7XG4yMjI5Olx0I2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1lcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbW1pdDogQSBEZWVwZXIgRGl2ZSBpbnRvIFBvbGljeSBMb29rdXAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAsIHdoZXJlIHdlJiMzOTtyZSBzZWVpbmcgdGhlIGFkZGl0aW9uIG9mIGEgc2VxbG9jay9zZXFjb3VudCBjaGVjayBzcGVjaWZpY2FsbHkgYXJvdW5kIGNhbGxzIHRvIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgLiBMb29raW5nIGF0IHRoZSBiZWZvcmUgYW5kIGFmdGVyIHNuaXBwZXRzLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgcmFjZSBjb25kaXRpb24uCgpCZWZvcmUsIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb29rdXA6IGZpbmQgdGhlICYjMzQ7YmluJiMzNDssIGNoZWNrIGlmIHdlIGV2ZW4gKmhhdmUqIGEgJiMzNDtiaW4mIzM0OywgYW5kIGlmIHNvLCBjYWxsIHRob3NlIGNhbmRpZGF0ZXMvZXZhbHVhdGUgZnVuY3Rpb25zLiBOb3csIHdlIHJlYWQgYGJpbi0mZ3Q7Y291bnRgLCBhbmQgaWYsIGFmdGVyIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLCB3ZSBmaW5kIHRoZSBzZXF1ZW5jZSBjb3VudCBoYXMgY2hhbmdlZCwgd2UgKnJldHJ5Ki4gVGhhdCYjMzk7cyB0aGUgZXNzZW5jZSBvZiBhIHJlYWQtY29weS11cGRhdGUgbWVjaGFuaXNtLCBvciBhdCBsZWFzdCBhIGZsYXZvciBvZiBpdC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB3aGF0IGlzIGBjYW5kYCwgd2hhdCBpcyBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgLCB3aGF0IGlzIGBiaW4tJmd0O2NvdW50YCBhY3R1YWxseSBwcm90ZWN0aW5nPyBJdOKAmXMgbm90IGVub3VnaCB0byBzZWUgYSBzZXF1ZW5jZSBjb3VudDsgd2UgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiBpcyBiZWluZyBndWFyZGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgd2hlcmUgSSBuZWVkIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzdGF0ZSBjaGFuZ2VzIG1pZ2h0IGludmFsaWRhdGUgdGhvc2UgY2FuZGlkYXRlcy4KClRpbWUgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBmaWxlIGl0c2VsZi4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzYCBhbmQgYHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlc2AgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTQ1PWVudW0geGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVfdHlwZSB7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNTMtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1NDpzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzIHtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTU1LVx0c3RydWN0IGhsaXN0X2hlYWQgKnJlc1tYRlJNX1BPTF9DQU5EX01BWF07XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMDU9c3RhdGljIGJvb2xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjA2Onhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNy1cdFx0XHRcdCAgICBzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmIsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNjQ1PXhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE2NTYtXHRpZiAoIWNoYWluKSB7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2NTc6XHRcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTY1OC1cdFx0aW50IGk7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMDIxPXN0YXRpYyBib29sXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwMjI6eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAyMy1cdFx0XHRcdCAgICBzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmIsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMTI2PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKlxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTI3Onhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTI4LVx0XHRcdCAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnByZWZlcixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIxNTA9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTU0LXtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjE1NTpcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjE1Ni1cdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgKnNhZGRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgSW5leGFjdCBQb2xpY3kgTWF0Y2hpbmcgaW4gWEZSTSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIElQc2VjIHBvbGljeSBsb29rdXAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbF9pbmV4YWN0X2JpbmAgd29yayBpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlaXIgZGVmaW5pdGlvbnMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgc2NlbmFyaW9zIHdoZXJlIHRoZXJlIGlzbiYjMzk7dCBhICpwZXJmZWN0KiBwb2xpY3kgbWF0Y2ggYW5kIGhvdyBpdCBuYXJyb3dzIGRvd24gdGhlIGNhbmRpZGF0ZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlICYjMzk7aW5leGFjdCYjMzk7IGFzcGVjdCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWxseSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBwb2xpY3kgc2VsZWN0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBsb2dpYyBpbnZvbHZlZCBpbiBidWlsZGluZyB0aGUgJiMzNDtiaW5zJiMzNDsgb3IgY2FuZGlkYXRlIGxpc3RzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSB3YW50IHRvIGxvb2sgYXQgYWxsIG9mIHRoZSBmYWN0b3JzIHRoYXQgY2FuIGFmZmVjdCBob3cgdGhpcyB3b3JrcyBhdCB0aGlzIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMjA6XHRcbjIwMjE6XHRzdGF0aWMgYm9vbFxuMjAyMjpcdHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXG4yMDIzOlx0XHRcdFx0XHQgICAgc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiLFxuMjAyNDpcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbjIwMjU6XHRcdFx0XHRcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIpXG4yMDI2Olx0e1xuMjAyNzpcdFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfbm9kZSAqbjtcbjIwMjg6XHRcdHUxNiBmYW1pbHk7XG4yMDI5Olx0XG4yMDMwOlx0XHRpZiAoIWIpXG4yMDMxOlx0XHRcdHJldHVybiBmYWxzZTtcbjIwMzI6XHRcbjIwMzM6XHRcdGZhbWlseSA9IGItXHUwMDNlay5mYW1pbHk7XG4yMDM0Olx0XHRtZW1zZXQoY2FuZCwgMCwgc2l6ZW9mKCpjYW5kKSk7XG4yMDM1Olx0XHRjYW5kLVx1MDAzZXJlc1tYRlJNX1BPTF9DQU5EX0FOWV0gPSBcdTAwMjZiLVx1MDAzZWhoZWFkO1xuMjAzNjpcdFxuMjAzNzpcdFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXHUwMDI2Yi1cdTAwM2Vyb290X2QsIFx1MDAyNmItXHUwMDNlY291bnQsIGRhZGRyLFxuMjAzODpcdFx0XHRcdFx0XHQgICAgZmFtaWx5KTtcbjIwMzk6XHRcdGlmIChuKSB7XG4yMDQwOlx0XHRcdGNhbmQtXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfREFERFJdID0gXHUwMDI2bi1cdTAwM2VoaGVhZDtcbjIwNDE6XHRcdFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXHUwMDI2bi1cdTAwM2Vyb290LCBcdTAwMjZiLVx1MDAzZWNvdW50LCBzYWRkcixcbjIwNDI6XHRcdFx0XHRcdFx0XHQgICAgZmFtaWx5KTtcbjIwNDM6XHRcdFx0aWYgKG4pXG4yMDQ0Olx0XHRcdFx0Y2FuZC1cdTAwM2VyZXNbWEZSTV9QT0xfQ0FORF9CT1RIXSA9IFx1MDAyNm4tXHUwMDNlaGhlYWQ7XG4yMDQ1Olx0XHR9XG4yMDQ2Olx0XG4yMDQ3Olx0XHRuID0geGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihcdTAwMjZiLVx1MDAzZXJvb3RfcywgXHUwMDI2Yi1cdTAwM2Vjb3VudCwgc2FkZHIsXG4yMDQ4Olx0XHRcdFx0XHRcdCAgICBmYW1pbHkpO1xuMjA0OTpcdFx0aWYgKG4pXG4yMDUwOlx0XHRcdGNhbmQtXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfU0FERFJdID0gXHUwMDI2bi1cdTAwM2VoaGVhZDtcbjIwNTE6XHRcbjIwNTI6XHRcdHJldHVybiB0cnVlO1xuMjA1MzpcdH1cbjIwNTQ6XHRcbjIwNTU6XHRzdGF0aWMgc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpcbjIwNTY6XHR4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3Uoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCB1MTYgZmFtaWx5LFxuMjA1NzpcdFx0XHRcdCAgICAgICB1OCBkaXIsIHUzMiBpZl9pZClcbjIwNTg6XHR7XG4yMDU5Olx0XHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9rZXkgayA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM5OQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWRkaW5nIGEgc2VxdWVuY2UgY291bnQgdmFsaWRhdGlvbiAoYGJpbi0mZ3Q7Y291bnRgKSBhcm91bmQgdGhlIGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBsb29rdXAgYW5kIGV2YWx1YXRpb24gcHJvY2Vzc2VzIHdpdGhpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSgpYC4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVuIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyAodXBkYXRlcywgcmVtb3ZhbHMsIGluc2VydGlvbnMpIG1vZGlmeSB0aGUgaW5leGFjdCBwb2xpY3kgdHJlZSB1bmRlciBSQ1UuCgpJJiMzOTt2ZSBnb3QgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZS4gTGV0JiMzOTtzIHNlZSBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoZSB2YXJpYWJsZSBgY2FuZGAgaXMgY2xlYXJseSBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXQoY2FuZCwgMCwgc2l6ZW9mKCpjYW5kKSlgLiBUaGUgc2VxdWVuY2UgY291bnRlciBpdHNlbGYsIGBpbmV4YWN0X3NlcXVlbmNlYCwgaXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgZnJvbSBgcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO2Jpbi0mZ3Q7Y291bnQpYC4gVGhlcmUmIzM5O3Mgbm8gaW52b2x2ZW1lbnQgb2YgbmV3bHkgY3JlYXRlZCBidWZmZXJzIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU28sIG5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCBpbmZvIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgY29kZSByZS1ldmFsdWF0ZXMgdmFyaWFibGVzIG9uIGByZXRyeWAgYWZ0ZXIgY2hlY2tpbmcgdGhlIGBzZXFjb3VudGAsIHNvIG5vIHN0YWxlIHBvaW50ZXJzIG9yIGRhdGEgc2hvdWxkIGJlIHVzZWQuCgpOb3csIEtNU0FOIHZzLiBLQVNBTi4uLiBkb2VzIEtNU0FOIG9mZmVyIGFueSBzcGVjaWZpYyBhZHZhbnRhZ2VzIGhlcmU/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBTaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWRzLCBLTVNBTiBpcyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bCBoZXJlLiBLQVNBTiBpcyBzdWZmaWNpZW50IGZvciBjYXRjaGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gUkNVLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIHVzYWdlLiBUaGlzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2sgaGVscHMgZ3VhcmQgYWdhaW5zdCB0aG9zZSBraW5kcyBvZiByYWNlIGNvbmRpdGlvbnMuCgpJbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggcHJpbWFyaWx5IHRhY2tsZXMgY29uY3VycmVuY3kgY29uY2VybnMgZHVyaW5nIHBvbGljeSBsb29rdXBzLiBJdCBlbnN1cmVzIGRhdGEgY29uc2lzdGVuY3kgdW5kZXIgUkNVLCBhbmQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IG1lbW9yeSBzYWZldHkgcHJvYmxlbXMgdGhpcyBjb2RlIG1pZ2h0IGhhdmUuIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBsb29raW5nIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlciBjaGVja3MgKGBiaW4tXHUwMDNlY291bnRgKSBhcm91bmQgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGxvb2t1cCBhbmQgZXZhbHVhdGlvbiAoYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzYCBhbmQgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2ApIGluIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKClgIHRvIGhhbmRsZSBjb25jdXJyZW50IHRyZWUgbW9kaWZpY2F0aW9ucyBwcm9wZXJseS5cblxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XG4tIFRoZSBsb2NhbCB2YXJpYWJsZSBgaW5leGFjdF9zZXF1ZW5jZWAgaXMgaW1tZWRpYXRlbHkgaW5pdGlhbGl6ZWQgYnkgYHJlYWRfc2VxY291bnRfYmVnaW4oKWAuXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG5cbjIuIEtBU0FOIHZzIEtNU0FOOlxuLSBDb25jdXJyZW5jeSBpc3N1ZXMsIFJDVSBsaWZldGltZSBpc3N1ZXMsIGFuZCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cbi0gS01TQU4gaXMgbm90IHJlcXVpcmVkIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyAoYGJpbi1cdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxuXG4xLiBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczpcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cbi0gVGhlIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUgYGNhbmRgIGNvbnRpbnVlcyB0byBiZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KClgIGluIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygpYC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cblxuMi4gS0FTQU4gdnMgS01TQU46XG4tIENvbmN1cnJlbmN5IGlzc3VlcywgUkNVIGxpZmV0aW1lIGlzc3VlcywgYW5kIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLlxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjE0LjQyMTQzNzYzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTQzMTA2OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVcIixcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cFwiLFxuICAgIFwieGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc1wiLFxuICAgIFwiX194ZnJtX3BvbGljeV9jaGVja1wiLFxuICAgIFwieGZybV9sb29rdXBfd2l0aF9pZmlkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVxcdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOOlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSBpbiBuZXQveGZybS94ZnJtX3BvbGljeS5jIHRvIHByb3RlY3QgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGV2YWx1YXRpb24gd2l0aCB0aGUgaW5leGFjdCBiaW4ncyBzZXFjb3VudCAocmV0cnlpbmcgb24gY29uY3VycmVudCBtb2RpZmljYXRpb24pLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBleGVyY2lzZWQgd2hlbmV2ZXIgSVBzZWMvWEZSTSBwb2xpY2llcyBhcmUgbG9va2VkIHVwIG9yIG1hdGNoZWQgYWdhaW5zdCBuZXR3b3JrIHRyYWZmaWMgYW5kIHNvY2tldCBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6MTQuNDIxNDQzNjkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgzNjM2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNzgxNWVjZDQ5YjNkM2ExZWM5ZWQzOTQwN2ZjMGE3YmFmYzkxOWRiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDA6MTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41ZDRlODYzODYzZGZlIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuQEAgLTIxNTcsNiArMjE1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxcbiBcXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcXG4gXFx0c3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpyZXQ7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjtcXG4rXFx0dW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7XFxuIFxcdHVuc2lnbmVkIGludCBzZXF1ZW5jZTtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTIxOTEsMTIgKzIxOTIsMTggQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXFxuIFxcdFxcdGdvdG8gc2tpcF9pbmV4YWN0O1xcbiBcXG4gXFx0YmluID0geGZybV9wb2xpY3lfaW5leGFjdF9sb29rdXBfcmN1KG5ldCwgdHlwZSwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG4tXFx0aWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFxcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgZGFkZHIpKVxcbitcXHRpZiAoIWJpbilcXG4rXFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuK1xcbitcXHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2YmluLVxcdTAwM2Vjb3VudCk7XFxuK1xcdGlmICgheGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoXFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsIGRhZGRyKSlcXG4gXFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuIFxcbiBcXHRwb2wgPSB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMoXFx1MDAyNmNhbmQsIHJldCwgZmwsIHR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZmFtaWx5LCBpZl9pZCk7XFxuK1xcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZiaW4tXFx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFxuIFxcdGlmIChwb2wpIHtcXG4gXFx0XFx0cmV0ID0gcG9sO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBvbCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjE0LjgzMDU0NjM1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk5NjM0MzUwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZVwiLFxuICAgIFwieGZybV9wb2xpY3lfbG9va3VwXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNcIixcbiAgICBcInhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzXCIsXG4gICAgXCJfX3hmcm1fcG9saWN5X2NoZWNrXCIsXG4gICAgXCJ4ZnJtX2xvb2t1cF93aXRoX2lmaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlIGluIG5ldC94ZnJtL3hmcm1fcG9saWN5LmMgdG8gcHJvdGVjdCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgZXZhbHVhdGlvbiB3aXRoIHRoZSBpbmV4YWN0IGJpbidzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI3ODE1ZWNkNDliM2QzYTFlYzllZDM5NDA3ZmMwYTdiYWZjOTE5ZGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAwOjEzOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbmluZGV4IDkzMmEzMTNiOTQ2MGEuLjVkNGU4NjM4NjNkZmUgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5AQCAtMjE1Nyw2ICsyMTU3LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4gXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcbiBcdHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0O1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKmNoYWluO1xuK1x0dW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7XG4gXHR1bnNpZ25lZCBpbnQgc2VxdWVuY2U7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTIxOTEsMTIgKzIxOTIsMTggQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXG4gXHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuIFxuIFx0YmluID0geGZybV9wb2xpY3lfaW5leGFjdF9sb29rdXBfcmN1KG5ldCwgdHlwZSwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcbi1cdGlmICghYmluIHx8ICF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLFxuLVx0XHRcdFx0XHRcdFx0IGRhZGRyKSlcbitcdGlmICghYmluKVxuK1x0XHRnb3RvIHNraXBfaW5leGFjdDtcbitcbitcdGluZXhhY3Rfc2VxdWVuY2UgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmJpbi1cdTAwM2Vjb3VudCk7XG4rXHRpZiAoIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsIGRhZGRyKSlcbiBcdFx0Z290byBza2lwX2luZXhhY3Q7XG4gXG4gXHRwb2wgPSB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXMoXHUwMDI2Y2FuZCwgcmV0LCBmbCwgdHlwZSxcbiBcdFx0XHRcdFx0ICBmYW1pbHksIGlmX2lkKTtcbitcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmJpbi1cdTAwM2Vjb3VudCwgaW5leGFjdF9zZXF1ZW5jZSkpXG4rXHRcdGdvdG8gcmV0cnk7XG4rXG4gXHRpZiAocG9sKSB7XG4gXHRcdHJldCA9IHBvbDtcbiBcdFx0aWYgKElTX0VSUihwb2wpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6MTQuODMwNTQ4MTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI3ODc0MTA5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyBhIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU29tZW9uZSB3YW50cyBtZSB0byBldmFsdWF0ZSBhIHBhdGNoIHRvIHNlZSBpZiBpdCdzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBpcyB0eXBpY2FsLiBUaGUgZGlmZiBmb2N1c2VzIG9uIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgZnVuY3Rpb24uIExvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYHJlYWRfc2VxY291bnRfYmVnaW5gIGFuZCBgcmVhZF9zZXFjb3VudF9yZXRyeWAgZm9yIGluZXhhY3QgcG9saWN5IGxvb2t1cHMuIElmIGEgcmV0cnkgaXMgbmVlZGVkLCBpdCBqdW1wcyB0byB0aGUgYHJldHJ5YCBsYWJlbC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYSByZWFkLWNvcHktdXBkYXRlLWxpa2UgY29uc3RydWN0LCBwb3NzaWJseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVudCBhY2Nlc3MgaXNzdWUuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgYWJvdmUgYm9hcmQuIFN0YW5kYXJkIGRldi9RQS9kZWZlbnNlIGFjdGl2aXR5IOKAkyBldmFsdWF0aW5nIHBhdGNoZXMsIGlkZW50aWZ5aW5nIGludGVyZXN0aW5nIHN5bWJvbHMsIGNvbmZpZ3MgZm9yIHN5emthbGxlcuKApiB0aGF0J3MgYWxsIGJlbmlnbi4gTm8gd29ycmllcyB0aGVyZS4gSSdtIG5vdCBnZW5lcmF0aW5nIGV4cGxvaXRzIG9yIGRlYWxpbmcgd2l0aCBhbnl0aGluZyBtYWxpY2lvdXMuXG5cblRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhlIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjb2RlLCBhbmQgd2hhdCB0aGUgYHJlYWRfc2VxY291bnRgIG9wZXJhdGlvbnMgYXJlIHByb3RlY3RpbmcuIE9uY2UgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMsIEkgY2FuIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlci4gSXMgaXQgbGlrZWx5IHRvIGV4cG9zZSBuZXcgY29kZSBwYXRocywgYW5kIHBvdGVudGlhbGx5IG5ldyB2dWxuZXJhYmlsaXRpZXMsIG9yIGlzIGl0IHRvbyBuYXJyb3cgaW4gc2NvcGU/IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVjaWRpbmcgd2hldGhlciB3ZSBuZWVkIHRvIGJyaW5nIG91dCB0aGUgaGVhdnkgYXJ0aWxsZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTUwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6MjcuNjE3OTYyNzE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1NSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE1NTpcXHRcXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzIGNhbmQ7XFxuMjE1NjpcXHRcXHRjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsICpzYWRkcjtcXG4yMTU3OlxcdFxcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYmluO1xcbjIxNTg6XFx0XFx0c3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpyZXQ7XFxuMjE1OTpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47XFxuMjE2MDpcXHRcXHR1bnNpZ25lZCBpbnQgaW5leGFjdF9zZXF1ZW5jZTtcXG4yMTYxOlxcdFxcdHVuc2lnbmVkIGludCBzZXF1ZW5jZTtcXG4yMTYyOlxcdFxcdGludCBlcnI7XFxuMjE2MzpcXHRcXG4yMTY0OlxcdFxcdGRhZGRyID0geGZybV9mbG93aV9kYWRkcihmbCwgZmFtaWx5KTtcXG4yMTY1OlxcdFxcdHNhZGRyID0geGZybV9mbG93aV9zYWRkcihmbCwgZmFtaWx5KTtcXG4yMTY2OlxcdFxcdGlmICh1bmxpa2VseSghZGFkZHIgfHwgIXNhZGRyKSlcXG4yMTY3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjIxNjg6XFx0XFxuMjE2OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE3MDpcXHQgcmV0cnk6XFxuMjE3MTpcXHRcXHRkbyB7XFxuMjE3MjpcXHRcXHRcXHRzZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9oYXNoX2dlbmVyYXRpb24pO1xcbjIxNzM6XFx0XFx0XFx0Y2hhaW4gPSBwb2xpY3lfaGFzaF9kaXJlY3QobmV0LCBkYWRkciwgc2FkZHIsIGZhbWlseSwgZGlyKTtcXG4yMTc0OlxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9oYXNoX2dlbmVyYXRpb24sIHNlcXVlbmNlKSk7XFxuMjE3NTpcXHRcXG4yMTc2OlxcdFxcdHJldCA9IE5VTEw7XFxuMjE3NzpcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9sLCBjaGFpbiwgYnlkc3QpIHtcXG4yMTc4OlxcdFxcdFxcdGVyciA9IHhmcm1fcG9saWN5X21hdGNoKHBvbCwgZmwsIHR5cGUsIGZhbWlseSwgaWZfaWQpO1xcbjIxNzk6XFx0XFx0XFx0aWYgKGVycikge1xcbjIxODA6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRVNSQ0gpXFxuMjE4MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMTgyOlxcdFxcdFxcdFxcdGVsc2Uge1xcbjIxODM6XFx0XFx0XFx0XFx0XFx0cmV0ID0gRVJSX1BUUihlcnIpO1xcbjIxODQ6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxODU6XFx0XFx0XFx0XFx0fVxcbjIxODY6XFx0XFx0XFx0fSBlbHNlIHtcXG4yMTg3OlxcdFxcdFxcdFxcdHJldCA9IHBvbDtcXG4yMTg4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxODk6XFx0XFx0XFx0fVxcbjIxOTA6XFx0XFx0fVxcbjIxOTE6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQtXFx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxcbjIxOTI6XFx0XFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdGJpbiA9IHhmcm1fcG9saWN5X2luZXhhY3RfbG9va3VwX3JjdShuZXQsIHR5cGUsIGZhbWlseSwgZGlyLCBpZl9pZCk7XFxuMjE5NTpcXHRcXHRpZiAoIWJpbilcXG4yMTk2OlxcdFxcdFxcdGdvdG8gc2tpcF9pbmV4YWN0O1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRpbmV4YWN0X3NlcXVlbmNlID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2YmluLVxcdTAwM2Vjb3VudCk7XFxuMjE5OTpcXHRcXHRpZiAoIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFxcdTAwMjZjYW5kLCBiaW4sIHNhZGRyLCBkYWRkcikpXFxuMjIwMDpcXHRcXHRcXHRnb3RvIHNraXBfaW5leGFjdDtcXG4yMjAxOlxcdFxcbjIyMDI6XFx0XFx0cG9sID0geGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKFxcdTAwMjZjYW5kLCByZXQsIGZsLCB0eXBlLFxcbjIyMDM6XFx0XFx0XFx0XFx0XFx0XFx0ICBmYW1pbHksIGlmX2lkKTtcXG4yMjA0OlxcdFxcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZiaW4tXFx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcXG4yMjA1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjIwNjpcXHRcXG4yMjA3OlxcdFxcdGlmIChwb2wpIHtcXG4yMjA4OlxcdFxcdFxcdHJldCA9IHBvbDtcXG4yMjA5OlxcdFxcdFxcdGlmIChJU19FUlIocG9sKSlcXG4yMjEwOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMjExOlxcdFxcdH1cXG4yMjEyOlxcdFxcbjIyMTM6XFx0c2tpcF9pbmV4YWN0OlxcbjIyMTQ6XFx0XFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9oYXNoX2dlbmVyYXRpb24sIHNlcXVlbmNlKSlcXG4yMjE1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjIxNjpcXHRcXG4yMjE3OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIXhmcm1fcG9sX2hvbGRfcmN1KHJldCkpXFxuMjIxODpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjIyMTk6XFx0ZmFpbDpcXG4yMjIwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIyMjE6XFx0XFxuMjIyMjpcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMjM6XFx0fVxcbjIyMjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjI3LjYxODE2NTU3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMTQ4OTc1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AuIFRoYXQgcGxhY2VzIHVzIHNxdWFyZWx5IHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0sIHRoZSBoZWFydCBvZiBJUHNlYyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgSSBrbm93IHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCwgYWNjZXNzaWJsZSB2aWEgc29ja2V0cywgbmV0bGluayAoc3BlY2lmaWNhbGx5IHRoZSB4ZnJtIG5ldGxpbmsgaW50ZXJmYWNlLCBhbmQgUEZfS0VZKSwgYW5kIGV2ZW4gc3RhbmRhcmQgSVAgdHJhZmZpYyB0aGF0IHRyaWdnZXJzIHBvbGljeSBsb29rdXBzLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeS5cblxuV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIHNlcXVlbmNlIGNvdW50IGxvY2tpbmcgYW5kIHJldHJ5IGxvZ2ljICpkdXJpbmcqIGFuIGluZXhhY3QgcG9saWN5IGxvb2t1cC4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQg4oCTIHRoaXMgaXNuJ3QganVzdCBzb21lIGlzb2xhdGVkIGZ1bmN0aW9uOyBpdCdzIGludHJpY2F0ZWx5IGludm9sdmVkIGluIHRoZSBwcm9jZXNzIG9mIG1ha2luZyBwb2xpY3kgZGVjaXNpb25zLiBJdCdzIGFjdGl2ZWx5IGV4ZWN1dGVkIGNvZGUsIHJlYWNoYWJsZSB0aHJvdWdoIHZhcmlvdXMgbmV0d29yayBwYXRocy4gVGhlcmVmb3JlLCB0aGUgcHJvYmFiaWxpdHkgb2YgcmVhY2hpbmcgdGhpcyBjb2RlIHBhdGggd2l0aCBjcmFmdGVkIGlucHV0IGlzIGhpZ2guXG5cblNvLCAqV29ydGhGdXp6aW5nKiBpcyBkZWZpbml0ZWx5IGB0cnVlYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCBhbmQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcG9saWN5IG1vZHVsZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgcG9saWNpZXMgYXJlIG1hbmlwdWxhdGVkLCBob3cgdGhleSdyZSBsb29rZWQgdXAsIGFuZCB3aGF0IHBvdGVudGlhbCB0cmlnZ2VycyBleGlzdC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgcG9pbnRzIHRvIGluc2VydCBmdXp6aW5nIHZlY3RvcnMuIFdlIG5lZWQgdG8gZmluZCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgdG8gY3JhZnQgZWZmZWN0aXZlIGZ1enppbmcgaGFybmVzc2VzLiBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMwLjgzMzA2NTE0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU0MTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jPTIxMjc9eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIxNDktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTUwOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjE1MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyMjU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzMS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzI6XFx0cG9sID0geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIFhGUk1fUE9MSUNZX1RZUEVfU1VCLCBmbCwgZmFtaWx5LFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzMy1cXHRcXHRcXHRcXHRcXHRkaXIsIGlmX2lkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIzNi0jZW5kaWZcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyMzc6XFx0cmV0dXJuIHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUobmV0LCBYRlJNX1BPTElDWV9UWVBFX01BSU4sIGZsLCBmYW1pbHksXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM4LVxcdFxcdFxcdFxcdFxcdCBkaXIsIGlmX2lkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjgxMT1zdGF0aWMgaW50IHhmcm1fZXhwYW5kX3BvbGljaWVzKGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsIHUxNiBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzEtXFx0ICAgIHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyODMyOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHhwX25ldChwb2xzWzBdKSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzY3Nz1pbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3ODItXFx0aWYgKHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzgzOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsLCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MjktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTMwOlxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUobmV0LCB0eXBlLCBcXHUwMDI2ZmwsIHNlbC1cXHUwMDNlZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MzEtXFx0aWYgKElTX0VSUl9PUl9OVUxMKHBvbCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMwLjg4MjYxMTMxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjI0NDI5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFBvbGljeSBMb29rdXAgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uLCBhbmQgaXQncyBsb29raW5nIGxpa2UgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIEkgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU2luY2UgaXQncyBzdGF0aWMsIEkga25vdyBJIHdvbid0IGZpbmQgaXQgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGF0IGZpbGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUsIGFuZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBgbmV0L3hmcm0vYCBkaXJlY3RvcnksIHRoYXQgbWlnaHQgaW5kaXJlY3RseSB1dGlsaXplIHRoaXMgbG9va3VwIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgcG9saWN5IHJldHJpZXZhbC4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBnbG9iYWwgc3ltYm9scz9cblxuVGhlbiwgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGNhbGxlcnMgb2YgYHhmcm1fcG9saWN5X2xvb2t1cGAgaW4gZ2VuZXJhbC4gU2VlaW5nIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCBwb2xpY3kgbG9va3VwIGxvZ2ljIGFuZCByZXZlYWwgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYC4gSSBzdXNwZWN0IHRoZSBhbnN3ZXIgaXMgc29tZXdoZXJlIGluIHRoZSBicm9hZGVyIHBvbGljeSBoYW5kbGluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGNhbGxlcnMgYW5kIGZvbGxvdyB0aGUgdHJhaWwgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMzLjMwNTA1NzEzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgzMjM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3BvbGljeV9sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jPTE5NjQ9c3RhdGljIGludCB4ZnJtX3BvbGljeV9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk3OS1cXHRpZiAobWF0Y2gpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTgwOlxcdFxcdHJldCA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChwb2wtXFx1MDAzZXNlY3VyaXR5LCBmbC1cXHUwMDNlZmxvd2lfc2VjaWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk4MS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTg0PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9ub2RlICpcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5ODU6eGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqcixcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5ODYtXFx0XFx0XFx0XFx0c2VxY291bnRfc3BpbmxvY2tfdCAqY291bnQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIwMjI9eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjAzNi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwMzc6XFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXFx1MDAyNmItXFx1MDAzZXJvb3RfZCwgXFx1MDAyNmItXFx1MDAzZWNvdW50LCBkYWRkcixcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwMzgtXFx0XFx0XFx0XFx0XFx0ICAgIGZhbWlseSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDAtXFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfREFERFJdID0gXFx1MDAyNm4tXFx1MDAzZWhoZWFkO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjA0MTpcXHRcXHRuID0geGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihcXHUwMDI2bi1cXHUwMDNlcm9vdCwgXFx1MDAyNmItXFx1MDAzZWNvdW50LCBzYWRkcixcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbWlseSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNDYtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMDQ3OlxcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFxcdTAwMjZiLVxcdTAwM2Vyb290X3MsIFxcdTAwMjZiLVxcdTAwM2Vjb3VudCwgc2FkZHIsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMDQ4LVxcdFxcdFxcdFxcdFxcdCAgICBmYW1pbHkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMTI3PXhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTQ5LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjE1MDpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIxNTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjI0LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIyNTpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjIyNi1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjMxLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzMjpcXHRwb2wgPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9TVUIsIGZsLCBmYW1pbHksXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjMzLVxcdFxcdFxcdFxcdFxcdGRpciwgaWZfaWQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjM2LSNlbmRpZlxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjIzNzpcXHRyZXR1cm4geGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShuZXQsIFhGUk1fUE9MSUNZX1RZUEVfTUFJTiwgZmwsIGZhbWlseSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyMzgtXFx0XFx0XFx0XFx0XFx0IGRpciwgaWZfaWQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMjQxPXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNjUtXFx0XFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjI2NjpcXHRcXHRcXHRlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLVxcdTAwM2VzZWN1cml0eSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZmwtXFx1MDAzZWZsb3dpX3NlY2lkKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjgxMT1zdGF0aWMgaW50IHhmcm1fZXhwYW5kX3BvbGljaWVzKGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsIHUxNiBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzEtXFx0ICAgIHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyODMyOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHhwX25ldChwb2xzWzBdKSxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI4MzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFhGUk1fUE9MSUNZX1RZUEVfTUFJTixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzA4NT1zdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2J1bmRsZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMDk2LVxcdG51bV9wb2xzID0gMTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMwOTc6XFx0cG9sc1swXSA9IHhmcm1fcG9saWN5X2xvb2t1cChuZXQsIGZsLCBmYW1pbHksIGRpciwgaWZfaWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzA5OC1cXHRlcnIgPSB4ZnJtX2V4cGFuZF9wb2xpY2llcyhmbCwgZmFtaWx5LCBwb2xzLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjI2PXhmcm1fcG9saWN5ICp4ZnJtX2luX2Z3ZF9pY21wKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MzgtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNjM5OlxcdFxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cChuZXQsIFxcdTAwMjZmbDEsIGZhbWlseSwgWEZSTV9QT0xJQ1lfRldELCBpZl9pZCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNjQwLVxcdFxcdGlmIChJU19FUlIocG9sKSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzY3Nz1pbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3NDgtXFx0aWYgKCFwb2wpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzQ5OlxcdFxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cChuZXQsIFxcdTAwMjZmbCwgZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3NTAtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3ODItXFx0aWYgKHBvbHNbMF0tXFx1MDAzZXR5cGUgIT0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNzgzOlxcdFxcdHBvbHNbMV0gPSB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzc4NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZsLCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTU9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MjktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTMwOlxcdHBvbCA9IHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUobmV0LCB0eXBlLCBcXHUwMDI2ZmwsIHNlbC1cXHUwMDNlZmFtaWx5LCBkaXIsIGlmX2lkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ1MzEtXFx0aWYgKElTX0VSUl9PUl9OVUxMKHBvbCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjMzLjM3Njg5NTcxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDA1MjUyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHhmcm1fYnVuZGxlX2xvb2t1cGAgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkgYXJvdW5kIGB4ZnJtX2J1bmRsZV9sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgY2FsbGluZyBpdCwgb3IsIG1vcmUgYnJvYWRseSwgd2hpY2ggZnVuY3Rpb25zIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBhcmUgZW50cnkgcG9pbnRzIG9yIGV4cG9ydGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcCAtIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIHdpdGhpbiB0aGUgcG9saWN5IG1vZHVsZSwgaXQnbGwgcHJvdmlkZSBhIG5pY2UgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjM1LjUxNzQyNDA1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNTk1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9Mjc2PXN0cnVjdCBkc3RfZW50cnkgKl9feGZybV9kc3RfbG9va3VwKGludCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI5MS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyOTI6RVhQT1JUX1NZTUJPTChfX3hmcm1fZHN0X2xvb2t1cCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yOTMtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQzMT1zdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NTEtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDUyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYWxsb2MpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDUzLVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NjQ9dm9pZCB4ZnJtX3BvbGljeV9kZXN0cm95KHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzMtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDc0OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfZGVzdHJveSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NzUtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTcxNT12b2lkIHhmcm1fc3BkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc3BkaW5mbyAqc2kpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo3MjY6RVhQT1JUX1NZTUJPTCh4ZnJtX3NwZF9nZXRpbmZvKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNy1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTM5OT12b2lkIHhmcm1fcG9saWN5X2hhc2hfcmVidWlsZChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE0MDItfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTQwMzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2hhc2hfcmVidWlsZCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNDA0LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTcyPWludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNjE5LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2MjA6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9pbnNlcnQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYyMS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTY0NT14ZnJtX3BvbGljeV9ieXNlbF9jdHgoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1MzIgaWZfaWQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3MTEtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTcxMjpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2J5c2VsX2N0eCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzEzLVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNzE1PXhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1MzIgaWZfaWQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NTEtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTc1MjpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2J5aWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTc1My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTgxMj1pbnQgeGZybV9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCBib29sIHRhc2tfdmFsaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NDgtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTg0OTpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2ZsdXNoKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NTAtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODUxPWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODg4LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE4ODk6RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9wb2xpY3lfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTg5MC1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE4OTE9aW50IHhmcm1fcG9saWN5X3dhbGsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTkzNi19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTM3OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfd2Fsayk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTM4LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTkzOT12b2lkIHhmcm1fcG9saWN5X3dhbGtfaW5pdChzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqd2FsaywgdTggdHlwZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk0NS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTQ2OkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfd2Fsa19pbml0KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NDctXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTQ4PXZvaWQgeGZybV9wb2xpY3lfd2Fsa19kb25lKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NTYtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTk1NzpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGtfZG9uZSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTU4LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzY1PWludCB4ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNzctfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjM3ODpFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2RlbGV0ZSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzc5LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMTczPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMjUtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMyNjpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwX3dpdGhfaWZpZCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI3LVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMzMzPXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMzgtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMzOTpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzNDAtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTMzNDQ9c3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzM1OS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozMzYwOkVYUE9SVF9TWU1CT0woeGZybV9sb29rdXBfcm91dGUpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzM2MS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzUwMz1pbnQgX194ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzUzOC19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNTM5OkVYUE9SVF9TWU1CT0woX194ZnJtX2RlY29kZV9zZXNzaW9uKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM1NDAtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2Nzc9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zODc2LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM4Nzc6RVhQT1JUX1NZTUJPTChfX3hmcm1fcG9saWN5X2NoZWNrKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4NzgtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zODc5PWludCBfX3hmcm1fcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5MTQtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzkxNTpFWFBPUlRfU1lNQk9MKF9feGZybV9yb3V0ZV9mb3J3YXJkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM5MTYtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM5NTM9dm9pZCB4ZnJtX2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zOTYwLX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM5NjE6RVhQT1JUX1NZTUJPTCh4ZnJtX2RzdF9pZmRvd24pO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzk2Mi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDExOD1pbnQgeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbywgaW50IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE1MS19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTUyOkVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxNTMtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MTU0PXZvaWQgeGZybV9wb2xpY3lfdW5yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTcyLX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxNzM6RVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTc0LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDE3NT12b2lkIHhmcm1faWZfcmVnaXN0ZXJfY2IoY29uc3Qgc3RydWN0IHhmcm1faWZfY2IgKmlmY2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxODAtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDE4MTpFWFBPUlRfU1lNQk9MKHhmcm1faWZfcmVnaXN0ZXJfY2IpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE4Mi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxODM9dm9pZCB4ZnJtX2lmX3VucmVnaXN0ZXJfY2Iodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDE4Ny19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTg4OkVYUE9SVF9TWU1CT0woeGZybV9pZl91bnJlZ2lzdGVyX2NiKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxODktXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0NjQ9dm9pZCB4ZnJtX2F1ZGl0X3BvbGljeV9hZGQoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IHJlc3VsdCwgYm9vbCB0YXNrX3ZhbGlkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDc1LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0NzY6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hdWRpdF9wb2xpY3lfYWRkKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0NzctXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDc4PXZvaWQgeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCByZXN1bHQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTAtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQ5MTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQ5Mi0jZW5kaWZcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDY2Mz1pbnQgeGZybV9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDc0NC19XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NzQ1OkVYUE9SVF9TWU1CT0woeGZybV9taWdyYXRlKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ3NDYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjM1LjU2NjQ4OTM0OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDY3Mjg2MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCBpbiB0aGUgWEZSTSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIGl0J3MgYSBgc3RhdGljYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIHRoZSBzeW1ib2wgKnNob3VsZCogYmUgcHJlc2VudCB1bmxlc3MgaXQncyBpbmxpbmVkLiBCdXQgd2FpdCwgaXQncyBjYWxsZWQgYnkgYSBidW5jaCBvZiBmdW5jdGlvbnM6IGB4ZnJtX3BvbGljeV9sb29rdXBgLCBgeGZybV9leHBhbmRfcG9saWNpZXNgLCBgX194ZnJtX3BvbGljeV9jaGVja2AsIGFuZCBgeGZybV9taWdyYXRlX3BvbGljeV9maW5kYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQgbWUgY29uZmlybS4gQSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgbGluZSAyMTUwOiAgYHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoLi4uKWAuLi4gWWVwLCBpdCdzICpub3QqIGlubGluZWQuIFdoaWNoIG1lYW5zIHRoZSBzeW1ib2wgc2hvdWxkIGRlZmluaXRlbHkgYmUgdmlzaWJsZS5cblxuVG8gYmUgdGhvcm91Z2gsIGxldCdzIGFsc28gc3BlY2lmaWNhbGx5IHZlcmlmeSBhIGZldyByZWxhdGVkIHN5bWJvbHMgdG8gc2VlIGlmIHNvbWV0aGluZyBpcyBnb2luZyBvbiB3aXRoIHRoZW06IGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCwgYHhmcm1fcG9saWN5X2xvb2t1cGAsIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgLCBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYW5kIGBfX3hmcm1fcG9saWN5X2NoZWNrYC5cblxuTmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCAob3IgcGVyaGFwcyBgbmV0L0tjb25maWdgIGlmIGl0J3MgaW5jbHVkZWQgdGhlcmUpLiBHb3R0YSBlbnN1cmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGVuYWJsZWQuIEFuZCBvZiBjb3Vyc2UsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgYmVpbmcgYnVpbHQgY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQwLjYzMzc3OTY3NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3NDE1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9wb2xpY3lcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xMj1lbmRpZlxcbm5ldC94ZnJtL01ha2VmaWxlLTEzLVxcbm5ldC94ZnJtL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTUtXFx0XFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxMzo0MC43MDg1MzA5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYyNzU1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBYRlJNKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBDT05GSUdfWEZSTWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gYG5ldC9LY29uZmlnYCBmaXJzdC4gSWYgaXQncyBub3QgdGhlcmUsIHdoaWNoIGlzIGEgcG9zc2liaWxpdHkgZ2l2ZW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBjb2RlLCB0aGVuIGl0J3MgYWxtb3N0IGNlcnRhaW5seSB3aXRoaW4gdGhlIG1vcmUgc3BlY2lmaWMgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBsb29rIGluIGJvdGggcGxhY2VzIHRvIGJlIHN1cmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgdG8gbG9jYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IHN1YmRpcmVjdG9yeSwgc28gdGhpcyBpcyBhIHNlbnNpYmxlIGZpcnN0IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQyLjY3MTI4OTQyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3NzIxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NDIuNzQ1MDY2NTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI1Mjc1NjA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIFhGUk0sIHBhcnRpY3VsYXJseSB3aGF0IGZsaXBzIHRob3NlIGNydWNpYWwgc3dpdGNoZXMuIE15IGJyYWluIGlzIGFscmVhZHkgaGVhZGluZyBzdHJhaWdodCBmb3IgdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0J3Mgd2hlcmUgYWxsIHRoZSBtYWdpYyBoYXBwZW5zIHdpdGggZW5hYmxpbmcgWEZSTSBhbmQgaXRzIHZhcmlvdXMgY29tcG9uZW50cy4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcyBvbiBgWEZSTWAgaXRzZWxmLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIHVzZXItc3BhY2Ugc3VwcG9ydCAoYFhGUk1fVVNFUmApLiBUaGVuLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgYWxsIHRoZSBkaWZmZXJlbnQgSVBzZWMgdHJhbnNmb3JtIG1vZGVzOiBgSU5FVF9YRlJNX01PREVfKmAuIFRoZSBFU1AgYW5kIEFIIHByb3RvY29scyAoYElORVRfRVNQYCBhbmQgYElORVRfQUhgKSBhcmUsIG9mIGNvdXJzZSwgY3JpdGljYWwgcGllY2VzIG9mIHRoYXQsIHNvIEknbGwgc2VlIGhvdyB0aG9zZSBsaW5rIGluLiBGaW5hbGx5LCBJJ2xsIGFsc28gY2hlY2sgaG93IGBYRlJNX1NVQl9QT0xJQ1lgLCBhbmQgb3RoZXIgcG9saWN5LXJlbGF0ZWQgb3B0aW9ucyBhcmUgaGFuZGxlZCwgc2luY2UgdGhleSBhcmUgdml0YWwgdG8gY29tcGxldGUgdGhlIHdob2xlIHBpY3R1cmUuIEknbSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB3aWxsIGJlIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBzaG91bGQgZ3VpZGUgbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NDYuOTk3ODI1MjAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgWEZSTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgWEZSTVxcbiAgIDY6XFx0XFx0Ym9vbFxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuICAgOTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgWEZSTV9BTEdPXFxuICAxNTpcXHRcXHR0cmlzdGF0ZVxcbiAgMTY6XFx0XFx0c2VsZWN0IFhGUk1cXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDE4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVBRFxcbiAgMTk6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuICAyMTpcXHRcXG4gIDIyOlxcdGlmIElORVRcXG4gIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG4gIDMzOlxcdFxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXFx1MDAyNlxcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDM1OlxcdFxcdFxcdEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4gIDM2OlxcdFxcdHNlbGVjdCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBJUHNlY1xcbiAgMzk6XFx0XFx0ICB1c2VkIGJ5IGNvbXBhdGlibGUgTGludXggYXBwbGljYXRpb25zLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBYRlJNX0lOVEVSRkFDRVxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElQVjZcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBwcm92aWRlcyBhIHZpcnR1YWwgaW50ZXJmYWNlIHRvIHJvdXRlIElQc2VjIHRyYWZmaWMuXFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDUwOlxcdFxcbiAgNTE6XFx0Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbiAgNTI6XFx0XFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNXFxuICA1NDpcXHRcXHRoZWxwXFxuICA1NTpcXHRcXHQgIFN1cHBvcnQgc3ViIHBvbGljeSBmb3IgZGV2ZWxvcGVycy4gQnkgdXNpbmcgc3ViIHBvbGljeSB3aXRoIG1haW5cXG4gIDU2OlxcdFxcdCAgb25lLCB0d28gcG9saWNpZXMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIHNhbWUgcGFja2V0IGF0IG9uY2UuXFxuICA1NzpcXHRcXHQgIFBvbGljeSB3aGljaCBsaXZlcyBzaG9ydGVyIHRpbWUgaW4ga2VybmVsIHNob3VsZCBiZSBhIHN1Yi5cXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQ2Ljk5NzkwNzczM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDIwMDAxNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlRyYWNpbmcgdGhlIFhGUk0gRGVwZW5kZW5jeSBUcmVlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYENPTkZJR19YRlJNYCBnZXRzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gQ2xlYXJseSwgaXQncyBub3QgYSBzdGFuZGFsb25lIG9wdGlvbjsgaXQncyBwdWxsZWQgaW4gYnkgb3RoZXIgY29uZmlndXJhdGlvbnMuIFRoZSBtb3N0IGltbWVkaWF0ZSBwYXRoIHNlZW1zIHRvIGJlIHRocm91Z2ggYFhGUk1fQUxHT2AsIHdoaWNoIGl0c2VsZiBpcyBkZXBlbmRlbnQgb24gdGhpbmdzIGxpa2UgYFhGUk1fVVNFUmAgYW5kIGBORVRfS0VZYCwgYW5kIHBvdGVudGlhbGx5IGRpcmVjdGx5IGluIHRoZSBJUHNlYyBvciBJTkVUIHN1YnN5c3RlbXMuXG5cblJpZ2h0LCBzbyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIEkgbmVlZCB0byB0cmFjZSB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSB0cmVlIGFuZCBzZWUgZXhhY3RseSB3aGF0IHNlbGVjdHMgWEZSTS4gV2hlcmUgYXJlIGFsbCB0aGUgZGlmZmVyZW50IHBsYWNlcyB0aGF0IGFyZSBwdWxsaW5nIHRoaXMgaW4/IFVuZGVyc3RhbmRpbmcgdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGVuYWJsaW5nIGBDT05GSUdfWEZSTWAgd2lsbCBwcm92aWRlIGRlZXBlciBpbnNpZ2h0cyBpbnRvIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBmZWF0dXJlcyBidWlsdCB1cG9uIHRoaXMgZm91bmRhdGlvbmFsIGJsb2NrLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCBhbGwgdGhlIHNlbGVjdGlvbiBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MzgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjQ5LjQxNzkxMTk3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NzQ1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFhGUk1cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzA3LVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2NC9LY29uZmlnLTMwOS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTExMj1jb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbm5ldC9pcHY2L0tjb25maWc6MTE0OlxcdHNlbGVjdCBYRlJNXFxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1My1cXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTU0OlxcdHNlbGVjdCBYRlJNXFxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbm5ldC94ZnJtL0tjb25maWc6MTY6XFx0c2VsZWN0IFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTE3LVxcdHNlbGVjdCBDUllQVE9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NDkuNDk0ODk0NTUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMTg5OTgyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEZSTSBQb2xpY3kgTG9va3VwIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGluIHRoZSBYRlJNIHBvbGljeSBsb29rdXAgY29kZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3Mgd29ydGggcHVyc3VpbmcuIEkndmUgcGlucG9pbnRlZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgQ09ORklHX1hGUk1gLCBgQ09ORklHX1hGUk1fVVNFUmAsIGFuZCBgQ09ORklHX0lORVRgLiBUaGVzZSwgYWxvbmcgd2l0aCBgQ09ORklHX05FVF9LRVlgLCBhcmUgYWxsIGtleSB0byB1c2VyLXNwYWNlIGNvbnRyb2wgYW5kIHRlc3RpbmcuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIGFjdGl2ZS5cblxuTmV4dCwgSSB6ZXJvZWQgaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNwZWNpZmljYWxseSBjaGVja2VkOiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAsIGB4ZnJtX3BvbGljeV9sb29rdXBgLCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCwgYHhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzYCwgYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGFuZCBgX194ZnJtX3BvbGljeV9jaGVja2AuIEl0J3MgZ29vZCB0aGF0IG5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyaWMsIGxvdy1sZXZlbCBzeXN0ZW0gZnVuY3Rpb25zLCBidXQgYXJlIGFsbCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBJUHNlYy9YRlJNIHBvbGljeSBoYW5kbGluZy4gVGhhdCBmb2N1c2VzIHRoZSBzY29wZS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB1c2Ugb2YgYHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlc2AuIFRoZSBhZGRpdGlvbiBvZiB0aGUgc2VxY291bnQgdmVyaWZpY2F0aW9uIChgcmVhZF9zZXFjb3VudF9iZWdpbmAgYW5kIGByZWFkX3NlcWNvdW50X3JldHJ5YCkgc3Ryb25nbHkgc3VnZ2VzdHMgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBjb25jdXJyZW50IGluZXhhY3QgcG9saWN5IGxvb2t1cHMgYW5kIHVwZGF0ZXMuIFRoYXQgc291bmRzIGxpa2UgYSBjb25jdXJyZW5jeSBidWcsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5Db25zaWRlcmluZyB0aGUgYXR0YWNrIHN1cmZhY2UsIHRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29kZSB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggbmV0d29yayB0cmFmZmljLCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIFBGX0tFWSBzb2NrZXRzLCBvciBwb3RlbnRpYWxseSBldmVuIHNvY2tldCBjYWxscyB0aGF0IHRyaWdnZXIgSVBzZWMgcG9saWN5IGV2YWx1YXRpb25zLiBUaGF0J3MgYSBkaXJlY3Qgcm91dGUgaW50byB0aGUga2VybmVsIGFuZCBhIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9yLlxuXG5GaW5hbCBzYW5pdHkgY2hlY2sgb24gdGhlIGNvbmZpZ3M6IGBYRlJNYCwgYFhGUk1fVVNFUmAsIGBJTkVUYC4uLmFsbCBnb29kLiBUaW1lIHRvIG1vdmUgZm9yd2FyZCBhbmQgdGVzdC4gSSdtIGdvaW5nIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQyLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxMzo1NC43MTM4OTQ4NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDA4MjcwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZVwiLFxuICAgIFwieGZybV9wb2xpY3lfbG9va3VwXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNcIixcbiAgICBcInhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzXCIsXG4gICAgXCJfX3hmcm1fcG9saWN5X2NoZWNrXCIsXG4gICAgXCJ4ZnJtX2xvb2t1cF93aXRoX2lmaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlIGluIG5ldC94ZnJtL3hmcm1fcG9saWN5LmMgdG8gcHJvdGVjdCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgZXZhbHVhdGlvbiB3aXRoIHRoZSBpbmV4YWN0IGJpbidzIHNlcWNvdW50IChyZXRyeWluZyBvbiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbikuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGV4ZXJjaXNlZCB3aGVuZXZlciBJUHNlYy9YRlJNIHBvbGljaWVzIGFyZSBsb29rZWQgdXAgb3IgbWF0Y2hlZCBhZ2FpbnN0IG5ldHdvcmsgdHJhZmZpYyBhbmQgc29ja2V0IGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVcIixcbiAgICBcInhmcm1fcG9saWN5X2xvb2t1cFwiLFxuICAgIFwieGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzXCIsXG4gICAgXCJ4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc1wiLFxuICAgIFwiX194ZnJtX3BvbGljeV9jaGVja1wiLFxuICAgIFwieGZybV9sb29rdXBfd2l0aF9pZmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSBpbiBuZXQveGZybS94ZnJtX3BvbGljeS5jIHRvIHByb3RlY3QgaW5leGFjdCBwb2xpY3kgY2FuZGlkYXRlIGV2YWx1YXRpb24gd2l0aCB0aGUgaW5leGFjdCBiaW4ncyBzZXFjb3VudCAocmV0cnlpbmcgb24gY29uY3VycmVudCBtb2RpZmljYXRpb24pLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBleGVyY2lzZWQgd2hlbmV2ZXIgSVBzZWMvWEZSTSBwb2xpY2llcyBhcmUgbG9va2VkIHVwIG9yIG1hdGNoZWQgYWdhaW5zdCBuZXR3b3JrIHRyYWZmaWMgYW5kIHNvY2tldCBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDA6MTM6NTQuNzkzOTg2MTE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3MDU0OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjU0Ljc5NDUyODUzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NzcwMDAzNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVxcdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOOlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjc4MTVlY2Q0OWIzZDNhMWVjOWVkMzk0MDdmYzBhN2JhZmM5MTlkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDA6MTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuaW5kZXggOTMyYTMxM2I5NDYwYS4uNWQ0ZTg2Mzg2M2RmZSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbkBAIC0yMTU3LDYgKzIxNTcsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcbiBcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYmluO1xuIFx0c3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpyZXQ7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47XG4rXHR1bnNpZ25lZCBpbnQgaW5leGFjdF9zZXF1ZW5jZTtcbiBcdHVuc2lnbmVkIGludCBzZXF1ZW5jZTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjE5MSwxMiArMjE5MiwxOCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcbiBcdFx0Z290byBza2lwX2luZXhhY3Q7XG4gXG4gXHRiaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpO1xuLVx0aWYgKCFiaW4gfHwgIXhmcm1fcG9saWN5X2ZpbmRfaW5leGFjdF9jYW5kaWRhdGVzKFx1MDAyNmNhbmQsIGJpbiwgc2FkZHIsXG4tXHRcdFx0XHRcdFx0XHQgZGFkZHIpKVxuK1x0aWYgKCFiaW4pXG4rXHRcdGdvdG8gc2tpcF9pbmV4YWN0O1xuK1xuK1x0aW5leGFjdF9zZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2YmluLVx1MDAzZWNvdW50KTtcbitcdGlmICgheGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoXHUwMDI2Y2FuZCwgYmluLCBzYWRkciwgZGFkZHIpKVxuIFx0XHRnb3RvIHNraXBfaW5leGFjdDtcbiBcbiBcdHBvbCA9IHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhcdTAwMjZjYW5kLCByZXQsIGZsLCB0eXBlLFxuIFx0XHRcdFx0XHQgIGZhbWlseSwgaWZfaWQpO1xuK1x0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2YmluLVx1MDAzZWNvdW50LCBpbmV4YWN0X3NlcXVlbmNlKSlcbitcdFx0Z290byByZXRyeTtcbitcbiBcdGlmIChwb2wpIHtcbiBcdFx0cmV0ID0gcG9sO1xuIFx0XHRpZiAoSVNfRVJSKHBvbCkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxMzo1NC43OTQ1MjkzNTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk0MTkzMTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG9saWN5IExvb2t1cCBDaGFuZ2UgaW4gWEZSTSoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBoaXR0aW5nIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZWAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSBwb2xpY3kgbG9va3VwcyBiYXNlZCBvbiB0aGVpciB0eXBlIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRob3JvdWdobHksIHNvIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZS5cblxuTXkgZmlyc3QgbW92ZSBpcyB0byB1c2UgYHJlYWQtZmlsZWAgKG9yIHBvdGVudGlhbGx5IGBncmVwcGVyYCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkpIHRvIGdldCBhIGxvY2FsIGNvbnRleHQgb2YgdGhlIGNvZGUuIExldCdzIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDIxNTcgd2l0aGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCAtIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4gQnkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBnYWluIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUgYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGVgIGZ1bmN0aW9uIGlzIHVzZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG9wZXJhdGVzIG9uLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBwb2xpY3kgbG9va3VwIGxvZ2ljIGxvb2tzIGxpa2UsIGJlZm9yZSBldmVuIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBjb250ZXh0dWFsIGF3YXJlbmVzcyB3aWxsIGJlIGNyaXRpY2FsIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVudGlvbiBhbmQgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjU5LjczNjQ2NDI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNTA6XFx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsXFxuMjE1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxuMjE1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBmYW1pbHksIHU4IGRpcixcXG4yMTUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdTMyIGlmX2lkKVxcbjIxNTQ6XFx0e1xcbjIxNTU6XFx0XFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyBjYW5kO1xcbjIxNTY6XFx0XFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCAqc2FkZHI7XFxuMjE1NzpcXHRcXHRzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9iaW4gKmJpbjtcXG4yMTU4OlxcdFxcdHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCAqcmV0O1xcbjIxNTk6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmNoYWluO1xcbjIxNjA6XFx0XFx0dW5zaWduZWQgaW50IGluZXhhY3Rfc2VxdWVuY2U7XFxuMjE2MTpcXHRcXHR1bnNpZ25lZCBpbnQgc2VxdWVuY2U7XFxuMjE2MjpcXHRcXHRpbnQgZXJyO1xcbjIxNjM6XFx0XFxuMjE2NDpcXHRcXHRkYWRkciA9IHhmcm1fZmxvd2lfZGFkZHIoZmwsIGZhbWlseSk7XFxuMjE2NTpcXHRcXHRzYWRkciA9IHhmcm1fZmxvd2lfc2FkZHIoZmwsIGZhbWlseSk7XFxuMjE2NjpcXHRcXHRpZiAodW5saWtlbHkoIWRhZGRyIHx8ICFzYWRkcikpXFxuMjE2NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMTY4OlxcdFxcbjIxNjk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjIxNzA6XFx0IHJldHJ5OlxcbjIxNzE6XFx0XFx0ZG8ge1xcbjIxNzI6XFx0XFx0XFx0c2VxdWVuY2UgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uKTtcXG4yMTczOlxcdFxcdFxcdGNoYWluID0gcG9saWN5X2hhc2hfZGlyZWN0KG5ldCwgZGFkZHIsIHNhZGRyLCBmYW1pbHksIGRpcik7XFxuMjE3NDpcXHRcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpO1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRyZXQgPSBOVUxMO1xcbjIxNzc6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvbCwgY2hhaW4sIGJ5ZHN0KSB7XFxuMjE3ODpcXHRcXHRcXHRlcnIgPSB4ZnJtX3BvbGljeV9tYXRjaChwb2wsIGZsLCB0eXBlLCBmYW1pbHksIGlmX2lkKTtcXG4yMTc5OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4yMTgwOlxcdFxcdFxcdFxcdGlmIChlcnIgPT0gLUVTUkNIKVxcbjIxODE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjE4MjpcXHRcXHRcXHRcXHRlbHNlIHtcXG4yMTgzOlxcdFxcdFxcdFxcdFxcdHJldCA9IEVSUl9QVFIoZXJyKTtcXG4yMTg0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMTg1OlxcdFxcdFxcdFxcdH1cXG4yMTg2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjE4NzpcXHRcXHRcXHRcXHRyZXQgPSBwb2w7XFxuMjE4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTg5OlxcdFxcdFxcdH1cXG4yMTkwOlxcdFxcdH1cXG4yMTkxOlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0LVxcdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcXG4yMTkyOlxcdFxcdFxcdGdvdG8gc2tpcF9pbmV4YWN0O1xcbjIxOTM6XFx0XFxuMjE5NDpcXHRcXHRiaW4gPSB4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3UobmV0LCB0eXBlLCBmYW1pbHksIGRpciwgaWZfaWQpO1xcbjIxOTU6XFx0XFx0aWYgKCFiaW4pXFxuMjE5NjpcXHRcXHRcXHRnb3RvIHNraXBfaW5leGFjdDtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0aW5leGFjdF9zZXF1ZW5jZSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmJpbi1cXHUwMDNlY291bnQpO1xcbjIxOTk6XFx0XFx0aWYgKCF4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhcXHUwMDI2Y2FuZCwgYmluLCBzYWRkciwgZGFkZHIpKVxcbjIyMDA6XFx0XFx0XFx0Z290byBza2lwX2luZXhhY3Q7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdHBvbCA9IHhmcm1fcG9saWN5X2V2YWxfY2FuZGlkYXRlcyhcXHUwMDI2Y2FuZCwgcmV0LCBmbCwgdHlwZSxcXG4yMjAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgZmFtaWx5LCBpZl9pZCk7XFxuMjIwNDpcXHRcXHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2YmluLVxcdTAwM2Vjb3VudCwgaW5leGFjdF9zZXF1ZW5jZSkpXFxuMjIwNTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjIyMDY6XFx0XFxuMjIwNzpcXHRcXHRpZiAocG9sKSB7XFxuMjIwODpcXHRcXHRcXHRyZXQgPSBwb2w7XFxuMjIwOTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBvbCkpXFxuMjIxMDpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjIxMTpcXHRcXHR9XFxuMjIxMjpcXHRcXG4yMjEzOlxcdHNraXBfaW5leGFjdDpcXG4yMjE0OlxcdFxcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfaGFzaF9nZW5lcmF0aW9uLCBzZXF1ZW5jZSkpXFxuMjIxNTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjIyMTY6XFx0XFxuMjIxNzpcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2ICF4ZnJtX3BvbF9ob2xkX3JjdShyZXQpKVxcbjIyMTg6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yMjE5OlxcdGZhaWw6XFxuMjIyMDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMjIxOlxcdFxcbjIyMjI6XFx0XFx0cmV0dXJuIHJldDtcXG4yMjIzOlxcdH1cXG4yMjI0OlxcdFxcbjIyMjU6XFx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4yMjI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxuMjIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MTYgZmFtaWx5LCB1OCBkaXIsIHUzMiBpZl9pZClcXG4yMjI4OlxcdHtcXG4yMjI5OlxcdCNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjEzOjU5LjczNjc3ODY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjg4OTE1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQ6IEEgRGVlcGVyIERpdmUgaW50byBQb2xpY3kgTG9va3VwKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvbW1pdC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlYCwgd2hlcmUgd2UncmUgc2VlaW5nIHRoZSBhZGRpdGlvbiBvZiBhIHNlcWxvY2svc2VxY291bnQgY2hlY2sgc3BlY2lmaWNhbGx5IGFyb3VuZCBjYWxscyB0byBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYC4gTG9va2luZyBhdCB0aGUgYmVmb3JlIGFuZCBhZnRlciBzbmlwcGV0cywgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoZSBpbnRlbnQgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgcmFjZSBjb25kaXRpb24uXG5cbkJlZm9yZSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGxvb2t1cDogZmluZCB0aGUgXCJiaW5cIiwgY2hlY2sgaWYgd2UgZXZlbiAqaGF2ZSogYSBcImJpblwiLCBhbmQgaWYgc28sIGNhbGwgdGhvc2UgY2FuZGlkYXRlcy9ldmFsdWF0ZSBmdW5jdGlvbnMuIE5vdywgd2UgcmVhZCBgYmluLVx1MDAzZWNvdW50YCwgYW5kIGlmLCBhZnRlciBjYWxsaW5nIHRob3NlIGZ1bmN0aW9ucywgd2UgZmluZCB0aGUgc2VxdWVuY2UgY291bnQgaGFzIGNoYW5nZWQsIHdlICpyZXRyeSouIFRoYXQncyB0aGUgZXNzZW5jZSBvZiBhIHJlYWQtY29weS11cGRhdGUgbWVjaGFuaXNtLCBvciBhdCBsZWFzdCBhIGZsYXZvciBvZiBpdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHdoYXQgaXMgYGNhbmRgLCB3aGF0IGlzIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AsIHdoYXQgaXMgYGJpbi1cdTAwM2Vjb3VudGAgYWN0dWFsbHkgcHJvdGVjdGluZz8gSXTigJlzIG5vdCBlbm91Z2ggdG8gc2VlIGEgc2VxdWVuY2UgY291bnQ7IHdlIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogaXMgYmVpbmcgZ3VhcmRlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgY2hhbmdlcyBtaWdodCBpbnZhbGlkYXRlIHRob3NlIGNhbmRpZGF0ZXMuXG5cblRpbWUgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBmaWxlIGl0c2VsZi4gSSdsbCBzZWFyY2ggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNDowMy41NjU2NzQ2OTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDI2NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTQ1PWVudW0geGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVfdHlwZSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1My1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1NDpzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzIHtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1NS1cXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcmVzW1hGUk1fUE9MX0NBTkRfTUFYXTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjA1PXN0YXRpYyBib29sXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMDY6eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfYmluICpiLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNjQ1PXhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTY1Ni1cXHRpZiAoIWNoYWluKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNjU3OlxcdFxcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE2NTgtXFx0XFx0aW50IGk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIwMjE9c3RhdGljIGJvb2xcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIwMjI6eGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoc3RydWN0IHhmcm1fcG9sX2luZXhhY3RfY2FuZGlkYXRlcyAqY2FuZCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIwMjMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjEyNj1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIxMjc6eGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzKHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgKmNhbmQsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMTI4LVxcdFxcdFxcdCAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnByZWZlcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjE1MD1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9sb29rdXBfYnl0eXBlKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjE1NC17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMTU1OlxcdHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2NhbmRpZGF0ZXMgY2FuZDtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIxNTYtXFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCAqc2FkZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE0OjAzLjYxNTcwNjU1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczNzk1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBJbmV4YWN0IFBvbGljeSBNYXRjaGluZyBpbiBYRlJNKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBJUHNlYyBwb2xpY3kgbG9va3VwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xfaW5leGFjdF9iaW5gIHdvcmsgaW4gdGhlIFhGUk0gZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IHRoZWlyIGRlZmluaXRpb25zIGFuZCBob3cgdGhleSBhcmUgdXNlZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNjZW5hcmlvcyB3aGVyZSB0aGVyZSBpc24ndCBhICpwZXJmZWN0KiBwb2xpY3kgbWF0Y2ggYW5kIGhvdyBpdCBuYXJyb3dzIGRvd24gdGhlIGNhbmRpZGF0ZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgJ2luZXhhY3QnIGFzcGVjdCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWxseSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBwb2xpY3kgc2VsZWN0aW9uIHByb2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGxvZ2ljIGludm9sdmVkIGluIGJ1aWxkaW5nIHRoZSBcImJpbnNcIiBvciBjYW5kaWRhdGUgbGlzdHMgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gbG9vayBhdCBhbGwgb2YgdGhlIGZhY3RvcnMgdGhhdCBjYW4gYWZmZWN0IGhvdyB0aGlzIHdvcmtzIGF0IHRoaXMgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNDowNS44ODk1MDQ3MjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXG4yMDIxOlxcdHN0YXRpYyBib29sXFxuMjAyMjpcXHR4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcyhzdHJ1Y3QgeGZybV9wb2xfaW5leGFjdF9jYW5kaWRhdGVzICpjYW5kLFxcbjIwMjM6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqYixcXG4yMDI0OlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuMjAyNTpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyKVxcbjIwMjY6XFx0e1xcbjIwMjc6XFx0XFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfbm9kZSAqbjtcXG4yMDI4OlxcdFxcdHUxNiBmYW1pbHk7XFxuMjAyOTpcXHRcXG4yMDMwOlxcdFxcdGlmICghYilcXG4yMDMxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMDMyOlxcdFxcbjIwMzM6XFx0XFx0ZmFtaWx5ID0gYi1cXHUwMDNlay5mYW1pbHk7XFxuMjAzNDpcXHRcXHRtZW1zZXQoY2FuZCwgMCwgc2l6ZW9mKCpjYW5kKSk7XFxuMjAzNTpcXHRcXHRjYW5kLVxcdTAwM2VyZXNbWEZSTV9QT0xfQ0FORF9BTlldID0gXFx1MDAyNmItXFx1MDAzZWhoZWFkO1xcbjIwMzY6XFx0XFxuMjAzNzpcXHRcXHRuID0geGZybV9wb2xpY3lfbG9va3VwX2luZXhhY3RfYWRkcihcXHUwMDI2Yi1cXHUwMDNlcm9vdF9kLCBcXHUwMDI2Yi1cXHUwMDNlY291bnQsIGRhZGRyLFxcbjIwMzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbWlseSk7XFxuMjAzOTpcXHRcXHRpZiAobikge1xcbjIwNDA6XFx0XFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfREFERFJdID0gXFx1MDAyNm4tXFx1MDAzZWhoZWFkO1xcbjIwNDE6XFx0XFx0XFx0biA9IHhmcm1fcG9saWN5X2xvb2t1cF9pbmV4YWN0X2FkZHIoXFx1MDAyNm4tXFx1MDAzZXJvb3QsIFxcdTAwMjZiLVxcdTAwM2Vjb3VudCwgc2FkZHIsXFxuMjA0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmFtaWx5KTtcXG4yMDQzOlxcdFxcdFxcdGlmIChuKVxcbjIwNDQ6XFx0XFx0XFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfQk9USF0gPSBcXHUwMDI2bi1cXHUwMDNlaGhlYWQ7XFxuMjA0NTpcXHRcXHR9XFxuMjA0NjpcXHRcXG4yMDQ3OlxcdFxcdG4gPSB4ZnJtX3BvbGljeV9sb29rdXBfaW5leGFjdF9hZGRyKFxcdTAwMjZiLVxcdTAwM2Vyb290X3MsIFxcdTAwMjZiLVxcdTAwM2Vjb3VudCwgc2FkZHIsXFxuMjA0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmFtaWx5KTtcXG4yMDQ5OlxcdFxcdGlmIChuKVxcbjIwNTA6XFx0XFx0XFx0Y2FuZC1cXHUwMDNlcmVzW1hGUk1fUE9MX0NBTkRfU0FERFJdID0gXFx1MDAyNm4tXFx1MDAzZWhoZWFkO1xcbjIwNTE6XFx0XFxuMjA1MjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yMDUzOlxcdH1cXG4yMDU0OlxcdFxcbjIwNTU6XFx0c3RhdGljIHN0cnVjdCB4ZnJtX3BvbF9pbmV4YWN0X2JpbiAqXFxuMjA1NjpcXHR4ZnJtX3BvbGljeV9pbmV4YWN0X2xvb2t1cF9yY3Uoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCB1MTYgZmFtaWx5LFxcbjIwNTc6XFx0XFx0XFx0XFx0ICAgICAgIHU4IGRpciwgdTMyIGlmX2lkKVxcbjIwNTg6XFx0e1xcbjIwNTk6XFx0XFx0c3RydWN0IHhmcm1fcG9sX2luZXhhY3Rfa2V5IGsgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAwOjE0OjA1Ljg4OTgwMjQ4OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Njc0NzA4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNlY3VyaXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYSBzZXF1ZW5jZSBjb3VudCB2YWxpZGF0aW9uIChgYmluLVx1MDAzZWNvdW50YCkgYXJvdW5kIHRoZSBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIHByb2Nlc3NlcyB3aXRoaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAuIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2hlbiBjb25jdXJyZW50IG9wZXJhdGlvbnMgKHVwZGF0ZXMsIHJlbW92YWxzLCBpbnNlcnRpb25zKSBtb2RpZnkgdGhlIGluZXhhY3QgcG9saWN5IHRyZWUgdW5kZXIgUkNVLlxuXG5JJ3ZlIGdvdCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBMZXQncyBzZWUgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGUgdmFyaWFibGUgYGNhbmRgIGlzIGNsZWFybHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KGNhbmQsIDAsIHNpemVvZigqY2FuZCkpYC4gVGhlIHNlcXVlbmNlIGNvdW50ZXIgaXRzZWxmLCBgaW5leGFjdF9zZXF1ZW5jZWAsIGlzIGluaXRpYWxpemVkIGRpcmVjdGx5IGZyb20gYHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2YmluLVx1MDAzZWNvdW50KWAuIFRoZXJlJ3Mgbm8gaW52b2x2ZW1lbnQgb2YgbmV3bHkgY3JlYXRlZCBidWZmZXJzIG9yIGNvcHlpbmcgdG8gdXNlcnNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU28sIG5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCBpbmZvIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgY29kZSByZS1ldmFsdWF0ZXMgdmFyaWFibGVzIG9uIGByZXRyeWAgYWZ0ZXIgY2hlY2tpbmcgdGhlIGBzZXFjb3VudGAsIHNvIG5vIHN0YWxlIHBvaW50ZXJzIG9yIGRhdGEgc2hvdWxkIGJlIHVzZWQuXG5cbk5vdywgS01TQU4gdnMuIEtBU0FOLi4uIGRvZXMgS01TQU4gb2ZmZXIgYW55IHNwZWNpZmljIGFkdmFudGFnZXMgaGVyZT8gSSBkb24ndCB0aGluayBzby4gU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkcywgS01TQU4gaXMgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwgaGVyZS4gS0FTQU4gaXMgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIFJDVSwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG91dC1vZi1ib3VuZHMgcG9pbnRlciB1c2FnZS4gVGhpcyBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrIGhlbHBzIGd1YXJkIGFnYWluc3QgdGhvc2Uga2luZHMgb2YgcmFjZSBjb25kaXRpb25zLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggcHJpbWFyaWx5IHRhY2tsZXMgY29uY3VycmVuY3kgY29uY2VybnMgZHVyaW5nIHBvbGljeSBsb29rdXBzLiBJdCBlbnN1cmVzIGRhdGEgY29uc2lzdGVuY3kgdW5kZXIgUkNVLCBhbmQgaXQgZG9lc24ndCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcyB0aGlzIGNvZGUgbWlnaHQgaGF2ZS4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGxvb2tpbmcgZ29vZC4gVGltZSB0byBzZXQgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM5OSwiT3V0cHV0VG9rZW5zIjoyNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMDoxNDoxMS41NjQ1MTMzOThaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlciBjaGVja3MgKGBiaW4tXFx1MDAzZWNvdW50YCkgYXJvdW5kIGluZXhhY3QgcG9saWN5IGNhbmRpZGF0ZSBsb29rdXAgYW5kIGV2YWx1YXRpb24gKGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlc2AgYW5kIGB4ZnJtX3BvbGljeV9ldmFsX2NhbmRpZGF0ZXNgKSBpbiBgeGZybV9wb2xpY3lfbG9va3VwX2J5dHlwZSgpYCB0byBoYW5kbGUgY29uY3VycmVudCB0cmVlIG1vZGlmaWNhdGlvbnMgcHJvcGVybHkuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6XFxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGluZXhhY3Rfc2VxdWVuY2VgIGlzIGltbWVkaWF0ZWx5IGluaXRpYWxpemVkIGJ5IGByZWFkX3NlcWNvdW50X2JlZ2luKClgLlxcbi0gVGhlIGNhbmRpZGF0ZSBzdHJ1Y3R1cmUgYGNhbmRgIGNvbnRpbnVlcyB0byBiZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHZpYSBgbWVtc2V0KClgIGluIGB4ZnJtX3BvbGljeV9maW5kX2luZXhhY3RfY2FuZGlkYXRlcygpYC5cXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU46XFxuLSBDb25jdXJyZW5jeSBpc3N1ZXMsIFJDVSBsaWZldGltZSBpc3N1ZXMsIGFuZCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cXG4tIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIChgYmluLVxcdTAwM2Vjb3VudGApIGFyb3VuZCBpbmV4YWN0IHBvbGljeSBjYW5kaWRhdGUgbG9va3VwIGFuZCBldmFsdWF0aW9uIChgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXNgIGFuZCBgeGZybV9wb2xpY3lfZXZhbF9jYW5kaWRhdGVzYCkgaW4gYHhmcm1fcG9saWN5X2xvb2t1cF9ieXR5cGUoKWAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdHJlZSBtb2RpZmljYXRpb25zIHByb3Blcmx5LlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpbmV4YWN0X3NlcXVlbmNlYCBpcyBpbW1lZGlhdGVseSBpbml0aWFsaXplZCBieSBgcmVhZF9zZXFjb3VudF9iZWdpbigpYC5cXG4tIFRoZSBjYW5kaWRhdGUgc3RydWN0dXJlIGBjYW5kYCBjb250aW51ZXMgdG8gYmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB2aWEgYG1lbXNldCgpYCBpbiBgeGZybV9wb2xpY3lfZmluZF9pbmV4YWN0X2NhbmRpZGF0ZXMoKWAuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOOlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzLCBSQ1UgbGlmZXRpbWUgaXNzdWVzLCBhbmQgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuXFxuLSBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[1] Phase: Succeeded StartedAt: 2026-09-05 00:14:22 +0000 UTC FinishedAt: 2026-09-05 00:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 00:14:22 +0000 UTC FinishedAt: 2026-09-05 00:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2] Phase: Succeeded StartedAt: 2026-09-05 00:14:22 +0000 UTC FinishedAt: 2026-09-05 03:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 00:14:22 +0000 UTC FinishedAt: 2026-09-05 03:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 00:14:22 +0000 UTC FinishedAt: 2026-09-05 00:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 00:14:22 +0000 UTC FinishedAt: 2026-09-05 00:14:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowxjrgn/series-workflowxjrgn-convert-artifact-2903553478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 00:14:32 +0000 UTC FinishedAt: 2026-09-05 00:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 00:14:32 +0000 UTC FinishedAt: 2026-09-05 00:31:04 +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:*ce7fc9ad-aa81-4255-ae7f-363952b15a43,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-workflowxjrgn/series-workflowxjrgn-convert-artifact-2903553478/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": "3203678d-61ca-4933-8d1b-dc4a47b72d56", "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-workflowxjrgn/series-workflowxjrgn-build-action-4177363804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 00:14:32 +0000 UTC FinishedAt: 2026-09-05 00:30:54 +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:*ce7fc9ad-aa81-4255-ae7f-363952b15a43,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-workflowxjrgn/series-workflowxjrgn-convert-artifact-2903553478/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": "3203678d-61ca-4933-8d1b-dc4a47b72d56", "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-workflowxjrgn/series-workflowxjrgn-build-action-4177363804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 00:31:04 +0000 UTC FinishedAt: 2026-09-05 00:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 00:31:04 +0000 UTC FinishedAt: 2026-09-05 00:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 00:31:04 +0000 UTC FinishedAt: 2026-09-05 00:31:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 00:31:04 +0000 UTC FinishedAt: 2026-09-05 00:31:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowxjrgn/series-workflowxjrgn-convert-artifact-3236288537/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 00:31:24 +0000 UTC FinishedAt: 2026-09-05 00:33:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 00:31:24 +0000 UTC FinishedAt: 2026-09-05 00:33:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3203678d-61ca-4933-8d1b-dc4a47b72d56,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-workflowxjrgn/series-workflowxjrgn-build-action-4177363804/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-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 00:33:42 +0000 UTC FinishedAt: 2026-09-05 00:33:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 00:33:42 +0000 UTC FinishedAt: 2026-09-05 00:33:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 00:33:42 +0000 UTC FinishedAt: 2026-09-05 00:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 00:33:42 +0000 UTC FinishedAt: 2026-09-05 00:52:55 +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:*ce7fc9ad-aa81-4255-ae7f-363952b15a43,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-workflowxjrgn/series-workflowxjrgn-convert-artifact-3236288537/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": "874642f5-c27f-4e97-ac9b-7ee3ec5f14a5", "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-workflowxjrgn/series-workflowxjrgn-build-action-886040437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 00:33:42 +0000 UTC FinishedAt: 2026-09-05 00:52:45 +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:*ce7fc9ad-aa81-4255-ae7f-363952b15a43,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-workflowxjrgn/series-workflowxjrgn-convert-artifact-3236288537/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": "874642f5-c27f-4e97-ac9b-7ee3ec5f14a5", "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-workflowxjrgn/series-workflowxjrgn-build-action-886040437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 00:52:55 +0000 UTC FinishedAt: 2026-09-05 00:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 00:52:55 +0000 UTC FinishedAt: 2026-09-05 00:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 00:52:55 +0000 UTC FinishedAt: 2026-09-05 00:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 00:52:55 +0000 UTC FinishedAt: 2026-09-05 00:54:58 +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:*874642f5-c27f-4e97-ac9b-7ee3ec5f14a5,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-workflowxjrgn/series-workflowxjrgn-build-action-886040437/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-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 03:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 03:56:52 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},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:*3203678d-61ca-4933-8d1b-dc4a47b72d56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*874642f5-c27f-4e97-ac9b-7ee3ec5f14a5,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-workflowxjrgn/series-workflowxjrgn-build-action-4177363804/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-workflowxjrgn/series-workflowxjrgn-build-action-886040437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 00:55:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 00:55:15 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},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-workflowxjrgn/series-workflowxjrgn-convert-artifact-3879098126/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 00:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 00:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 00:55:08 +0000 UTC FinishedAt: 2026-09-05 00:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 00:55:28 +0000 UTC FinishedAt: 2026-09-05 03:56:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjrgn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_policy_lookup_bytype","xfrm_policy_lookup","xfrm_policy_eval_candidates","xfrm_policy_find_inexact_candidates","__xfrm_policy_check","xfrm_lookup_with_ifid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET"],"series_id":"d73ff491-07c1-454a-8d51-3a7c106ed72e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 00:55:28 +0000 UTC FinishedAt: 2026-09-05 03:56:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3203678d-61ca-4933-8d1b-dc4a47b72d56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*874642f5-c27f-4e97-ac9b-7ee3ec5f14a5,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-workflowxjrgn/series-workflowxjrgn-build-action-4177363804/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-workflowxjrgn/series-workflowxjrgn-build-action-886040437/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-workflowxjrgn/series-workflowxjrgn-convert-artifact-3879098126/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,}