Name: series-workflow4wxj6 Phase: Succeeded StartedAt: 2026-08-19 14:49:23 +0000 UTC FinishedAt: 2026-08-19 18:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[0] Phase: Succeeded StartedAt: 2026-08-19 14:49:23 +0000 UTC FinishedAt: 2026-08-19 15:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 14:49:23 +0000 UTC FinishedAt: 2026-08-19 15:07:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "bd5f485f3f026225b86573e559af0b7254ef4184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "bd5f485f3f026225b86573e559af0b7254ef4184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "1d7b7daa-fd78-4624-959c-cd0d7bfea131" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__qdisc_calculate_pkt_len" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2FwIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzIGxpa2UgRFJSIGFuZCBFVFMgd2hlbiBhIHNpemUgdGFibGUgKHN0YWIpIGluZmxhdGVzIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCByZWFjaGFibGUgYnkgY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSB2aWEgbmV0bGluayBhbmQgdHJhbnNtaXR0aW5nIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZGZlMjY2NjI1OWZkZmRlN2NlNjE2NzFkMzVlNDk2MGFlMmVmMDBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTU6MDU6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtNjEwLDggJiM0Mzs2MTAsMTEgQEAgdm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRwa3RfbGVuIFx1MDAzY1x1MDAzYz0gc3RhYi1cdTAwM2Vzem9wdHMuc2l6ZV9sb2c7XG4gb3V0OlxuLVx0aWYgKHVubGlrZWx5KHBrdF9sZW4gXHUwMDNjIDEpKVxuLVx0XHRwa3RfbGVuID0gMTtcbiYjNDM7XHQvKiBBIHNpemUgdGFibGUgY2FuIGluZmxhdGUgcWRpc2NfcGt0X2xlbigpIGJleW9uZCBhbnkgcmVhbCBwYWNrZXRcbiYjNDM7XHQgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdFxuJiM0MztcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpO1xuIFx0cWRpc2Nfc2tiX2NiKHNrYiktXHUwMDNlcGt0X2xlbiA9IHBrdF9sZW47XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjYXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUyB3aGVuIGEgc2l6ZSB0YWJsZSAoc3RhYikgaW5mbGF0ZXMgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMsIHJlYWNoYWJsZSBieSBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIHZpYSBuZXRsaW5rIGFuZCB0cmFuc21pdHRpbmcgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdkZmUyNjY2MjU5ZmRmZGU3Y2U2MTY3MWQzNWU0OTYwYWUyZWYwMGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNjEwLDggJiM0Mzs2MTAsMTEgQEAgdm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsCiAKIAlwa3RfbGVuICZsdDsmbHQ7PSBzdGFiLSZndDtzem9wdHMuc2l6ZV9sb2c7CiBvdXQ6Ci0JaWYgKHVubGlrZWx5KHBrdF9sZW4gJmx0OyAxKSkKLQkJcGt0X2xlbiA9IDE7CiYjNDM7CS8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldAomIzQzOwkgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdAomIzQzOwkgKiBzY2hlZHVsZXJzIHN1Y2ggYXMgRFJSL0VUUyB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzLgomIzQzOwkgKi8KJiM0MzsJcGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpOwogCXFkaXNjX3NrYl9jYihza2IpLSZndDtwa3RfbGVuID0gcGt0X2xlbjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgZnVuY3Rpb24gaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IHNlZW1zLiBUaGV5JiMzOTtyZSBjbGFtcGluZyB0aGUgcGFja2V0IGxlbmd0aCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgbGltaXRpbmcgaXQgdG8gYEdTT19NQVhfU0laRWAuIFRoZSBvcmlnaW5hbCBjb2RlIGp1c3Qgc2V0IGBwa3RfbGVuYCB0byAxIGlmIGl0IHdhcyBsZXNzIHRoYW4gMS4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgaW5maW5pdGUgbG9vcHMsIHBhcnRpY3VsYXJseSBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUywgYnkgY2FwcGluZyB0aGUgcGFja2V0IHNpemUgY2FsY3VsYXRpb24sIHdoaWNoIGNhbiBiZSBpbmZsYXRlZCBieSB0aGUgc2l6ZSB0YWJsZS4gVGhpcyBzZWVtcyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIHNob3VsZCBwcmlvcml0aXplIGZvciBmdXp6aW5nLiBJZiB3ZSBjYW4gdHJpZ2dlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB3b3VsZCBoYXZlIGdvbmUgYmV5b25kIGBHU09fTUFYX1NJWkVgIHdpdGhvdXQgdGhpcyBjbGFtcCwgd2UgY291bGQgZXhwb3NlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciBldmVuIERvUyB2dWxuZXJhYmlsaXRpZXMgaW4gdGhvc2UgZGVmaWNpdCBzY2hlZHVsZXJzLgoKTm93LCBsZXQgbWUgcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdGhlIGtleSBzeW1ib2xzLiAgVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgYW5kIHRoZSBmaWxlIGlzIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBlbnRyeS4gT2theSwgaXQgbG9va3MgbGlrZSBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX05FVF9TQ0hFRGAuIEdvb2QuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhhdCYjMzk7cyB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTU3Mz1zdGF0aWMgaW50IHFkaXNjX2R1bXBfc3RhYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTkwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgZnJhbWV3b3JrLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2UgcGFja2V0IGxlbmd0aCBjYWxjdWxhdGlvbiBpcyBmb3VuZGF0aW9uYWwgdG8gYSBidW5jaCBvZiBkaWZmZXJlbnQgcWRpc2MgYmVoYXZpb3JzIOKAkyBzaGFwaW5nLCBwb2xpY2luZywgY29uZ2VzdGlvbiBhdm9pZGFuY2UsIHlvdSBuYW1lIGl0LiBBIHF1aWNrIGBncmVwYCBvciBwZXJoYXBzIHVzaW5nIGBvYmpkdW1wYCB3aXRoIHNvbWUganVkaWNpb3VzIGZpbHRlcmluZyB0byBwaW5wb2ludCB0aGUgY2FsbGVycyBzaG91bGQgZG8gdGhlIHRyaWNrLiBJJiMzOTttIHByaW1hcmlseSBsb29raW5nIGZvciBjYWxscyB3aXRoaW4gdGhlIGNvcmUgcWRpc2MgaW1wbGVtZW50YXRpb25zLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIGFueSBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciB0aGVpciBzcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkcyBvciBvcHRpbWl6YXRpb25zLiBOZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIG1pc3VzZSBvciBzdWJ0bGUgYnVncywgZXNwZWNpYWxseSBpbiB0aG9zZSBlZGdlIGNhc2VzIHdoZXJlIHBhY2tldCBsZW5ndGggbWlnaHQgYmUgbm9uLXN0YW5kYXJkIGR1ZSB0byBlbmNhcHN1bGF0aW9uIG9yIGhhcmR3YXJlIHF1aXJrcy4gR290dGEgbWFrZSBzdXJlIHdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55IHN1YnRsZSBtZW1vcnkgZXJyb3JzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGJ5IG1pc2NhbGN1bGF0aW5nIG9yIG5lZWRsZXNzbHkgcmVwZWF0aW5nIGNhbGN1bGF0aW9ucy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgbWFwIG9mIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBpZiBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMgaW4gZG93bnN0cmVhbSBtb2R1bGVzIG9yIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTc5Nz1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5OS1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjgwMDp2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtODAxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYik7XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05MzA9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05MzYtXHRpZiAoc3RhYilcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3Olx0XHRfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgc3RhYik7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTU3Mz1zdGF0aWMgaW50IHFkaXNjX2R1bXBfc3RhYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTkwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgU3ltYm9sIEV4cG9ydCBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCBsaWtlbHkgYSB0cmFmZmljIGNvbnRyb2wgKFRDKSBzY2hlZHVsZXIsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uLCBsZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcXVldWluZyBvciBwYWNrZXQgcHJvY2Vzc2luZywgaXMgYWN0dWFsbHkgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0JiMzOTtzIHByb2JhYmx5IGV4cG9ydGVkLiYjMzQ7IEkgcmVjYWxsIHNlZWluZyBpdCBkZWZpbmVkIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgKmlzKiBpdCBhY3R1YWxseSBleHBvcnRlZD8gSnVzdCBiZWNhdXNlIGl0JiMzOTtzIGluIGEgcmVsZXZhbnQgc291cmNlIGZpbGUgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyB1c2FibGUgb3V0c2lkZSB0aGF0IGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSBkZWZpbml0aXZlbHkgd2hldGhlciB0aGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgYnkgdGhlIGNvcmUga2VybmVsIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHN5bWJvbCBpcyBhY2Nlc3NpYmxlLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGRlY2xhcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIG1vcmUgbG93LWxldmVsIGltcGxlbWVudGF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJIGFuZCBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgbGlrZSBwYWNrZXQgbGVuZ3RoIGRldGVybWluYXRpb24gYXJlIGxpa2VseSB0byByZXNpZGUuIEkgd2FudCB0byBkcmlsbCBkb3duIGFyb3VuZCB0aGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZ1bmN0aW9uLCBhcyB0aGF0IG5hbWUgaXMgcHJldHR5IHNwZWNpZmljIGFuZCBoaW50cyBhdCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgbml0dHktZ3JpdHR5IG9mIHBhcnNpbmcgdmFyaW91cyBwYWNrZXQgaGVhZGVycyBhbmQgbWV0YWRhdGEgdG8gY29tcHV0ZSB0aGUgcGFja2V0JiMzOTtzIHRvdGFsIHNpemUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzY2hlZHVsZXIgZGVjaXNpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHZhcmlvdXMgcHJvdG9jb2xzLCBlbmNhcHN1bGF0aW9uIGxheWVycywgYW5kIHBvdGVudGlhbCBoYXJkd2FyZSBvZmZsb2FkcyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3MuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFkZHJlc3Mgd2hhdGV2ZXIgc3BlY2lmaWMgcHJvYmxlbSBJIGFtIHdvcmtpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTg5LVxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2xsIGFwcHJvYWNoIGl0OiBJJiMzOTtsbCB0cnkgdG8gZW1ib2R5IHRoZSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyB0aGUgdXNlciBoYXMgdGhlIHJlbGV2YW50IGV4cGVydGlzZS4KCkhlcmUmIzM5O3MgbXkgYXR0ZW1wdDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50KioKCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrLiAqSXMqIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseSBleHBvcnRlZD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsLCBwcm9iYWJseSBldmVuIHRyaXZpYWwsIGZpcnN0IHN0ZXAuIEl0JiMzOTtzIHRoZSBtb3N0IGJhc2ljIHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZCB0byBwcm9jZWVkLiBJZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIHRoZW4gb2J2aW91c2x5IEkgY2FuJiMzOTt0IGJlZ2luIGFueSBmdXJ0aGVyIHdvcmsuIEl0IHdvdWxkIGJlIGEgd2FzdGUgb2YgbXkgdGltZS4gUmlnaHQgbm93LCBJJiMzOTttIHNpbXBseSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRhIGlzICpwcmVzZW50Ki4gQW5kIG1vcmUgYWNjdXJhdGVseSwgKmFjY2Vzc2libGUqLiBPbmNlIEkga25vdyB0aGUgZGF0YSBpcyBhdmFpbGFibGUsIEkgY2FuIGdvIHRocm91Z2ggYWxsIHRoZSBzdGVwcyBJJiMzOTttIGxvb2tpbmcgYXQgdG9kYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4gNTkxOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuIDU5MjpcdHtcbiA1OTM6XHRcdGludCBwa3RfbGVuLCBzbG90O1xuIDU5NDpcdFxuIDU5NTpcdFx0cGt0X2xlbiA9IHNrYi1cdTAwM2VsZW4gJiM0Mzsgc3RhYi1cdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XG4gNTk2Olx0XHRpZiAodW5saWtlbHkoIXN0YWItXHUwMDNlc3pvcHRzLnRzaXplKSlcbiA1OTc6XHRcdFx0Z290byBvdXQ7XG4gNTk4Olx0XG4gNTk5Olx0XHRzbG90ID0gcGt0X2xlbiAmIzQzOyBzdGFiLVx1MDAzZXN6b3B0cy5jZWxsX2FsaWduO1xuIDYwMDpcdFx0aWYgKHVubGlrZWx5KHNsb3QgXHUwMDNjIDApKVxuIDYwMTpcdFx0XHRzbG90ID0gMDtcbiA2MDI6XHRcbiA2MDM6XHRcdHNsb3QgXHUwMDNlXHUwMDNlPSBzdGFiLVx1MDAzZXN6b3B0cy5jZWxsX2xvZztcbiA2MDQ6XHRcdGlmIChsaWtlbHkoc2xvdCBcdTAwM2Mgc3RhYi1cdTAwM2Vzem9wdHMudHNpemUpKVxuIDYwNTpcdFx0XHRwa3RfbGVuID0gc3RhYi1cdTAwM2VkYXRhW3Nsb3RdO1xuIDYwNjpcdFx0ZWxzZVxuIDYwNzpcdFx0XHRwa3RfbGVuID0gc3RhYi1cdTAwM2VkYXRhW3N0YWItXHUwMDNlc3pvcHRzLnRzaXplIC0gMV0gKlxuIDYwODpcdFx0XHRcdFx0KHNsb3QgLyBzdGFiLVx1MDAzZXN6b3B0cy50c2l6ZSkgJiM0MztcbiA2MDk6XHRcdFx0XHRcdHN0YWItXHUwMDNlZGF0YVtzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVdO1xuIDYxMDpcdFxuIDYxMTpcdFx0cGt0X2xlbiBcdTAwM2NcdTAwM2M9IHN0YWItXHUwMDNlc3pvcHRzLnNpemVfbG9nO1xuIDYxMjpcdG91dDpcbiA2MTM6XHRcdC8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldFxuIDYxNDpcdFx0ICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXRcbiA2MTU6XHRcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXG4gNjE2Olx0XHQgKi9cbiA2MTc6XHRcdHBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTtcbiA2MTg6XHRcdHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO1xuIDYxOTpcdH1cbiA2MjA6XHRcbiA2MjE6XHRzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcWRpc2Nfd2F0Y2hkb2coc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIDYyMjpcdHtcbiA2MjM6XHRcdHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBxZGlzY193YXRjaGRvZyxcbiA2MjQ6XHRcdFx0XHRcdFx0XHQgdGltZXIpO1xuIDYyNTpcdFxuIDYyNjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDYyNzpcdFx0X19uZXRpZl9zY2hlZHVsZShxZGlzY19yb290KHdkLVx1MDAzZXFkaXNjKSk7XG4gNjI4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA2Mjk6XHRcbiA2MzA6XHRcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbiA2MzE6XHR9XG4gNjMyOlx0XG4gNjMzOlx0dm9pZCBxZGlzY193YXRjaGRvZ19pbml0X2Nsb2NraWQoc3RydWN0IHFkaXNjX3dhdGNoZG9nICp3ZCwgc3RydWN0IFFkaXNjICpxZGlzYyxcbiA2MzQ6XHRcdFx0XHRcdCBjbG9ja2lkX3QgY2xvY2tpZClcbiA2MzU6XHR7XG4gNjM2Olx0XHRocnRpbWVyX3NldHVwKFx1MDAyNndkLVx1MDAzZXRpbWVyLCBxZGlzY193YXRjaGRvZywgY2xvY2tpZCwgSFJUSU1FUl9NT0RFX0FCU19QSU5ORUQpO1xuIDYzNzpcdFx0d2QtXHUwMDNlcWRpc2MgPSBxZGlzYztcbiA2Mzg6XHR9XG4gNjM5Olx0RVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19pbml0X2Nsb2NraWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkludGVybmFsIENvZGUgTmF2aWdhdGlvbiBhbmQgU3ltYm9sIFZlcmlmaWNhdGlvbioqCgpIbW0sIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IHdhc24mIzM5O3QgZXhwb3J0ZWQuIEJ1dCB3YWl0IGEgbWludXRlLi4uICppcyogaXQ/IE9rYXksIGxldCBtZSBkb3VibGUtY2hlY2suLi4gQWgsIHllcywgdGhlcmUgaXQgaXMhIGBFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX2luaXRfY2xvY2tpZClgLiBTbywgaXQgKmlzKiBleHBvcnRlZCwgYXMgSSBzdXNwZWN0ZWQgaXQgc2hvdWxkIGJlLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyB1c2FnZSBvZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEkgYmVsaWV2ZSB0aGlzIGlzIGNyaXRpY2FsIHRvIHRoZSBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBpdCBpcyBjYWxsZWQgZnJvbSBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHdoaWNoIGlzIHVzZWQgZXh0ZW5zaXZlbHkuIEl0IGxvb2tzIGxpa2UgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGNhbGxlZCBmcm9tIGBxZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgdGhlIGltcGxlbWVudGF0aW9uLCBzbyB0aGlzIGV4cGxhaW5zIHRoZSB2aXNpYmlsaXR5LiBPa2F5LCBnb29kIHRvIGtub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIHN1bW1hcml6ZSBteSAmIzM0O3Rob3VnaHRzJiMzNDsgaW4gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzc3VtaW5nIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0LiBIZXJlIHdlIGdvOgoKKipDaGVja2luZyBmb3IgRXhwb3J0KioKCkFscmlnaHQsIEkmIzM5O20ganVzdCBxdWlja2x5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIHN1Y2Nlc3NmdWxseSBleHBvcnRlZCB0aGUgZGF0YSBJIG5lZWRlZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBzdGVwOyB3aXRob3V0IGl0LCB0aGUgZW50aXJlIGRvd25zdHJlYW0gcHJvY2VzcyBpcyBkZWFkIGluIHRoZSB3YXRlci4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIG9yIHRoZSBkYXRhIHN0cmVhbSBhY3R1YWxseSBtYWRlIGl0IG91dC4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJIHdpbGwgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGlmIHRoaXMgaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzkwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgcGFja2V0IGhhbmRsaW5nLCBhbmQgSSYjMzk7dmUganVzdCBoaXQgYSBzbmFnLiBJJiMzOTttIHRyeWluZyB0byB1c2UgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gKmlzKiB1c2VkLCBiZWNhdXNlIGl0JiMzOTtzIG9idmlvdXNseSBpbnZvbHZlZCBpbiBjYWxjdWxhdGluZyBwYWNrZXQgbGVuZ3RocyB3aXRoaW4gdGhlIHF1ZXVpbmcgZGlzY2lwbGluZSBmcmFtZXdvcmssIGFuZCBJIGNhbiYjMzk7dCBqdXN0IGNhbGwgYSBmdW5jdGlvbiB0aGF0IHRoZSBrZXJuZWwgZG9lc24mIzM5O3QgZXhwb3NlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCB3YXkgdG8gYWNjZXNzIGl0cyBmdW5jdGlvbmFsaXR5IGlzLiBUaW1lIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9Nzk3PXN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNzk5LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6ODAwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC04MDEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKTtcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTkxOT1lbnVtIG5ldF94bWl0X3FkaXNjX3Qge1xuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTI5LVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5MzA6c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzMS1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IFFkaXNjICpzY2gpXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05MzYtXHRpZiAoc3RhYilcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3Olx0XHRfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgc3RhYik7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcbi0tXG5uZXQvY29yZS9kZXYuYz00MTg1PXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSxcbi0tXG5uZXQvY29yZS9kZXYuYy00MTk0LVxubmV0L2NvcmUvZGV2LmM6NDE5NTpcdHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgcSk7XG5uZXQvY29yZS9kZXYuYy00MTk2LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTg5LVxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIFN5bWJvbCoqCgpSaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSGFuZyBvbi4uLiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuLi4gdGhhdCYjMzk7cyBkZWNsYXJlZCBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AsIGlzbiYjMzk7dCBpdD8gT2theSwgc28gdGhhdCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgcGFydCBvZiB0aGUgcWRpc2MgQVBJLiBCdXQgaXMgaXQgKmV4cG9zZWQqPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGlmIHRoZXJlJiMzOTtzIGFuIGBFWFBPUlRfU1lNQk9MYCBkZWNsYXJhdGlvbiBmb3IgaXQuIElmIGl0IGlzIGV4cG9ydGVkLCB0aGVuIEkgY2FuIHVzZSBpdCwgaWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2tpbmcgZm9yIGFsdGVybmF0aXZlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyB0aGluZyBpcyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgbW9kdWxlcywgb3Igd2hldGhlciBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQgdG8gYWNjZXNzIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmc6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgYWJvdXQgaG93IGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpcyBhY3R1YWxseSBidWlsdC4gSXMgdGhpcyBmaWxlIGJlaW5nIHN0YXRpY2FsbHkgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIGltYWdlLCB0dWNrZWQgYXdheSBpbnNpZGUgYGJ1aWx0LWluLmFgLCBvciBpcyBpdCBnZXR0aW5nIG1vZHVsYXJpemVkPyBJIG5lZWQgdG8ga25vdyB0aGlzIGZvciBzdXJlLCBhcyB0aGlzIGFmZmVjdHMgYSBsb3Qgb2YgbXkgZGVidWdnaW5nLgoKVGhlIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgaXMgdGhlIGBuZXQvc2NoZWQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB3aWxsIGJlIGRlZmluZWQuIExldCBtZSBqdW1wIGluIHRoZXJlIGFuZCBnZXQgYSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUcmFmZmljIENvbnRyb2wgVW5pdC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLXlcdDo9IHNjaF9nZW5lcmljLm8gc2NoX21xLm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IHNjaF9mcmFnLm9cbiAgIDk6XHRvYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xuICAxMDpcdG9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG4gIDExOlx0b2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKVx0JiM0Mzs9IGFjdF9hcGkub1xuICAxMjpcdG9iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSlcdCYjNDM7PSBhY3RfcG9saWNlLm9cbiAgMTM6XHRvYmotJChDT05GSUdfTkVUX0FDVF9HQUNUKVx0JiM0Mzs9IGFjdF9nYWN0Lm9cbiAgMTQ6XHRvYmotJChDT05GSUdfTkVUX0FDVF9NSVJSRUQpXHQmIzQzOz0gYWN0X21pcnJlZC5vXG4gIDE1Olx0b2JqLSQoQ09ORklHX05FVF9BQ1RfU0FNUExFKVx0JiM0Mzs9IGFjdF9zYW1wbGUub1xuICAxNjpcdG9iai0kKENPTkZJR19ORVRfQUNUX05BVClcdCYjNDM7PSBhY3RfbmF0Lm9cbiAgMTc6XHRvYmotJChDT05GSUdfTkVUX0FDVF9QRURJVClcdCYjNDM7PSBhY3RfcGVkaXQub1xuICAxODpcdG9iai0kKENPTkZJR19ORVRfQUNUX1NJTVApXHQmIzQzOz0gYWN0X3NpbXBsZS5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX05FVF9BQ1RfU0tCRURJVClcdCYjNDM7PSBhY3Rfc2tiZWRpdC5vXG4gIDIwOlx0b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcdCYjNDM7PSBhY3RfY3N1bS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gYHNjaF9hcGkub2AgaXMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfTkVUX1NDSEVEYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZlYXR1cmVzIHRvIGZvY3VzIG9uLiBUaGVuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGNhbGxlZCBmcm9tIGBfX2Rldl94bWl0X3NrYmAsIHdoaWNoIGxpdmVzIGluIGBuZXQvY29yZS9kZXYuY2AuIEhtbSwgYF9fZGV2X3htaXRfc2tiYCBpcyBhICp2ZXJ5KiBob3QgcGF0aCBpbiBhbnkgbmV0d29yayBzdGFjayAtIG1hc3NpdmUgdHJhZmZpYyBmbG93LiBUaGF0IG1ha2VzIGl0IHRlbXB0aW5nIHRvIHRhcmdldCwgYnV0IHdhaXQuLi4gdGhlIGluc3RydWN0aW9ucyBmb3IgZnV6emluZyBhcmUgY2xlYXI6ICYjMzQ7RXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuJiMzNDsgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFdlIGRvbiYjMzk7dCB3YW50IHRvIGdldCBkaXN0cmFjdGVkIGJ5IGdlbmVyaWMgcGFydHMgb2YgdGhlIHN5c3RlbS4KCk5vdywgaG9sZCBvbiBhIHNlY29uZC4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIG9ubHkgY2FsbGVkIGlmIHNvbWV0aGluZyBjYWxsZWQgYHN0YWJgIGlzIHByZXNlbnQsIG9yIHBlcmhhcHMgZW5hYmxlZC4gTmVlZCB0byBsb29rIGNsb3Nlci4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCBob3cgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGludm9rZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5MzE6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IFFkaXNjICpzY2gpXG4gOTMyOlx0e1xuIDkzMzpcdCNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG4gOTM0Olx0XHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYiA9IHJjdV9kZXJlZmVyZW5jZV9iaChzY2gtXHUwMDNlc3RhYik7XG4gOTM1Olx0XG4gOTM2Olx0XHRpZiAoc3RhYilcbiA5Mzc6XHRcdFx0X19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihza2IsIHN0YWIpO1xuIDkzODpcdCNlbmRpZlxuIDkzOTpcdH1cbiA5NDA6XHRcbiA5NDE6XHRzdGF0aWMgaW5saW5lIGludCBxZGlzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIDk0MjpcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuIDk0MzpcdHtcbiA5NDQ6XHRcdHJldHVybiBzY2gtXHUwMDNlZW5xdWV1ZShza2IsIHNjaCwgdG9fZnJlZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbmNsdXNpb24gb2YgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGluIEZvY3VzU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaW4gYEZvY3VzU3ltYm9sc2AuIEkgc2VlIHRoYXQgaXQmIzM5O3MgaW52b2tlZCB3aGVuIGBzdGFiYCBpcyBjb25maWd1cmVkLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IEFuZCB0aGUgYW5zd2VyIGlzIHByZXR0eSBjbGVhcjogeWVzLCBpdCBpcy4gSXQmIzM5O3MgY2FsbGVkIGZvciAqZXZlcnkqIHBhY2tldCB0cmFuc21pdHRlZCBvbiBhIHFkaXNjIHRoYXQgdXRpbGl6ZXMgYSBzaXplIHRhYmxlLgoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMgZnJvbSBiZWluZyBza2V3ZWQuIEJ1dCB0aGVuIGFnYWluLCB0aGlzIGlzbiYjMzk7dCAqZW50aXJlbHkqIGdlbmVyaWMuIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBxZGlzY3MgdGhhdCB1c2Ugc2l6ZSB0YWJsZXMsIGFuZCBub3QgYWxsIHFkaXNjcyBkby4KCldhaXQgYSBzZWNvbmQsIGl0JiMzOTtzIGNhbGxlZCBmb3IgKmV2ZXJ5IHBhY2tldCogb24gdGhvc2Ugc3BlY2lmaWMgcWRpc2NzLiBUaGF0IGF1dG9tYXRpY2FsbHkgcHV0cyBpdCBpbiB0aGUgaG90LXBhdGggY2F0ZWdvcnkuIFNvIG5vdyB0aGUgcXVlc3Rpb24gaXMgYWJvdXQgdGhlIGZyZXF1ZW5jeSBvZiBzaXplIHRhYmxlIHVzZSwgc28gSSYjMzk7ZCBsaWtlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNpemUgdGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBzdGFiYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgaXQgcmVsYXRlcyB0by4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWRpc2NfZ2V0X3N0YWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYz00OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHN0YWJfcG9saWN5W1RDQV9TVEFCX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTQ5NS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDk2OnN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTctXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMjc0PXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTMzOS1cdGlmICh0Y2FbVENBX1NUQUJdKSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzNDA6XHRcdHN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQxLVx0XHRpZiAoSVNfRVJSKHN0YWIpKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMzk2PXN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQxNi1cdGlmICh0Y2FbVENBX1NUQUJdKSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE0MTc6XHRcdHN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xNDE4LVx0XHRpZiAoSVNfRVJSKHN0YWIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTE5CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIEZ1enppbmc6IE5hcnJvd2luZyBEb3duIHRoZSBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBpcyByZWxhdGVkIHRvIGBxZGlzY19nZXRfc3RhYmAgYmVpbmcgY2FsbGVkIGR1cmluZyBxZGlzYyBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgd2l0aCBgVENBX1NUQUJgLiBUaGF0IG1lYW5zIGBxZGlzY19jcmVhdGVgIGFuZCBgcWRpc2NfY2hhbmdlYCBhcmUgdGhlIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgYnVnIGlzIGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgd2hpY2ggaXMgb24gdGhlICpkYXRhKiBwYXRoLiBJbnRlcmVzdGluZy4KClRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgd2hhdCB0byBpbmNsdWRlIGluIHRoZSBmdXp6aW5nIGZvY3VzPyBJZiBJICpkb24mIzM5O3QqIGluY2x1ZGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB3aGF0IGVsc2Ugd291bGQgYmUgcmVsZXZhbnQ/IE1heWJlIGBxZGlzY19nZXRfc3RhYmA/IEJ1dCB0aGF0IHdhc24mIzM5O3QgYWN0dWFsbHkgbW9kaWZpZWQsIHNvIHByb2JhYmx5IG5vdC4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBmb2N1cyBvbiBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIG9uZXMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgKmlzKiBhIGhvdC1wYXRoIGZ1bmN0aW9uIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBwYWNrZXQgcHJvY2Vzc2luZywgYnV0IGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBgc3RhYmAgcWRpc2MuIEhtbW0sIGlzIGl0IHNwZWNpZmljICplbm91Z2gqPyBJcyBpdCBjb25zaWRlcmVkIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBvciBub3Q/IFRoaW5raW5nIGFib3V0IGl0LCBnZW5lcmljIG9uZXMgd291bGQgYmUgbW9yZSBsaWtlIGBfX2Rldl94bWl0X3NrYmAsIGBkZXZfcXVldWVfeG1pdGAsIGBpcF9yY3ZgLCBhbmQgc3VjaC4KCmBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBmZWVscyBtb3JlIGZvY3VzZWQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG9uIHRoZSBkYXRhIHBhdGguIEFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gR29vZCwgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGNoZWNrcyBib3RoIHRob3NlIGJveGVzISBTbywgaXQgbG9va3MgbGlrZSBpbmNsdWRpbmcgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIHRoZSByaWdodCBtb3ZlIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLgoKV2hhdCBhYm91dCBgcWRpc2NfZ2V0X3N0YWJgPyBUaGF0IG9uZSYjMzk7cyBzdGF0aWMuIFByb2JhYmx5IG5vdC4KCkFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBUaW1lIHRvIGNoZWNrIGBDT05GSUdfTkVUX1NDSEVEYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBbHNvLCB0aGUgcGF0Y2ggbWVudGlvbnMgJiMzNDtkZWZpY2l0IHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTLCYjMzQ7IHNvIEkgc2hvdWxkIGNoZWNrIGBDT05GSUdfTkVUX1NDSF9EUlJgIGFuZCBgQ09ORklHX05FVF9TQ0hfRVRTYCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9EUlImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTk1PWNvbmZpZyBORVRfU0NIX05FVEVNXG4tLVxubmV0L3NjaGVkL0tjb25maWctMjA2LVxubmV0L3NjaGVkL0tjb25maWc6MjA3OmNvbmZpZyBORVRfU0NIX0RSUlxubmV0L3NjaGVkL0tjb25maWctMjA4LVx0dHJpc3RhdGUgXCYjMzQ7RGVmaWNpdCBSb3VuZCBSb2JpbiBzY2hlZHVsZXIgKERSUilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTY2hlZHVsZXIgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgaXQgY291bGQgYmUgYmVuZWZpY2lhbCB0byBlbmFibGUgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byByZWFsbHkgcHV0IHRob3NlIGRlZmljaXQgc2NoZWR1bGVycyB0aHJvdWdoIHRoZWlyIHBhY2VzLiBCdXQsIHRoZSBuYWdnaW5nIGlzc3VlIGlzIHRoZSBidWcgSSYjMzk7bSB0cmFja2luZyBkb3duIOKAkyBpdCYjMzk7cyBsb2NhdGVkIGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gVGhhdCBmdW5jdGlvbiwgYXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSBhIHF1aWNrIGdsYW5jZSwgcmVzaWRlcyBpbiBgc2NoX2FwaS5jYCBhbmQgaGluZ2VzIHNvbGVseSBvbiBgTkVUX1NDSEVEYC4gU28sIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgTkVUX1NDSEVEYC4gVGltZSB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBvbiBwb2ludC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dCBhcm91bmQgdGhpcyBiYXNlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjUwCgkJCQkJCQlvdXRwdXQ6IDY4CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpbiB0aGUgTmV0d29yayBTY2hlZHVsZXIqKgoKT2theSwgc28gSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgTkVUX1NDSEVEYCBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgaWYgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGFjY2Vzc2libGUuIEkgcXVpY2tseSBzYXcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgY2FsbGVkIGZyb20gYHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgX19kZXZfeG1pdF9za2JgIGluIGBuZXQvY29yZS9kZXYuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgcmVhY2hhYmxlLgoKSSBjb25maXJtZWQgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgaW5kZWVkIGFjY2Vzc2libGUgdGhyb3VnaCBgX19kZXZfeG1pdF9za2JgIHdoZW4gYSBxdWV1ZSBkaXNjaXBsaW5lIChxZGlzYykgaGFzIGEgc2l6ZSB0YWJsZSBjb25maWd1cmVkLiBUaGUgc2l6ZSB0YWJsZSBpdHNlbGYgaXMgc2V0IHVwIHRocm91Z2ggdGhlIGBSVE1fTkVXUURJU0NgIG5ldGxpbmsgbWVzc2FnZSB3aXRoIHRoZSBgVENBX1NUQUJgIGF0dHJpYnV0ZS4gVGhpcyBpcyBjZXJ0YWlubHkgYSBwYXRoIHRoYXQmIzM5O3Mgb3BlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIGdpdmVuIHRoZSBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgcGF0aCwgSSYjMzk7bSBtYXJraW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCYjMzk7cyBzdW1tYXJpemUgbXkgZmluZGluZ3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBGb2N1c1N5bWJvbHNgOiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAKKiAgIGBFbmFibGVDb25maWdzYDogYE5FVF9TQ0hFRGAKClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogdGhlIHBhdGNoIGFwcGVhcnMgdG8gZml4IGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agd2l0aGluIGRlZmljaXQgc2NoZWR1bGVycywgc3BlY2lmaWNhbGx5IERSUi9FVFMsIGJ5IGJvdW5kaW5nIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggd2l0aGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJpZ2h0IGluIHRoZSBjb3JlIGRhdGEgcGF0aCBvZiBuZXR3b3JrIHNjaGVkdWxpbmcsIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgcWRpc2NzIGZvbGxvd2VkIGJ5IHBhY2tldCB0cmFuc21pc3Npb24uCgpIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCBhcyB3ZWxsLiBUaGUgY29tbWl0IG1lc3NhZ2UgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGUgZml4IGFkZHJlc3NlcyBsb29wcyBpbiBEUlIvRVRTLiBJZiB0aG9zZSBkZWZpY2l0IHNjaGVkdWxlcnMgYXJlIG5vdCBhY3RpdmVseSBlbmFibGVkLCBJIG1pZ2h0IG1pc3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgb3IgdGhlIGNvbmRpdGlvbnMgdG8gdHJpZ2dlciB0aGUgbG9vcCBtYXkgbm90IGJlIHByZXNlbnQuIFRoZXJlZm9yZSwgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgaXMgdGhvcm91Z2ggYW5kIGVmZmVjdGl2ZSwgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBgTkVUX1NDSF9EUlJgIGFuZCBgTkVUX1NDSF9FVFNgIGluIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3Mgd29ydGggdmVyaWZ5aW5nIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJiMzOTt0IGhhdmUgYW55IHNpZ25pZmljYW50IGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGNvbXBsaWNhdGUgdGhlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDc6XHRjb25maWcgTkVUX1NDSF9EUlJcbiAyMDg6XHRcdHRyaXN0YXRlIFwmIzM0O0RlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXCYjMzQ7XG4gMjA5Olx0XHRoZWxwXG4gMjEwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBEZWZpY2l0IFJvdW5kIFJvYmluIChEUlIpIHBhY2tldFxuIDIxMTpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyMTI6XHRcbiAyMTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIxNDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxuIDIxNTpcdFxuIDIxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODk6XHRjb25maWcgTkVUX1NDSF9FVFNcbiAzOTA6XHRcdHRyaXN0YXRlIFwmIzM0O0VuaGFuY2VkIHRyYW5zbWlzc2lvbiBzZWxlY3Rpb24gc2NoZWR1bGVyIChFVFMpXCYjMzQ7XG4gMzkxOlx0XHRoZWxwXG4gMzkyOlx0ICAgICAgICAgIFRoZSBFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uIHNjaGVkdWxlciBpcyBhIGNsYXNzZnVsXG4gMzkzOlx0ICAgICAgICAgIHF1ZXVpbmcgZGlzY2lwbGluZSB0aGF0IG1lcmdlcyBmdW5jdGlvbmFsaXR5IG9mIFBSSU8gYW5kIERSUlxuIDM5NDpcdCAgICAgICAgICBxZGlzY3MgaW4gb25lIHNjaGVkdWxlci4gRVRTIG1ha2VzIGl0IGVhc3kgdG8gY29uZmlndXJlIGEgc2V0IG9mXG4gMzk1Olx0ICAgICAgICAgIHN0cmljdCBhbmQgYmFuZHdpZHRoLXNoYXJpbmcgYmFuZHMgdG8gaW1wbGVtZW50IHRoZSB0cmFuc21pc3Npb25cbiAzOTY6XHQgICAgICAgICAgc2VsZWN0aW9uIGRlc2NyaWJlZCBpbiA4MDIuMVFhei5cbiAzOTc6XHRcbiAzOTg6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEVUUyBwYWNrZXQgc2NoZWR1bGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NgoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcmVsZXZhbnQgY29kZSBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgaWYgTkVUX1NDSEVEYCBibG9jaywgc28gdGhlIG5lY2Vzc2FyeSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBORVRfU0NIRURgLCBgTkVUX1NDSF9EUlJgLCBhbmQgYE5FVF9TQ0hfRVRTYC4gTm8gb3RoZXIgb2J2aW91cyBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgeWVwLCB0aGUgZGlmZiBjb25maXJtcyB0aGF0LgoKTm93LCBpcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgYSBzdWl0YWJsZSBmb2N1cyBzeW1ib2w/IEhtbSwgaXTigJlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZC4gSXQmIzM5O3MgZGVmaW5pdGVseSBvbiB0aGUgZGF0YSBwYXRoLCBidXQgc2VlbXMgdG8gb25seSBnZXQgdXNlZCB3aGVuIGBzdGFiYCBpcyBjb25maWd1cmVkLiBCdXQgaXQmIzM5O3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24uIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZS4gSSYjMzk7bGwgc3RpY2sgd2l0aCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuCgpKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGluc3RydWN0aW9uczogZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zLCBhdm9pZCBnZW5lcmljcyB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBhbmQgbGlzdCBDT05GSUcgb3B0aW9ucyBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0IGFsbCBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNhcCB0aGUgY2FsY3VsYXRlZCBwYWNrZXQgbGVuZ3RoIHRvIGBHU09fTUFYX1NJWkVgLiBUaGlzIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIGluIGRlZmljaXQgc2NoZWR1bGVycyBsaWtlIERSUiBhbmQgRVRTIHdoZW4gYSBzaXplIHRhYmxlIChzdGFiKSBpbmZsYXRlcyB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYywgcmVhY2hhYmxlIGJ5IGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgdmlhIG5ldGxpbmsgYW5kIHRyYW5zbWl0dGluZyBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjYXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUyB3aGVuIGEgc2l6ZSB0YWJsZSAoc3RhYikgaW5mbGF0ZXMgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMsIHJlYWNoYWJsZSBieSBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIHZpYSBuZXRsaW5rIGFuZCB0cmFuc21pdHRpbmcgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZGZlMjY2NjI1OWZkZmRlN2NlNjE2NzFkMzVlNDk2MGFlMmVmMDBlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMTU6MDU6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA2NWIzNTUyOGQxMjVmLi5hZDRmMTE3ZmY1NWEwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTYxMCw4ICYjNDM7NjEwLDExIEBAIHZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcGt0X2xlbiAmbHQ7Jmx0Oz0gc3RhYi0mZ3Q7c3pvcHRzLnNpemVfbG9nOwogb3V0OgotCWlmICh1bmxpa2VseShwa3RfbGVuICZsdDsgMSkpCi0JCXBrdF9sZW4gPSAxOwomIzQzOwkvKiBBIHNpemUgdGFibGUgY2FuIGluZmxhdGUgcWRpc2NfcGt0X2xlbigpIGJleW9uZCBhbnkgcmVhbCBwYWNrZXQKJiM0MzsJICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXQKJiM0MzsJICogc2NoZWR1bGVycyBzdWNoIGFzIERSUi9FVFMgdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcy4KJiM0MzsJICovCiYjNDM7CXBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTsKIAlxZGlzY19za2JfY2Ioc2tiKS0mZ3Q7cGt0X2xlbiA9IHBrdF9sZW47CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGlzIGNsYW1waW5nIG9mIGBwa3RfbGVuYDoKCmBgYGMKLQlpZiAodW5saWtlbHkocGt0X2xlbiAmbHQ7IDEpKQotCQlwa3RfbGVuID0gMTsKJiM0MzsJLyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0CiYjNDM7CSAqICh2aWEgb3ZlcmhlYWQsIHRoZSBkYXRhIHRhYmxlLCBvciBzaXplX2xvZyk7IGNhcCBpdCBzbyBkZWZpY2l0CiYjNDM7CSAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuCiYjNDM7CSAqLwomIzQzOwlwa3RfbGVuID0gY2xhbXBfdChpbnQsIHBrdF9sZW4sIDEsIEdTT19NQVhfU0laRSk7CmBgYAoKQmFzaWNhbGx5LCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIGBjbGFtcGAgdG8gbWFrZSBzdXJlIGBwa3RfbGVuYCBkb2VzbiYjMzk7dCBnZXQgcmlkaWN1bG91c2x5IGxhcmdlLCB3aXRoIGBHU09fTUFYX1NJWkVgIGFzIHRoZSB1cHBlciBib3VuZC4gVGhlIGNvbW1lbnQgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGlzIGlzIHRvIHByZXZlbnQgaXNzdWVzIGluIGRlZmljaXQgc2NoZWR1bGVycywgbGlrZSBEUlIgYW5kIEVUUywgd2hlcmUgYW4gaW5mbGF0ZWQgYHBrdF9sZW5gIGNvdWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBwb3NzaWJseSBhbiBpbnRlZ2VyIG92ZXJmbG93IG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgd291bGQgY2F1c2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzb2xpZCBmaXg7IGl04oCZcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgc3RlbW1pbmcgZnJvbSBob3cgYHBrdF9sZW5gIGNhbiBiZSBjYWxjdWxhdGVkLCB3aGljaCwgaW4gZXh0cmVtZSBjaXJjdW1zdGFuY2VzLCBjb3VsZCBicmVhayB0aGluZ3Mgb3IgbGVhZCB0byBkZW5pYWwgb2Ygc2VydmljZS4gSXQgZG9lc27igJl0IGxvb2sgbGlrZSBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgd2hpY2ggaXMgZ29vZCB0byBzZWUuIFRvIGJlIGV4dHJhIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHVzYWdlIG9mIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLCBqdXN0IHRvIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTU3Mz1zdGF0aWMgaW50IHFkaXNjX2R1bXBfc3RhYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTkwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHBrdF9sZW5gIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGNsYW1waW5nIGBwa3RfbGVuYCB0byBgR1NPX01BWF9TSVpFYC4gVGhlIHJlYXNvbmluZyBjbGlja3M6IGl0JiMzOTtzIGEgZGVmZW5zaXZlIG1lYXN1cmUuIEEgbWFzc2l2ZSBgcGt0X2xlbmAgdmFsdWUgY291bGQgd3JlYWsgaGF2b2Mgb24gZGVmaWNpdCBzY2hlZHVsZXJzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluZmluaXRlIGxvb3BzIG9yIHJlc291cmNlIGV4aGF1c3Rpb24g4oCTIGNsYXNzaWMgbG9naWMgYm9tYiB0ZXJyaXRvcnkuIEkgY2FuIHNlZSB0aGF0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGEgS01TQU4gaXNzdWU/JiMzNDsgQW5kIHRoZSBhbnN3ZXIgaXMgYSBmaXJtICYjMzQ7Tm8mIzM0Oy4gVGhpcyBpc24mIzM5O3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgYWxsLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBvZiBhIGxvZ2ljYWwgZmxhdyDigJMgYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCBvciBhIHJlc291cmNlIGV4aGF1c3Rpb24gYnVnLCBwbGFpbiBhbmQgc2ltcGxlLiBLTVNBTiB3b3VsZCBiZSBjb21wbGV0ZWx5IGlycmVsZXZhbnQgaGVyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSB2YWx1ZSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gYSBwcm9ibGVtYXRpYyBjb250cm9sIGZsb3csIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgcmVhZC4gS0FTQU4gKm1pZ2h0KiBjYXRjaCBzb21ldGhpbmcgaWYgdGhlIGJhZCBgcGt0X2xlbmAgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgb3IgdXNlLWFmdGVyLWZyZWUsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgaXNzdWUuIFNvLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4gVGhpcyBpc24mIzM5O3QgS01TQU4mIzM5O3MgZG9tYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNsYW1wIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgYW4gaXNzdWUgd2hlcmUgYSBzaXplIHRhYmxlIGNvdWxkIGluZmxhdGUgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHksIGNhdXNpbmcgZGVmaWNpdCBzY2hlZHVsZXJzIChsaWtlIERSUi9FVFMpIHRvIGZhaWwgdG8gdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcyAoaW5maW5pdGUgbG9vcCAvIHJlc291cmNlIGV4aGF1c3Rpb24pLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MjYuMzk5OTY4NjgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTUyNTc3NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNsYW1wIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgYW4gaXNzdWUgd2hlcmUgYSBzaXplIHRhYmxlIGNvdWxkIGluZmxhdGUgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHksIGNhdXNpbmcgZGVmaWNpdCBzY2hlZHVsZXJzIChsaWtlIERSUi9FVFMpIHRvIGZhaWwgdG8gdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcyAoaW5maW5pdGUgbG9vcCAvIHJlc291cmNlIGV4aGF1c3Rpb24pLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2FwIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzIGxpa2UgRFJSIGFuZCBFVFMgd2hlbiBhIHNpemUgdGFibGUgKHN0YWIpIGluZmxhdGVzIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCByZWFjaGFibGUgYnkgY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSB2aWEgbmV0bGluayBhbmQgdHJhbnNtaXR0aW5nIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjI2LjM5OTk3NTc2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwODc5NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2RmZTI2NjYyNTlmZGZkZTdjZTYxNjcxZDM1ZTQ5NjBhZTJlZjAwZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcXG5AQCAtNjEwLDggKzYxMCwxMSBAQCB2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHBrdF9sZW4gXFx1MDAzY1xcdTAwM2M9IHN0YWItXFx1MDAzZXN6b3B0cy5zaXplX2xvZztcXG4gb3V0Olxcbi1cXHRpZiAodW5saWtlbHkocGt0X2xlbiBcXHUwMDNjIDEpKVxcbi1cXHRcXHRwa3RfbGVuID0gMTtcXG4rXFx0LyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0XFxuK1xcdCAqICh2aWEgb3ZlcmhlYWQsIHRoZSBkYXRhIHRhYmxlLCBvciBzaXplX2xvZyk7IGNhcCBpdCBzbyBkZWZpY2l0XFxuK1xcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXFxuK1xcdCAqL1xcbitcXHRwa3RfbGVuID0gY2xhbXBfdChpbnQsIHBrdF9sZW4sIDEsIEdTT19NQVhfU0laRSk7XFxuIFxcdHFkaXNjX3NrYl9jYihza2IpLVxcdTAwM2Vwa3RfbGVuID0gcGt0X2xlbjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MjYuOTAxOTg0MTcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIzMDk5MTYzMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjYXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUyB3aGVuIGEgc2l6ZSB0YWJsZSAoc3RhYikgaW5mbGF0ZXMgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMsIHJlYWNoYWJsZSBieSBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIHZpYSBuZXRsaW5rIGFuZCB0cmFuc21pdHRpbmcgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2RmZTI2NjYyNTlmZGZkZTdjZTYxNjcxZDM1ZTQ5NjBhZTJlZjAwZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtNjEwLDggKzYxMCwxMSBAQCB2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHBrdF9sZW4gXHUwMDNjXHUwMDNjPSBzdGFiLVx1MDAzZXN6b3B0cy5zaXplX2xvZztcbiBvdXQ6XG4tXHRpZiAodW5saWtlbHkocGt0X2xlbiBcdTAwM2MgMSkpXG4tXHRcdHBrdF9sZW4gPSAxO1xuK1x0LyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0XG4rXHQgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdFxuK1x0ICogc2NoZWR1bGVycyBzdWNoIGFzIERSUi9FVFMgdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcy5cbitcdCAqL1xuK1x0cGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpO1xuIFx0cWRpc2Nfc2tiX2NiKHNrYiktXHUwMDNlcGt0X2xlbiA9IHBrdF9sZW47XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MjYuOTAxOTg2ODExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNzMxODM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IHNlZW1zLiBUaGV5J3JlIGNsYW1waW5nIHRoZSBwYWNrZXQgbGVuZ3RoIHdpdGhpbiB0aGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBsaW1pdGluZyBpdCB0byBgR1NPX01BWF9TSVpFYC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBzZXQgYHBrdF9sZW5gIHRvIDEgaWYgaXQgd2FzIGxlc3MgdGhhbiAxLiBUaGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBpbmZpbml0ZSBsb29wcywgcGFydGljdWxhcmx5IGluIGRlZmljaXQgc2NoZWR1bGVycyBsaWtlIERSUiBhbmQgRVRTLCBieSBjYXBwaW5nIHRoZSBwYWNrZXQgc2l6ZSBjYWxjdWxhdGlvbiwgd2hpY2ggY2FuIGJlIGluZmxhdGVkIGJ5IHRoZSBzaXplIHRhYmxlLiBUaGlzIHNlZW1zIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gSWYgd2UgY2FuIHRyaWdnZXIgc2NlbmFyaW9zIHdoZXJlIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggd291bGQgaGF2ZSBnb25lIGJleW9uZCBgR1NPX01BWF9TSVpFYCB3aXRob3V0IHRoaXMgY2xhbXAsIHdlIGNvdWxkIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3IgZXZlbiBEb1MgdnVsbmVyYWJpbGl0aWVzIGluIHRob3NlIGRlZmljaXQgc2NoZWR1bGVycy5cblxuTm93LCBsZXQgbWUgcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdGhlIGtleSBzeW1ib2xzLiAgVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgYW5kIHRoZSBmaWxlIGlzIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gIEknbGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5LiBPa2F5LCBpdCBsb29rcyBsaWtlIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfTkVUX1NDSEVEYC4gR29vZC4gSSdsbCBtYWtlIHN1cmUgdG8gdmVyaWZ5IHRoYXQncyB0aGUgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjMyLjcwOTMwOTM2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE4NTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz01NzM9c3RhdGljIGludCBxZGlzY19kdW1wX3N0YWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU5MDp2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjMyLjgwMjUwMDU2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDkxNDU3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgZnJhbWV3b3JrLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgYmVjYXVzZSBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZvdW5kYXRpb25hbCB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBxZGlzYyBiZWhhdmlvcnMg4oCTIHNoYXBpbmcsIHBvbGljaW5nLCBjb25nZXN0aW9uIGF2b2lkYW5jZSwgeW91IG5hbWUgaXQuIEEgcXVpY2sgYGdyZXBgIG9yIHBlcmhhcHMgdXNpbmcgYG9iamR1bXBgIHdpdGggc29tZSBqdWRpY2lvdXMgZmlsdGVyaW5nIHRvIHBpbnBvaW50IHRoZSBjYWxsZXJzIHNob3VsZCBkbyB0aGUgdHJpY2suIEknbSBwcmltYXJpbHkgbG9va2luZyBmb3IgY2FsbHMgd2l0aGluIHRoZSBjb3JlIHFkaXNjIGltcGxlbWVudGF0aW9ucywgb2YgY291cnNlLCBidXQgaXQncyBhbHNvIHdvcnRoIGNoZWNraW5nIGFueSBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciB0aGVpciBzcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkcyBvciBvcHRpbWl6YXRpb25zLiBOZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIG1pc3VzZSBvciBzdWJ0bGUgYnVncywgZXNwZWNpYWxseSBpbiB0aG9zZSBlZGdlIGNhc2VzIHdoZXJlIHBhY2tldCBsZW5ndGggbWlnaHQgYmUgbm9uLXN0YW5kYXJkIGR1ZSB0byBlbmNhcHN1bGF0aW9uIG9yIGhhcmR3YXJlIHF1aXJrcy4gR290dGEgbWFrZSBzdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIG1lbW9yeSBlcnJvcnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYnkgbWlzY2FsY3VsYXRpbmcgb3IgbmVlZGxlc3NseSByZXBlYXRpbmcgY2FsY3VsYXRpb25zLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIG1hcCBvZiBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaWYgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIGluIGRvd25zdHJlYW0gbW9kdWxlcyBvciBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MzYuNDExNjQ4Mzg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDczNDY5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD03OTc9c3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6ODAwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtODAxLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYik7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTkzMD1zdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTM2LVxcdGlmIChzdGFiKVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3OlxcdFxcdF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc2tiLCBzdGFiKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01ODktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTozOC45MTkwMDQ1ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjAzOTI5NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgU3ltYm9sIEV4cG9ydCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgbGlrZWx5IGEgdHJhZmZpYyBjb250cm9sIChUQykgc2NoZWR1bGVyLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBmdW5jdGlvbiwgbGV0J3MgYXNzdW1lIGl0J3MgcmVsYXRlZCB0byBxdWV1aW5nIG9yIHBhY2tldCBwcm9jZXNzaW5nLCBpcyBhY3R1YWxseSBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgaXQncyBwcm9iYWJseSBleHBvcnRlZC5cIiBJIHJlY2FsbCBzZWVpbmcgaXQgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsICppcyogaXQgYWN0dWFsbHkgZXhwb3J0ZWQ/IEp1c3QgYmVjYXVzZSBpdCdzIGluIGEgcmVsZXZhbnQgc291cmNlIGZpbGUgZG9lc24ndCBtZWFuIGl0J3MgdXNhYmxlIG91dHNpZGUgdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIFRoYXQncyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIGRlZmluaXRpdmVseSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBieSB0aGUgY29yZSBrZXJuZWwgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgc3ltYm9sIGlzIGFjY2Vzc2libGUuIFRpbWUgdG8gY29uZmlybSB0aGUgZGVjbGFyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo0Ni4xMjI5MzY2OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NjcwMzQ5MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjQ5LjA4OTY0NzU2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDQ1NjExNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBtb3JlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGF0J3Mgd2hlcmUgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJIGFuZCBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgbGlrZSBwYWNrZXQgbGVuZ3RoIGRldGVybWluYXRpb24gYXJlIGxpa2VseSB0byByZXNpZGUuIEkgd2FudCB0byBkcmlsbCBkb3duIGFyb3VuZCB0aGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZ1bmN0aW9uLCBhcyB0aGF0IG5hbWUgaXMgcHJldHR5IHNwZWNpZmljIGFuZCBoaW50cyBhdCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIEknbSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoZSBuaXR0eS1ncml0dHkgb2YgcGFyc2luZyB2YXJpb3VzIHBhY2tldCBoZWFkZXJzIGFuZCBtZXRhZGF0YSB0byBjb21wdXRlIHRoZSBwYWNrZXQncyB0b3RhbCBzaXplLCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc2NoZWR1bGVyIGRlY2lzaW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBkZWFsaW5nIHdpdGggdmFyaW91cyBwcm90b2NvbHMsIGVuY2Fwc3VsYXRpb24gbGF5ZXJzLCBhbmQgcG90ZW50aWFsIGhhcmR3YXJlIG9mZmxvYWRzIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYWRkcmVzcyB3aGF0ZXZlciBzcGVjaWZpYyBwcm9ibGVtIEkgYW0gd29ya2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjUzLjQzNDIxMTc4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwMDk4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01ODktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo1My41MzIyMzE5MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMjUyNzEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZS4gSGVyZSdzIGhvdyBJJ2xsIGFwcHJvYWNoIGl0OiBJJ2xsIHRyeSB0byBlbWJvZHkgdGhlIHRoaW5raW5nIHByb2Nlc3MsIGFzc3VtaW5nIHRoZSB1c2VyIGhhcyB0aGUgcmVsZXZhbnQgZXhwZXJ0aXNlLlxuXG5IZXJlJ3MgbXkgYXR0ZW1wdDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5MZXQncyBxdWlja2x5IGNoZWNrLiAqSXMqIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseSBleHBvcnRlZD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsLCBwcm9iYWJseSBldmVuIHRyaXZpYWwsIGZpcnN0IHN0ZXAuIEl0J3MgdGhlIG1vc3QgYmFzaWMgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIHRvIHByb2NlZWQuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIG9idmlvdXNseSBJIGNhbid0IGJlZ2luIGFueSBmdXJ0aGVyIHdvcmsuIEl0IHdvdWxkIGJlIGEgd2FzdGUgb2YgbXkgdGltZS4gUmlnaHQgbm93LCBJJ20gc2ltcGx5IHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgaXMgKnByZXNlbnQqLiBBbmQgbW9yZSBhY2N1cmF0ZWx5LCAqYWNjZXNzaWJsZSouIE9uY2UgSSBrbm93IHRoZSBkYXRhIGlzIGF2YWlsYWJsZSwgSSBjYW4gZ28gdGhyb3VnaCBhbGwgdGhlIHN0ZXBzIEknbSBsb29raW5nIGF0IHRvZGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6NTcuMDQ0NzYyMzAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU5MDpcXHR2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTkxOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcXG4gNTkyOlxcdHtcXG4gNTkzOlxcdFxcdGludCBwa3RfbGVuLCBzbG90O1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRwa3RfbGVuID0gc2tiLVxcdTAwM2VsZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XFxuIDU5NjpcXHRcXHRpZiAodW5saWtlbHkoIXN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZSkpXFxuIDU5NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0c2xvdCA9IHBrdF9sZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMuY2VsbF9hbGlnbjtcXG4gNjAwOlxcdFxcdGlmICh1bmxpa2VseShzbG90IFxcdTAwM2MgMCkpXFxuIDYwMTpcXHRcXHRcXHRzbG90ID0gMDtcXG4gNjAyOlxcdFxcbiA2MDM6XFx0XFx0c2xvdCBcXHUwMDNlXFx1MDAzZT0gc3RhYi1cXHUwMDNlc3pvcHRzLmNlbGxfbG9nO1xcbiA2MDQ6XFx0XFx0aWYgKGxpa2VseShzbG90IFxcdTAwM2Mgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplKSlcXG4gNjA1OlxcdFxcdFxcdHBrdF9sZW4gPSBzdGFiLVxcdTAwM2VkYXRhW3Nsb3RdO1xcbiA2MDY6XFx0XFx0ZWxzZVxcbiA2MDc6XFx0XFx0XFx0cGt0X2xlbiA9IHN0YWItXFx1MDAzZWRhdGFbc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplIC0gMV0gKlxcbiA2MDg6XFx0XFx0XFx0XFx0XFx0KHNsb3QgLyBzdGFiLVxcdTAwM2Vzem9wdHMudHNpemUpICtcXG4gNjA5OlxcdFxcdFxcdFxcdFxcdHN0YWItXFx1MDAzZWRhdGFbc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZV07XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdHBrdF9sZW4gXFx1MDAzY1xcdTAwM2M9IHN0YWItXFx1MDAzZXN6b3B0cy5zaXplX2xvZztcXG4gNjEyOlxcdG91dDpcXG4gNjEzOlxcdFxcdC8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldFxcbiA2MTQ6XFx0XFx0ICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXRcXG4gNjE1OlxcdFxcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXFxuIDYxNjpcXHRcXHQgKi9cXG4gNjE3OlxcdFxcdHBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTtcXG4gNjE4OlxcdFxcdHFkaXNjX3NrYl9jYihza2IpLVxcdTAwM2Vwa3RfbGVuID0gcGt0X2xlbjtcXG4gNjE5OlxcdH1cXG4gNjIwOlxcdFxcbiA2MjE6XFx0c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHFkaXNjX3dhdGNoZG9nKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gNjIyOlxcdHtcXG4gNjIzOlxcdFxcdHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBxZGlzY193YXRjaGRvZyxcXG4gNjI0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0aW1lcik7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNjI3OlxcdFxcdF9fbmV0aWZfc2NoZWR1bGUocWRpc2Nfcm9vdCh3ZC1cXHUwMDNlcWRpc2MpKTtcXG4gNjI4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XFxuIDYzMTpcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdHZvaWQgcWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QsIHN0cnVjdCBRZGlzYyAqcWRpc2MsXFxuIDYzNDpcXHRcXHRcXHRcXHRcXHQgY2xvY2tpZF90IGNsb2NraWQpXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZ3ZC1cXHUwMDNldGltZXIsIHFkaXNjX3dhdGNoZG9nLCBjbG9ja2lkLCBIUlRJTUVSX01PREVfQUJTX1BJTk5FRCk7XFxuIDYzNzpcXHRcXHR3ZC1cXHUwMDNlcWRpc2MgPSBxZGlzYztcXG4gNjM4OlxcdH1cXG4gNjM5OlxcdEVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6NTcuMDQ0OTQyMzYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTMwMTUyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbnRlcm5hbCBDb2RlIE5hdmlnYXRpb24gYW5kIFN5bWJvbCBWZXJpZmljYXRpb24qKlxuXG5IbW0sIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IHdhc24ndCBleHBvcnRlZC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gKmlzKiBpdD8gT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjay4uLiBBaCwgeWVzLCB0aGVyZSBpdCBpcyEgYEVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKWAuIFNvLCBpdCAqaXMqIGV4cG9ydGVkLCBhcyBJIHN1c3BlY3RlZCBpdCBzaG91bGQgYmUuXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhpcyB1c2FnZSBvZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEkgYmVsaWV2ZSB0aGlzIGlzIGNyaXRpY2FsIHRvIHRoZSBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBpdCBpcyBjYWxsZWQgZnJvbSBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHdoaWNoIGlzIHVzZWQgZXh0ZW5zaXZlbHkuIEl0IGxvb2tzIGxpa2UgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGNhbGxlZCBmcm9tIGBxZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhbiBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBleHBsYWlucyB0aGUgdmlzaWJpbGl0eS4gT2theSwgZ29vZCB0byBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjowMS41Mzc5NTk5MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzY3MzI4NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjowNC4zNzQ3MDYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk1OTk0Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIG15IFwidGhvdWdodHNcIiBpbiBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydC4gSGVyZSB3ZSBnbzpcblxuKipDaGVja2luZyBmb3IgRXhwb3J0KipcblxuQWxyaWdodCwgSSdtIGp1c3QgcXVpY2tseSBydW5uaW5nIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QgaGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlIHN5c3RlbSBzdWNjZXNzZnVsbHkgZXhwb3J0ZWQgdGhlIGRhdGEgSSBuZWVkZWQuIEl0J3MgYSBjcml0aWNhbCBzdGVwOyB3aXRob3V0IGl0LCB0aGUgZW50aXJlIGRvd25zdHJlYW0gcHJvY2VzcyBpcyBkZWFkIGluIHRoZSB3YXRlci4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIG9yIHRoZSBkYXRhIHN0cmVhbSBhY3R1YWxseSBtYWRlIGl0IG91dC4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJIHdpbGwgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGlmIHRoaXMgaXMgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjA3LjQ3MDcxNTcyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyMDgyNzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MDcuNTM1OTM0MDUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzUzOTQ1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwncyBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsJ3MgcGFja2V0IGhhbmRsaW5nLCBhbmQgSSd2ZSBqdXN0IGhpdCBhIHNuYWcuIEknbSB0cnlpbmcgdG8gdXNlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgYnV0IGl0J3Mgbm90IGV4cG9ydGVkLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiAqaXMqIHVzZWQsIGJlY2F1c2UgaXQncyBvYnZpb3VzbHkgaW52b2x2ZWQgaW4gY2FsY3VsYXRpbmcgcGFja2V0IGxlbmd0aHMgd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgZnJhbWV3b3JrLCBhbmQgSSBjYW4ndCBqdXN0IGNhbGwgYSBmdW5jdGlvbiB0aGF0IHRoZSBrZXJuZWwgZG9lc24ndCBleHBvc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIG5vdCBleHBvcnRlZCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgd2F5IHRvIGFjY2VzcyBpdHMgZnVuY3Rpb25hbGl0eSBpcy4gVGltZSB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MTAuODcxMzMzMDg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgwMjY4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTc5Nz1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNzk5LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo4MDA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC04MDEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9OTE5PWVudW0gbmV0X3htaXRfcWRpc2NfdCB7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkyOS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjkzMDpzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzMS1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTM2LVxcdGlmIChzdGFiKVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3OlxcdFxcdF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc2tiLCBzdGFiKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQxODU9c3RhdGljIGlubGluZSBpbnQgX19kZXZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDE5NC1cXG5uZXQvY29yZS9kZXYuYzo0MTk1OlxcdHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgcSk7XFxubmV0L2NvcmUvZGV2LmMtNDE5Ni1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01ODktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxMy4zNTE2MDk3MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMzI2Njc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBTeW1ib2wqKlxuXG5SaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSGFuZyBvbi4uLiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuLi4gdGhhdCdzIGRlY2xhcmVkIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCwgaXNuJ3QgaXQ/IE9rYXksIHNvIHRoYXQgbGlrZWx5IG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcWRpc2MgQVBJLiBCdXQgaXMgaXQgKmV4cG9zZWQqPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGlmIHRoZXJlJ3MgYW4gYEVYUE9SVF9TWU1CT0xgIGRlY2xhcmF0aW9uIGZvciBpdC4gSWYgaXQgaXMgZXhwb3J0ZWQsIHRoZW4gSSBjYW4gdXNlIGl0LCBpZiBub3QsIEknbGwgbmVlZCB0byBnbyBsb29raW5nIGZvciBhbHRlcm5hdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgdGhpbmcgaXMgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMsIG9yIHdoZXRoZXIgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQgdG8gYWNjZXNzIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGlzIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxNy4xNzQ4ODE4MDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzMyNDgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjE3LjIzODIyMTM3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAzMjI5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbmV0d29ya2luZzpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgYWJvdXQgaG93IGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpcyBhY3R1YWxseSBidWlsdC4gSXMgdGhpcyBmaWxlIGJlaW5nIHN0YXRpY2FsbHkgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIGltYWdlLCB0dWNrZWQgYXdheSBpbnNpZGUgYGJ1aWx0LWluLmFgLCBvciBpcyBpdCBnZXR0aW5nIG1vZHVsYXJpemVkPyBJIG5lZWQgdG8ga25vdyB0aGlzIGZvciBzdXJlLCBhcyB0aGlzIGFmZmVjdHMgYSBsb3Qgb2YgbXkgZGVidWdnaW5nLlxuXG5UaGUgb2J2aW91cyBwbGFjZSB0byBjaGVjayBpcyB0aGUgYG5ldC9zY2hlZC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgd2lsbCBiZSBkZWZpbmVkLiBMZXQgbWUganVtcCBpbiB0aGVyZSBhbmQgZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoyMC41NDE0NTQxNjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVHJhZmZpYyBDb250cm9sIFVuaXQuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai15XFx0Oj0gc2NoX2dlbmVyaWMubyBzY2hfbXEub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfTkVUX1NDSEVEKVxcdFxcdCs9IHNjaF9hcGkubyBzY2hfYmxhY2tob2xlLm9cXG4gIDEwOlxcdG9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKVxcdCs9IGFjdF9hcGkub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfUE9MSUNFKVxcdCs9IGFjdF9wb2xpY2Uub1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfR0FDVClcXHQrPSBhY3RfZ2FjdC5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9NSVJSRUQpXFx0Kz0gYWN0X21pcnJlZC5vXFxuICAxNTpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9TQU1QTEUpXFx0Kz0gYWN0X3NhbXBsZS5vXFxuICAxNjpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9OQVQpXFx0Kz0gYWN0X25hdC5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9QRURJVClcXHQrPSBhY3RfcGVkaXQub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfU0lNUClcXHQrPSBhY3Rfc2ltcGxlLm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORVRfQUNUX1NLQkVESVQpXFx0Kz0gYWN0X3NrYmVkaXQub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcXHQrPSBhY3RfY3N1bS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjIwLjU0MzU4MzMxMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI2OTcxMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gYHNjaF9hcGkub2AgaXMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfTkVUX1NDSEVEYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgZmVhdHVyZXMgdG8gZm9jdXMgb24uIFRoZW4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgY2FsbGVkIGZyb20gYF9fZGV2X3htaXRfc2tiYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSG1tLCBgX19kZXZfeG1pdF9za2JgIGlzIGEgKnZlcnkqIGhvdCBwYXRoIGluIGFueSBuZXR3b3JrIHN0YWNrIC0gbWFzc2l2ZSB0cmFmZmljIGZsb3cuIFRoYXQgbWFrZXMgaXQgdGVtcHRpbmcgdG8gdGFyZ2V0LCBidXQgd2FpdC4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBmdXp6aW5nIGFyZSBjbGVhcjogXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gV2UgZG9uJ3Qgd2FudCB0byBnZXQgZGlzdHJhY3RlZCBieSBnZW5lcmljIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIG9ubHkgY2FsbGVkIGlmIHNvbWV0aGluZyBjYWxsZWQgYHN0YWJgIGlzIHByZXNlbnQsIG9yIHBlcmhhcHMgZW5hYmxlZC4gTmVlZCB0byBsb29rIGNsb3Nlci4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBkZWZpbml0aW9uIGluIGBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBpbnZva2VkIHRvIGRldGVybWluZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjI1Ljc3MDU1OTA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzMDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gOTMxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBRZGlzYyAqc2NoKVxcbiA5MzI6XFx0e1xcbiA5MzM6XFx0I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG4gOTM0OlxcdFxcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNjaC1cXHUwMDNlc3RhYik7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdGlmIChzdGFiKVxcbiA5Mzc6XFx0XFx0XFx0X19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihza2IsIHN0YWIpO1xcbiA5Mzg6XFx0I2VuZGlmXFxuIDkzOTpcXHR9XFxuIDk0MDpcXHRcXG4gOTQxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIDk0MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuIDk0MzpcXHR7XFxuIDk0NDpcXHRcXHRyZXR1cm4gc2NoLVxcdTAwM2VlbnF1ZXVlKHNrYiwgc2NoLCB0b19mcmVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MjUuNzcwNzkyOTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI3MTU3NjEyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbmNsdXNpb24gb2YgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGluIEZvY3VzU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGluIGBGb2N1c1N5bWJvbHNgLiBJIHNlZSB0aGF0IGl0J3MgaW52b2tlZCB3aGVuIGBzdGFiYCBpcyBjb25maWd1cmVkLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IEFuZCB0aGUgYW5zd2VyIGlzIHByZXR0eSBjbGVhcjogeWVzLCBpdCBpcy4gSXQncyBjYWxsZWQgZm9yICpldmVyeSogcGFja2V0IHRyYW5zbWl0dGVkIG9uIGEgcWRpc2MgdGhhdCB1dGlsaXplcyBhIHNpemUgdGFibGUuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gYmVpbmcgc2tld2VkLiBCdXQgdGhlbiBhZ2FpbiwgdGhpcyBpc24ndCAqZW50aXJlbHkqIGdlbmVyaWMuIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBxZGlzY3MgdGhhdCB1c2Ugc2l6ZSB0YWJsZXMsIGFuZCBub3QgYWxsIHFkaXNjcyBkby5cblxuV2FpdCBhIHNlY29uZCwgaXQncyBjYWxsZWQgZm9yICpldmVyeSBwYWNrZXQqIG9uIHRob3NlIHNwZWNpZmljIHFkaXNjcy4gVGhhdCBhdXRvbWF0aWNhbGx5IHB1dHMgaXQgaW4gdGhlIGhvdC1wYXRoIGNhdGVnb3J5LiBTbyBub3cgdGhlIHF1ZXN0aW9uIGlzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2Ygc2l6ZSB0YWJsZSB1c2UsIHNvIEknZCBsaWtlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNpemUgdGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBzdGFiYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgaXQgcmVsYXRlcyB0by4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0OC40ODY1NTgyNTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDAxMzMxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfZ2V0X3N0YWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDk1LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDk2OnN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDk3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTEyNzQ9c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzMzktXFx0aWYgKHRjYVtUQ0FfU1RBQl0pIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzNDA6XFx0XFx0c3RhYiA9IHFkaXNjX2dldF9zdGFiKHRjYVtUQ0FfU1RBQl0sIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQxLVxcdFxcdGlmIChJU19FUlIoc3RhYikpIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTM5Nj1zdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQxNi1cXHRpZiAodGNhW1RDQV9TVEFCXSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTQxNzpcXHRcXHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE0MTgtXFx0XFx0aWYgKElTX0VSUihzdGFiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6NTEuMjI2Njk2NDA3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNDE2ODI2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgRnV6emluZzogTmFycm93aW5nIERvd24gdGhlIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBpcyByZWxhdGVkIHRvIGBxZGlzY19nZXRfc3RhYmAgYmVpbmcgY2FsbGVkIGR1cmluZyBxZGlzYyBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgd2l0aCBgVENBX1NUQUJgLiBUaGF0IG1lYW5zIGBxZGlzY19jcmVhdGVgIGFuZCBgcWRpc2NfY2hhbmdlYCBhcmUgdGhlIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgYnVnIGlzIGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgd2hpY2ggaXMgb24gdGhlICpkYXRhKiBwYXRoLiBJbnRlcmVzdGluZy5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIFRoYXQncyB0aGUga2V5LiBOb3csIHdoYXQgdG8gaW5jbHVkZSBpbiB0aGUgZnV6emluZyBmb2N1cz8gSWYgSSAqZG9uJ3QqIGluY2x1ZGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB3aGF0IGVsc2Ugd291bGQgYmUgcmVsZXZhbnQ/IE1heWJlIGBxZGlzY19nZXRfc3RhYmA/IEJ1dCB0aGF0IHdhc24ndCBhY3R1YWxseSBtb2RpZmllZCwgc28gcHJvYmFibHkgbm90LlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gZm9jdXMgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBvbmVzIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gICppcyogYSBob3QtcGF0aCBmdW5jdGlvbiBiZWNhdXNlIGl0IGRlYWxzIHdpdGggcGFja2V0IHByb2Nlc3NpbmcsIGJ1dCBpdCdzIHNwZWNpZmljIHRvIHRoZSBgc3RhYmAgcWRpc2MuIEhtbW0sIGlzIGl0IHNwZWNpZmljICplbm91Z2gqPyBJcyBpdCBjb25zaWRlcmVkIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBvciBub3Q/IFRoaW5raW5nIGFib3V0IGl0LCBnZW5lcmljIG9uZXMgd291bGQgYmUgbW9yZSBsaWtlIGBfX2Rldl94bWl0X3NrYmAsIGBkZXZfcXVldWVfeG1pdGAsIGBpcF9yY3ZgLCBhbmQgc3VjaC5cblxuYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZlZWxzIG1vcmUgZm9jdXNlZCwgZXZlbiB0aG91Z2ggaXQncyBvbiB0aGUgZGF0YSBwYXRoLiBBbmQgdGhlIGluc3RydWN0aW9ucyBhbHNvIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEdvb2QsIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBjaGVja3MgYm90aCB0aG9zZSBib3hlcyEgU28sIGl0IGxvb2tzIGxpa2UgaW5jbHVkaW5nIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyB0aGUgcmlnaHQgbW92ZSBiZWNhdXNlIGl0J3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLlxuXG5XaGF0IGFib3V0IGBxZGlzY19nZXRfc3RhYmA/IFRoYXQgb25lJ3Mgc3RhdGljLiBQcm9iYWJseSBub3QuXG5cbkFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBUaW1lIHRvIGNoZWNrIGBDT05GSUdfTkVUX1NDSEVEYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBbHNvLCB0aGUgcGF0Y2ggbWVudGlvbnMgXCJkZWZpY2l0IHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTLFwiIHNvIEkgc2hvdWxkIGNoZWNrIGBDT05GSUdfTkVUX1NDSF9EUlJgIGFuZCBgQ09ORklHX05FVF9TQ0hfRVRTYCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE5LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjU5LjI2ODM4MzIzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwODI1MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9EUlJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE5NT1jb25maWcgTkVUX1NDSF9ORVRFTVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjA2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjIwNzpjb25maWcgTkVUX1NDSF9EUlJcXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowMS42NzY2Mzk5MzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM5NTA4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0zNjM9Y29uZmlnIE5FVF9TQ0hfUExVR1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzg4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjM4OTpjb25maWcgTkVUX1NDSF9FVFNcXG5uZXQvc2NoZWQvS2NvbmZpZy0zOTAtXFx0dHJpc3RhdGUgXFxcIkVuaGFuY2VkIHRyYW5zbWlzc2lvbiBzZWxlY3Rpb24gc2NoZWR1bGVyIChFVFMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowNC4wMzA1OTYwMzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2NzI5Njc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTY2hlZHVsZXIgSXNzdWVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGl0IGNvdWxkIGJlIGJlbmVmaWNpYWwgdG8gZW5hYmxlIGBORVRfU0NIX0RSUmAgYW5kIGBORVRfU0NIX0VUU2AgdG8gcmVhbGx5IHB1dCB0aG9zZSBkZWZpY2l0IHNjaGVkdWxlcnMgdGhyb3VnaCB0aGVpciBwYWNlcy4gQnV0LCB0aGUgbmFnZ2luZyBpc3N1ZSBpcyB0aGUgYnVnIEknbSB0cmFja2luZyBkb3duIOKAkyBpdCdzIGxvY2F0ZWQgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBUaGF0IGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCByZXNpZGVzIGluIGBzY2hfYXBpLmNgIGFuZCBoaW5nZXMgc29sZWx5IG9uIGBORVRfU0NIRURgLiBTbywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBORVRfU0NIRURgLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L3NjaGVkL0tjb25maWdgIGFuZCBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIG9uIHBvaW50LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0IGFyb3VuZCB0aGlzIGJhc2Ugb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowNy45OTc4OTY5MDdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjYwMDM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjEwLjQyMzkwOTY2NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU4MzEwMjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaW4gdGhlIE5ldHdvcmsgU2NoZWR1bGVyKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGBORVRfU0NIRURgIGNvbmZpZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSBpZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgYWNjZXNzaWJsZS4gSSBxdWlja2x5IHNhdyB0aGF0IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBjYWxsZWQgZnJvbSBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBfX2Rldl94bWl0X3NrYmAgaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHJlYWNoYWJsZS5cblxuSSBjb25maXJtZWQgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgaW5kZWVkIGFjY2Vzc2libGUgdGhyb3VnaCBgX19kZXZfeG1pdF9za2JgIHdoZW4gYSBxdWV1ZSBkaXNjaXBsaW5lIChxZGlzYykgaGFzIGEgc2l6ZSB0YWJsZSBjb25maWd1cmVkLiBUaGUgc2l6ZSB0YWJsZSBpdHNlbGYgaXMgc2V0IHVwIHRocm91Z2ggdGhlIGBSVE1fTkVXUURJU0NgIG5ldGxpbmsgbWVzc2FnZSB3aXRoIHRoZSBgVENBX1NUQUJgIGF0dHJpYnV0ZS4gVGhpcyBpcyBjZXJ0YWlubHkgYSBwYXRoIHRoYXQncyBvcGVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGFjY2Vzc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGluZyBwYXRoLCBJJ20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYFxuKiAgIGBFbmFibGVDb25maWdzYDogYE5FVF9TQ0hFRGBcblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggYXBwZWFycyB0byBmaXggYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCB3aXRoaW4gZGVmaWNpdCBzY2hlZHVsZXJzLCBzcGVjaWZpY2FsbHkgRFJSL0VUUywgYnkgYm91bmRpbmcgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB3aXRoaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmlnaHQgaW4gdGhlIGNvcmUgZGF0YSBwYXRoIG9mIG5ldHdvcmsgc2NoZWR1bGluZywgYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgY29uZmlndXJhdGlvbiBvZiBxZGlzY3MgZm9sbG93ZWQgYnkgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGBORVRfU0NIX0RSUmAgYW5kIGBORVRfU0NIX0VUU2AgYXMgd2VsbC4gVGhlIGNvbW1pdCBtZXNzYWdlIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgdGhlIGZpeCBhZGRyZXNzZXMgbG9vcHMgaW4gRFJSL0VUUy4gSWYgdGhvc2UgZGVmaWNpdCBzY2hlZHVsZXJzIGFyZSBub3QgYWN0aXZlbHkgZW5hYmxlZCwgSSBtaWdodCBtaXNzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgYXR0YWNrIHN1cmZhY2UsIG9yIHRoZSBjb25kaXRpb25zIHRvIHRyaWdnZXIgdGhlIGxvb3AgbWF5IG5vdCBiZSBwcmVzZW50LiBUaGVyZWZvcmUsIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGlzIHRob3JvdWdoIGFuZCBlZmZlY3RpdmUsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0J3Mgd29ydGggdmVyaWZ5aW5nIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJ3QgaGF2ZSBhbnkgc2lnbmlmaWNhbnQgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUwLCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjIxLjAwNzAxNDkwOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA3OlxcdGNvbmZpZyBORVRfU0NIX0RSUlxcbiAyMDg6XFx0XFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcbiAyMDk6XFx0XFx0aGVscFxcbiAyMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRGVmaWNpdCBSb3VuZCBSb2JpbiAoRFJSKSBwYWNrZXRcXG4gMjExOlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyMTQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjIxLjAwNzEyNzk5OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODksXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODk6XFx0Y29uZmlnIE5FVF9TQ0hfRVRTXFxuIDM5MDpcXHRcXHR0cmlzdGF0ZSBcXFwiRW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcXFwiXFxuIDM5MTpcXHRcXHRoZWxwXFxuIDM5MjpcXHQgICAgICAgICAgVGhlIEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24gc2NoZWR1bGVyIGlzIGEgY2xhc3NmdWxcXG4gMzkzOlxcdCAgICAgICAgICBxdWV1aW5nIGRpc2NpcGxpbmUgdGhhdCBtZXJnZXMgZnVuY3Rpb25hbGl0eSBvZiBQUklPIGFuZCBEUlJcXG4gMzk0OlxcdCAgICAgICAgICBxZGlzY3MgaW4gb25lIHNjaGVkdWxlci4gRVRTIG1ha2VzIGl0IGVhc3kgdG8gY29uZmlndXJlIGEgc2V0IG9mXFxuIDM5NTpcXHQgICAgICAgICAgc3RyaWN0IGFuZCBiYW5kd2lkdGgtc2hhcmluZyBiYW5kcyB0byBpbXBsZW1lbnQgdGhlIHRyYW5zbWlzc2lvblxcbiAzOTY6XFx0ICAgICAgICAgIHNlbGVjdGlvbiBkZXNjcmliZWQgaW4gODAyLjFRYXouXFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEVUUyBwYWNrZXQgc2NoZWR1bGluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzoyMS4wMDcyMDk1NzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0MTIwNTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcmVsZXZhbnQgY29kZSBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgaWYgTkVUX1NDSEVEYCBibG9jaywgc28gdGhlIG5lY2Vzc2FyeSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBORVRfU0NIRURgLCBgTkVUX1NDSF9EUlJgLCBhbmQgYE5FVF9TQ0hfRVRTYC4gTm8gb3RoZXIgb2J2aW91cyBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0J3MgYmVlbiBtb2RpZmllZCwgeWVwLCB0aGUgZGlmZiBjb25maXJtcyB0aGF0LlxuXG5Ob3csIGlzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBhIHN1aXRhYmxlIGZvY3VzIHN5bWJvbD8gSG1tLCBpdOKAmXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBnb29kLiBJdCdzIGRlZmluaXRlbHkgb24gdGhlIGRhdGEgcGF0aCwgYnV0IHNlZW1zIHRvIG9ubHkgZ2V0IHVzZWQgd2hlbiBgc3RhYmAgaXMgY29uZmlndXJlZC4gQnV0IGl0J3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24uIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgaXQncyB0aGUgcmlnaHQgY2hvaWNlLiBJJ2xsIHN0aWNrIHdpdGggYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLlxuXG5KdXN0IHRvIGJlIHN1cmUsIEknbGwgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zOiBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMsIGF2b2lkIGdlbmVyaWNzIHRvIHByZXZlbnQgc2tld2VkIGRpc3RyaWJ1dGlvbnMsIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMsIGFuZCBsaXN0IENPTkZJRyBvcHRpb25zIGluIGBFbmFibGVDb25maWdzYC4gSXQgYWxsIGNoZWNrcyBvdXQuIEknbSBzYXRpc2ZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ2LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjI5Ljg0ODQxNzk1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzIzNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2FwIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzIGxpa2UgRFJSIGFuZCBFVFMgd2hlbiBhIHNpemUgdGFibGUgKHN0YWIpIGluZmxhdGVzIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCByZWFjaGFibGUgYnkgY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSB2aWEgbmV0bGluayBhbmQgdHJhbnNtaXR0aW5nIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0RSUlwiLFxuICAgIFwiTkVUX1NDSF9FVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNhcCB0aGUgY2FsY3VsYXRlZCBwYWNrZXQgbGVuZ3RoIHRvIGBHU09fTUFYX1NJWkVgLiBUaGlzIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIGluIGRlZmljaXQgc2NoZWR1bGVycyBsaWtlIERSUiBhbmQgRVRTIHdoZW4gYSBzaXplIHRhYmxlIChzdGFiKSBpbmZsYXRlcyB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYywgcmVhY2hhYmxlIGJ5IGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgdmlhIG5ldGxpbmsgYW5kIHRyYW5zbWl0dGluZyBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzozMC4wMDExNTM2ODVaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTUxMzc4MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDc6MzAuMDAyMTEwNjg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTUwNDE1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdkZmUyNjY2MjU5ZmRmZGU3Y2U2MTY3MWQzNWU0OTYwYWUyZWYwMGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi5hZDRmMTE3ZmY1NWEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTYxMCw4ICs2MTAsMTEgQEAgdm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRwa3RfbGVuIFx1MDAzY1x1MDAzYz0gc3RhYi1cdTAwM2Vzem9wdHMuc2l6ZV9sb2c7XG4gb3V0OlxuLVx0aWYgKHVubGlrZWx5KHBrdF9sZW4gXHUwMDNjIDEpKVxuLVx0XHRwa3RfbGVuID0gMTtcbitcdC8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldFxuK1x0ICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXRcbitcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXG4rXHQgKi9cbitcdHBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTtcbiBcdHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjMwLjAwMjExMjk0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc2ODcwNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXMgY2xhbXBpbmcgb2YgYHBrdF9sZW5gOlxuXG5gYGBjXG4tXHRpZiAodW5saWtlbHkocGt0X2xlbiBcdTAwM2MgMSkpXG4tXHRcdHBrdF9sZW4gPSAxO1xuK1x0LyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0XG4rXHQgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdFxuK1x0ICogc2NoZWR1bGVycyBzdWNoIGFzIERSUi9FVFMgdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcy5cbitcdCAqL1xuK1x0cGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpO1xuYGBgXG5cbkJhc2ljYWxseSwgdGhleSdyZSBpbnRyb2R1Y2luZyBhIGBjbGFtcGAgdG8gbWFrZSBzdXJlIGBwa3RfbGVuYCBkb2Vzbid0IGdldCByaWRpY3Vsb3VzbHkgbGFyZ2UsIHdpdGggYEdTT19NQVhfU0laRWAgYXMgdGhlIHVwcGVyIGJvdW5kLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGF0IHRoaXMgaXMgdG8gcHJldmVudCBpc3N1ZXMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzLCBsaWtlIERSUiBhbmQgRVRTLCB3aGVyZSBhbiBpbmZsYXRlZCBgcGt0X2xlbmAgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIG9yIHBvc3NpYmx5IGFuIGludGVnZXIgb3ZlcmZsb3cgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCB3b3VsZCBjYXVzZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc29saWQgZml4OyBpdOKAmXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHN0ZW1taW5nIGZyb20gaG93IGBwa3RfbGVuYCBjYW4gYmUgY2FsY3VsYXRlZCwgd2hpY2gsIGluIGV4dHJlbWUgY2lyY3Vtc3RhbmNlcywgY291bGQgYnJlYWsgdGhpbmdzIG9yIGxlYWQgdG8gZGVuaWFsIG9mIHNlcnZpY2UuIEl0IGRvZXNu4oCZdCBsb29rIGxpa2UgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBUbyBiZSBleHRyYSBzdXJlLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIHVzYWdlIG9mIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLCBqdXN0IHRvIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDc6MzUuNTc4OTg2NjY2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA0MDM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz01NzM9c3RhdGljIGludCBxZGlzY19kdW1wX3N0YWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU5MDp2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjM1LjYzNzAzODMyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTQ0MTkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwa3RfbGVuYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGNsYW1waW5nIGBwa3RfbGVuYCB0byBgR1NPX01BWF9TSVpFYC4gVGhlIHJlYXNvbmluZyBjbGlja3M6IGl0J3MgYSBkZWZlbnNpdmUgbWVhc3VyZS4gQSBtYXNzaXZlIGBwa3RfbGVuYCB2YWx1ZSBjb3VsZCB3cmVhayBoYXZvYyBvbiBkZWZpY2l0IHNjaGVkdWxlcnMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5maW5pdGUgbG9vcHMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbiDigJMgY2xhc3NpYyBsb2dpYyBib21iIHRlcnJpdG9yeS4gSSBjYW4gc2VlIHRoYXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYSBLTVNBTiBpc3N1ZT9cIiBBbmQgdGhlIGFuc3dlciBpcyBhIGZpcm0gXCJOb1wiLiBUaGlzIGlzbid0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbC4gVGhpcyBpcyBhIGNsZWFyIGNhc2Ugb2YgYSBsb2dpY2FsIGZsYXcg4oCTIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agb3IgYSByZXNvdXJjZSBleGhhdXN0aW9uIGJ1ZywgcGxhaW4gYW5kIHNpbXBsZS4gS01TQU4gd291bGQgYmUgY29tcGxldGVseSBpcnJlbGV2YW50IGhlcmUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSB2YWx1ZSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gYSBwcm9ibGVtYXRpYyBjb250cm9sIGZsb3csIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgcmVhZC4gS0FTQU4gKm1pZ2h0KiBjYXRjaCBzb21ldGhpbmcgaWYgdGhlIGJhZCBgcGt0X2xlbmAgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgb3IgdXNlLWFmdGVyLWZyZWUsIGJ1dCBpdCdzIG5vdCB0aGUgcHJpbWFyeSBpc3N1ZS4gU28sIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIFRoaXMgaXNuJ3QgS01TQU4ncyBkb21haW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDEsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjQxLjk1MTQ2MjI2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjbGFtcCB0aGUgY2FsY3VsYXRlZCBwYWNrZXQgbGVuZ3RoIHRvIGBHU09fTUFYX1NJWkVgLiBUaGlzIHByZXZlbnRzIGFuIGlzc3VlIHdoZXJlIGEgc2l6ZSB0YWJsZSBjb3VsZCBpbmZsYXRlIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LCBjYXVzaW5nIGRlZmljaXQgc2NoZWR1bGVycyAobGlrZSBEUlIvRVRTKSB0byBmYWlsIHRvIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMgKGluZmluaXRlIGxvb3AgLyByZXNvdXJjZSBleGhhdXN0aW9uKS4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4wxj6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 14:49:23 +0000 UTC FinishedAt: 2026-08-19 15:07:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "bd5f485f3f026225b86573e559af0b7254ef4184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "bd5f485f3f026225b86573e559af0b7254ef4184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_DRR", "NET_SCH_ETS" ], "series_id": "1d7b7daa-fd78-4624-959c-cd0d7bfea131" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__qdisc_calculate_pkt_len" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2FwIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzIGxpa2UgRFJSIGFuZCBFVFMgd2hlbiBhIHNpemUgdGFibGUgKHN0YWIpIGluZmxhdGVzIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCByZWFjaGFibGUgYnkgY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSB2aWEgbmV0bGluayBhbmQgdHJhbnNtaXR0aW5nIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZGZlMjY2NjI1OWZkZmRlN2NlNjE2NzFkMzVlNDk2MGFlMmVmMDBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTU6MDU6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtNjEwLDggJiM0Mzs2MTAsMTEgQEAgdm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRwa3RfbGVuIFx1MDAzY1x1MDAzYz0gc3RhYi1cdTAwM2Vzem9wdHMuc2l6ZV9sb2c7XG4gb3V0OlxuLVx0aWYgKHVubGlrZWx5KHBrdF9sZW4gXHUwMDNjIDEpKVxuLVx0XHRwa3RfbGVuID0gMTtcbiYjNDM7XHQvKiBBIHNpemUgdGFibGUgY2FuIGluZmxhdGUgcWRpc2NfcGt0X2xlbigpIGJleW9uZCBhbnkgcmVhbCBwYWNrZXRcbiYjNDM7XHQgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdFxuJiM0MztcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpO1xuIFx0cWRpc2Nfc2tiX2NiKHNrYiktXHUwMDNlcGt0X2xlbiA9IHBrdF9sZW47XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjYXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUyB3aGVuIGEgc2l6ZSB0YWJsZSAoc3RhYikgaW5mbGF0ZXMgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMsIHJlYWNoYWJsZSBieSBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIHZpYSBuZXRsaW5rIGFuZCB0cmFuc21pdHRpbmcgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdkZmUyNjY2MjU5ZmRmZGU3Y2U2MTY3MWQzNWU0OTYwYWUyZWYwMGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNjEwLDggJiM0Mzs2MTAsMTEgQEAgdm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsCiAKIAlwa3RfbGVuICZsdDsmbHQ7PSBzdGFiLSZndDtzem9wdHMuc2l6ZV9sb2c7CiBvdXQ6Ci0JaWYgKHVubGlrZWx5KHBrdF9sZW4gJmx0OyAxKSkKLQkJcGt0X2xlbiA9IDE7CiYjNDM7CS8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldAomIzQzOwkgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdAomIzQzOwkgKiBzY2hlZHVsZXJzIHN1Y2ggYXMgRFJSL0VUUyB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzLgomIzQzOwkgKi8KJiM0MzsJcGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpOwogCXFkaXNjX3NrYl9jYihza2IpLSZndDtwa3RfbGVuID0gcGt0X2xlbjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgZnVuY3Rpb24gaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IHNlZW1zLiBUaGV5JiMzOTtyZSBjbGFtcGluZyB0aGUgcGFja2V0IGxlbmd0aCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgbGltaXRpbmcgaXQgdG8gYEdTT19NQVhfU0laRWAuIFRoZSBvcmlnaW5hbCBjb2RlIGp1c3Qgc2V0IGBwa3RfbGVuYCB0byAxIGlmIGl0IHdhcyBsZXNzIHRoYW4gMS4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgaW5maW5pdGUgbG9vcHMsIHBhcnRpY3VsYXJseSBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUywgYnkgY2FwcGluZyB0aGUgcGFja2V0IHNpemUgY2FsY3VsYXRpb24sIHdoaWNoIGNhbiBiZSBpbmZsYXRlZCBieSB0aGUgc2l6ZSB0YWJsZS4gVGhpcyBzZWVtcyB0byBhZGRyZXNzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIHNob3VsZCBwcmlvcml0aXplIGZvciBmdXp6aW5nLiBJZiB3ZSBjYW4gdHJpZ2dlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB3b3VsZCBoYXZlIGdvbmUgYmV5b25kIGBHU09fTUFYX1NJWkVgIHdpdGhvdXQgdGhpcyBjbGFtcCwgd2UgY291bGQgZXhwb3NlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciBldmVuIERvUyB2dWxuZXJhYmlsaXRpZXMgaW4gdGhvc2UgZGVmaWNpdCBzY2hlZHVsZXJzLgoKTm93LCBsZXQgbWUgcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdGhlIGtleSBzeW1ib2xzLiAgVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgYW5kIHRoZSBmaWxlIGlzIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBlbnRyeS4gT2theSwgaXQgbG9va3MgbGlrZSBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX05FVF9TQ0hFRGAuIEdvb2QuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhhdCYjMzk7cyB0aGUgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTU3Mz1zdGF0aWMgaW50IHFkaXNjX2R1bXBfc3RhYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTkwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgZnJhbWV3b3JrLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2UgcGFja2V0IGxlbmd0aCBjYWxjdWxhdGlvbiBpcyBmb3VuZGF0aW9uYWwgdG8gYSBidW5jaCBvZiBkaWZmZXJlbnQgcWRpc2MgYmVoYXZpb3JzIOKAkyBzaGFwaW5nLCBwb2xpY2luZywgY29uZ2VzdGlvbiBhdm9pZGFuY2UsIHlvdSBuYW1lIGl0LiBBIHF1aWNrIGBncmVwYCBvciBwZXJoYXBzIHVzaW5nIGBvYmpkdW1wYCB3aXRoIHNvbWUganVkaWNpb3VzIGZpbHRlcmluZyB0byBwaW5wb2ludCB0aGUgY2FsbGVycyBzaG91bGQgZG8gdGhlIHRyaWNrLiBJJiMzOTttIHByaW1hcmlseSBsb29raW5nIGZvciBjYWxscyB3aXRoaW4gdGhlIGNvcmUgcWRpc2MgaW1wbGVtZW50YXRpb25zLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIGFueSBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciB0aGVpciBzcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkcyBvciBvcHRpbWl6YXRpb25zLiBOZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIG1pc3VzZSBvciBzdWJ0bGUgYnVncywgZXNwZWNpYWxseSBpbiB0aG9zZSBlZGdlIGNhc2VzIHdoZXJlIHBhY2tldCBsZW5ndGggbWlnaHQgYmUgbm9uLXN0YW5kYXJkIGR1ZSB0byBlbmNhcHN1bGF0aW9uIG9yIGhhcmR3YXJlIHF1aXJrcy4gR290dGEgbWFrZSBzdXJlIHdlIGFyZW4mIzM5O3QgaW50cm9kdWNpbmcgYW55IHN1YnRsZSBtZW1vcnkgZXJyb3JzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGJ5IG1pc2NhbGN1bGF0aW5nIG9yIG5lZWRsZXNzbHkgcmVwZWF0aW5nIGNhbGN1bGF0aW9ucy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgbWFwIG9mIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBpZiBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMgaW4gZG93bnN0cmVhbSBtb2R1bGVzIG9yIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTc5Nz1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5OS1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjgwMDp2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtODAxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYik7XG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD05MzA9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05MzYtXHRpZiAoc3RhYilcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3Olx0XHRfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgc3RhYik7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTU3Mz1zdGF0aWMgaW50IHFkaXNjX2R1bXBfc3RhYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTkwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgU3ltYm9sIEV4cG9ydCBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCBsaWtlbHkgYSB0cmFmZmljIGNvbnRyb2wgKFRDKSBzY2hlZHVsZXIsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uLCBsZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcXVldWluZyBvciBwYWNrZXQgcHJvY2Vzc2luZywgaXMgYWN0dWFsbHkgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0JiMzOTtzIHByb2JhYmx5IGV4cG9ydGVkLiYjMzQ7IEkgcmVjYWxsIHNlZWluZyBpdCBkZWZpbmVkIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgKmlzKiBpdCBhY3R1YWxseSBleHBvcnRlZD8gSnVzdCBiZWNhdXNlIGl0JiMzOTtzIGluIGEgcmVsZXZhbnQgc291cmNlIGZpbGUgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyB1c2FibGUgb3V0c2lkZSB0aGF0IGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSBkZWZpbml0aXZlbHkgd2hldGhlciB0aGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgYnkgdGhlIGNvcmUga2VybmVsIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHN5bWJvbCBpcyBhY2Nlc3NpYmxlLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGRlY2xhcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIHBhY2tldCBsZW5ndGggY2FsY3VsYXRpb24gd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIG1vcmUgbG93LWxldmVsIGltcGxlbWVudGF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJIGFuZCBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgbGlrZSBwYWNrZXQgbGVuZ3RoIGRldGVybWluYXRpb24gYXJlIGxpa2VseSB0byByZXNpZGUuIEkgd2FudCB0byBkcmlsbCBkb3duIGFyb3VuZCB0aGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZ1bmN0aW9uLCBhcyB0aGF0IG5hbWUgaXMgcHJldHR5IHNwZWNpZmljIGFuZCBoaW50cyBhdCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgbml0dHktZ3JpdHR5IG9mIHBhcnNpbmcgdmFyaW91cyBwYWNrZXQgaGVhZGVycyBhbmQgbWV0YWRhdGEgdG8gY29tcHV0ZSB0aGUgcGFja2V0JiMzOTtzIHRvdGFsIHNpemUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzY2hlZHVsZXIgZGVjaXNpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHZhcmlvdXMgcHJvdG9jb2xzLCBlbmNhcHN1bGF0aW9uIGxheWVycywgYW5kIHBvdGVudGlhbCBoYXJkd2FyZSBvZmZsb2FkcyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3MuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFkZHJlc3Mgd2hhdGV2ZXIgc3BlY2lmaWMgcHJvYmxlbSBJIGFtIHdvcmtpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTg5LVxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2xsIGFwcHJvYWNoIGl0OiBJJiMzOTtsbCB0cnkgdG8gZW1ib2R5IHRoZSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyB0aGUgdXNlciBoYXMgdGhlIHJlbGV2YW50IGV4cGVydGlzZS4KCkhlcmUmIzM5O3MgbXkgYXR0ZW1wdDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50KioKCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrLiAqSXMqIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseSBleHBvcnRlZD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsLCBwcm9iYWJseSBldmVuIHRyaXZpYWwsIGZpcnN0IHN0ZXAuIEl0JiMzOTtzIHRoZSBtb3N0IGJhc2ljIHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZCB0byBwcm9jZWVkLiBJZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIHRoZW4gb2J2aW91c2x5IEkgY2FuJiMzOTt0IGJlZ2luIGFueSBmdXJ0aGVyIHdvcmsuIEl0IHdvdWxkIGJlIGEgd2FzdGUgb2YgbXkgdGltZS4gUmlnaHQgbm93LCBJJiMzOTttIHNpbXBseSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRhIGlzICpwcmVzZW50Ki4gQW5kIG1vcmUgYWNjdXJhdGVseSwgKmFjY2Vzc2libGUqLiBPbmNlIEkga25vdyB0aGUgZGF0YSBpcyBhdmFpbGFibGUsIEkgY2FuIGdvIHRocm91Z2ggYWxsIHRoZSBzdGVwcyBJJiMzOTttIGxvb2tpbmcgYXQgdG9kYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4gNTkxOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuIDU5MjpcdHtcbiA1OTM6XHRcdGludCBwa3RfbGVuLCBzbG90O1xuIDU5NDpcdFxuIDU5NTpcdFx0cGt0X2xlbiA9IHNrYi1cdTAwM2VsZW4gJiM0Mzsgc3RhYi1cdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XG4gNTk2Olx0XHRpZiAodW5saWtlbHkoIXN0YWItXHUwMDNlc3pvcHRzLnRzaXplKSlcbiA1OTc6XHRcdFx0Z290byBvdXQ7XG4gNTk4Olx0XG4gNTk5Olx0XHRzbG90ID0gcGt0X2xlbiAmIzQzOyBzdGFiLVx1MDAzZXN6b3B0cy5jZWxsX2FsaWduO1xuIDYwMDpcdFx0aWYgKHVubGlrZWx5KHNsb3QgXHUwMDNjIDApKVxuIDYwMTpcdFx0XHRzbG90ID0gMDtcbiA2MDI6XHRcbiA2MDM6XHRcdHNsb3QgXHUwMDNlXHUwMDNlPSBzdGFiLVx1MDAzZXN6b3B0cy5jZWxsX2xvZztcbiA2MDQ6XHRcdGlmIChsaWtlbHkoc2xvdCBcdTAwM2Mgc3RhYi1cdTAwM2Vzem9wdHMudHNpemUpKVxuIDYwNTpcdFx0XHRwa3RfbGVuID0gc3RhYi1cdTAwM2VkYXRhW3Nsb3RdO1xuIDYwNjpcdFx0ZWxzZVxuIDYwNzpcdFx0XHRwa3RfbGVuID0gc3RhYi1cdTAwM2VkYXRhW3N0YWItXHUwMDNlc3pvcHRzLnRzaXplIC0gMV0gKlxuIDYwODpcdFx0XHRcdFx0KHNsb3QgLyBzdGFiLVx1MDAzZXN6b3B0cy50c2l6ZSkgJiM0MztcbiA2MDk6XHRcdFx0XHRcdHN0YWItXHUwMDNlZGF0YVtzbG90ICUgc3RhYi1cdTAwM2Vzem9wdHMudHNpemVdO1xuIDYxMDpcdFxuIDYxMTpcdFx0cGt0X2xlbiBcdTAwM2NcdTAwM2M9IHN0YWItXHUwMDNlc3pvcHRzLnNpemVfbG9nO1xuIDYxMjpcdG91dDpcbiA2MTM6XHRcdC8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldFxuIDYxNDpcdFx0ICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXRcbiA2MTU6XHRcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXG4gNjE2Olx0XHQgKi9cbiA2MTc6XHRcdHBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTtcbiA2MTg6XHRcdHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO1xuIDYxOTpcdH1cbiA2MjA6XHRcbiA2MjE6XHRzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcWRpc2Nfd2F0Y2hkb2coc3RydWN0IGhydGltZXIgKnRpbWVyKVxuIDYyMjpcdHtcbiA2MjM6XHRcdHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBxZGlzY193YXRjaGRvZyxcbiA2MjQ6XHRcdFx0XHRcdFx0XHQgdGltZXIpO1xuIDYyNTpcdFxuIDYyNjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDYyNzpcdFx0X19uZXRpZl9zY2hlZHVsZShxZGlzY19yb290KHdkLVx1MDAzZXFkaXNjKSk7XG4gNjI4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA2Mjk6XHRcbiA2MzA6XHRcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbiA2MzE6XHR9XG4gNjMyOlx0XG4gNjMzOlx0dm9pZCBxZGlzY193YXRjaGRvZ19pbml0X2Nsb2NraWQoc3RydWN0IHFkaXNjX3dhdGNoZG9nICp3ZCwgc3RydWN0IFFkaXNjICpxZGlzYyxcbiA2MzQ6XHRcdFx0XHRcdCBjbG9ja2lkX3QgY2xvY2tpZClcbiA2MzU6XHR7XG4gNjM2Olx0XHRocnRpbWVyX3NldHVwKFx1MDAyNndkLVx1MDAzZXRpbWVyLCBxZGlzY193YXRjaGRvZywgY2xvY2tpZCwgSFJUSU1FUl9NT0RFX0FCU19QSU5ORUQpO1xuIDYzNzpcdFx0d2QtXHUwMDNlcWRpc2MgPSBxZGlzYztcbiA2Mzg6XHR9XG4gNjM5Olx0RVhQT1JUX1NZTUJPTChxZGlzY193YXRjaGRvZ19pbml0X2Nsb2NraWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkludGVybmFsIENvZGUgTmF2aWdhdGlvbiBhbmQgU3ltYm9sIFZlcmlmaWNhdGlvbioqCgpIbW0sIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IHdhc24mIzM5O3QgZXhwb3J0ZWQuIEJ1dCB3YWl0IGEgbWludXRlLi4uICppcyogaXQ/IE9rYXksIGxldCBtZSBkb3VibGUtY2hlY2suLi4gQWgsIHllcywgdGhlcmUgaXQgaXMhIGBFWFBPUlRfU1lNQk9MKHFkaXNjX3dhdGNoZG9nX2luaXRfY2xvY2tpZClgLiBTbywgaXQgKmlzKiBleHBvcnRlZCwgYXMgSSBzdXNwZWN0ZWQgaXQgc2hvdWxkIGJlLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyB1c2FnZSBvZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEkgYmVsaWV2ZSB0aGlzIGlzIGNyaXRpY2FsIHRvIHRoZSBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBpdCBpcyBjYWxsZWQgZnJvbSBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHdoaWNoIGlzIHVzZWQgZXh0ZW5zaXZlbHkuIEl0IGxvb2tzIGxpa2UgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGNhbGxlZCBmcm9tIGBxZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgdGhlIGltcGxlbWVudGF0aW9uLCBzbyB0aGlzIGV4cGxhaW5zIHRoZSB2aXNpYmlsaXR5LiBPa2F5LCBnb29kIHRvIGtub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIHN1bW1hcml6ZSBteSAmIzM0O3Rob3VnaHRzJiMzNDsgaW4gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzc3VtaW5nIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0LiBIZXJlIHdlIGdvOgoKKipDaGVja2luZyBmb3IgRXhwb3J0KioKCkFscmlnaHQsIEkmIzM5O20ganVzdCBxdWlja2x5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIHN1Y2Nlc3NmdWxseSBleHBvcnRlZCB0aGUgZGF0YSBJIG5lZWRlZC4gSXQmIzM5O3MgYSBjcml0aWNhbCBzdGVwOyB3aXRob3V0IGl0LCB0aGUgZW50aXJlIGRvd25zdHJlYW0gcHJvY2VzcyBpcyBkZWFkIGluIHRoZSB3YXRlci4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIG9yIHRoZSBkYXRhIHN0cmVhbSBhY3R1YWxseSBtYWRlIGl0IG91dC4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJIHdpbGwgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGlmIHRoaXMgaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzkwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgcGFja2V0IGhhbmRsaW5nLCBhbmQgSSYjMzk7dmUganVzdCBoaXQgYSBzbmFnLiBJJiMzOTttIHRyeWluZyB0byB1c2UgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gKmlzKiB1c2VkLCBiZWNhdXNlIGl0JiMzOTtzIG9idmlvdXNseSBpbnZvbHZlZCBpbiBjYWxjdWxhdGluZyBwYWNrZXQgbGVuZ3RocyB3aXRoaW4gdGhlIHF1ZXVpbmcgZGlzY2lwbGluZSBmcmFtZXdvcmssIGFuZCBJIGNhbiYjMzk7dCBqdXN0IGNhbGwgYSBmdW5jdGlvbiB0aGF0IHRoZSBrZXJuZWwgZG9lc24mIzM5O3QgZXhwb3NlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCB3YXkgdG8gYWNjZXNzIGl0cyBmdW5jdGlvbmFsaXR5IGlzLiBUaW1lIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9Nzk3PXN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlX2RmbHQoc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLFxuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNzk5LVx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6ODAwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC04MDEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKTtcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTkxOT1lbnVtIG5ldF94bWl0X3FkaXNjX3Qge1xuLS1cbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTI5LVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo5MzA6c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzMS1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IFFkaXNjICpzY2gpXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC05MzYtXHRpZiAoc3RhYilcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3Olx0XHRfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgc3RhYik7XG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcbi0tXG5uZXQvY29yZS9kZXYuYz00MTg1PXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSxcbi0tXG5uZXQvY29yZS9kZXYuYy00MTk0LVxubmV0L2NvcmUvZGV2LmM6NDE5NTpcdHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgcSk7XG5uZXQvY29yZS9kZXYuYy00MTk2LVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTg5LVxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIFN5bWJvbCoqCgpSaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSGFuZyBvbi4uLiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuLi4gdGhhdCYjMzk7cyBkZWNsYXJlZCBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AsIGlzbiYjMzk7dCBpdD8gT2theSwgc28gdGhhdCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgcGFydCBvZiB0aGUgcWRpc2MgQVBJLiBCdXQgaXMgaXQgKmV4cG9zZWQqPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGlmIHRoZXJlJiMzOTtzIGFuIGBFWFBPUlRfU1lNQk9MYCBkZWNsYXJhdGlvbiBmb3IgaXQuIElmIGl0IGlzIGV4cG9ydGVkLCB0aGVuIEkgY2FuIHVzZSBpdCwgaWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2tpbmcgZm9yIGFsdGVybmF0aXZlcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyB0aGluZyBpcyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgbW9kdWxlcywgb3Igd2hldGhlciBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQgdG8gYWNjZXNzIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmc6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgYWJvdXQgaG93IGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpcyBhY3R1YWxseSBidWlsdC4gSXMgdGhpcyBmaWxlIGJlaW5nIHN0YXRpY2FsbHkgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIGltYWdlLCB0dWNrZWQgYXdheSBpbnNpZGUgYGJ1aWx0LWluLmFgLCBvciBpcyBpdCBnZXR0aW5nIG1vZHVsYXJpemVkPyBJIG5lZWQgdG8ga25vdyB0aGlzIGZvciBzdXJlLCBhcyB0aGlzIGFmZmVjdHMgYSBsb3Qgb2YgbXkgZGVidWdnaW5nLgoKVGhlIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgaXMgdGhlIGBuZXQvc2NoZWQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB3aWxsIGJlIGRlZmluZWQuIExldCBtZSBqdW1wIGluIHRoZXJlIGFuZCBnZXQgYSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUcmFmZmljIENvbnRyb2wgVW5pdC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLXlcdDo9IHNjaF9nZW5lcmljLm8gc2NoX21xLm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IHNjaF9mcmFnLm9cbiAgIDk6XHRvYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xuICAxMDpcdG9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG4gIDExOlx0b2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKVx0JiM0Mzs9IGFjdF9hcGkub1xuICAxMjpcdG9iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSlcdCYjNDM7PSBhY3RfcG9saWNlLm9cbiAgMTM6XHRvYmotJChDT05GSUdfTkVUX0FDVF9HQUNUKVx0JiM0Mzs9IGFjdF9nYWN0Lm9cbiAgMTQ6XHRvYmotJChDT05GSUdfTkVUX0FDVF9NSVJSRUQpXHQmIzQzOz0gYWN0X21pcnJlZC5vXG4gIDE1Olx0b2JqLSQoQ09ORklHX05FVF9BQ1RfU0FNUExFKVx0JiM0Mzs9IGFjdF9zYW1wbGUub1xuICAxNjpcdG9iai0kKENPTkZJR19ORVRfQUNUX05BVClcdCYjNDM7PSBhY3RfbmF0Lm9cbiAgMTc6XHRvYmotJChDT05GSUdfTkVUX0FDVF9QRURJVClcdCYjNDM7PSBhY3RfcGVkaXQub1xuICAxODpcdG9iai0kKENPTkZJR19ORVRfQUNUX1NJTVApXHQmIzQzOz0gYWN0X3NpbXBsZS5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX05FVF9BQ1RfU0tCRURJVClcdCYjNDM7PSBhY3Rfc2tiZWRpdC5vXG4gIDIwOlx0b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcdCYjNDM7PSBhY3RfY3N1bS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gYHNjaF9hcGkub2AgaXMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfTkVUX1NDSEVEYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZlYXR1cmVzIHRvIGZvY3VzIG9uLiBUaGVuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGNhbGxlZCBmcm9tIGBfX2Rldl94bWl0X3NrYmAsIHdoaWNoIGxpdmVzIGluIGBuZXQvY29yZS9kZXYuY2AuIEhtbSwgYF9fZGV2X3htaXRfc2tiYCBpcyBhICp2ZXJ5KiBob3QgcGF0aCBpbiBhbnkgbmV0d29yayBzdGFjayAtIG1hc3NpdmUgdHJhZmZpYyBmbG93LiBUaGF0IG1ha2VzIGl0IHRlbXB0aW5nIHRvIHRhcmdldCwgYnV0IHdhaXQuLi4gdGhlIGluc3RydWN0aW9ucyBmb3IgZnV6emluZyBhcmUgY2xlYXI6ICYjMzQ7RXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuJiMzNDsgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFdlIGRvbiYjMzk7dCB3YW50IHRvIGdldCBkaXN0cmFjdGVkIGJ5IGdlbmVyaWMgcGFydHMgb2YgdGhlIHN5c3RlbS4KCk5vdywgaG9sZCBvbiBhIHNlY29uZC4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIG9ubHkgY2FsbGVkIGlmIHNvbWV0aGluZyBjYWxsZWQgYHN0YWJgIGlzIHByZXNlbnQsIG9yIHBlcmhhcHMgZW5hYmxlZC4gTmVlZCB0byBsb29rIGNsb3Nlci4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCBob3cgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGludm9rZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA5MzE6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IFFkaXNjICpzY2gpXG4gOTMyOlx0e1xuIDkzMzpcdCNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG4gOTM0Olx0XHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYiA9IHJjdV9kZXJlZmVyZW5jZV9iaChzY2gtXHUwMDNlc3RhYik7XG4gOTM1Olx0XG4gOTM2Olx0XHRpZiAoc3RhYilcbiA5Mzc6XHRcdFx0X19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihza2IsIHN0YWIpO1xuIDkzODpcdCNlbmRpZlxuIDkzOTpcdH1cbiA5NDA6XHRcbiA5NDE6XHRzdGF0aWMgaW5saW5lIGludCBxZGlzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIDk0MjpcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuIDk0MzpcdHtcbiA5NDQ6XHRcdHJldHVybiBzY2gtXHUwMDNlZW5xdWV1ZShza2IsIHNjaCwgdG9fZnJlZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbmNsdXNpb24gb2YgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGluIEZvY3VzU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaW4gYEZvY3VzU3ltYm9sc2AuIEkgc2VlIHRoYXQgaXQmIzM5O3MgaW52b2tlZCB3aGVuIGBzdGFiYCBpcyBjb25maWd1cmVkLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IEFuZCB0aGUgYW5zd2VyIGlzIHByZXR0eSBjbGVhcjogeWVzLCBpdCBpcy4gSXQmIzM5O3MgY2FsbGVkIGZvciAqZXZlcnkqIHBhY2tldCB0cmFuc21pdHRlZCBvbiBhIHFkaXNjIHRoYXQgdXRpbGl6ZXMgYSBzaXplIHRhYmxlLgoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMgZnJvbSBiZWluZyBza2V3ZWQuIEJ1dCB0aGVuIGFnYWluLCB0aGlzIGlzbiYjMzk7dCAqZW50aXJlbHkqIGdlbmVyaWMuIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBxZGlzY3MgdGhhdCB1c2Ugc2l6ZSB0YWJsZXMsIGFuZCBub3QgYWxsIHFkaXNjcyBkby4KCldhaXQgYSBzZWNvbmQsIGl0JiMzOTtzIGNhbGxlZCBmb3IgKmV2ZXJ5IHBhY2tldCogb24gdGhvc2Ugc3BlY2lmaWMgcWRpc2NzLiBUaGF0IGF1dG9tYXRpY2FsbHkgcHV0cyBpdCBpbiB0aGUgaG90LXBhdGggY2F0ZWdvcnkuIFNvIG5vdyB0aGUgcXVlc3Rpb24gaXMgYWJvdXQgdGhlIGZyZXF1ZW5jeSBvZiBzaXplIHRhYmxlIHVzZSwgc28gSSYjMzk7ZCBsaWtlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNpemUgdGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBzdGFiYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgaXQgcmVsYXRlcyB0by4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWRpc2NfZ2V0X3N0YWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYz00OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHN0YWJfcG9saWN5W1RDQV9TVEFCX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTQ5NS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDk2OnN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9hcGkuYy00OTctXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMjc0PXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTMzOS1cdGlmICh0Y2FbVENBX1NUQUJdKSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzNDA6XHRcdHN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQxLVx0XHRpZiAoSVNfRVJSKHN0YWIpKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0xMzk2PXN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLFxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQxNi1cdGlmICh0Y2FbVENBX1NUQUJdKSB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE0MTc6XHRcdHN0YWIgPSBxZGlzY19nZXRfc3RhYih0Y2FbVENBX1NUQUJdLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF9hcGkuYy0xNDE4LVx0XHRpZiAoSVNfRVJSKHN0YWIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTE5CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIEZ1enppbmc6IE5hcnJvd2luZyBEb3duIHRoZSBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBpcyByZWxhdGVkIHRvIGBxZGlzY19nZXRfc3RhYmAgYmVpbmcgY2FsbGVkIGR1cmluZyBxZGlzYyBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgd2l0aCBgVENBX1NUQUJgLiBUaGF0IG1lYW5zIGBxZGlzY19jcmVhdGVgIGFuZCBgcWRpc2NfY2hhbmdlYCBhcmUgdGhlIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgYnVnIGlzIGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgd2hpY2ggaXMgb24gdGhlICpkYXRhKiBwYXRoLiBJbnRlcmVzdGluZy4KClRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgd2hhdCB0byBpbmNsdWRlIGluIHRoZSBmdXp6aW5nIGZvY3VzPyBJZiBJICpkb24mIzM5O3QqIGluY2x1ZGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB3aGF0IGVsc2Ugd291bGQgYmUgcmVsZXZhbnQ/IE1heWJlIGBxZGlzY19nZXRfc3RhYmA/IEJ1dCB0aGF0IHdhc24mIzM5O3QgYWN0dWFsbHkgbW9kaWZpZWQsIHNvIHByb2JhYmx5IG5vdC4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBmb2N1cyBvbiBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIG9uZXMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgKmlzKiBhIGhvdC1wYXRoIGZ1bmN0aW9uIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBwYWNrZXQgcHJvY2Vzc2luZywgYnV0IGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBgc3RhYmAgcWRpc2MuIEhtbW0sIGlzIGl0IHNwZWNpZmljICplbm91Z2gqPyBJcyBpdCBjb25zaWRlcmVkIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBvciBub3Q/IFRoaW5raW5nIGFib3V0IGl0LCBnZW5lcmljIG9uZXMgd291bGQgYmUgbW9yZSBsaWtlIGBfX2Rldl94bWl0X3NrYmAsIGBkZXZfcXVldWVfeG1pdGAsIGBpcF9yY3ZgLCBhbmQgc3VjaC4KCmBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBmZWVscyBtb3JlIGZvY3VzZWQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG9uIHRoZSBkYXRhIHBhdGguIEFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gR29vZCwgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGNoZWNrcyBib3RoIHRob3NlIGJveGVzISBTbywgaXQgbG9va3MgbGlrZSBpbmNsdWRpbmcgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIHRoZSByaWdodCBtb3ZlIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLgoKV2hhdCBhYm91dCBgcWRpc2NfZ2V0X3N0YWJgPyBUaGF0IG9uZSYjMzk7cyBzdGF0aWMuIFByb2JhYmx5IG5vdC4KCkFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBUaW1lIHRvIGNoZWNrIGBDT05GSUdfTkVUX1NDSEVEYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBbHNvLCB0aGUgcGF0Y2ggbWVudGlvbnMgJiMzNDtkZWZpY2l0IHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTLCYjMzQ7IHNvIEkgc2hvdWxkIGNoZWNrIGBDT05GSUdfTkVUX1NDSF9EUlJgIGFuZCBgQ09ORklHX05FVF9TQ0hfRVRTYCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9EUlImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTk1PWNvbmZpZyBORVRfU0NIX05FVEVNXG4tLVxubmV0L3NjaGVkL0tjb25maWctMjA2LVxubmV0L3NjaGVkL0tjb25maWc6MjA3OmNvbmZpZyBORVRfU0NIX0RSUlxubmV0L3NjaGVkL0tjb25maWctMjA4LVx0dHJpc3RhdGUgXCYjMzQ7RGVmaWNpdCBSb3VuZCBSb2JpbiBzY2hlZHVsZXIgKERSUilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTM2Mz1jb25maWcgTkVUX1NDSF9QTFVHXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzg4LVxubmV0L3NjaGVkL0tjb25maWc6Mzg5OmNvbmZpZyBORVRfU0NIX0VUU1xubmV0L3NjaGVkL0tjb25maWctMzkwLVx0dHJpc3RhdGUgXCYjMzQ7RW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTY2hlZHVsZXIgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgaXQgY291bGQgYmUgYmVuZWZpY2lhbCB0byBlbmFibGUgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCB0byByZWFsbHkgcHV0IHRob3NlIGRlZmljaXQgc2NoZWR1bGVycyB0aHJvdWdoIHRoZWlyIHBhY2VzLiBCdXQsIHRoZSBuYWdnaW5nIGlzc3VlIGlzIHRoZSBidWcgSSYjMzk7bSB0cmFja2luZyBkb3duIOKAkyBpdCYjMzk7cyBsb2NhdGVkIGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gVGhhdCBmdW5jdGlvbiwgYXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSBhIHF1aWNrIGdsYW5jZSwgcmVzaWRlcyBpbiBgc2NoX2FwaS5jYCBhbmQgaGluZ2VzIHNvbGVseSBvbiBgTkVUX1NDSEVEYC4gU28sIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCByZWFsbHkgdmVyaWZ5IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgTkVUX1NDSEVEYC4gVGltZSB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBvbiBwb2ludC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dCBhcm91bmQgdGhpcyBiYXNlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjUwCgkJCQkJCQlvdXRwdXQ6IDY4CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpbiB0aGUgTmV0d29yayBTY2hlZHVsZXIqKgoKT2theSwgc28gSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgTkVUX1NDSEVEYCBjb25maWcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgY2FsbCBncmFwaCB0byBzZWUgaWYgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGFjY2Vzc2libGUuIEkgcXVpY2tseSBzYXcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgY2FsbGVkIGZyb20gYHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgX19kZXZfeG1pdF9za2JgIGluIGBuZXQvY29yZS9kZXYuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgcmVhY2hhYmxlLgoKSSBjb25maXJtZWQgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgaW5kZWVkIGFjY2Vzc2libGUgdGhyb3VnaCBgX19kZXZfeG1pdF9za2JgIHdoZW4gYSBxdWV1ZSBkaXNjaXBsaW5lIChxZGlzYykgaGFzIGEgc2l6ZSB0YWJsZSBjb25maWd1cmVkLiBUaGUgc2l6ZSB0YWJsZSBpdHNlbGYgaXMgc2V0IHVwIHRocm91Z2ggdGhlIGBSVE1fTkVXUURJU0NgIG5ldGxpbmsgbWVzc2FnZSB3aXRoIHRoZSBgVENBX1NUQUJgIGF0dHJpYnV0ZS4gVGhpcyBpcyBjZXJ0YWlubHkgYSBwYXRoIHRoYXQmIzM5O3Mgb3BlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIGdpdmVuIHRoZSBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgcGF0aCwgSSYjMzk7bSBtYXJraW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCYjMzk7cyBzdW1tYXJpemUgbXkgZmluZGluZ3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IHRydWUKKiAgIGBGb2N1c1N5bWJvbHNgOiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAKKiAgIGBFbmFibGVDb25maWdzYDogYE5FVF9TQ0hFRGAKClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogdGhlIHBhdGNoIGFwcGVhcnMgdG8gZml4IGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agd2l0aGluIGRlZmljaXQgc2NoZWR1bGVycywgc3BlY2lmaWNhbGx5IERSUi9FVFMsIGJ5IGJvdW5kaW5nIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggd2l0aGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJpZ2h0IGluIHRoZSBjb3JlIGRhdGEgcGF0aCBvZiBuZXR3b3JrIHNjaGVkdWxpbmcsIGFuZCBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgcWRpc2NzIGZvbGxvd2VkIGJ5IHBhY2tldCB0cmFuc21pc3Npb24uCgpIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCBhcyB3ZWxsLiBUaGUgY29tbWl0IG1lc3NhZ2UgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGUgZml4IGFkZHJlc3NlcyBsb29wcyBpbiBEUlIvRVRTLiBJZiB0aG9zZSBkZWZpY2l0IHNjaGVkdWxlcnMgYXJlIG5vdCBhY3RpdmVseSBlbmFibGVkLCBJIG1pZ2h0IG1pc3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBhdHRhY2sgc3VyZmFjZSwgb3IgdGhlIGNvbmRpdGlvbnMgdG8gdHJpZ2dlciB0aGUgbG9vcCBtYXkgbm90IGJlIHByZXNlbnQuIFRoZXJlZm9yZSwgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgaXMgdGhvcm91Z2ggYW5kIGVmZmVjdGl2ZSwgaXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBgTkVUX1NDSF9EUlJgIGFuZCBgTkVUX1NDSF9FVFNgIGluIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3Mgd29ydGggdmVyaWZ5aW5nIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJiMzOTt0IGhhdmUgYW55IHNpZ25pZmljYW50IGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGNvbXBsaWNhdGUgdGhlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDc6XHRjb25maWcgTkVUX1NDSF9EUlJcbiAyMDg6XHRcdHRyaXN0YXRlIFwmIzM0O0RlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXCYjMzQ7XG4gMjA5Olx0XHRoZWxwXG4gMjEwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBEZWZpY2l0IFJvdW5kIFJvYmluIChEUlIpIHBhY2tldFxuIDIxMTpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyMTI6XHRcbiAyMTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIxNDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxuIDIxNTpcdFxuIDIxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODk6XHRjb25maWcgTkVUX1NDSF9FVFNcbiAzOTA6XHRcdHRyaXN0YXRlIFwmIzM0O0VuaGFuY2VkIHRyYW5zbWlzc2lvbiBzZWxlY3Rpb24gc2NoZWR1bGVyIChFVFMpXCYjMzQ7XG4gMzkxOlx0XHRoZWxwXG4gMzkyOlx0ICAgICAgICAgIFRoZSBFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uIHNjaGVkdWxlciBpcyBhIGNsYXNzZnVsXG4gMzkzOlx0ICAgICAgICAgIHF1ZXVpbmcgZGlzY2lwbGluZSB0aGF0IG1lcmdlcyBmdW5jdGlvbmFsaXR5IG9mIFBSSU8gYW5kIERSUlxuIDM5NDpcdCAgICAgICAgICBxZGlzY3MgaW4gb25lIHNjaGVkdWxlci4gRVRTIG1ha2VzIGl0IGVhc3kgdG8gY29uZmlndXJlIGEgc2V0IG9mXG4gMzk1Olx0ICAgICAgICAgIHN0cmljdCBhbmQgYmFuZHdpZHRoLXNoYXJpbmcgYmFuZHMgdG8gaW1wbGVtZW50IHRoZSB0cmFuc21pc3Npb25cbiAzOTY6XHQgICAgICAgICAgc2VsZWN0aW9uIGRlc2NyaWJlZCBpbiA4MDIuMVFhei5cbiAzOTc6XHRcbiAzOTg6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEVUUyBwYWNrZXQgc2NoZWR1bGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NgoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcmVsZXZhbnQgY29kZSBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgaWYgTkVUX1NDSEVEYCBibG9jaywgc28gdGhlIG5lY2Vzc2FyeSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBORVRfU0NIRURgLCBgTkVUX1NDSF9EUlJgLCBhbmQgYE5FVF9TQ0hfRVRTYC4gTm8gb3RoZXIgb2J2aW91cyBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgeWVwLCB0aGUgZGlmZiBjb25maXJtcyB0aGF0LgoKTm93LCBpcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgYSBzdWl0YWJsZSBmb2N1cyBzeW1ib2w/IEhtbSwgaXTigJlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZC4gSXQmIzM5O3MgZGVmaW5pdGVseSBvbiB0aGUgZGF0YSBwYXRoLCBidXQgc2VlbXMgdG8gb25seSBnZXQgdXNlZCB3aGVuIGBzdGFiYCBpcyBjb25maWd1cmVkLiBCdXQgaXQmIzM5O3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24uIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZS4gSSYjMzk7bGwgc3RpY2sgd2l0aCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuCgpKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGluc3RydWN0aW9uczogZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zLCBhdm9pZCBnZW5lcmljcyB0byBwcmV2ZW50IHNrZXdlZCBkaXN0cmlidXRpb25zLCBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBhbmQgbGlzdCBDT05GSUcgb3B0aW9ucyBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0IGFsbCBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0RSUiYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNhcCB0aGUgY2FsY3VsYXRlZCBwYWNrZXQgbGVuZ3RoIHRvIGBHU09fTUFYX1NJWkVgLiBUaGlzIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIGluIGRlZmljaXQgc2NoZWR1bGVycyBsaWtlIERSUiBhbmQgRVRTIHdoZW4gYSBzaXplIHRhYmxlIChzdGFiKSBpbmZsYXRlcyB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYywgcmVhY2hhYmxlIGJ5IGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgdmlhIG5ldGxpbmsgYW5kIHRyYW5zbWl0dGluZyBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9EUlImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9FVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjYXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUyB3aGVuIGEgc2l6ZSB0YWJsZSAoc3RhYikgaW5mbGF0ZXMgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMsIHJlYWNoYWJsZSBieSBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIHZpYSBuZXRsaW5rIGFuZCB0cmFuc21pdHRpbmcgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTU6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZGZlMjY2NjI1OWZkZmRlN2NlNjE2NzFkMzVlNDk2MGFlMmVmMDBlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMTU6MDU6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA2NWIzNTUyOGQxMjVmLi5hZDRmMTE3ZmY1NWEwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTYxMCw4ICYjNDM7NjEwLDExIEBAIHZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcGt0X2xlbiAmbHQ7Jmx0Oz0gc3RhYi0mZ3Q7c3pvcHRzLnNpemVfbG9nOwogb3V0OgotCWlmICh1bmxpa2VseShwa3RfbGVuICZsdDsgMSkpCi0JCXBrdF9sZW4gPSAxOwomIzQzOwkvKiBBIHNpemUgdGFibGUgY2FuIGluZmxhdGUgcWRpc2NfcGt0X2xlbigpIGJleW9uZCBhbnkgcmVhbCBwYWNrZXQKJiM0MzsJICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXQKJiM0MzsJICogc2NoZWR1bGVycyBzdWNoIGFzIERSUi9FVFMgdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcy4KJiM0MzsJICovCiYjNDM7CXBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTsKIAlxZGlzY19za2JfY2Ioc2tiKS0mZ3Q7cGt0X2xlbiA9IHBrdF9sZW47CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGlzIGNsYW1waW5nIG9mIGBwa3RfbGVuYDoKCmBgYGMKLQlpZiAodW5saWtlbHkocGt0X2xlbiAmbHQ7IDEpKQotCQlwa3RfbGVuID0gMTsKJiM0MzsJLyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0CiYjNDM7CSAqICh2aWEgb3ZlcmhlYWQsIHRoZSBkYXRhIHRhYmxlLCBvciBzaXplX2xvZyk7IGNhcCBpdCBzbyBkZWZpY2l0CiYjNDM7CSAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuCiYjNDM7CSAqLwomIzQzOwlwa3RfbGVuID0gY2xhbXBfdChpbnQsIHBrdF9sZW4sIDEsIEdTT19NQVhfU0laRSk7CmBgYAoKQmFzaWNhbGx5LCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIGBjbGFtcGAgdG8gbWFrZSBzdXJlIGBwa3RfbGVuYCBkb2VzbiYjMzk7dCBnZXQgcmlkaWN1bG91c2x5IGxhcmdlLCB3aXRoIGBHU09fTUFYX1NJWkVgIGFzIHRoZSB1cHBlciBib3VuZC4gVGhlIGNvbW1lbnQgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGlzIGlzIHRvIHByZXZlbnQgaXNzdWVzIGluIGRlZmljaXQgc2NoZWR1bGVycywgbGlrZSBEUlIgYW5kIEVUUywgd2hlcmUgYW4gaW5mbGF0ZWQgYHBrdF9sZW5gIGNvdWxkIGxlYWQgdG8gYW4gaW5maW5pdGUgbG9vcCBvciBwb3NzaWJseSBhbiBpbnRlZ2VyIG92ZXJmbG93IG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgd291bGQgY2F1c2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzb2xpZCBmaXg7IGl04oCZcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgc3RlbW1pbmcgZnJvbSBob3cgYHBrdF9sZW5gIGNhbiBiZSBjYWxjdWxhdGVkLCB3aGljaCwgaW4gZXh0cmVtZSBjaXJjdW1zdGFuY2VzLCBjb3VsZCBicmVhayB0aGluZ3Mgb3IgbGVhZCB0byBkZW5pYWwgb2Ygc2VydmljZS4gSXQgZG9lc27igJl0IGxvb2sgbGlrZSBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgd2hpY2ggaXMgZ29vZCB0byBzZWUuIFRvIGJlIGV4dHJhIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHVzYWdlIG9mIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLCBqdXN0IHRvIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTU3Mz1zdGF0aWMgaW50IHFkaXNjX2R1bXBfc3RhYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6NTkwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHBrdF9sZW5gIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGNsYW1waW5nIGBwa3RfbGVuYCB0byBgR1NPX01BWF9TSVpFYC4gVGhlIHJlYXNvbmluZyBjbGlja3M6IGl0JiMzOTtzIGEgZGVmZW5zaXZlIG1lYXN1cmUuIEEgbWFzc2l2ZSBgcGt0X2xlbmAgdmFsdWUgY291bGQgd3JlYWsgaGF2b2Mgb24gZGVmaWNpdCBzY2hlZHVsZXJzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluZmluaXRlIGxvb3BzIG9yIHJlc291cmNlIGV4aGF1c3Rpb24g4oCTIGNsYXNzaWMgbG9naWMgYm9tYiB0ZXJyaXRvcnkuIEkgY2FuIHNlZSB0aGF0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGEgS01TQU4gaXNzdWU/JiMzNDsgQW5kIHRoZSBhbnN3ZXIgaXMgYSBmaXJtICYjMzQ7Tm8mIzM0Oy4gVGhpcyBpc24mIzM5O3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgYWxsLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBvZiBhIGxvZ2ljYWwgZmxhdyDigJMgYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCBvciBhIHJlc291cmNlIGV4aGF1c3Rpb24gYnVnLCBwbGFpbiBhbmQgc2ltcGxlLiBLTVNBTiB3b3VsZCBiZSBjb21wbGV0ZWx5IGlycmVsZXZhbnQgaGVyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSB2YWx1ZSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gYSBwcm9ibGVtYXRpYyBjb250cm9sIGZsb3csIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgcmVhZC4gS0FTQU4gKm1pZ2h0KiBjYXRjaCBzb21ldGhpbmcgaWYgdGhlIGJhZCBgcGt0X2xlbmAgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgb3IgdXNlLWFmdGVyLWZyZWUsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgaXNzdWUuIFNvLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4gVGhpcyBpc24mIzM5O3QgS01TQU4mIzM5O3MgZG9tYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNsYW1wIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgYW4gaXNzdWUgd2hlcmUgYSBzaXplIHRhYmxlIGNvdWxkIGluZmxhdGUgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHksIGNhdXNpbmcgZGVmaWNpdCBzY2hlZHVsZXJzIChsaWtlIERSUi9FVFMpIHRvIGZhaWwgdG8gdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcyAoaW5maW5pdGUgbG9vcCAvIHJlc291cmNlIGV4aGF1c3Rpb24pLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MjYuMzk5OTY4NjgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTUyNTc3NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNsYW1wIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgYW4gaXNzdWUgd2hlcmUgYSBzaXplIHRhYmxlIGNvdWxkIGluZmxhdGUgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHksIGNhdXNpbmcgZGVmaWNpdCBzY2hlZHVsZXJzIChsaWtlIERSUi9FVFMpIHRvIGZhaWwgdG8gdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcyAoaW5maW5pdGUgbG9vcCAvIHJlc291cmNlIGV4aGF1c3Rpb24pLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2FwIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzIGxpa2UgRFJSIGFuZCBFVFMgd2hlbiBhIHNpemUgdGFibGUgKHN0YWIpIGluZmxhdGVzIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCByZWFjaGFibGUgYnkgY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSB2aWEgbmV0bGluayBhbmQgdHJhbnNtaXR0aW5nIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjI2LjM5OTk3NTc2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwODc5NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2RmZTI2NjYyNTlmZGZkZTdjZTYxNjcxZDM1ZTQ5NjBhZTJlZjAwZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcXG5AQCAtNjEwLDggKzYxMCwxMSBAQCB2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHBrdF9sZW4gXFx1MDAzY1xcdTAwM2M9IHN0YWItXFx1MDAzZXN6b3B0cy5zaXplX2xvZztcXG4gb3V0Olxcbi1cXHRpZiAodW5saWtlbHkocGt0X2xlbiBcXHUwMDNjIDEpKVxcbi1cXHRcXHRwa3RfbGVuID0gMTtcXG4rXFx0LyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0XFxuK1xcdCAqICh2aWEgb3ZlcmhlYWQsIHRoZSBkYXRhIHRhYmxlLCBvciBzaXplX2xvZyk7IGNhcCBpdCBzbyBkZWZpY2l0XFxuK1xcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXFxuK1xcdCAqL1xcbitcXHRwa3RfbGVuID0gY2xhbXBfdChpbnQsIHBrdF9sZW4sIDEsIEdTT19NQVhfU0laRSk7XFxuIFxcdHFkaXNjX3NrYl9jYihza2IpLVxcdTAwM2Vwa3RfbGVuID0gcGt0X2xlbjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MjYuOTAxOTg0MTcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIzMDk5MTYzMzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9EUlJcIixcbiAgICBcIk5FVF9TQ0hfRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjYXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyBpbiBkZWZpY2l0IHNjaGVkdWxlcnMgbGlrZSBEUlIgYW5kIEVUUyB3aGVuIGEgc2l6ZSB0YWJsZSAoc3RhYikgaW5mbGF0ZXMgdGhlIHBhY2tldCBsZW5ndGggZXhjZXNzaXZlbHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMsIHJlYWNoYWJsZSBieSBjb25maWd1cmluZyBhIHFkaXNjIHdpdGggYSBzaXplIHRhYmxlIHZpYSBuZXRsaW5rIGFuZCB0cmFuc21pdHRpbmcgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2RmZTI2NjYyNTlmZGZkZTdjZTYxNjcxZDM1ZTQ5NjBhZTJlZjAwZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDE1OjA1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmNcbmluZGV4IDY1YjM1NTI4ZDEyNWYuLmFkNGYxMTdmZjU1YTAgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5AQCAtNjEwLDggKzYxMCwxMSBAQCB2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHBrdF9sZW4gXHUwMDNjXHUwMDNjPSBzdGFiLVx1MDAzZXN6b3B0cy5zaXplX2xvZztcbiBvdXQ6XG4tXHRpZiAodW5saWtlbHkocGt0X2xlbiBcdTAwM2MgMSkpXG4tXHRcdHBrdF9sZW4gPSAxO1xuK1x0LyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0XG4rXHQgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdFxuK1x0ICogc2NoZWR1bGVycyBzdWNoIGFzIERSUi9FVFMgdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcy5cbitcdCAqL1xuK1x0cGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpO1xuIFx0cWRpc2Nfc2tiX2NiKHNrYiktXHUwMDNlcGt0X2xlbiA9IHBrdF9sZW47XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MjYuOTAxOTg2ODExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNzMxODM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L3NjaGVkL3NjaF9hcGkuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IHNlZW1zLiBUaGV5J3JlIGNsYW1waW5nIHRoZSBwYWNrZXQgbGVuZ3RoIHdpdGhpbiB0aGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBsaW1pdGluZyBpdCB0byBgR1NPX01BWF9TSVpFYC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBzZXQgYHBrdF9sZW5gIHRvIDEgaWYgaXQgd2FzIGxlc3MgdGhhbiAxLiBUaGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBpbmZpbml0ZSBsb29wcywgcGFydGljdWxhcmx5IGluIGRlZmljaXQgc2NoZWR1bGVycyBsaWtlIERSUiBhbmQgRVRTLCBieSBjYXBwaW5nIHRoZSBwYWNrZXQgc2l6ZSBjYWxjdWxhdGlvbiwgd2hpY2ggY2FuIGJlIGluZmxhdGVkIGJ5IHRoZSBzaXplIHRhYmxlLiBUaGlzIHNlZW1zIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gSWYgd2UgY2FuIHRyaWdnZXIgc2NlbmFyaW9zIHdoZXJlIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggd291bGQgaGF2ZSBnb25lIGJleW9uZCBgR1NPX01BWF9TSVpFYCB3aXRob3V0IHRoaXMgY2xhbXAsIHdlIGNvdWxkIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3IgZXZlbiBEb1MgdnVsbmVyYWJpbGl0aWVzIGluIHRob3NlIGRlZmljaXQgc2NoZWR1bGVycy5cblxuTm93LCBsZXQgbWUgcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdGhlIGtleSBzeW1ib2xzLiAgVGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgYW5kIHRoZSBmaWxlIGlzIGBuZXQvc2NoZWQvc2NoX2FwaS5jYC4gIEknbGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5LiBPa2F5LCBpdCBsb29rcyBsaWtlIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfTkVUX1NDSEVEYC4gR29vZC4gSSdsbCBtYWtlIHN1cmUgdG8gdmVyaWZ5IHRoYXQncyB0aGUgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjMyLjcwOTMwOTM2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE4NTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz01NzM9c3RhdGljIGludCBxZGlzY19kdW1wX3N0YWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU5MDp2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjMyLjgwMjUwMDU2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDkxNDU3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgZnJhbWV3b3JrLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgYmVjYXVzZSBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZvdW5kYXRpb25hbCB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBxZGlzYyBiZWhhdmlvcnMg4oCTIHNoYXBpbmcsIHBvbGljaW5nLCBjb25nZXN0aW9uIGF2b2lkYW5jZSwgeW91IG5hbWUgaXQuIEEgcXVpY2sgYGdyZXBgIG9yIHBlcmhhcHMgdXNpbmcgYG9iamR1bXBgIHdpdGggc29tZSBqdWRpY2lvdXMgZmlsdGVyaW5nIHRvIHBpbnBvaW50IHRoZSBjYWxsZXJzIHNob3VsZCBkbyB0aGUgdHJpY2suIEknbSBwcmltYXJpbHkgbG9va2luZyBmb3IgY2FsbHMgd2l0aGluIHRoZSBjb3JlIHFkaXNjIGltcGxlbWVudGF0aW9ucywgb2YgY291cnNlLCBidXQgaXQncyBhbHNvIHdvcnRoIGNoZWNraW5nIGFueSBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciB0aGVpciBzcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkcyBvciBvcHRpbWl6YXRpb25zLiBOZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIG1pc3VzZSBvciBzdWJ0bGUgYnVncywgZXNwZWNpYWxseSBpbiB0aG9zZSBlZGdlIGNhc2VzIHdoZXJlIHBhY2tldCBsZW5ndGggbWlnaHQgYmUgbm9uLXN0YW5kYXJkIGR1ZSB0byBlbmNhcHN1bGF0aW9uIG9yIGhhcmR3YXJlIHF1aXJrcy4gR290dGEgbWFrZSBzdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIG1lbW9yeSBlcnJvcnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYnkgbWlzY2FsY3VsYXRpbmcgb3IgbmVlZGxlc3NseSByZXBlYXRpbmcgY2FsY3VsYXRpb25zLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIG1hcCBvZiBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaWYgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIGluIGRvd25zdHJlYW0gbW9kdWxlcyBvciBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6MzYuNDExNjQ4Mzg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDczNDY5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaD03OTc9c3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTc5OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6ODAwOnZvaWQgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtODAxLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYik7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTkzMD1zdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTM2LVxcdGlmIChzdGFiKVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3OlxcdFxcdF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc2tiLCBzdGFiKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01ODktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTozOC45MTkwMDQ1ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjAzOTI5NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgU3ltYm9sIEV4cG9ydCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgbGlrZWx5IGEgdHJhZmZpYyBjb250cm9sIChUQykgc2NoZWR1bGVyLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBmdW5jdGlvbiwgbGV0J3MgYXNzdW1lIGl0J3MgcmVsYXRlZCB0byBxdWV1aW5nIG9yIHBhY2tldCBwcm9jZXNzaW5nLCBpcyBhY3R1YWxseSBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgaXQncyBwcm9iYWJseSBleHBvcnRlZC5cIiBJIHJlY2FsbCBzZWVpbmcgaXQgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsICppcyogaXQgYWN0dWFsbHkgZXhwb3J0ZWQ/IEp1c3QgYmVjYXVzZSBpdCdzIGluIGEgcmVsZXZhbnQgc291cmNlIGZpbGUgZG9lc24ndCBtZWFuIGl0J3MgdXNhYmxlIG91dHNpZGUgdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIFRoYXQncyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIGRlZmluaXRpdmVseSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBieSB0aGUgY29yZSBrZXJuZWwgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgc3ltYm9sIGlzIGFjY2Vzc2libGUuIFRpbWUgdG8gY29uZmlybSB0aGUgZGVjbGFyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo0Ni4xMjI5MzY2OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NjcwMzQ5MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjQ5LjA4OTY0NzU2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDQ1NjExNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBtb3JlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaGF0J3Mgd2hlcmUgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJIGFuZCBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgbGlrZSBwYWNrZXQgbGVuZ3RoIGRldGVybWluYXRpb24gYXJlIGxpa2VseSB0byByZXNpZGUuIEkgd2FudCB0byBkcmlsbCBkb3duIGFyb3VuZCB0aGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZ1bmN0aW9uLCBhcyB0aGF0IG5hbWUgaXMgcHJldHR5IHNwZWNpZmljIGFuZCBoaW50cyBhdCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIEknbSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoZSBuaXR0eS1ncml0dHkgb2YgcGFyc2luZyB2YXJpb3VzIHBhY2tldCBoZWFkZXJzIGFuZCBtZXRhZGF0YSB0byBjb21wdXRlIHRoZSBwYWNrZXQncyB0b3RhbCBzaXplLCB3aGljaCBpcyBjcml0aWNhbCBmb3Igc2NoZWR1bGVyIGRlY2lzaW9ucy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBkZWFsaW5nIHdpdGggdmFyaW91cyBwcm90b2NvbHMsIGVuY2Fwc3VsYXRpb24gbGF5ZXJzLCBhbmQgcG90ZW50aWFsIGhhcmR3YXJlIG9mZmxvYWRzIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYWRkcmVzcyB3aGF0ZXZlciBzcGVjaWZpYyBwcm9ibGVtIEkgYW0gd29ya2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA1OjUzLjQzNDIxMTc4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwMDk4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01ODktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNTo1My41MzIyMzE5MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMjUyNzEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZS4gSGVyZSdzIGhvdyBJJ2xsIGFwcHJvYWNoIGl0OiBJJ2xsIHRyeSB0byBlbWJvZHkgdGhlIHRoaW5raW5nIHByb2Nlc3MsIGFzc3VtaW5nIHRoZSB1c2VyIGhhcyB0aGUgcmVsZXZhbnQgZXhwZXJ0aXNlLlxuXG5IZXJlJ3MgbXkgYXR0ZW1wdDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5MZXQncyBxdWlja2x5IGNoZWNrLiAqSXMqIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseSBleHBvcnRlZD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsLCBwcm9iYWJseSBldmVuIHRyaXZpYWwsIGZpcnN0IHN0ZXAuIEl0J3MgdGhlIG1vc3QgYmFzaWMgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIHRvIHByb2NlZWQuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIG9idmlvdXNseSBJIGNhbid0IGJlZ2luIGFueSBmdXJ0aGVyIHdvcmsuIEl0IHdvdWxkIGJlIGEgd2FzdGUgb2YgbXkgdGltZS4gUmlnaHQgbm93LCBJJ20gc2ltcGx5IHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgaXMgKnByZXNlbnQqLiBBbmQgbW9yZSBhY2N1cmF0ZWx5LCAqYWNjZXNzaWJsZSouIE9uY2UgSSBrbm93IHRoZSBkYXRhIGlzIGF2YWlsYWJsZSwgSSBjYW4gZ28gdGhyb3VnaCBhbGwgdGhlIHN0ZXBzIEknbSBsb29raW5nIGF0IHRvZGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6NTcuMDQ0NzYyMzAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU5MDpcXHR2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTkxOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYilcXG4gNTkyOlxcdHtcXG4gNTkzOlxcdFxcdGludCBwa3RfbGVuLCBzbG90O1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRwa3RfbGVuID0gc2tiLVxcdTAwM2VsZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMub3ZlcmhlYWQ7XFxuIDU5NjpcXHRcXHRpZiAodW5saWtlbHkoIXN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZSkpXFxuIDU5NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTk4OlxcdFxcbiA1OTk6XFx0XFx0c2xvdCA9IHBrdF9sZW4gKyBzdGFiLVxcdTAwM2Vzem9wdHMuY2VsbF9hbGlnbjtcXG4gNjAwOlxcdFxcdGlmICh1bmxpa2VseShzbG90IFxcdTAwM2MgMCkpXFxuIDYwMTpcXHRcXHRcXHRzbG90ID0gMDtcXG4gNjAyOlxcdFxcbiA2MDM6XFx0XFx0c2xvdCBcXHUwMDNlXFx1MDAzZT0gc3RhYi1cXHUwMDNlc3pvcHRzLmNlbGxfbG9nO1xcbiA2MDQ6XFx0XFx0aWYgKGxpa2VseShzbG90IFxcdTAwM2Mgc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplKSlcXG4gNjA1OlxcdFxcdFxcdHBrdF9sZW4gPSBzdGFiLVxcdTAwM2VkYXRhW3Nsb3RdO1xcbiA2MDY6XFx0XFx0ZWxzZVxcbiA2MDc6XFx0XFx0XFx0cGt0X2xlbiA9IHN0YWItXFx1MDAzZWRhdGFbc3RhYi1cXHUwMDNlc3pvcHRzLnRzaXplIC0gMV0gKlxcbiA2MDg6XFx0XFx0XFx0XFx0XFx0KHNsb3QgLyBzdGFiLVxcdTAwM2Vzem9wdHMudHNpemUpICtcXG4gNjA5OlxcdFxcdFxcdFxcdFxcdHN0YWItXFx1MDAzZWRhdGFbc2xvdCAlIHN0YWItXFx1MDAzZXN6b3B0cy50c2l6ZV07XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdHBrdF9sZW4gXFx1MDAzY1xcdTAwM2M9IHN0YWItXFx1MDAzZXN6b3B0cy5zaXplX2xvZztcXG4gNjEyOlxcdG91dDpcXG4gNjEzOlxcdFxcdC8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldFxcbiA2MTQ6XFx0XFx0ICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXRcXG4gNjE1OlxcdFxcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXFxuIDYxNjpcXHRcXHQgKi9cXG4gNjE3OlxcdFxcdHBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTtcXG4gNjE4OlxcdFxcdHFkaXNjX3NrYl9jYihza2IpLVxcdTAwM2Vwa3RfbGVuID0gcGt0X2xlbjtcXG4gNjE5OlxcdH1cXG4gNjIwOlxcdFxcbiA2MjE6XFx0c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHFkaXNjX3dhdGNoZG9nKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gNjIyOlxcdHtcXG4gNjIzOlxcdFxcdHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBxZGlzY193YXRjaGRvZyxcXG4gNjI0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0aW1lcik7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNjI3OlxcdFxcdF9fbmV0aWZfc2NoZWR1bGUocWRpc2Nfcm9vdCh3ZC1cXHUwMDNlcWRpc2MpKTtcXG4gNjI4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XFxuIDYzMTpcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdHZvaWQgcWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKHN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QsIHN0cnVjdCBRZGlzYyAqcWRpc2MsXFxuIDYzNDpcXHRcXHRcXHRcXHRcXHQgY2xvY2tpZF90IGNsb2NraWQpXFxuIDYzNTpcXHR7XFxuIDYzNjpcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZ3ZC1cXHUwMDNldGltZXIsIHFkaXNjX3dhdGNoZG9nLCBjbG9ja2lkLCBIUlRJTUVSX01PREVfQUJTX1BJTk5FRCk7XFxuIDYzNzpcXHRcXHR3ZC1cXHUwMDNlcWRpc2MgPSBxZGlzYztcXG4gNjM4OlxcdH1cXG4gNjM5OlxcdEVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDU6NTcuMDQ0OTQyMzYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTMwMTUyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbnRlcm5hbCBDb2RlIE5hdmlnYXRpb24gYW5kIFN5bWJvbCBWZXJpZmljYXRpb24qKlxuXG5IbW0sIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhpcyBmdW5jdGlvbmFsaXR5IHdhc24ndCBleHBvcnRlZC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gKmlzKiBpdD8gT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjay4uLiBBaCwgeWVzLCB0aGVyZSBpdCBpcyEgYEVYUE9SVF9TWU1CT0wocWRpc2Nfd2F0Y2hkb2dfaW5pdF9jbG9ja2lkKWAuIFNvLCBpdCAqaXMqIGV4cG9ydGVkLCBhcyBJIHN1c3BlY3RlZCBpdCBzaG91bGQgYmUuXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhpcyB1c2FnZSBvZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEkgYmVsaWV2ZSB0aGlzIGlzIGNyaXRpY2FsIHRvIHRoZSBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9uIGFuZCBpdCBpcyBjYWxsZWQgZnJvbSBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHdoaWNoIGlzIHVzZWQgZXh0ZW5zaXZlbHkuIEl0IGxvb2tzIGxpa2UgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIGNhbGxlZCBmcm9tIGBxZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhbiBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBleHBsYWlucyB0aGUgdmlzaWJpbGl0eS4gT2theSwgZ29vZCB0byBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjowMS41Mzc5NTk5MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzY3MzI4NzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjowNC4zNzQ3MDYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk1OTk0Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIG15IFwidGhvdWdodHNcIiBpbiBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydC4gSGVyZSB3ZSBnbzpcblxuKipDaGVja2luZyBmb3IgRXhwb3J0KipcblxuQWxyaWdodCwgSSdtIGp1c3QgcXVpY2tseSBydW5uaW5nIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3QgaGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlIHN5c3RlbSBzdWNjZXNzZnVsbHkgZXhwb3J0ZWQgdGhlIGRhdGEgSSBuZWVkZWQuIEl0J3MgYSBjcml0aWNhbCBzdGVwOyB3aXRob3V0IGl0LCB0aGUgZW50aXJlIGRvd25zdHJlYW0gcHJvY2VzcyBpcyBkZWFkIGluIHRoZSB3YXRlci4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIG9yIHRoZSBkYXRhIHN0cmVhbSBhY3R1YWxseSBtYWRlIGl0IG91dC4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJIHdpbGwgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGlmIHRoaXMgaXMgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjA3LjQ3MDcxNTcyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyMDgyNzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MDcuNTM1OTM0MDUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzUzOTQ1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwncyBQYWNrZXQgTGVuZ3RoIENhbGN1bGF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsJ3MgcGFja2V0IGhhbmRsaW5nLCBhbmQgSSd2ZSBqdXN0IGhpdCBhIHNuYWcuIEknbSB0cnlpbmcgdG8gdXNlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgYnV0IGl0J3Mgbm90IGV4cG9ydGVkLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiAqaXMqIHVzZWQsIGJlY2F1c2UgaXQncyBvYnZpb3VzbHkgaW52b2x2ZWQgaW4gY2FsY3VsYXRpbmcgcGFja2V0IGxlbmd0aHMgd2l0aGluIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgZnJhbWV3b3JrLCBhbmQgSSBjYW4ndCBqdXN0IGNhbGwgYSBmdW5jdGlvbiB0aGF0IHRoZSBrZXJuZWwgZG9lc24ndCBleHBvc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIG5vdCBleHBvcnRlZCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgd2F5IHRvIGFjY2VzcyBpdHMgZnVuY3Rpb25hbGl0eSBpcy4gVGltZSB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MTAuODcxMzMzMDg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgwMjY4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTc5Nz1zdHJ1Y3QgUWRpc2MgKnFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtNzk5LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaDo4MDA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC04MDEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg9OTE5PWVudW0gbmV0X3htaXRfcWRpc2NfdCB7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkyOS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjkzMDpzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzMS1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtOTM2LVxcdGlmIChzdGFiKVxcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6OTM3OlxcdFxcdF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc2tiLCBzdGFiKTtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTkzOC0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQxODU9c3RhdGljIGlubGluZSBpbnQgX19kZXZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDE5NC1cXG5uZXQvY29yZS9kZXYuYzo0MTk1OlxcdHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHNrYiwgcSk7XFxubmV0L2NvcmUvZGV2LmMtNDE5Ni1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9NTczPXN0YXRpYyBpbnQgcWRpc2NfZHVtcF9zdGFiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01ODktXFxubmV0L3NjaGVkL3NjaF9hcGkuYzo1OTA6dm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy01OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxMy4zNTE2MDk3MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMzI2Njc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBTeW1ib2wqKlxuXG5SaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSGFuZyBvbi4uLiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuLi4gdGhhdCdzIGRlY2xhcmVkIGluIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCwgaXNuJ3QgaXQ/IE9rYXksIHNvIHRoYXQgbGlrZWx5IG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcWRpc2MgQVBJLiBCdXQgaXMgaXQgKmV4cG9zZWQqPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGlmIHRoZXJlJ3MgYW4gYEVYUE9SVF9TWU1CT0xgIGRlY2xhcmF0aW9uIGZvciBpdC4gSWYgaXQgaXMgZXhwb3J0ZWQsIHRoZW4gSSBjYW4gdXNlIGl0LCBpZiBub3QsIEknbGwgbmVlZCB0byBnbyBsb29raW5nIGZvciBhbHRlcm5hdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgdGhpbmcgaXMgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMsIG9yIHdoZXRoZXIgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQgdG8gYWNjZXNzIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGlzIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoxNy4xNzQ4ODE4MDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzMyNDgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjE3LjIzODIyMTM3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAzMjI5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbmV0d29ya2luZzpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgYWJvdXQgaG93IGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpcyBhY3R1YWxseSBidWlsdC4gSXMgdGhpcyBmaWxlIGJlaW5nIHN0YXRpY2FsbHkgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIGltYWdlLCB0dWNrZWQgYXdheSBpbnNpZGUgYGJ1aWx0LWluLmFgLCBvciBpcyBpdCBnZXR0aW5nIG1vZHVsYXJpemVkPyBJIG5lZWQgdG8ga25vdyB0aGlzIGZvciBzdXJlLCBhcyB0aGlzIGFmZmVjdHMgYSBsb3Qgb2YgbXkgZGVidWdnaW5nLlxuXG5UaGUgb2J2aW91cyBwbGFjZSB0byBjaGVjayBpcyB0aGUgYG5ldC9zY2hlZC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgd2lsbCBiZSBkZWZpbmVkLiBMZXQgbWUganVtcCBpbiB0aGVyZSBhbmQgZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjoyMC41NDE0NTQxNjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVHJhZmZpYyBDb250cm9sIFVuaXQuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai15XFx0Oj0gc2NoX2dlbmVyaWMubyBzY2hfbXEub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfTkVUX1NDSEVEKVxcdFxcdCs9IHNjaF9hcGkubyBzY2hfYmxhY2tob2xlLm9cXG4gIDEwOlxcdG9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKVxcdCs9IGFjdF9hcGkub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfUE9MSUNFKVxcdCs9IGFjdF9wb2xpY2Uub1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfR0FDVClcXHQrPSBhY3RfZ2FjdC5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9NSVJSRUQpXFx0Kz0gYWN0X21pcnJlZC5vXFxuICAxNTpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9TQU1QTEUpXFx0Kz0gYWN0X3NhbXBsZS5vXFxuICAxNjpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9OQVQpXFx0Kz0gYWN0X25hdC5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfTkVUX0FDVF9QRURJVClcXHQrPSBhY3RfcGVkaXQub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfU0lNUClcXHQrPSBhY3Rfc2ltcGxlLm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORVRfQUNUX1NLQkVESVQpXFx0Kz0gYWN0X3NrYmVkaXQub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1NVTSlcXHQrPSBhY3RfY3N1bS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjIwLjU0MzU4MzMxMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI2OTcxMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gYHNjaF9hcGkub2AgaXMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfTkVUX1NDSEVEYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgZmVhdHVyZXMgdG8gZm9jdXMgb24uIFRoZW4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgY2FsbGVkIGZyb20gYF9fZGV2X3htaXRfc2tiYCwgd2hpY2ggbGl2ZXMgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSG1tLCBgX19kZXZfeG1pdF9za2JgIGlzIGEgKnZlcnkqIGhvdCBwYXRoIGluIGFueSBuZXR3b3JrIHN0YWNrIC0gbWFzc2l2ZSB0cmFmZmljIGZsb3cuIFRoYXQgbWFrZXMgaXQgdGVtcHRpbmcgdG8gdGFyZ2V0LCBidXQgd2FpdC4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBmdXp6aW5nIGFyZSBjbGVhcjogXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gV2UgZG9uJ3Qgd2FudCB0byBnZXQgZGlzdHJhY3RlZCBieSBnZW5lcmljIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGlzIG9ubHkgY2FsbGVkIGlmIHNvbWV0aGluZyBjYWxsZWQgYHN0YWJgIGlzIHByZXNlbnQsIG9yIHBlcmhhcHMgZW5hYmxlZC4gTmVlZCB0byBsb29rIGNsb3Nlci4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBkZWZpbml0aW9uIGluIGBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBpbnZva2VkIHRvIGRldGVybWluZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjI1Ljc3MDU1OTA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzMDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gOTMxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBRZGlzYyAqc2NoKVxcbiA5MzI6XFx0e1xcbiA5MzM6XFx0I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG4gOTM0OlxcdFxcdHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNjaC1cXHUwMDNlc3RhYik7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdGlmIChzdGFiKVxcbiA5Mzc6XFx0XFx0XFx0X19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbihza2IsIHN0YWIpO1xcbiA5Mzg6XFx0I2VuZGlmXFxuIDkzOTpcXHR9XFxuIDk0MDpcXHRcXG4gOTQxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIDk0MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuIDk0MzpcXHR7XFxuIDk0NDpcXHRcXHRyZXR1cm4gc2NoLVxcdTAwM2VlbnF1ZXVlKHNrYiwgc2NoLCB0b19mcmVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6MjUuNzcwNzkyOTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI3MTU3NjEyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbmNsdXNpb24gb2YgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGluIEZvY3VzU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGluIGBGb2N1c1N5bWJvbHNgLiBJIHNlZSB0aGF0IGl0J3MgaW52b2tlZCB3aGVuIGBzdGFiYCBpcyBjb25maWd1cmVkLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IEFuZCB0aGUgYW5zd2VyIGlzIHByZXR0eSBjbGVhcjogeWVzLCBpdCBpcy4gSXQncyBjYWxsZWQgZm9yICpldmVyeSogcGFja2V0IHRyYW5zbWl0dGVkIG9uIGEgcWRpc2MgdGhhdCB1dGlsaXplcyBhIHNpemUgdGFibGUuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gYmVpbmcgc2tld2VkLiBCdXQgdGhlbiBhZ2FpbiwgdGhpcyBpc24ndCAqZW50aXJlbHkqIGdlbmVyaWMuIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBxZGlzY3MgdGhhdCB1c2Ugc2l6ZSB0YWJsZXMsIGFuZCBub3QgYWxsIHFkaXNjcyBkby5cblxuV2FpdCBhIHNlY29uZCwgaXQncyBjYWxsZWQgZm9yICpldmVyeSBwYWNrZXQqIG9uIHRob3NlIHNwZWNpZmljIHFkaXNjcy4gVGhhdCBhdXRvbWF0aWNhbGx5IHB1dHMgaXQgaW4gdGhlIGhvdC1wYXRoIGNhdGVnb3J5LiBTbyBub3cgdGhlIHF1ZXN0aW9uIGlzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2Ygc2l6ZSB0YWJsZSB1c2UsIHNvIEknZCBsaWtlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNpemUgdGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBzdGFiYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoYXQgaXQgcmVsYXRlcyB0by4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNjo0OC40ODY1NTgyNTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDAxMzMxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWRpc2NfZ2V0X3N0YWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFiX3BvbGljeVtUQ0FfU1RBQl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDk1LVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6NDk2OnN0YXRpYyBzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqcWRpc2NfZ2V0X3N0YWIoc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNDk3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTEyNzQ9c3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTEzMzktXFx0aWYgKHRjYVtUQ0FfU1RBQl0pIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjEzNDA6XFx0XFx0c3RhYiA9IHFkaXNjX2dldF9zdGFiKHRjYVtUQ0FfU1RBQl0sIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0xMzQxLVxcdFxcdGlmIChJU19FUlIoc3RhYikpIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MTM5Nj1zdGF0aWMgaW50IHFkaXNjX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqKnRjYSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTQxNi1cXHRpZiAodGNhW1RDQV9TVEFCXSkge1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MTQxNzpcXHRcXHRzdGFiID0gcWRpc2NfZ2V0X3N0YWIodGNhW1RDQV9TVEFCXSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE0MTgtXFx0XFx0aWYgKElTX0VSUihzdGFiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDY6NTEuMjI2Njk2NDA3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNDE2ODI2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgRnV6emluZzogTmFycm93aW5nIERvd24gdGhlIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIHRoaXMgbmV0d29ya2luZyBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZSBpc3N1ZSBpcyByZWxhdGVkIHRvIGBxZGlzY19nZXRfc3RhYmAgYmVpbmcgY2FsbGVkIGR1cmluZyBxZGlzYyBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgd2l0aCBgVENBX1NUQUJgLiBUaGF0IG1lYW5zIGBxZGlzY19jcmVhdGVgIGFuZCBgcWRpc2NfY2hhbmdlYCBhcmUgdGhlIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSBhY3R1YWwgYnVnIGlzIGluIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCwgd2hpY2ggaXMgb24gdGhlICpkYXRhKiBwYXRoLiBJbnRlcmVzdGluZy5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAuIFRoYXQncyB0aGUga2V5LiBOb3csIHdoYXQgdG8gaW5jbHVkZSBpbiB0aGUgZnV6emluZyBmb2N1cz8gSWYgSSAqZG9uJ3QqIGluY2x1ZGUgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB3aGF0IGVsc2Ugd291bGQgYmUgcmVsZXZhbnQ/IE1heWJlIGBxZGlzY19nZXRfc3RhYmA/IEJ1dCB0aGF0IHdhc24ndCBhY3R1YWxseSBtb2RpZmllZCwgc28gcHJvYmFibHkgbm90LlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gZm9jdXMgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBvbmVzIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gICppcyogYSBob3QtcGF0aCBmdW5jdGlvbiBiZWNhdXNlIGl0IGRlYWxzIHdpdGggcGFja2V0IHByb2Nlc3NpbmcsIGJ1dCBpdCdzIHNwZWNpZmljIHRvIHRoZSBgc3RhYmAgcWRpc2MuIEhtbW0sIGlzIGl0IHNwZWNpZmljICplbm91Z2gqPyBJcyBpdCBjb25zaWRlcmVkIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBvciBub3Q/IFRoaW5raW5nIGFib3V0IGl0LCBnZW5lcmljIG9uZXMgd291bGQgYmUgbW9yZSBsaWtlIGBfX2Rldl94bWl0X3NrYmAsIGBkZXZfcXVldWVfeG1pdGAsIGBpcF9yY3ZgLCBhbmQgc3VjaC5cblxuYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIGZlZWxzIG1vcmUgZm9jdXNlZCwgZXZlbiB0aG91Z2ggaXQncyBvbiB0aGUgZGF0YSBwYXRoLiBBbmQgdGhlIGluc3RydWN0aW9ucyBhbHNvIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEdvb2QsIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBjaGVja3MgYm90aCB0aG9zZSBib3hlcyEgU28sIGl0IGxvb2tzIGxpa2UgaW5jbHVkaW5nIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyB0aGUgcmlnaHQgbW92ZSBiZWNhdXNlIGl0J3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLlxuXG5XaGF0IGFib3V0IGBxZGlzY19nZXRfc3RhYmA/IFRoYXQgb25lJ3Mgc3RhdGljLiBQcm9iYWJseSBub3QuXG5cbkFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzPyBUaW1lIHRvIGNoZWNrIGBDT05GSUdfTkVUX1NDSEVEYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBbHNvLCB0aGUgcGF0Y2ggbWVudGlvbnMgXCJkZWZpY2l0IHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTLFwiIHNvIEkgc2hvdWxkIGNoZWNrIGBDT05GSUdfTkVUX1NDSF9EUlJgIGFuZCBgQ09ORklHX05FVF9TQ0hfRVRTYCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE5LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA2OjU5LjI2ODM4MzIzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwODI1MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9EUlJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE5NT1jb25maWcgTkVUX1NDSF9ORVRFTVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjA2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjIwNzpjb25maWcgTkVUX1NDSF9EUlJcXG5uZXQvc2NoZWQvS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowMS42NzY2Mzk5MzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM5NTA4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0zNjM9Y29uZmlnIE5FVF9TQ0hfUExVR1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzg4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjM4OTpjb25maWcgTkVUX1NDSF9FVFNcXG5uZXQvc2NoZWQvS2NvbmZpZy0zOTAtXFx0dHJpc3RhdGUgXFxcIkVuaGFuY2VkIHRyYW5zbWlzc2lvbiBzZWxlY3Rpb24gc2NoZWR1bGVyIChFVFMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowNC4wMzA1OTYwMzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2NzI5Njc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTY2hlZHVsZXIgSXNzdWVzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGl0IGNvdWxkIGJlIGJlbmVmaWNpYWwgdG8gZW5hYmxlIGBORVRfU0NIX0RSUmAgYW5kIGBORVRfU0NIX0VUU2AgdG8gcmVhbGx5IHB1dCB0aG9zZSBkZWZpY2l0IHNjaGVkdWxlcnMgdGhyb3VnaCB0aGVpciBwYWNlcy4gQnV0LCB0aGUgbmFnZ2luZyBpc3N1ZSBpcyB0aGUgYnVnIEknbSB0cmFja2luZyBkb3duIOKAkyBpdCdzIGxvY2F0ZWQgaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBUaGF0IGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCByZXNpZGVzIGluIGBzY2hfYXBpLmNgIGFuZCBoaW5nZXMgc29sZWx5IG9uIGBORVRfU0NIRURgLiBTbywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBORVRfU0NIRURgLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L3NjaGVkL0tjb25maWdgIGFuZCBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIG9uIHBvaW50LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0IGFyb3VuZCB0aGlzIGJhc2Ugb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzowNy45OTc4OTY5MDdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjYwMDM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjEwLjQyMzkwOTY2NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU4MzEwMjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaW4gdGhlIE5ldHdvcmsgU2NoZWR1bGVyKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGBORVRfU0NIRURgIGNvbmZpZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBoIHRvIHNlZSBpZiBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgYWNjZXNzaWJsZS4gSSBxdWlja2x5IHNhdyB0aGF0IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyBjYWxsZWQgZnJvbSBgcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBfX2Rldl94bWl0X3NrYmAgaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHJlYWNoYWJsZS5cblxuSSBjb25maXJtZWQgdGhhdCBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgaXMgaW5kZWVkIGFjY2Vzc2libGUgdGhyb3VnaCBgX19kZXZfeG1pdF9za2JgIHdoZW4gYSBxdWV1ZSBkaXNjaXBsaW5lIChxZGlzYykgaGFzIGEgc2l6ZSB0YWJsZSBjb25maWd1cmVkLiBUaGUgc2l6ZSB0YWJsZSBpdHNlbGYgaXMgc2V0IHVwIHRocm91Z2ggdGhlIGBSVE1fTkVXUURJU0NgIG5ldGxpbmsgbWVzc2FnZSB3aXRoIHRoZSBgVENBX1NUQUJgIGF0dHJpYnV0ZS4gVGhpcyBpcyBjZXJ0YWlubHkgYSBwYXRoIHRoYXQncyBvcGVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGFjY2Vzc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGluZyBwYXRoLCBJJ20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYFxuKiAgIGBFbmFibGVDb25maWdzYDogYE5FVF9TQ0hFRGBcblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggYXBwZWFycyB0byBmaXggYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCB3aXRoaW4gZGVmaWNpdCBzY2hlZHVsZXJzLCBzcGVjaWZpY2FsbHkgRFJSL0VUUywgYnkgYm91bmRpbmcgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB3aXRoaW4gYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmlnaHQgaW4gdGhlIGNvcmUgZGF0YSBwYXRoIG9mIG5ldHdvcmsgc2NoZWR1bGluZywgYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgY29uZmlndXJhdGlvbiBvZiBxZGlzY3MgZm9sbG93ZWQgYnkgcGFja2V0IHRyYW5zbWlzc2lvbi5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGBORVRfU0NIX0RSUmAgYW5kIGBORVRfU0NIX0VUU2AgYXMgd2VsbC4gVGhlIGNvbW1pdCBtZXNzYWdlIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgdGhlIGZpeCBhZGRyZXNzZXMgbG9vcHMgaW4gRFJSL0VUUy4gSWYgdGhvc2UgZGVmaWNpdCBzY2hlZHVsZXJzIGFyZSBub3QgYWN0aXZlbHkgZW5hYmxlZCwgSSBtaWdodCBtaXNzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgYXR0YWNrIHN1cmZhY2UsIG9yIHRoZSBjb25kaXRpb25zIHRvIHRyaWdnZXIgdGhlIGxvb3AgbWF5IG5vdCBiZSBwcmVzZW50LiBUaGVyZWZvcmUsIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGlzIHRob3JvdWdoIGFuZCBlZmZlY3RpdmUsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYE5FVF9TQ0hfRFJSYCBhbmQgYE5FVF9TQ0hfRVRTYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0J3Mgd29ydGggdmVyaWZ5aW5nIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgZG9uJ3QgaGF2ZSBhbnkgc2lnbmlmaWNhbnQgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUwLCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjIxLjAwNzAxNDkwOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjA3OlxcdGNvbmZpZyBORVRfU0NIX0RSUlxcbiAyMDg6XFx0XFx0dHJpc3RhdGUgXFxcIkRlZmljaXQgUm91bmQgUm9iaW4gc2NoZWR1bGVyIChEUlIpXFxcIlxcbiAyMDk6XFx0XFx0aGVscFxcbiAyMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRGVmaWNpdCBSb3VuZCBSb2JpbiAoRFJSKSBwYWNrZXRcXG4gMjExOlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyMTQ6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZHJyLlxcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjIxLjAwNzEyNzk5OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODksXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODk6XFx0Y29uZmlnIE5FVF9TQ0hfRVRTXFxuIDM5MDpcXHRcXHR0cmlzdGF0ZSBcXFwiRW5oYW5jZWQgdHJhbnNtaXNzaW9uIHNlbGVjdGlvbiBzY2hlZHVsZXIgKEVUUylcXFwiXFxuIDM5MTpcXHRcXHRoZWxwXFxuIDM5MjpcXHQgICAgICAgICAgVGhlIEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24gc2NoZWR1bGVyIGlzIGEgY2xhc3NmdWxcXG4gMzkzOlxcdCAgICAgICAgICBxdWV1aW5nIGRpc2NpcGxpbmUgdGhhdCBtZXJnZXMgZnVuY3Rpb25hbGl0eSBvZiBQUklPIGFuZCBEUlJcXG4gMzk0OlxcdCAgICAgICAgICBxZGlzY3MgaW4gb25lIHNjaGVkdWxlci4gRVRTIG1ha2VzIGl0IGVhc3kgdG8gY29uZmlndXJlIGEgc2V0IG9mXFxuIDM5NTpcXHQgICAgICAgICAgc3RyaWN0IGFuZCBiYW5kd2lkdGgtc2hhcmluZyBiYW5kcyB0byBpbXBsZW1lbnQgdGhlIHRyYW5zbWlzc2lvblxcbiAzOTY6XFx0ICAgICAgICAgIHNlbGVjdGlvbiBkZXNjcmliZWQgaW4gODAyLjFRYXouXFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEVUUyBwYWNrZXQgc2NoZWR1bGluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzoyMS4wMDcyMDk1NzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0MTIwNTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcmVsZXZhbnQgY29kZSBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgaWYgTkVUX1NDSEVEYCBibG9jaywgc28gdGhlIG5lY2Vzc2FyeSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBORVRfU0NIRURgLCBgTkVUX1NDSF9EUlJgLCBhbmQgYE5FVF9TQ0hfRVRTYC4gTm8gb3RoZXIgb2J2aW91cyBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0J3MgYmVlbiBtb2RpZmllZCwgeWVwLCB0aGUgZGlmZiBjb25maXJtcyB0aGF0LlxuXG5Ob3csIGlzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBhIHN1aXRhYmxlIGZvY3VzIHN5bWJvbD8gSG1tLCBpdOKAmXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBnb29kLiBJdCdzIGRlZmluaXRlbHkgb24gdGhlIGRhdGEgcGF0aCwgYnV0IHNlZW1zIHRvIG9ubHkgZ2V0IHVzZWQgd2hlbiBgc3RhYmAgaXMgY29uZmlndXJlZC4gQnV0IGl0J3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24uIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgaXQncyB0aGUgcmlnaHQgY2hvaWNlLiBJJ2xsIHN0aWNrIHdpdGggYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gLlxuXG5KdXN0IHRvIGJlIHN1cmUsIEknbGwgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zOiBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMsIGF2b2lkIGdlbmVyaWNzIHRvIHByZXZlbnQgc2tld2VkIGRpc3RyaWJ1dGlvbnMsIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMsIGFuZCBsaXN0IENPTkZJRyBvcHRpb25zIGluIGBFbmFibGVDb25maWdzYC4gSXQgYWxsIGNoZWNrcyBvdXQuIEknbSBzYXRpc2ZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ2LCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjI5Ljg0ODQxNzk1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzIzNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfRFJSXCIsXG4gICAgXCJORVRfU0NIX0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2FwIHRoZSBjYWxjdWxhdGVkIHBhY2tldCBsZW5ndGggdG8gYEdTT19NQVhfU0laRWAuIFRoaXMgcHJldmVudHMgaW5maW5pdGUgbG9vcHMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzIGxpa2UgRFJSIGFuZCBFVFMgd2hlbiBhIHNpemUgdGFibGUgKHN0YWIpIGluZmxhdGVzIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCByZWFjaGFibGUgYnkgY29uZmlndXJpbmcgYSBxZGlzYyB3aXRoIGEgc2l6ZSB0YWJsZSB2aWEgbmV0bGluayBhbmQgdHJhbnNtaXR0aW5nIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0RSUlwiLFxuICAgIFwiTkVUX1NDSF9FVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW5gIHRvIGNhcCB0aGUgY2FsY3VsYXRlZCBwYWNrZXQgbGVuZ3RoIHRvIGBHU09fTUFYX1NJWkVgLiBUaGlzIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIGluIGRlZmljaXQgc2NoZWR1bGVycyBsaWtlIERSUiBhbmQgRVRTIHdoZW4gYSBzaXplIHRhYmxlIChzdGFiKSBpbmZsYXRlcyB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYywgcmVhY2hhYmxlIGJ5IGNvbmZpZ3VyaW5nIGEgcWRpc2Mgd2l0aCBhIHNpemUgdGFibGUgdmlhIG5ldGxpbmsgYW5kIHRyYW5zbWl0dGluZyBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxNTowNzozMC4wMDExNTM2ODVaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTUxMzc4MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDc6MzAuMDAyMTEwNjg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTUwNDE1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdkZmUyNjY2MjU5ZmRmZGU3Y2U2MTY3MWQzNWU0OTYwYWUyZWYwMGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxNTowNToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jXG5pbmRleCA2NWIzNTUyOGQxMjVmLi5hZDRmMTE3ZmY1NWEwIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuY1xuQEAgLTYxMCw4ICs2MTAsMTEgQEAgdm9pZCBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRwa3RfbGVuIFx1MDAzY1x1MDAzYz0gc3RhYi1cdTAwM2Vzem9wdHMuc2l6ZV9sb2c7XG4gb3V0OlxuLVx0aWYgKHVubGlrZWx5KHBrdF9sZW4gXHUwMDNjIDEpKVxuLVx0XHRwa3RfbGVuID0gMTtcbitcdC8qIEEgc2l6ZSB0YWJsZSBjYW4gaW5mbGF0ZSBxZGlzY19wa3RfbGVuKCkgYmV5b25kIGFueSByZWFsIHBhY2tldFxuK1x0ICogKHZpYSBvdmVyaGVhZCwgdGhlIGRhdGEgdGFibGUsIG9yIHNpemVfbG9nKTsgY2FwIGl0IHNvIGRlZmljaXRcbitcdCAqIHNjaGVkdWxlcnMgc3VjaCBhcyBEUlIvRVRTIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMuXG4rXHQgKi9cbitcdHBrdF9sZW4gPSBjbGFtcF90KGludCwgcGt0X2xlbiwgMSwgR1NPX01BWF9TSVpFKTtcbiBcdHFkaXNjX3NrYl9jYihza2IpLVx1MDAzZXBrdF9sZW4gPSBwa3RfbGVuO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjMwLjAwMjExMjk0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc2ODcwNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfYXBpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXMgY2xhbXBpbmcgb2YgYHBrdF9sZW5gOlxuXG5gYGBjXG4tXHRpZiAodW5saWtlbHkocGt0X2xlbiBcdTAwM2MgMSkpXG4tXHRcdHBrdF9sZW4gPSAxO1xuK1x0LyogQSBzaXplIHRhYmxlIGNhbiBpbmZsYXRlIHFkaXNjX3BrdF9sZW4oKSBiZXlvbmQgYW55IHJlYWwgcGFja2V0XG4rXHQgKiAodmlhIG92ZXJoZWFkLCB0aGUgZGF0YSB0YWJsZSwgb3Igc2l6ZV9sb2cpOyBjYXAgaXQgc28gZGVmaWNpdFxuK1x0ICogc2NoZWR1bGVycyBzdWNoIGFzIERSUi9FVFMgdGVybWluYXRlIHRoZWlyIHJlZmlsbCBsb29wcy5cbitcdCAqL1xuK1x0cGt0X2xlbiA9IGNsYW1wX3QoaW50LCBwa3RfbGVuLCAxLCBHU09fTUFYX1NJWkUpO1xuYGBgXG5cbkJhc2ljYWxseSwgdGhleSdyZSBpbnRyb2R1Y2luZyBhIGBjbGFtcGAgdG8gbWFrZSBzdXJlIGBwa3RfbGVuYCBkb2Vzbid0IGdldCByaWRpY3Vsb3VzbHkgbGFyZ2UsIHdpdGggYEdTT19NQVhfU0laRWAgYXMgdGhlIHVwcGVyIGJvdW5kLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGF0IHRoaXMgaXMgdG8gcHJldmVudCBpc3N1ZXMgaW4gZGVmaWNpdCBzY2hlZHVsZXJzLCBsaWtlIERSUiBhbmQgRVRTLCB3aGVyZSBhbiBpbmZsYXRlZCBgcGt0X2xlbmAgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIG9yIHBvc3NpYmx5IGFuIGludGVnZXIgb3ZlcmZsb3cgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCB3b3VsZCBjYXVzZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc29saWQgZml4OyBpdOKAmXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHN0ZW1taW5nIGZyb20gaG93IGBwa3RfbGVuYCBjYW4gYmUgY2FsY3VsYXRlZCwgd2hpY2gsIGluIGV4dHJlbWUgY2lyY3Vtc3RhbmNlcywgY291bGQgYnJlYWsgdGhpbmdzIG9yIGxlYWQgdG8gZGVuaWFsIG9mIHNlcnZpY2UuIEl0IGRvZXNu4oCZdCBsb29rIGxpa2UgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBUbyBiZSBleHRyYSBzdXJlLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIHVzYWdlIG9mIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLCBqdXN0IHRvIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTU6MDc6MzUuNTc4OTg2NjY2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA0MDM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuYz01NzM9c3RhdGljIGludCBxZGlzY19kdW1wX3N0YWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU4OS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU5MDp2b2lkIF9fcWRpc2NfY2FsY3VsYXRlX3BrdF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTU5MS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjM1LjYzNzAzODMyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTQ0MTkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwa3RfbGVuYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGNsYW1waW5nIGBwa3RfbGVuYCB0byBgR1NPX01BWF9TSVpFYC4gVGhlIHJlYXNvbmluZyBjbGlja3M6IGl0J3MgYSBkZWZlbnNpdmUgbWVhc3VyZS4gQSBtYXNzaXZlIGBwa3RfbGVuYCB2YWx1ZSBjb3VsZCB3cmVhayBoYXZvYyBvbiBkZWZpY2l0IHNjaGVkdWxlcnMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5maW5pdGUgbG9vcHMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbiDigJMgY2xhc3NpYyBsb2dpYyBib21iIHRlcnJpdG9yeS4gSSBjYW4gc2VlIHRoYXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYSBLTVNBTiBpc3N1ZT9cIiBBbmQgdGhlIGFuc3dlciBpcyBhIGZpcm0gXCJOb1wiLiBUaGlzIGlzbid0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbC4gVGhpcyBpcyBhIGNsZWFyIGNhc2Ugb2YgYSBsb2dpY2FsIGZsYXcg4oCTIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agb3IgYSByZXNvdXJjZSBleGhhdXN0aW9uIGJ1ZywgcGxhaW4gYW5kIHNpbXBsZS4gS01TQU4gd291bGQgYmUgY29tcGxldGVseSBpcnJlbGV2YW50IGhlcmUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSB2YWx1ZSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gYSBwcm9ibGVtYXRpYyBjb250cm9sIGZsb3csIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgcmVhZC4gS0FTQU4gKm1pZ2h0KiBjYXRjaCBzb21ldGhpbmcgaWYgdGhlIGJhZCBgcGt0X2xlbmAgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgb3IgdXNlLWFmdGVyLWZyZWUsIGJ1dCBpdCdzIG5vdCB0aGUgcHJpbWFyeSBpc3N1ZS4gU28sIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIFRoaXMgaXNuJ3QgS01TQU4ncyBkb21haW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDEsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDE1OjA3OjQxLjk1MTQ2MjI2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19xZGlzY19jYWxjdWxhdGVfcGt0X2xlbmAgdG8gY2xhbXAgdGhlIGNhbGN1bGF0ZWQgcGFja2V0IGxlbmd0aCB0byBgR1NPX01BWF9TSVpFYC4gVGhpcyBwcmV2ZW50cyBhbiBpc3N1ZSB3aGVyZSBhIHNpemUgdGFibGUgY291bGQgaW5mbGF0ZSB0aGUgcGFja2V0IGxlbmd0aCBleGNlc3NpdmVseSwgY2F1c2luZyBkZWZpY2l0IHNjaGVkdWxlcnMgKGxpa2UgRFJSL0VUUykgdG8gZmFpbCB0byB0ZXJtaW5hdGUgdGhlaXIgcmVmaWxsIGxvb3BzIChpbmZpbml0ZSBsb29wIC8gcmVzb3VyY2UgZXhoYXVzdGlvbikuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3FkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuYCB0byBjbGFtcCB0aGUgY2FsY3VsYXRlZCBwYWNrZXQgbGVuZ3RoIHRvIGBHU09fTUFYX1NJWkVgLiBUaGlzIHByZXZlbnRzIGFuIGlzc3VlIHdoZXJlIGEgc2l6ZSB0YWJsZSBjb3VsZCBpbmZsYXRlIHRoZSBwYWNrZXQgbGVuZ3RoIGV4Y2Vzc2l2ZWx5LCBjYXVzaW5nIGRlZmljaXQgc2NoZWR1bGVycyAobGlrZSBEUlIvRVRTKSB0byBmYWlsIHRvIHRlcm1pbmF0ZSB0aGVpciByZWZpbGwgbG9vcHMgKGluZmluaXRlIGxvb3AgLyByZXNvdXJjZSBleGhhdXN0aW9uKS4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4wxj6[1] Phase: Succeeded StartedAt: 2026-08-19 15:07:54 +0000 UTC FinishedAt: 2026-08-19 15:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 15:07:54 +0000 UTC FinishedAt: 2026-08-19 15:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2] Phase: Succeeded StartedAt: 2026-08-19 15:07:54 +0000 UTC FinishedAt: 2026-08-19 18:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 15:07:54 +0000 UTC FinishedAt: 2026-08-19 18:51:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 15:07:54 +0000 UTC FinishedAt: 2026-08-19 15:08:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 15:07:54 +0000 UTC FinishedAt: 2026-08-19 15:07:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow4wxj6/series-workflow4wxj6-convert-artifact-1038886922/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 15:08:04 +0000 UTC FinishedAt: 2026-08-19 15:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 15:08:04 +0000 UTC FinishedAt: 2026-08-19 15:25:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bfcc5596-a709-4b4d-ab11-3d4129265cc0,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-workflow4wxj6/series-workflow4wxj6-convert-artifact-1038886922/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": "94315518-050b-4d47-9a09-d5cba7821216", "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-workflow4wxj6/series-workflow4wxj6-build-action-1740428024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 15:08:04 +0000 UTC FinishedAt: 2026-08-19 15:25:14 +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:*bfcc5596-a709-4b4d-ab11-3d4129265cc0,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-workflow4wxj6/series-workflow4wxj6-convert-artifact-1038886922/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": "94315518-050b-4d47-9a09-d5cba7821216", "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-workflow4wxj6/series-workflow4wxj6-build-action-1740428024/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 15:25:24 +0000 UTC FinishedAt: 2026-08-19 15:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 15:25:24 +0000 UTC FinishedAt: 2026-08-19 15:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 15:25:24 +0000 UTC FinishedAt: 2026-08-19 15:25:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 15:25:24 +0000 UTC FinishedAt: 2026-08-19 15:25:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow4wxj6/series-workflow4wxj6-convert-artifact-2323320485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 15:25:35 +0000 UTC FinishedAt: 2026-08-19 15:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 15:25:35 +0000 UTC FinishedAt: 2026-08-19 15:27:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*94315518-050b-4d47-9a09-d5cba7821216,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-workflow4wxj6/series-workflow4wxj6-build-action-1740428024/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-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 15:27:39 +0000 UTC FinishedAt: 2026-08-19 15:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 15:27:39 +0000 UTC FinishedAt: 2026-08-19 15:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 15:27:39 +0000 UTC FinishedAt: 2026-08-19 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 15:27:39 +0000 UTC FinishedAt: 2026-08-19 15:47:04 +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:*bfcc5596-a709-4b4d-ab11-3d4129265cc0,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-workflow4wxj6/series-workflow4wxj6-convert-artifact-2323320485/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": "b245a345-ecaf-42f9-92bf-26dd89a69bbf", "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-workflow4wxj6/series-workflow4wxj6-build-action-565462769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 15:27:39 +0000 UTC FinishedAt: 2026-08-19 15:46:54 +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:*bfcc5596-a709-4b4d-ab11-3d4129265cc0,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-workflow4wxj6/series-workflow4wxj6-convert-artifact-2323320485/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": "b245a345-ecaf-42f9-92bf-26dd89a69bbf", "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-workflow4wxj6/series-workflow4wxj6-build-action-565462769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 15:47:04 +0000 UTC FinishedAt: 2026-08-19 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 15:47:04 +0000 UTC FinishedAt: 2026-08-19 15:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 15:47:04 +0000 UTC FinishedAt: 2026-08-19 15:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 15:47:04 +0000 UTC FinishedAt: 2026-08-19 15:49:03 +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:*b245a345-ecaf-42f9-92bf-26dd89a69bbf,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-workflow4wxj6/series-workflow4wxj6-build-action-565462769/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-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 18:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 18:51:57 +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":["__qdisc_calculate_pkt_len"],"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:*94315518-050b-4d47-9a09-d5cba7821216,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b245a345-ecaf-42f9-92bf-26dd89a69bbf,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-workflow4wxj6/series-workflow4wxj6-build-action-1740428024/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-workflow4wxj6/series-workflow4wxj6-build-action-565462769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 15:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 15:49:18 +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":["__qdisc_calculate_pkt_len"],"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-workflow4wxj6/series-workflow4wxj6-convert-artifact-1911253546/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 15:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 15:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 15:49:13 +0000 UTC FinishedAt: 2026-08-19 15:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 15:49:23 +0000 UTC FinishedAt: 2026-08-19 18:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4wxj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__qdisc_calculate_pkt_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd5f485f3f026225b86573e559af0b7254ef4184","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_DRR","NET_SCH_ETS"],"series_id":"1d7b7daa-fd78-4624-959c-cd0d7bfea131","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 15:49:23 +0000 UTC FinishedAt: 2026-08-19 18:51:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*94315518-050b-4d47-9a09-d5cba7821216,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b245a345-ecaf-42f9-92bf-26dd89a69bbf,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-workflow4wxj6/series-workflow4wxj6-build-action-1740428024/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-workflow4wxj6/series-workflow4wxj6-build-action-565462769/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-workflow4wxj6/series-workflow4wxj6-convert-artifact-1911253546/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,}