Name: series-workflowh69z9 Phase: Succeeded StartedAt: 2026-08-12 18:43:25 +0000 UTC FinishedAt: 2026-08-12 23:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[0] Phase: Succeeded StartedAt: 2026-08-12 18:43:25 +0000 UTC FinishedAt: 2026-08-12 19:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 18:43:25 +0000 UTC FinishedAt: 2026-08-12 19:45:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6", "IPV6_MROUTE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6", "IPV6_MROUTE" ], "series_id": "931efb3d-ea01-4d80-a431-13b9fac1dabd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "ip_mr_input", "ip6_mc_input" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXA2X21jX2lucHV0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjYWxscyB0byBgc2tiX29ycGhhbihza2IpYCBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocy4gYHNrYl9vcnBoYW5gIGRldGFjaGVzIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIChjbGVhcmluZyBgc2tiLVx1MDAzZXNrYCBhbmQgY2FsbGluZyB0aGUgZGVzdHJ1Y3RvcikuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCByZWZlcmVuY2UgbGVha3MsIG1lbW9yeSBhY2NvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZXJlIGFuIHNrYiBvdXRsaXZlcyBpdHMgYXNzb2NpYXRlZCBzb2NrZXQuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZDc5Y2FlNDNhMDdhZDMxNTMzNGZjNmRlYjMyNDY5YmQzYjlmNWNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTk6NDQ6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCAxZDlhNGFjMTRmY2VmLi5lNWYyYjFjNjE1MGQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0yMjEzLDYgJiM0MzsyMjEzLDkgQEAgaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoSVBDQihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNLQl9GT1JXQVJERUQpXG4gXHRcdGdvdG8gZG9udF9mb3J3YXJkO1xuIFxuJiM0MztcdGlmICghbG9jYWwpXG4mIzQzO1x0XHRza2Jfb3JwaGFuKHNrYik7XG4mIzQzO1xuIFx0bXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTtcbiBcdGlmIChJU19FUlIobXJ0KSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5pbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5AQCAtNjIyLDYgJiM0Mzs2MjIsNyBAQCBpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmIChkZWxpdmVyKSB7XG4gXHRcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4gXHRcdFx0c2tiMiA9IHNrYjtcbiBcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXA2X21jX2lucHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGlucHV0IHBhdGhzIGJ5IGFkZGluZyBgc2tiX29ycGhhbihza2IpYCB0byBkaXNhc3NvY2lhdGUgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBtdWx0aWNhc3Qgcm91dGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkNzljYWU0M2EwN2FkMzE1MzM0ZmM2ZGViMzI0NjliZDNiOWY1Y2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo0NDoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAxZDlhNGFjMTRmY2VmLi5lNWYyYjFjNjE1MGQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtci5jCkBAIC0yMjEzLDYgJiM0MzsyMjEzLDkgQEAgaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKElQQ0Ioc2tiKS0mZ3Q7ZmxhZ3MgJmFtcDsgSVBTS0JfRk9SV0FSREVEKQogCQlnb3RvIGRvbnRfZm9yd2FyZDsKIAomIzQzOwlpZiAoIWxvY2FsKQomIzQzOwkJc2tiX29ycGhhbihza2IpOwomIzQzOwogCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7CiAJaWYgKElTX0VSUihtcnQpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtNjIyLDYgJiM0Mzs2MjIsNyBAQCBpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiAJCWlmIChkZWxpdmVyKSB7CiAJCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAJCX0gZWxzZSB7CiYjNDM7CQkJc2tiX29ycGhhbihza2IpOwogCQkJc2tiMiA9IHNrYjsKIAkJCXNrYiA9IE5VTEw7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9pcHY0L2lwbXIuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoYXQgdGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIOKAkyBzcGVjaWZpY2FsbHksIElQdjQgYW5kIElQdjYgbXVsdGljYXN0LiBUaGUgY2hhbmdlIGlzIGFkZGluZyBgc2tiX29ycGhhbihza2IpYCBpbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gSSBhbHJlYWR5IGtub3cgdGhhdCBgaXBfbXJfaW5wdXRgIGhhbmRsZXMgSVB2NCBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGBpcDZfbWNfaW5wdXRgIGhhbmRsZXMgSVB2NiBtdWx0aWNhc3QgaW5wdXQgYW5kIGRlbGl2ZXJ5LiBUaGUgYWRkaXRpb24gb2YgYHNrYl9vcnBoYW5gIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGltbWVkaWF0ZSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIGJlaW5nIGFkZGVkIGF0IHRob3NlIGNhbGwgc2l0ZXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGBuZXQvaXB2NC9pcG1yLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JUF9NUk9VVEVgIGlzIGVuYWJsZWQsIGFuZCBgbmV0L2lwdjYvaXA2X2lucHV0LmNgIHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfSVBfTVJPVVRFYCBpcywgaW4gZmFjdCwgZW5hYmxlZCBvbiB0aGUgc3lzdGVtcyB0aGlzIGlzIGludGVuZGVkIGZvcjsgaXQgaXMgYW4gaW1wb3J0YW50IHByZS1yZXF1aXNpdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSAmIzQzOz0gZmliX3J1bGVzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbm5ldC9pcHY0L01ha2VmaWxlLTI0LW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgUXVpY2sgQXNzZXNzbWVudCBvbiBJUHY0IGFuZCBJUHY2IE11bHRpY2FzdCBSZXF1aXJlbWVudHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtdWx0aWNhc3QgaW5wdXQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgaXBfbXJfaW5wdXRgIGZ1bmN0aW9uIGluIHRoZSBJUHY0IHN0YWNrIGNsZWFybHkgaGluZ2VzIG9uIHRoZSBgQ09ORklHX0lQX01ST1VURWAga2VybmVsIG9wdGlvbi4gTWFrZXMgc2Vuc2U7IHRoYXQgZW5hYmxlcyBtdWx0aWNhc3Qgcm91dGluZyBmb3IgSVB2NCwgc28gdGhlIGlucHV0IGZ1bmN0aW9uIGlzIGluaGVyZW50bHkgdGllZCB0byB0aGF0IGZ1bmN0aW9uYWxpdHkuIElmIHRoYXQmIzM5O3Mgbm90IGVuYWJsZWQsIHRoaXMgY29kZSBwYXRoIGp1c3Qgd29uJiMzOTt0IGJlIGNvbXBpbGVkIGluLgoKTm93LCBmb3IgSVB2NiBtdWx0aWNhc3QuLi4gYWgsIGBpcDZfbWNfaW5wdXRgLiBUaGF0IGxpdmVzIHdpdGhpbiBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLiBBbmQgdGhhdCBjb2RlIGlzIGd1YXJkZWQgYnkgYENPTkZJR19JUFY2YCwgc28gaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIFlvdSBvYnZpb3VzbHkgbmVlZCBJUHY2IGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBiZWZvcmUgZGVhbGluZyB3aXRoIElQdjYgbXVsdGljYXN0IHRyYWZmaWMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gSnVzdCBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcyBpbiBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfaW5wdXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWNikgJiM0Mzs9IGlwdjYub1xubmV0L2lwdjYvTWFrZWZpbGUtNy1cbm5ldC9pcHY2L01ha2VmaWxlOjg6aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtOS1cdFx0YWRkcmxhYmVsLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IE11bHRpY2FzdCBJbnB1dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19JUFY2YCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBgaXA2X21jX2lucHV0YCBmdW5jdGlvbi4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgSVB2NiBzdHVmZiBsaXZlcy4gSG1tLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIGBpcDZfbWNfaW5wdXRgICphbHdheXMqIGNvbXBpbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lQVjZgPyBZdXAsIGNvbmZpcm1lZCwgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGlwNl9pbnB1dC5jYC4gVGhhdCYjMzk7cyBub3QgdW5leHBlY3RlZC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSwgYW5kIEkmIzM5O20gd29uZGVyaW5nIGlmIGBpcF9tcl9pbnB1dGAgYW5kIGBpcDZfbWNfaW5wdXRgIGFyZSBnb29kIGNob2ljZXMuIExldCYjMzk7cyBzZWUuLi4gYGlwX21yX2lucHV0YCBpcyBjYWxsZWQgZm9yIGluYm91bmQgSVB2NCBtdWx0aWNhc3QgcGFja2V0cywgYXNzdW1pbmcgbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBBbmQsIGFzIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCwgYGlwNl9tY19pbnB1dGAgaGFuZGxlcyB0aGUgZXF1aXZhbGVudCBmb3IgSVB2NiBtdWx0aWNhc3QgcGFja2V0cy4KCkp1c3QgYSBxdWljayBtZW50YWwgbm90ZSDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnB1dCBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuIEkgc2hvdWxkIGNoZWNrIGlmIGBpcDZfbWNfaW5wdXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCYjMzk7bGwgaW5mb3JtIGhvdyB3aWRlbHkgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaXA2X21jX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmM9NTUyPUVYUE9SVF9TWU1CT0xfR1BMKGlwNl9pbnB1dCk7XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NTMtXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1NTQ6aW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFdm9sdmluZyBVbmRlcnN0YW5kaW5nKioKCkl0JiMzOTtzIGNsZWFyLCB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nOyB0aGluZ3MgYXJlIGluIGZsdXguIFRoZSBjdXJyZW50IHN0YXRlIGlzIGp1c3QgYSBzbmFwc2hvdCwgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBoYXZlIGEgZHluYW1pYyBlbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpbmdzIHdvcmsgaGVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGlwX21yX2lucHV0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGR5bmFtaWMgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhpcyBjcml0aWNhbCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGlwX21yX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0yMTYyPXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfcnRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTIxODgtICovXG5uZXQvaXB2NC9pcG1yLmM6MjE4OTppbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwbXIuYy0yMTkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJbnB1dCBTeW1ib2xzKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc2l0dWF0aW9uOyB0aGluZ3MgYXJlIGluIGZsdXguIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gVGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgSVBfTVJPVVRFYCBhbmQgYElQVjZgLCByZXNwZWN0aXZlbHkuCgpOb3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBEb2VzIGBpcDZfbWNfaW5wdXRgIG5lY2Vzc2FyaWx5IGRlcGVuZCBvbiBgSVBWNl9NUk9VVEVgPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbi4gQSBxdWljayBjaGVjayBvZiBgaXA2X2lucHV0LmNgIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXIuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTQ6XHRpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gNTU1Olx0e1xuIDU1NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gNTU3Olx0XHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcbiA1NTg6XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XG4gNTU5Olx0XHRib29sIGRlbGl2ZXI7XG4gNTYwOlx0XG4gNTYxOlx0XHRfX0lQNl9VUERfUE9fU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLFxuIDU2MjpcdFx0XHRcdCAgIF9faW42X2Rldl9nZXRfc2FmZWx5KGRldiksIElQU1RBVFNfTUlCX0lOTUNBU1QsXG4gNTYzOlx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbik7XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBza2ItXHUwMDNlZGV2IHBhc3NlZCBtYXkgYmUgbWFzdGVyIGRldiBmb3IgdnJmcy4gKi9cbiA1NjY6XHRcdGlmIChzZGlmKSB7XG4gNTY3Olx0XHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGRldl9uZXRfcmN1KGRldiksIHNkaWYpO1xuIDU2ODpcdFx0XHRpZiAoIWRldikge1xuIDU2OTpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDU3MDpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDU3MTpcdFx0XHR9XG4gNTcyOlx0XHR9XG4gNTczOlx0XG4gNTc0Olx0XHRoZHIgPSBpcHY2X2hkcihza2IpO1xuIDU3NTpcdFx0ZGVsaXZlciA9IGlwdjZfY2hrX21jYXN0X2FkZHIoZGV2LCBcdTAwMjZoZHItXHUwMDNlZGFkZHIsIE5VTEwpO1xuIDU3NjpcdFxuIDU3NzpcdCNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbiA1Nzg6XHRcdC8qXG4gNTc5Olx0XHQgKiAgICAgIElQdjYgbXVsdGljYXN0IHJvdXRlciBtb2RlIGlzIG5vdyBzdXBwb3J0ZWQgOylcbiA1ODA6XHRcdCAqL1xuIDU4MTpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRldl9uZXRfcmN1KHNrYi1cdTAwM2VkZXYpLVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbWNfZm9yd2FyZGluZykgXHUwMDI2XHUwMDI2XG4gNTgyOlx0XHQgICAgIShpcHY2X2FkZHJfdHlwZShcdTAwMjZoZHItXHUwMDNlZGFkZHIpIFx1MDAyNlxuIDU4MzpcdFx0ICAgICAgKElQVjZfQUREUl9MT09QQkFDS3xJUFY2X0FERFJfTElOS0xPQ0FMKSkgXHUwMDI2XHUwMDI2XG4gNTg0Olx0XHQgICAgbGlrZWx5KCEoSVA2Q0Ioc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSVA2U0tCX0ZPUldBUkRFRCkpKSB7XG4gNTg1Olx0XHRcdC8qXG4gNTg2Olx0XHRcdCAqIE9rYXksIHdlIHRyeSB0byBmb3J3YXJkIC0gc3BsaXQgYW5kIGR1cGxpY2F0ZVxuIDU4NzpcdFx0XHQgKiBwYWNrZXRzLlxuIDU4ODpcdFx0XHQgKi9cbiA1ODk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4gNTkwOlx0XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA1OTE6XHRcbiA1OTI6XHRcdFx0LyogQ2hlY2sgZm9yIE1MRCAqL1xuIDU5MzpcdFx0XHRpZiAodW5saWtlbHkob3B0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZTS0JfUk9VVEVSQUxFUlQpKSB7XG4gNTk0Olx0XHRcdFx0LyogQ2hlY2sgaWYgdGhpcyBpcyBhIG1sZCBtZXNzYWdlICovXG4gNTk1Olx0XHRcdFx0dTggbmV4dGhkciA9IGhkci1cdTAwM2VuZXh0aGRyO1xuIDU5NjpcdFx0XHRcdF9fYmUxNiBmcmFnX29mZjtcbiA1OTc6XHRcdFx0XHRpbnQgb2Zmc2V0O1xuIDU5ODpcdFxuIDU5OTpcdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBvZiBSb3V0ZXIgQWxlcnRcbiA2MDA6XHRcdFx0XHQgKiBpcyBmb3IgTUxEICgweDAwMDApLlxuIDYwMTpcdFx0XHRcdCAqL1xuIDYwMjpcdFx0XHRcdGlmIChvcHQtXHUwMDNlcmEgPT0gaHRvbnMoSVBWNl9PUFRfUk9VVEVSQUxFUlRfTUxEKSkge1xuIDYwMzpcdFx0XHRcdFx0ZGVsaXZlciA9IGZhbHNlO1xuIDYwNDpcdFxuIDYwNTpcdFx0XHRcdFx0aWYgKCFpcHY2X2V4dF9oZHIobmV4dGhkcikpIHtcbiA2MDY6XHRcdFx0XHRcdFx0LyogQlVHICovXG4gNjA3Olx0XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDYwODpcdFx0XHRcdFx0fVxuIDYwOTpcdFx0XHRcdFx0b2Zmc2V0ID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIHNpemVvZigqaGRyKSxcbiA2MTA6XHRcdFx0XHRcdFx0XHRcdCAgXHUwMDI2bmV4dGhkciwgXHUwMDI2ZnJhZ19vZmYpO1xuIDYxMTpcdFx0XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbiA2MTI6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4gNjEzOlx0XG4gNjE0Olx0XHRcdFx0XHRpZiAoaXB2Nl9pc19tbGQoc2tiLCBuZXh0aGRyLCBvZmZzZXQpKVxuIDYxNTpcdFx0XHRcdFx0XHRkZWxpdmVyID0gdHJ1ZTtcbiA2MTY6XHRcbiA2MTc6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDYxODpcdFx0XHRcdH1cbiA2MTk6XHRcdFx0XHQvKiB1bmtub3duIFJBIC0gcHJvY2VzcyBpdCBub3JtYWxseSAqL1xuIDYyMDpcdFx0XHR9XG4gNjIxOlx0XG4gNjIyOlx0XHRcdGlmIChkZWxpdmVyKSB7XG4gNjIzOlx0XHRcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIDYyNDpcdFx0XHR9IGVsc2Uge1xuIDYyNTpcdFx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiA2MjY6XHRcdFx0XHRza2IyID0gc2tiO1xuIDYyNzpcdFx0XHRcdHNrYiA9IE5VTEw7XG4gNjI4Olx0XHRcdH1cbiA2Mjk6XHRcbiA2MzA6XHRcdFx0aWYgKHNrYjIpXG4gNjMxOlx0XHRcdFx0aXA2X21yX2lucHV0KHNrYjIpO1xuIDYzMjpcdFx0fVxuIDYzMzpcdG91dDpcbiA2MzQ6XHQjZW5kaWZcbiA2MzU6XHRcdGlmIChsaWtlbHkoZGVsaXZlcikpIHtcbiA2MzY6XHRcdFx0aXA2X2lucHV0KHNrYik7XG4gNjM3Olx0XHR9IGVsc2Uge1xuIDYzODpcdFx0XHQvKiBkaXNjYXJkICovXG4gNjM5Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDY0MDpcdFx0fVxuIDY0MTpcdFxuIDY0MjpcdFx0cmV0dXJuIDA7XG4gNjQzOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVB2NiBNdWx0aWNhc3QgUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBJUHY2IG11bHRpY2FzdCBpbnB1dCBoYW5kbGluZywgYW5kIEkgc2VlIHRoaXMgYHNrYl9vcnBoYW4oc2tiKWAgY2FsbCB3aXRoaW4gdGhlIGBpcDZfbWNfaW5wdXRgIGZ1bmN0aW9uLiBBaGEhIEkgcmVtZW1iZXIgdGhhdCBgc2tiX29ycGhhbmAgaXMgY29uZGl0aW9uYWxpemVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY2x1ZGVkLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfSVBWNl9NUk9VVEVgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LgoKSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY3Jvc3MtcmVmZXJlbmNlLCBsZXQgbWUgcGl2b3Qgb3ZlciBhbmQgdGFrZSBhIGxvb2sgYXQgYGlwX21yX2lucHV0YCBpbiBgbmV0L2lwdjQvaXBtci5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpcyBzaW1pbGFybHkgaGFuZGxlZC4gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBjb21wYXJlIGFuZCBjb250cmFzdCB0aGUgSVB2NCBhbmQgSVB2NiBhcHByb2FjaGVzIGhlcmUsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE4OTpcdGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjE5MDpcdHtcbjIxOTE6XHRcdHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlO1xuMjE5MjpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbjIxOTM6XHRcdGludCBsb2NhbCA9IHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTDtcbjIxOTQ6XHRcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuMjE5NTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjIxOTY6XHRcbjIxOTc6XHRcdC8qIHNrYi1cdTAwM2VkZXYgcGFzc2VkIGluIGlzIHRoZSBsb1ggbWFzdGVyIGRldiBmb3IgdnJmcy5cbjIxOTg6XHRcdCAqIEFzIHRoZXJlIGFyZSBubyB2aWZzIGFzc29jaWF0ZWQgd2l0aCBsb29wYmFjayBkZXZpY2VzLFxuMjE5OTpcdFx0ICogZ2V0IHRoZSBwcm9wZXIgaW50ZXJmYWNlIHRoYXQgZG9lcyBoYXZlIGEgdmlmIGFzc29jaWF0ZWQgd2l0aCBpdC5cbjIyMDA6XHRcdCAqL1xuMjIwMTpcdFx0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbjIyMDI6XHRcdGlmIChuZXRpZl9pc19sM19tYXN0ZXIoc2tiLVx1MDAzZWRldikpIHtcbjIyMDM6XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBJUENCKHNrYiktXHUwMDNlaWlmKTtcbjIyMDQ6XHRcdFx0aWYgKCFkZXYpIHtcbjIyMDU6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjIyMDY6XHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjIyMDc6XHRcdFx0fVxuMjIwODpcdFx0fVxuMjIwOTpcdFxuMjIxMDpcdFx0LyogUGFja2V0IGlzIGxvb3BlZCBiYWNrIGFmdGVyIGZvcndhcmQsIGl0IHNob3VsZCBub3QgYmVcbjIyMTE6XHRcdCAqIGZvcndhcmRlZCBzZWNvbmQgdGltZSwgYnV0IHN0aWxsIGNhbiBiZSBkZWxpdmVyZWQgbG9jYWxseS5cbjIyMTI6XHRcdCAqL1xuMjIxMzpcdFx0aWYgKElQQ0Ioc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSVBTS0JfRk9SV0FSREVEKVxuMjIxNDpcdFx0XHRnb3RvIGRvbnRfZm9yd2FyZDtcbjIyMTU6XHRcbjIyMTY6XHRcdGlmICghbG9jYWwpXG4yMjE3Olx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbjIyMTg6XHRcbjIyMTk6XHRcdG1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7XG4yMjIwOlx0XHRpZiAoSVNfRVJSKG1ydCkpIHtcbjIyMjE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4yMjIyOlx0XHRcdHJldHVybiBQVFJfRVJSKG1ydCk7XG4yMjIzOlx0XHR9XG4yMjI0Olx0XHRpZiAoIWxvY2FsKSB7XG4yMjI1Olx0XHRcdGlmIChJUENCKHNrYiktXHUwMDNlb3B0LnJvdXRlcl9hbGVydCkge1xuMjIyNjpcdFx0XHRcdGlmIChpcF9jYWxsX3JhX2NoYWluKHNrYikpXG4yMjI3Olx0XHRcdFx0XHRyZXR1cm4gMDtcbjIyMjg6XHRcdFx0fSBlbHNlIGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lHTVApIHtcbjIyMjk6XHRcdFx0XHQvKiBJR01QdjEgKGFuZCBicm9rZW4gSUdNUHYyIGltcGxlbWVudGF0aW9ucyBzb3J0IG9mXG4yMjMwOlx0XHRcdFx0ICogQ2lzY28gSU9TIFx1MDAzYz0gMTEuMig4KSkgZG8gbm90IHB1dCByb3V0ZXIgYWxlcnRcbjIyMzE6XHRcdFx0XHQgKiBvcHRpb24gdG8gSUdNUCBwYWNrZXRzIGRlc3RpbmVkIHRvIHJvdXRhYmxlXG4yMjMyOlx0XHRcdFx0ICogZ3JvdXBzLiBJdCBpcyB2ZXJ5IGJhZCwgYmVjYXVzZSBpdCBtZWFuc1xuMjIzMzpcdFx0XHRcdCAqIHRoYXQgd2UgY2FuIGZvcndhcmQgTk8gSUdNUCBtZXNzYWdlcy5cbjIyMzQ6XHRcdFx0XHQgKi9cbjIyMzU6XHRcdFx0XHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xuMjIzNjpcdFxuMjIzNzpcdFx0XHRcdG1yb3V0ZV9zayA9IHJjdV9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKTtcbjIyMzg6XHRcdFx0XHRpZiAobXJvdXRlX3NrKSB7XG4yMjM5Olx0XHRcdFx0XHRuZl9yZXNldF9jdChza2IpO1xuMjI0MDpcdFx0XHRcdFx0cmF3X3Jjdihtcm91dGVfc2ssIHNrYik7XG4yMjQxOlx0XHRcdFx0XHRyZXR1cm4gMDtcbjIyNDI6XHRcdFx0XHR9XG4yMjQzOlx0XHRcdH1cbjIyNDQ6XHRcdH1cbjIyNDU6XHRcbjIyNDY6XHRcdC8qIGFscmVhZHkgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXG4yMjQ3Olx0XHRjYWNoZSA9IGlwbXJfY2FjaGVfZmluZChtcnQsIGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLCBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcik7XG4yMjQ4Olx0XHRpZiAoIWNhY2hlKSB7XG4yMjQ5Olx0XHRcdGludCB2aWYgPSBpcG1yX2ZpbmRfdmlmKG1ydCwgZGV2KTtcbjIyNTA6XHRcbjIyNTE6XHRcdFx0aWYgKHZpZiBcdTAwM2U9IDApXG4yMjUyOlx0XHRcdFx0Y2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmRfYW55KG1ydCwgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4yMjUzOlx0XHRcdFx0XHRcdFx0ICAgIHZpZik7XG4yMjU0Olx0XHR9XG4yMjU1Olx0XG4yMjU2Olx0XHQvKiBObyB1c2FibGUgY2FjaGUgZW50cnkgKi9cbjIyNTc6XHRcdGlmICghY2FjaGUpIHtcbjIyNTg6XHRcdFx0aW50IHZpZjtcbjIyNTk6XHRcbjIyNjA6XHRcdFx0aWYgKGxvY2FsKSB7XG4yMjYxOlx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbjIyNjI6XHRcdFx0XHRpcF9sb2NhbF9kZWxpdmVyKHNrYik7XG4yMjYzOlx0XHRcdFx0aWYgKCFza2IyKVxuMjI2NDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMjI2NTpcdFx0XHRcdHNrYiA9IHNrYjI7XG4yMjY2Olx0XHRcdH1cbjIyNjc6XHRcbjIyNjg6XHRcdFx0dmlmID0gaXBtcl9maW5kX3ZpZihtcnQsIGRldik7XG4yMjY5Olx0XHRcdGlmICh2aWYgXHUwMDNlPSAwKVxuMjI3MDpcdFx0XHRcdHJldHVybiBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTtcbjIyNzE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4yMjcyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMjI3MzpcdFx0fVxuMjI3NDpcdFxuMjI3NTpcdFx0aXBfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlLCBsb2NhbCk7XG4yMjc2Olx0XG4yMjc3Olx0XHRpZiAobG9jYWwpXG4yMjc4Olx0XHRcdHJldHVybiBpcF9sb2NhbF9kZWxpdmVyKHNrYik7XG4yMjc5Olx0XG4yMjgwOlx0XHRyZXR1cm4gMDtcbjIyODE6XHRcbjIyODI6XHRkb250X2ZvcndhcmQ6XG4yMjgzOlx0XHRpZiAobG9jYWwpXG4yMjg0Olx0XHRcdHJldHVybiBpcF9sb2NhbF9kZWxpdmVyKHNrYik7XG4yMjg1Olx0XHRrZnJlZV9za2Ioc2tiKTtcbjIyODY6XHRcdHJldHVybiAwO1xuMjI4NzpcdH1cbjIyODg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqRm9jdXNpbmcgb24gSVAgTXVsdGljYXN0IFJvdXRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBpcyBoYW5kbGVkIGludGVybmFsbHkuIEkgc2VlIHRoYXQgYGlwX21yX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiwgb3IgJiMzNDtmb2N1cyBzeW1ib2wsJiMzNDsgZm9yIElQdjQsIGFuZCBgaXA2X21jX2lucHV0YCBpcyB0aGUgY29ycmVzcG9uZGluZyBvbmUgZm9yIElQdjYuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gSSYjMzk7dmUgZ290IGBJUF9NUk9VVEVgLCBgSVBWNmAsIGFuZCBgSVBWNl9NUk9VVEVgIGZsYWdnZWQgYXMgcG90ZW50aWFsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBKdXN0IHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYElQVjZfTVJPVVRFYCBpcyB0aGUgZXhhY3QgbmFtZSwgaXQgc2VlbXMgbGlrZWx5IGJ1dCB2ZXJpZmljYXRpb24gaXMgZXNzZW50aWFsLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBwcmVjaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9NUk9VVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBNdWx0aWNhc3QgUm91dGluZyBQcm90b2NvbHMqKgoKUmlnaHQsIHRoYXQmIzM5O3MgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCB0aGUgZm91bmRhdGlvbmFsIHN0dWZmIHBpbm5lZCBkb3duLiBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgSVBWNl9NUk9VVEVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb25zLiBObyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwganVzdCBhcyBhIGRvdWJsZSBjaGVjayB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIHZlcmlmeWluZyB0aGF0IGBJUF9NUk9VVEVgIHJlbWFpbnMgdGhlIGFwcHJvcHJpYXRlIHNvY2tldCBvcHRpb24gZm9yIGhhbmRsaW5nIElQdjQgbXVsdGljYXN0IHJvdXRpbmcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IG1lbnRhbCBtYXAgb2YgdGhlc2UgdGhpbmdzIGlzIGNvcnJlY3QuIEFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGJhc2ljcyBzaGFycCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIzMS1cbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQ1CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmtpbmcgU3RhY2sgUGF0Y2gqKgoKT2theSwgc28gdGhlIGBJUF9NUk9VVEVgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUsIHRoYXQgY2hlY2tzIG91dC4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrOyBhbHRlcmluZyBob3cgc29ja2V0IGJ1ZmZlcnMgYXJlIGhhbmRsZWQuICBUaGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBubyBkb3VidCBhYm91dCBpdC4KCkxldCYjMzk7cyBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuIFdlIGNhbiBzYXk6CgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUKKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAsIGVzc2VudGlhbGx5IGRlY291cGxpbmcgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSBpbiBhIGNydWNpYWwgc2VjdGlvbiBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBpcF9tcl9pbnB1dGAsIGFuZCBgaXA2X21jX2lucHV0YCDigJMgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGRpcmVjdGx5LgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgSVBfTVJPVVRFYCwgYElQVjZgLCBgSVBWNl9NUk9VVEVgLgoKTm93LCByZWdhcmRpbmcgdGhvc2UgY29uZmlncy4gIGBJUFY2YCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl04oCZcyBhbHdheXMgYmV0dGVyIHRvIGJlIGV4cGxpY2l0LiAgV2FpdCBhIG1pbnV0ZS4uLiBgSVBWNl9NUk9VVEVgIGRlcGVuZHMgb24gYElQVjZgLCBzbyBgSVBWNmAgaXMsIG9mIGNvdXJzZSwgcmVxdWlyZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdG8gYmUgY29tcGxldGVseSBzdXJlLiBgaXBfbXJfaW5wdXRgIHJlc2lkZXMgaW4gYG5ldC9pcHY0L2lwbXIuY2AsIGFuZCB0aGF0JiMzOTtzIGJ1aWx0IHdpdGggYENPTkZJR19JUF9NUk9VVEVgLiAgYGlwNl9tY19pbnB1dGAgaXMgaW4gYG5ldC9pcHY2L2lwNl9pbnB1dC5jYCwgYW5kIGl0IGlzIGJ1aWx0IHdpdGggYENPTkZJR19JUFY2YC4gUGx1cywgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgd2l0aGluIGBpcDZfbWNfaW5wdXRgIGFyZSBjb250aW5nZW50IG9uIGAjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFYC4KClllcCwgYWxsIGNsZWFyLCB0aGUgY29uZmlncyBhcmU6IGBJUF9NUk9VVEVgLCBgSVBWNmAsIGFuZCBgSVBWNl9NUk9VVEVgLgoKQWxyaWdodCwgdGltZSB0byBleGVjdXRlIHRoZSBzZXQtcmVzdWx0cyBjb21tYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcDZfbWNfaW5wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMgYnkgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIHRvIGRpc2Fzc29jaWF0ZSB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiBiZWZvcmUgZm9yd2FyZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIG11bHRpY2FzdCByb3V0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tY19pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjYWxscyB0byBgc2tiX29ycGhhbihza2IpYCBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocy4gYHNrYl9vcnBoYW5gIGRldGFjaGVzIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIChjbGVhcmluZyBgc2tiLVx1MDAzZXNrYCBhbmQgY2FsbGluZyB0aGUgZGVzdHJ1Y3RvcikuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCByZWZlcmVuY2UgbGVha3MsIG1lbW9yeSBhY2NvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZXJlIGFuIHNrYiBvdXRsaXZlcyBpdHMgYXNzb2NpYXRlZCBzb2NrZXQuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDc5Y2FlNDNhMDdhZDMxNTMzNGZjNmRlYjMyNDY5YmQzYjlmNWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTk6NDQ6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggMWQ5YTRhYzE0ZmNlZi4uZTVmMmIxYzYxNTBkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMjIxMyw2ICYjNDM7MjIxMyw5IEBAIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChJUENCKHNrYiktJmd0O2ZsYWdzICZhbXA7IElQU0tCX0ZPUldBUkRFRCkKIAkJZ290byBkb250X2ZvcndhcmQ7CiAKJiM0MzsJaWYgKCFsb2NhbCkKJiM0MzsJCXNrYl9vcnBoYW4oc2tiKTsKJiM0MzsKIAltcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2IpOwogCWlmIChJU19FUlIobXJ0KSkgewogCQlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmMKaW5kZXggODk3Mjg2M2M5M2VlNS4uZDMzMmVjNjBmOTE1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2lucHV0LmMKQEAgLTYyMiw2ICYjNDM7NjIyLDcgQEAgaW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlpZiAoZGVsaXZlcikgewogCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQl9IGVsc2UgewomIzQzOwkJCXNrYl9vcnBoYW4oc2tiKTsKIAkJCXNrYjIgPSBza2I7CiAJCQlza2IgPSBOVUxMOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc3CgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBgc2tiX29ycGhhbihza2IpYCBjYWxscyBpbiBgaXBfbXJfaW5wdXRgIGZvciBJUHY0IGFuZCBgaXA2X21jX2lucHV0YCBmb3IgSVB2NiBtdWx0aWNhc3QgaW5wdXQuIEkgY2FuIHNlZSB0aGUgY29kZSBub3cuCgpUaGUgcHJpbWFyeSBnb2FsIG9mIGBza2Jfb3JwaGFuYCBpcyB0byBkZXRhY2ggdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBmcm9tIGl0cyBhc3NvY2lhdGVkIHNvY2tldCBieSBzZXR0aW5nIGBza2ItJmd0O3NrYCB0byBOVUxMLiBUaGlzIGFsc28gaW52b2tlcyB0aGUgZGVzdHJ1Y3Rvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFRoZSBmYWN0IHRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgbWVhbnMgdGhlcmUgd2FzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBzb2NrZXQgcmVmZXJlbmNlIGxlYWssIG9yIHBlcmhhcHMgbWVtb3J5IGFjY291bnRpbmcgaXNzdWUuIFRoZSBgc2tiYCBtaWdodCBoYXZlIGJlZW4gcGVyc2lzdGluZyBsb25nZXIgdGhhbiB0aGUgc29ja2V0LCB0aHVzIHRoZSBuZWVkIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRpb24uIE9yLCBpdCBwcmV2ZW50ZWQgcHJvcGVyIGRlc3RydWN0aW9uLgoKR2l2ZW4gdGhpcywgSSBkb24mIzM5O3Qgc2VlIGFueSBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgdHlwZSBvZiBidWcuIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBzaW1pbGFyIGJ1ZyB3aXRoIHRoZSBzb2NrZXQgcmVmZXJlbmNlLiBJIHRoaW5rIEtBU0FOLCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMgc29ydCBvZiBwcm9ibGVtLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybS4gYHNrYl9vcnBoYW4oc2tiKWAgaXMganVzdCBzZXR0aW5nIHRoZSBgc2tiLSZndDtza2AgYW5kIHRoZSBgc2tiLSZndDtkZXN0cnVjdG9yYCBmaWVsZHMuIEFmdGVyIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IsIG9mIGNvdXJzZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBoZXJlLiBNeSBkaWFnbm9zaXMgc2VlbXMgY29ycmVjdC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cdTAwM2Vza2AgYW5kIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IpLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGZpeCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgcmVmZXJlbmNlIGxlYWtzLCBtZW1vcnkgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVyZSBhbiBza2Igb3V0bGl2ZXMgaXRzIGFzc29jaWF0ZWQgc29ja2V0LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cdTAwM2Vza2AgYW5kIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IpLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGZpeCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgcmVmZXJlbmNlIGxlYWtzLCBtZW1vcnkgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVyZSBhbiBza2Igb3V0bGl2ZXMgaXRzIGFzc29jaWF0ZWQgc29ja2V0LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MjUuMDA2MTg3MDMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3ODMzODkwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cXHUwMDNlc2tgIGFuZCBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBmaXggaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IHJlZmVyZW5jZSBsZWFrcywgbWVtb3J5IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlcmUgYW4gc2tiIG91dGxpdmVzIGl0cyBhc3NvY2lhdGVkIHNvY2tldC4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSkgb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMgYnkgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIHRvIGRpc2Fzc29jaWF0ZSB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiBiZWZvcmUgZm9yd2FyZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIG11bHRpY2FzdCByb3V0aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDoyNS4wMDYxOTM5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjI3MDM1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDc5Y2FlNDNhMDdhZDMxNTMzNGZjNmRlYjMyNDY5YmQzYjlmNWNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE5OjQ0OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IDFkOWE0YWMxNGZjZWYuLmU1ZjJiMWM2MTUwZDIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXFxuKysrIGIvbmV0L2lwdjQvaXBtci5jXFxuQEAgLTIyMTMsNiArMjIxMyw5IEBAIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQU0tCX0ZPUldBUkRFRClcXG4gXFx0XFx0Z290byBkb250X2ZvcndhcmQ7XFxuIFxcbitcXHRpZiAoIWxvY2FsKVxcbitcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuK1xcbiBcXHRtcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2IpO1xcbiBcXHRpZiAoSVNfRVJSKG1ydCkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcXG5pbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcXG5AQCAtNjIyLDYgKzYyMiw3IEBAIGludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0aWYgKGRlbGl2ZXIpIHtcXG4gXFx0XFx0XFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuIFxcdFxcdFxcdHNrYjIgPSBza2I7XFxuIFxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MjYuMzI5ODUyNDc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDAxODgxNjkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkNzljYWU0M2EwN2FkMzE1MzM0ZmM2ZGViMzI0NjliZDNiOWY1Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo0NDoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uZTVmMmIxYzYxNTBkMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuKysrIGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMjIxMyw2ICsyMjEzLDkgQEAgaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoSVBDQihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNLQl9GT1JXQVJERUQpXG4gXHRcdGdvdG8gZG9udF9mb3J3YXJkO1xuIFxuK1x0aWYgKCFsb2NhbClcbitcdFx0c2tiX29ycGhhbihza2IpO1xuK1xuIFx0bXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTtcbiBcdGlmIChJU19FUlIobXJ0KSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5pbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmNcbisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5AQCAtNjIyLDYgKzYyMiw3IEBAIGludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKGRlbGl2ZXIpIHtcbiBcdFx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0c2tiX29ycGhhbihza2IpO1xuIFx0XHRcdHNrYjIgPSBza2I7XG4gXHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MjYuMzI5ODUzOTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwOTIwNzA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9pcHY0L2lwbXIuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoYXQgdGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMg4oCTIHNwZWNpZmljYWxseSwgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QuIFRoZSBjaGFuZ2UgaXMgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIGluIGBpcF9tcl9pbnB1dGAgYW5kIGBpcDZfbWNfaW5wdXRgLiBDbGVhcmx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gSSBhbHJlYWR5IGtub3cgdGhhdCBgaXBfbXJfaW5wdXRgIGhhbmRsZXMgSVB2NCBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGBpcDZfbWNfaW5wdXRgIGhhbmRsZXMgSVB2NiBtdWx0aWNhc3QgaW5wdXQgYW5kIGRlbGl2ZXJ5LiBUaGUgYWRkaXRpb24gb2YgYHNrYl9vcnBoYW5gIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGltbWVkaWF0ZSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIGJlaW5nIGFkZGVkIGF0IHRob3NlIGNhbGwgc2l0ZXMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYG5ldC9pcHY0L2lwbXIuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQX01ST1VURWAgaXMgZW5hYmxlZCwgYW5kIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2Agd2hlbiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0lQX01ST1VURWAgaXMsIGluIGZhY3QsIGVuYWJsZWQgb24gdGhlIHN5c3RlbXMgdGhpcyBpcyBpbnRlbmRlZCBmb3I7IGl0IGlzIGFuIGltcG9ydGFudCBwcmUtcmVxdWlzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MzEuNjM5MDYzOTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MjI0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBtclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSArPSBmaWJfcnVsZXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19JUF9NUk9VVEUpICs9IGlwbXIub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI0LW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDozMS42ODU3OTEwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODE1ODQzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk15IFF1aWNrIEFzc2Vzc21lbnQgb24gSVB2NCBhbmQgSVB2NiBNdWx0aWNhc3QgUmVxdWlyZW1lbnRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG11bHRpY2FzdCBpbnB1dCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiB0aGUgYGlwX21yX2lucHV0YCBmdW5jdGlvbiBpbiB0aGUgSVB2NCBzdGFjayBjbGVhcmx5IGhpbmdlcyBvbiB0aGUgYENPTkZJR19JUF9NUk9VVEVgIGtlcm5lbCBvcHRpb24uIE1ha2VzIHNlbnNlOyB0aGF0IGVuYWJsZXMgbXVsdGljYXN0IHJvdXRpbmcgZm9yIElQdjQsIHNvIHRoZSBpbnB1dCBmdW5jdGlvbiBpcyBpbmhlcmVudGx5IHRpZWQgdG8gdGhhdCBmdW5jdGlvbmFsaXR5LiBJZiB0aGF0J3Mgbm90IGVuYWJsZWQsIHRoaXMgY29kZSBwYXRoIGp1c3Qgd29uJ3QgYmUgY29tcGlsZWQgaW4uXG5cbk5vdywgZm9yIElQdjYgbXVsdGljYXN0Li4uIGFoLCBgaXA2X21jX2lucHV0YC4gVGhhdCBsaXZlcyB3aXRoaW4gYG5ldC9pcHY2L2lwNl9pbnB1dC5jYC4gQW5kIHRoYXQgY29kZSBpcyBndWFyZGVkIGJ5IGBDT05GSUdfSVBWNmAsIHNvIGl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIFlvdSBvYnZpb3VzbHkgbmVlZCBJUHY2IGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBiZWZvcmUgZGVhbGluZyB3aXRoIElQdjYgbXVsdGljYXN0IHRyYWZmaWMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gSnVzdCBtYWtpbmcgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzIGluIG15IGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MzUuMjY3Mzc4MTQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODM5MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9pbnB1dFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSArPSBpcHY2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxcbm5ldC9pcHY2L01ha2VmaWxlOjg6aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDozNS4zMTQyMjQ2MzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQ1OTU5MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IE11bHRpY2FzdCBJbnB1dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfSVBWNmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGUgYGlwNl9tY19pbnB1dGAgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLCB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgSVB2NiBzdHVmZiBsaXZlcy4gSG1tLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIGBpcDZfbWNfaW5wdXRgICphbHdheXMqIGNvbXBpbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lQVjZgPyBZdXAsIGNvbmZpcm1lZCwgaXQncyByaWdodCB0aGVyZSBpbiBgaXA2X2lucHV0LmNgLiBUaGF0J3Mgbm90IHVuZXhwZWN0ZWQuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGdvb2Qgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLCBhbmQgSSdtIHdvbmRlcmluZyBpZiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YCBhcmUgZ29vZCBjaG9pY2VzLiBMZXQncyBzZWUuLi4gYGlwX21yX2lucHV0YCBpcyBjYWxsZWQgZm9yIGluYm91bmQgSVB2NCBtdWx0aWNhc3QgcGFja2V0cywgYXNzdW1pbmcgbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBBbmQsIGFzIHdlJ3ZlIGVzdGFibGlzaGVkLCBgaXA2X21jX2lucHV0YCBoYW5kbGVzIHRoZSBlcXVpdmFsZW50IGZvciBJUHY2IG11bHRpY2FzdCBwYWNrZXRzLlxuXG5KdXN0IGEgcXVpY2sgbWVudGFsIG5vdGUg4oCTIGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnB1dCBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuIEkgc2hvdWxkIGNoZWNrIGlmIGBpcDZfbWNfaW5wdXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCdsbCBpbmZvcm0gaG93IHdpZGVseSBpdCdzIGFjY2Vzc2libGUgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NDAuMjYwMTg1NDI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjUxMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpcDZfbWNfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmM9NTUyPUVYUE9SVF9TWU1CT0xfR1BMKGlwNl9pbnB1dCk7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTUzLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjU1NDppbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTU1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NDAuMzI4NDQ0MDE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NDY0MDQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipFdm9sdmluZyBVbmRlcnN0YW5kaW5nKipcblxuSXQncyBjbGVhciwgdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgY2FuJ3QganVzdCBhc3N1bWUgYW55dGhpbmc7IHRoaW5ncyBhcmUgaW4gZmx1eC4gVGhlIGN1cnJlbnQgc3RhdGUgaXMganVzdCBhIHNuYXBzaG90LCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGhhdmUgYSBkeW5hbWljIGVsZW1lbnQgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLlxuXG5BbHJpZ2h0LCBsZXQncyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpbmdzIHdvcmsgaGVyZSwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaXBfbXJfaW5wdXRgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGZvciB0aGlzIHBhcnRpY3VsYXIgZHluYW1pYyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoaXMgY3JpdGljYWwgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo0My4zMDMwODc1MzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzE4MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpcF9tcl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcG1yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTIxNjI9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMTg4LSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMTg5OmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwbXIuYy0yMTkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NDMuMzU0NDE0MzA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjA2NTk2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElucHV0IFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgZml4ZWQgc2l0dWF0aW9uOyB0aGluZ3MgYXJlIGluIGZsdXguIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gVGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgSVBfTVJPVVRFYCBhbmQgYElQVjZgLCByZXNwZWN0aXZlbHkuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gYXJpc2VzIGluIG15IG1pbmQ6IERvZXMgYGlwNl9tY19pbnB1dGAgbmVjZXNzYXJpbHkgZGVwZW5kIG9uIGBJUFY2X01ST1VURWA/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uLiBBIHF1aWNrIGNoZWNrIG9mIGBpcDZfaW5wdXQuY2Agc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlci4gVGhhdCdzIHdoZXJlIEknbGwgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo0Ny4yMTUwNzYzNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTU0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1NDpcXHRpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuIDU1NTpcXHR7XFxuIDU1NjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIDU1NzpcXHRcXHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcXG4gNTU4OlxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxuIDU1OTpcXHRcXHRib29sIGRlbGl2ZXI7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdF9fSVA2X1VQRF9QT19TVEFUUyhza2JfZHN0X2Rldl9uZXRfcmN1KHNrYiksXFxuIDU2MjpcXHRcXHRcXHRcXHQgICBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpLCBJUFNUQVRTX01JQl9JTk1DQVNULFxcbiA1NjM6XFx0XFx0XFx0XFx0ICAgc2tiLVxcdTAwM2VsZW4pO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBza2ItXFx1MDAzZWRldiBwYXNzZWQgbWF5IGJlIG1hc3RlciBkZXYgZm9yIHZyZnMuICovXFxuIDU2NjpcXHRcXHRpZiAoc2RpZikge1xcbiA1Njc6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZGV2X25ldF9yY3UoZGV2KSwgc2RpZik7XFxuIDU2ODpcXHRcXHRcXHRpZiAoIWRldikge1xcbiA1Njk6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTcxOlxcdFxcdFxcdH1cXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG4gNTc1OlxcdFxcdGRlbGl2ZXIgPSBpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIsIE5VTEwpO1xcbiA1NzY6XFx0XFxuIDU3NzpcXHQjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxuIDU3ODpcXHRcXHQvKlxcbiA1Nzk6XFx0XFx0ICogICAgICBJUHY2IG11bHRpY2FzdCByb3V0ZXIgbW9kZSBpcyBub3cgc3VwcG9ydGVkIDspXFxuIDU4MDpcXHRcXHQgKi9cXG4gNTgxOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2ZGV2X25ldF9yY3Uoc2tiLVxcdTAwM2VkZXYpLVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VtY19mb3J3YXJkaW5nKSBcXHUwMDI2XFx1MDAyNlxcbiA1ODI6XFx0XFx0ICAgICEoaXB2Nl9hZGRyX3R5cGUoXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIpIFxcdTAwMjZcXG4gNTgzOlxcdFxcdCAgICAgIChJUFY2X0FERFJfTE9PUEJBQ0t8SVBWNl9BRERSX0xJTktMT0NBTCkpIFxcdTAwMjZcXHUwMDI2XFxuIDU4NDpcXHRcXHQgICAgbGlrZWx5KCEoSVA2Q0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZTS0JfRk9SV0FSREVEKSkpIHtcXG4gNTg1OlxcdFxcdFxcdC8qXFxuIDU4NjpcXHRcXHRcXHQgKiBPa2F5LCB3ZSB0cnkgdG8gZm9yd2FyZCAtIHNwbGl0IGFuZCBkdXBsaWNhdGVcXG4gNTg3OlxcdFxcdFxcdCAqIHBhY2tldHMuXFxuIDU4ODpcXHRcXHRcXHQgKi9cXG4gNTg5OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbiA1OTA6XFx0XFx0XFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRcXHQvKiBDaGVjayBmb3IgTUxEICovXFxuIDU5MzpcXHRcXHRcXHRpZiAodW5saWtlbHkob3B0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlNLQl9ST1VURVJBTEVSVCkpIHtcXG4gNTk0OlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIHRoaXMgaXMgYSBtbGQgbWVzc2FnZSAqL1xcbiA1OTU6XFx0XFx0XFx0XFx0dTggbmV4dGhkciA9IGhkci1cXHUwMDNlbmV4dGhkcjtcXG4gNTk2OlxcdFxcdFxcdFxcdF9fYmUxNiBmcmFnX29mZjtcXG4gNTk3OlxcdFxcdFxcdFxcdGludCBvZmZzZXQ7XFxuIDU5ODpcXHRcXG4gNTk5OlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBvZiBSb3V0ZXIgQWxlcnRcXG4gNjAwOlxcdFxcdFxcdFxcdCAqIGlzIGZvciBNTEQgKDB4MDAwMCkuXFxuIDYwMTpcXHRcXHRcXHRcXHQgKi9cXG4gNjAyOlxcdFxcdFxcdFxcdGlmIChvcHQtXFx1MDAzZXJhID09IGh0b25zKElQVjZfT1BUX1JPVVRFUkFMRVJUX01MRCkpIHtcXG4gNjAzOlxcdFxcdFxcdFxcdFxcdGRlbGl2ZXIgPSBmYWxzZTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0XFx0XFx0XFx0aWYgKCFpcHY2X2V4dF9oZHIobmV4dGhkcikpIHtcXG4gNjA2OlxcdFxcdFxcdFxcdFxcdFxcdC8qIEJVRyAqL1xcbiA2MDc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYwODpcXHRcXHRcXHRcXHRcXHR9XFxuIDYwOTpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgc2l6ZW9mKCpoZHIpLFxcbiA2MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV4dGhkciwgXFx1MDAyNmZyYWdfb2ZmKTtcXG4gNjExOlxcdFxcdFxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYxMzpcXHRcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdGlmIChpcHY2X2lzX21sZChza2IsIG5leHRoZHIsIG9mZnNldCkpXFxuIDYxNTpcXHRcXHRcXHRcXHRcXHRcXHRkZWxpdmVyID0gdHJ1ZTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYxODpcXHRcXHRcXHRcXHR9XFxuIDYxOTpcXHRcXHRcXHRcXHQvKiB1bmtub3duIFJBIC0gcHJvY2VzcyBpdCBub3JtYWxseSAqL1xcbiA2MjA6XFx0XFx0XFx0fVxcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRcXHRpZiAoZGVsaXZlcikge1xcbiA2MjM6XFx0XFx0XFx0XFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbiA2MjQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNjI1OlxcdFxcdFxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4gNjI2OlxcdFxcdFxcdFxcdHNrYjIgPSBza2I7XFxuIDYyNzpcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbiA2Mjg6XFx0XFx0XFx0fVxcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRcXHRpZiAoc2tiMilcXG4gNjMxOlxcdFxcdFxcdFxcdGlwNl9tcl9pbnB1dChza2IyKTtcXG4gNjMyOlxcdFxcdH1cXG4gNjMzOlxcdG91dDpcXG4gNjM0OlxcdCNlbmRpZlxcbiA2MzU6XFx0XFx0aWYgKGxpa2VseShkZWxpdmVyKSkge1xcbiA2MzY6XFx0XFx0XFx0aXA2X2lucHV0KHNrYik7XFxuIDYzNzpcXHRcXHR9IGVsc2Uge1xcbiA2Mzg6XFx0XFx0XFx0LyogZGlzY2FyZCAqL1xcbiA2Mzk6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHJldHVybiAwO1xcbiA2NDM6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo0Ny4yMTUxNjg2NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMTA5OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUHY2IE11bHRpY2FzdCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBJUHY2IG11bHRpY2FzdCBpbnB1dCBoYW5kbGluZywgYW5kIEkgc2VlIHRoaXMgYHNrYl9vcnBoYW4oc2tiKWAgY2FsbCB3aXRoaW4gdGhlIGBpcDZfbWNfaW5wdXRgIGZ1bmN0aW9uLiBBaGEhIEkgcmVtZW1iZXIgdGhhdCBgc2tiX29ycGhhbmAgaXMgY29uZGl0aW9uYWxpemVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY2x1ZGVkLCB3ZSdyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYENPTkZJR19JUFY2X01ST1VURWAgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoYXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY3Jvc3MtcmVmZXJlbmNlLCBsZXQgbWUgcGl2b3Qgb3ZlciBhbmQgdGFrZSBhIGxvb2sgYXQgYGlwX21yX2lucHV0YCBpbiBgbmV0L2lwdjQvaXBtci5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpcyBzaW1pbGFybHkgaGFuZGxlZC4gSXQncyBnb29kIHByYWN0aWNlIHRvIGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBJUHY0IGFuZCBJUHY2IGFwcHJvYWNoZXMgaGVyZSwganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGluIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo1MS4zMTYyNzA4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4OTpcXHRpbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yMTkwOlxcdHtcXG4yMTkxOlxcdFxcdHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlO1xcbjIxOTI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMjE5MzpcXHRcXHRpbnQgbG9jYWwgPSBza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTDtcXG4yMTk0OlxcdFxcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xcbjIxOTU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yMTk2OlxcdFxcbjIxOTc6XFx0XFx0Lyogc2tiLVxcdTAwM2VkZXYgcGFzc2VkIGluIGlzIHRoZSBsb1ggbWFzdGVyIGRldiBmb3IgdnJmcy5cXG4yMTk4OlxcdFxcdCAqIEFzIHRoZXJlIGFyZSBubyB2aWZzIGFzc29jaWF0ZWQgd2l0aCBsb29wYmFjayBkZXZpY2VzLFxcbjIxOTk6XFx0XFx0ICogZ2V0IHRoZSBwcm9wZXIgaW50ZXJmYWNlIHRoYXQgZG9lcyBoYXZlIGEgdmlmIGFzc29jaWF0ZWQgd2l0aCBpdC5cXG4yMjAwOlxcdFxcdCAqL1xcbjIyMDE6XFx0XFx0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuMjIwMjpcXHRcXHRpZiAobmV0aWZfaXNfbDNfbWFzdGVyKHNrYi1cXHUwMDNlZGV2KSkge1xcbjIyMDM6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBJUENCKHNrYiktXFx1MDAzZWlpZik7XFxuMjIwNDpcXHRcXHRcXHRpZiAoIWRldikge1xcbjIyMDU6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjIwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yMjA3OlxcdFxcdFxcdH1cXG4yMjA4OlxcdFxcdH1cXG4yMjA5OlxcdFxcbjIyMTA6XFx0XFx0LyogUGFja2V0IGlzIGxvb3BlZCBiYWNrIGFmdGVyIGZvcndhcmQsIGl0IHNob3VsZCBub3QgYmVcXG4yMjExOlxcdFxcdCAqIGZvcndhcmRlZCBzZWNvbmQgdGltZSwgYnV0IHN0aWxsIGNhbiBiZSBkZWxpdmVyZWQgbG9jYWxseS5cXG4yMjEyOlxcdFxcdCAqL1xcbjIyMTM6XFx0XFx0aWYgKElQQ0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUFNLQl9GT1JXQVJERUQpXFxuMjIxNDpcXHRcXHRcXHRnb3RvIGRvbnRfZm9yd2FyZDtcXG4yMjE1OlxcdFxcbjIyMTY6XFx0XFx0aWYgKCFsb2NhbClcXG4yMjE3OlxcdFxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4yMjE4OlxcdFxcbjIyMTk6XFx0XFx0bXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTtcXG4yMjIwOlxcdFxcdGlmIChJU19FUlIobXJ0KSkge1xcbjIyMjE6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjIyMjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtcnQpO1xcbjIyMjM6XFx0XFx0fVxcbjIyMjQ6XFx0XFx0aWYgKCFsb2NhbCkge1xcbjIyMjU6XFx0XFx0XFx0aWYgKElQQ0Ioc2tiKS1cXHUwMDNlb3B0LnJvdXRlcl9hbGVydCkge1xcbjIyMjY6XFx0XFx0XFx0XFx0aWYgKGlwX2NhbGxfcmFfY2hhaW4oc2tiKSlcXG4yMjI3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIyMjg6XFx0XFx0XFx0fSBlbHNlIGlmIChpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JR01QKSB7XFxuMjIyOTpcXHRcXHRcXHRcXHQvKiBJR01QdjEgKGFuZCBicm9rZW4gSUdNUHYyIGltcGxlbWVudGF0aW9ucyBzb3J0IG9mXFxuMjIzMDpcXHRcXHRcXHRcXHQgKiBDaXNjbyBJT1MgXFx1MDAzYz0gMTEuMig4KSkgZG8gbm90IHB1dCByb3V0ZXIgYWxlcnRcXG4yMjMxOlxcdFxcdFxcdFxcdCAqIG9wdGlvbiB0byBJR01QIHBhY2tldHMgZGVzdGluZWQgdG8gcm91dGFibGVcXG4yMjMyOlxcdFxcdFxcdFxcdCAqIGdyb3Vwcy4gSXQgaXMgdmVyeSBiYWQsIGJlY2F1c2UgaXQgbWVhbnNcXG4yMjMzOlxcdFxcdFxcdFxcdCAqIHRoYXQgd2UgY2FuIGZvcndhcmQgTk8gSUdNUCBtZXNzYWdlcy5cXG4yMjM0OlxcdFxcdFxcdFxcdCAqL1xcbjIyMzU6XFx0XFx0XFx0XFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcXG4yMjM2OlxcdFxcbjIyMzc6XFx0XFx0XFx0XFx0bXJvdXRlX3NrID0gcmN1X2RlcmVmZXJlbmNlKG1ydC1cXHUwMDNlbXJvdXRlX3NrKTtcXG4yMjM4OlxcdFxcdFxcdFxcdGlmIChtcm91dGVfc2spIHtcXG4yMjM5OlxcdFxcdFxcdFxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuMjI0MDpcXHRcXHRcXHRcXHRcXHRyYXdfcmN2KG1yb3V0ZV9zaywgc2tiKTtcXG4yMjQxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIyNDI6XFx0XFx0XFx0XFx0fVxcbjIyNDM6XFx0XFx0XFx0fVxcbjIyNDQ6XFx0XFx0fVxcbjIyNDU6XFx0XFxuMjI0NjpcXHRcXHQvKiBhbHJlYWR5IHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqL1xcbjIyNDc6XFx0XFx0Y2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobXJ0LCBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcik7XFxuMjI0ODpcXHRcXHRpZiAoIWNhY2hlKSB7XFxuMjI0OTpcXHRcXHRcXHRpbnQgdmlmID0gaXBtcl9maW5kX3ZpZihtcnQsIGRldik7XFxuMjI1MDpcXHRcXG4yMjUxOlxcdFxcdFxcdGlmICh2aWYgXFx1MDAzZT0gMClcXG4yMjUyOlxcdFxcdFxcdFxcdGNhY2hlID0gaXBtcl9jYWNoZV9maW5kX2FueShtcnQsIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4yMjUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2aWYpO1xcbjIyNTQ6XFx0XFx0fVxcbjIyNTU6XFx0XFxuMjI1NjpcXHRcXHQvKiBObyB1c2FibGUgY2FjaGUgZW50cnkgKi9cXG4yMjU3OlxcdFxcdGlmICghY2FjaGUpIHtcXG4yMjU4OlxcdFxcdFxcdGludCB2aWY7XFxuMjI1OTpcXHRcXG4yMjYwOlxcdFxcdFxcdGlmIChsb2NhbCkge1xcbjIyNjE6XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4yMjYyOlxcdFxcdFxcdFxcdGlwX2xvY2FsX2RlbGl2ZXIoc2tiKTtcXG4yMjYzOlxcdFxcdFxcdFxcdGlmICghc2tiMilcXG4yMjY0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4yMjY1OlxcdFxcdFxcdFxcdHNrYiA9IHNrYjI7XFxuMjI2NjpcXHRcXHRcXHR9XFxuMjI2NzpcXHRcXG4yMjY4OlxcdFxcdFxcdHZpZiA9IGlwbXJfZmluZF92aWYobXJ0LCBkZXYpO1xcbjIyNjk6XFx0XFx0XFx0aWYgKHZpZiBcXHUwMDNlPSAwKVxcbjIyNzA6XFx0XFx0XFx0XFx0cmV0dXJuIGlwbXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xcbjIyNzE6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjI3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yMjczOlxcdFxcdH1cXG4yMjc0OlxcdFxcbjIyNzU6XFx0XFx0aXBfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlLCBsb2NhbCk7XFxuMjI3NjpcXHRcXG4yMjc3OlxcdFxcdGlmIChsb2NhbClcXG4yMjc4OlxcdFxcdFxcdHJldHVybiBpcF9sb2NhbF9kZWxpdmVyKHNrYik7XFxuMjI3OTpcXHRcXG4yMjgwOlxcdFxcdHJldHVybiAwO1xcbjIyODE6XFx0XFxuMjI4MjpcXHRkb250X2ZvcndhcmQ6XFxuMjI4MzpcXHRcXHRpZiAobG9jYWwpXFxuMjI4NDpcXHRcXHRcXHRyZXR1cm4gaXBfbG9jYWxfZGVsaXZlcihza2IpO1xcbjIyODU6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjI4NjpcXHRcXHRyZXR1cm4gMDtcXG4yMjg3OlxcdH1cXG4yMjg4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo1MS4zMTY0NTM3MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNDAyMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipGb2N1c2luZyBvbiBJUCBNdWx0aWNhc3QgUm91dGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBpcyBoYW5kbGVkIGludGVybmFsbHkuIEkgc2VlIHRoYXQgYGlwX21yX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiwgb3IgXCJmb2N1cyBzeW1ib2wsXCIgZm9yIElQdjQsIGFuZCBgaXA2X21jX2lucHV0YCBpcyB0aGUgY29ycmVzcG9uZGluZyBvbmUgZm9yIElQdjYuIFRoYXQncyBnb29kLCB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZnVuY3Rpb25hbGl0aWVzLiBJJ3ZlIGdvdCBgSVBfTVJPVVRFYCwgYElQVjZgLCBhbmQgYElQVjZfTVJPVVRFYCBmbGFnZ2VkIGFzIHBvdGVudGlhbCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSnVzdCB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGBJUFY2X01ST1VURWAgaXMgdGhlIGV4YWN0IG5hbWUsIGl0IHNlZW1zIGxpa2VseSBidXQgdmVyaWZpY2F0aW9uIGlzIGVzc2VudGlhbCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBwcmVjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo1NS4wNTA0Nzk1ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X01ST1VURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE5OjQ0OjU1LjA5NjAwOTA3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3NjI4ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIE11bHRpY2FzdCBSb3V0aW5nIFByb3RvY29scyoqXG5cblJpZ2h0LCB0aGF0J3MgaXQuIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIGZvdW5kYXRpb25hbCBzdHVmZiBwaW5uZWQgZG93bi4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgSVBWNl9NUk9VVEVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb25zLiBObyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwganVzdCBhcyBhIGRvdWJsZSBjaGVjayB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJ20gdmVyaWZ5aW5nIHRoYXQgYElQX01ST1VURWAgcmVtYWlucyB0aGUgYXBwcm9wcmlhdGUgc29ja2V0IG9wdGlvbiBmb3IgaGFuZGxpbmcgSVB2NCBtdWx0aWNhc3Qgcm91dGluZy4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1hcCBvZiB0aGVzZSB0aGluZ3MgaXMgY29ycmVjdC4gQWx3YXlzIGdvb2QgdG8gaGF2ZSB0aGUgYmFzaWNzIHNoYXJwIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTUxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NTguNzYzNjQwNzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg0ODAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjE1LVxcbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NTguODExNDkyNjIyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Mjc3NjQ1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKipcblxuT2theSwgc28gdGhlIGBJUF9NUk9VVEVgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUsIHRoYXQgY2hlY2tzIG91dC4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2s7IGFsdGVyaW5nIGhvdyBzb2NrZXQgYnVmZmVycyBhcmUgaGFuZGxlZC4gIFRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIG5vIGRvdWJ0IGFib3V0IGl0LlxuXG5MZXQncyBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuIFdlIGNhbiBzYXk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZVxuKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAsIGVzc2VudGlhbGx5IGRlY291cGxpbmcgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSBpbiBhIGNydWNpYWwgc2VjdGlvbiBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgaXBfbXJfaW5wdXRgLCBhbmQgYGlwNl9tY19pbnB1dGAg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIHRhcmdldCBkaXJlY3RseS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBJUF9NUk9VVEVgLCBgSVBWNmAsIGBJUFY2X01ST1VURWAuXG5cbk5vdywgcmVnYXJkaW5nIHRob3NlIGNvbmZpZ3MuICBgSVBWNmAgaXMgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byBiZSBleHBsaWNpdC4gIFdhaXQgYSBtaW51dGUuLi4gYElQVjZfTVJPVVRFYCBkZXBlbmRzIG9uIGBJUFY2YCwgc28gYElQVjZgIGlzLCBvZiBjb3Vyc2UsIHJlcXVpcmVkLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdG8gYmUgY29tcGxldGVseSBzdXJlLiBgaXBfbXJfaW5wdXRgIHJlc2lkZXMgaW4gYG5ldC9pcHY0L2lwbXIuY2AsIGFuZCB0aGF0J3MgYnVpbHQgd2l0aCBgQ09ORklHX0lQX01ST1VURWAuICBgaXA2X21jX2lucHV0YCBpcyBpbiBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLCBhbmQgaXQgaXMgYnVpbHQgd2l0aCBgQ09ORklHX0lQVjZgLiBQbHVzLCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGlwNl9tY19pbnB1dGAgYXJlIGNvbnRpbmdlbnQgb24gYCNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVgLlxuXG5ZZXAsIGFsbCBjbGVhciwgdGhlIGNvbmZpZ3MgYXJlOiBgSVBfTVJPVVRFYCwgYElQVjZgLCBhbmQgYElQVjZfTVJPVVRFYC5cblxuQWxyaWdodCwgdGltZSB0byBleGVjdXRlIHRoZSBzZXQtcmVzdWx0cyBjb21tYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQ1LCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NTowNi40MzkyNTk2NjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODc1ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE5OjQ1OjA2LjUxODAyNTMwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNzE1NDA2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NTowNi41MTg3OTI2NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTkyNzA3Njk1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cXHUwMDNlc2tgIGFuZCBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBmaXggaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IHJlZmVyZW5jZSBsZWFrcywgbWVtb3J5IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlcmUgYW4gc2tiIG91dGxpdmVzIGl0cyBhc3NvY2lhdGVkIHNvY2tldC4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSkgb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2Q3OWNhZTQzYTA3YWQzMTUzMzRmYzZkZWIzMjQ2OWJkM2I5ZjVjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE5OjQ0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCAxZDlhNGFjMTRmY2VmLi5lNWYyYjFjNjE1MGQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0yMjEzLDYgKzIyMTMsOSBAQCBpbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChJUENCKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQU0tCX0ZPUldBUkRFRClcbiBcdFx0Z290byBkb250X2ZvcndhcmQ7XG4gXG4rXHRpZiAoIWxvY2FsKVxuK1x0XHRza2Jfb3JwaGFuKHNrYik7XG4rXG4gXHRtcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2IpO1xuIFx0aWYgKElTX0VSUihtcnQpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcbmluZGV4IDg5NzI4NjNjOTNlZTUuLmQzMzJlYzYwZjkxNTAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcbkBAIC02MjIsNiArNjIyLDcgQEAgaW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAoZGVsaXZlcikge1xuIFx0XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4gXHRcdFx0c2tiMiA9IHNrYjtcbiBcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NTowNi41MTg3OTM5MjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkyNzA3NDUzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIGNhbGxzIGluIGBpcF9tcl9pbnB1dGAgZm9yIElQdjQgYW5kIGBpcDZfbWNfaW5wdXRgIGZvciBJUHY2IG11bHRpY2FzdCBpbnB1dC4gSSBjYW4gc2VlIHRoZSBjb2RlIG5vdy5cblxuVGhlIHByaW1hcnkgZ29hbCBvZiBgc2tiX29ycGhhbmAgaXMgdG8gZGV0YWNoIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgZnJvbSBpdHMgYXNzb2NpYXRlZCBzb2NrZXQgYnkgc2V0dGluZyBgc2tiLVx1MDAzZXNrYCB0byBOVUxMLiBUaGlzIGFsc28gaW52b2tlcyB0aGUgZGVzdHJ1Y3Rvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFRoZSBmYWN0IHRoZXkncmUgZG9pbmcgdGhpcyBtZWFucyB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHNvY2tldCByZWZlcmVuY2UgbGVhaywgb3IgcGVyaGFwcyBtZW1vcnkgYWNjb3VudGluZyBpc3N1ZS4gVGhlIGBza2JgIG1pZ2h0IGhhdmUgYmVlbiBwZXJzaXN0aW5nIGxvbmdlciB0aGFuIHRoZSBzb2NrZXQsIHRodXMgdGhlIG5lZWQgdG8gcmVtb3ZlIHRoZSBhc3NvY2lhdGlvbi4gT3IsIGl0IHByZXZlbnRlZCBwcm9wZXIgZGVzdHJ1Y3Rpb24uXG5cbkdpdmVuIHRoaXMsIEkgZG9uJ3Qgc2VlIGFueSBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgdHlwZSBvZiBidWcuIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBzaW1pbGFyIGJ1ZyB3aXRoIHRoZSBzb2NrZXQgcmVmZXJlbmNlLiBJIHRoaW5rIEtBU0FOLCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMgc29ydCBvZiBwcm9ibGVtLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0uIGBza2Jfb3JwaGFuKHNrYilgIGlzIGp1c3Qgc2V0dGluZyB0aGUgYHNrYi1cdTAwM2Vza2AgYW5kIHRoZSBgc2tiLVx1MDAzZWRlc3RydWN0b3JgIGZpZWxkcy4gQWZ0ZXIgY2FsbGluZyB0aGUgZGVzdHJ1Y3Rvciwgb2YgY291cnNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGhlcmUuIE15IGRpYWdub3NpcyBzZWVtcyBjb3JyZWN0LlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzcsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDU6MjUuNzg5NTQyNjY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBza2Jfb3JwaGFuKHNrYilgIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGlucHV0IHBhdGhzLiBgc2tiX29ycGhhbmAgZGV0YWNoZXMgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgKGNsZWFyaW5nIGBza2ItXFx1MDAzZXNrYCBhbmQgY2FsbGluZyB0aGUgZGVzdHJ1Y3RvcikuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCByZWZlcmVuY2UgbGVha3MsIG1lbW9yeSBhY2NvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZXJlIGFuIHNrYiBvdXRsaXZlcyBpdHMgYXNzb2NpYXRlZCBzb2NrZXQuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cXHUwMDNlc2tgIGFuZCBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBmaXggaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IHJlZmVyZW5jZSBsZWFrcywgbWVtb3J5IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlcmUgYW4gc2tiIG91dGxpdmVzIGl0cyBhc3NvY2lhdGVkIHNvY2tldC4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSkgb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowh69z9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 18:43:25 +0000 UTC FinishedAt: 2026-08-12 19:45:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6", "IPV6_MROUTE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7b53449540502cb21b32bca62a6258e22cd97bbe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6", "IPV6_MROUTE" ], "series_id": "931efb3d-ea01-4d80-a431-13b9fac1dabd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "ip_mr_input", "ip6_mc_input" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXA2X21jX2lucHV0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjYWxscyB0byBgc2tiX29ycGhhbihza2IpYCBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocy4gYHNrYl9vcnBoYW5gIGRldGFjaGVzIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIChjbGVhcmluZyBgc2tiLVx1MDAzZXNrYCBhbmQgY2FsbGluZyB0aGUgZGVzdHJ1Y3RvcikuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCByZWZlcmVuY2UgbGVha3MsIG1lbW9yeSBhY2NvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZXJlIGFuIHNrYiBvdXRsaXZlcyBpdHMgYXNzb2NpYXRlZCBzb2NrZXQuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZDc5Y2FlNDNhMDdhZDMxNTMzNGZjNmRlYjMyNDY5YmQzYjlmNWNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTk6NDQ6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCAxZDlhNGFjMTRmY2VmLi5lNWYyYjFjNjE1MGQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0yMjEzLDYgJiM0MzsyMjEzLDkgQEAgaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoSVBDQihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNLQl9GT1JXQVJERUQpXG4gXHRcdGdvdG8gZG9udF9mb3J3YXJkO1xuIFxuJiM0MztcdGlmICghbG9jYWwpXG4mIzQzO1x0XHRza2Jfb3JwaGFuKHNrYik7XG4mIzQzO1xuIFx0bXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTtcbiBcdGlmIChJU19FUlIobXJ0KSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5pbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5AQCAtNjIyLDYgJiM0Mzs2MjIsNyBAQCBpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmIChkZWxpdmVyKSB7XG4gXHRcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4gXHRcdFx0c2tiMiA9IHNrYjtcbiBcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXA2X21jX2lucHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGlucHV0IHBhdGhzIGJ5IGFkZGluZyBgc2tiX29ycGhhbihza2IpYCB0byBkaXNhc3NvY2lhdGUgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBtdWx0aWNhc3Qgcm91dGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkNzljYWU0M2EwN2FkMzE1MzM0ZmM2ZGViMzI0NjliZDNiOWY1Y2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo0NDoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAxZDlhNGFjMTRmY2VmLi5lNWYyYjFjNjE1MGQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtci5jCkBAIC0yMjEzLDYgJiM0MzsyMjEzLDkgQEAgaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKElQQ0Ioc2tiKS0mZ3Q7ZmxhZ3MgJmFtcDsgSVBTS0JfRk9SV0FSREVEKQogCQlnb3RvIGRvbnRfZm9yd2FyZDsKIAomIzQzOwlpZiAoIWxvY2FsKQomIzQzOwkJc2tiX29ycGhhbihza2IpOwomIzQzOwogCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7CiAJaWYgKElTX0VSUihtcnQpKSB7CiAJCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtNjIyLDYgJiM0Mzs2MjIsNyBAQCBpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiAJCWlmIChkZWxpdmVyKSB7CiAJCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAJCX0gZWxzZSB7CiYjNDM7CQkJc2tiX29ycGhhbihza2IpOwogCQkJc2tiMiA9IHNrYjsKIAkJCXNrYiA9IE5VTEw7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9pcHY0L2lwbXIuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoYXQgdGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIOKAkyBzcGVjaWZpY2FsbHksIElQdjQgYW5kIElQdjYgbXVsdGljYXN0LiBUaGUgY2hhbmdlIGlzIGFkZGluZyBgc2tiX29ycGhhbihza2IpYCBpbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gSSBhbHJlYWR5IGtub3cgdGhhdCBgaXBfbXJfaW5wdXRgIGhhbmRsZXMgSVB2NCBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGBpcDZfbWNfaW5wdXRgIGhhbmRsZXMgSVB2NiBtdWx0aWNhc3QgaW5wdXQgYW5kIGRlbGl2ZXJ5LiBUaGUgYWRkaXRpb24gb2YgYHNrYl9vcnBoYW5gIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGltbWVkaWF0ZSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIGJlaW5nIGFkZGVkIGF0IHRob3NlIGNhbGwgc2l0ZXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGBuZXQvaXB2NC9pcG1yLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JUF9NUk9VVEVgIGlzIGVuYWJsZWQsIGFuZCBgbmV0L2lwdjYvaXA2X2lucHV0LmNgIHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfSVBfTVJPVVRFYCBpcywgaW4gZmFjdCwgZW5hYmxlZCBvbiB0aGUgc3lzdGVtcyB0aGlzIGlzIGludGVuZGVkIGZvcjsgaXQgaXMgYW4gaW1wb3J0YW50IHByZS1yZXF1aXNpdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBtclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSAmIzQzOz0gZmliX3J1bGVzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbm5ldC9pcHY0L01ha2VmaWxlLTI0LW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTXkgUXVpY2sgQXNzZXNzbWVudCBvbiBJUHY0IGFuZCBJUHY2IE11bHRpY2FzdCBSZXF1aXJlbWVudHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtdWx0aWNhc3QgaW5wdXQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgaXBfbXJfaW5wdXRgIGZ1bmN0aW9uIGluIHRoZSBJUHY0IHN0YWNrIGNsZWFybHkgaGluZ2VzIG9uIHRoZSBgQ09ORklHX0lQX01ST1VURWAga2VybmVsIG9wdGlvbi4gTWFrZXMgc2Vuc2U7IHRoYXQgZW5hYmxlcyBtdWx0aWNhc3Qgcm91dGluZyBmb3IgSVB2NCwgc28gdGhlIGlucHV0IGZ1bmN0aW9uIGlzIGluaGVyZW50bHkgdGllZCB0byB0aGF0IGZ1bmN0aW9uYWxpdHkuIElmIHRoYXQmIzM5O3Mgbm90IGVuYWJsZWQsIHRoaXMgY29kZSBwYXRoIGp1c3Qgd29uJiMzOTt0IGJlIGNvbXBpbGVkIGluLgoKTm93LCBmb3IgSVB2NiBtdWx0aWNhc3QuLi4gYWgsIGBpcDZfbWNfaW5wdXRgLiBUaGF0IGxpdmVzIHdpdGhpbiBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLiBBbmQgdGhhdCBjb2RlIGlzIGd1YXJkZWQgYnkgYENPTkZJR19JUFY2YCwgc28gaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIFlvdSBvYnZpb3VzbHkgbmVlZCBJUHY2IGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBiZWZvcmUgZGVhbGluZyB3aXRoIElQdjYgbXVsdGljYXN0IHRyYWZmaWMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gSnVzdCBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcyBpbiBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfaW5wdXRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWNikgJiM0Mzs9IGlwdjYub1xubmV0L2lwdjYvTWFrZWZpbGUtNy1cbm5ldC9pcHY2L01ha2VmaWxlOjg6aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtOS1cdFx0YWRkcmxhYmVsLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IE11bHRpY2FzdCBJbnB1dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19JUFY2YCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBgaXA2X21jX2lucHV0YCBmdW5jdGlvbi4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgSVB2NiBzdHVmZiBsaXZlcy4gSG1tLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIGBpcDZfbWNfaW5wdXRgICphbHdheXMqIGNvbXBpbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lQVjZgPyBZdXAsIGNvbmZpcm1lZCwgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGlwNl9pbnB1dC5jYC4gVGhhdCYjMzk7cyBub3QgdW5leHBlY3RlZC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSwgYW5kIEkmIzM5O20gd29uZGVyaW5nIGlmIGBpcF9tcl9pbnB1dGAgYW5kIGBpcDZfbWNfaW5wdXRgIGFyZSBnb29kIGNob2ljZXMuIExldCYjMzk7cyBzZWUuLi4gYGlwX21yX2lucHV0YCBpcyBjYWxsZWQgZm9yIGluYm91bmQgSVB2NCBtdWx0aWNhc3QgcGFja2V0cywgYXNzdW1pbmcgbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBBbmQsIGFzIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCwgYGlwNl9tY19pbnB1dGAgaGFuZGxlcyB0aGUgZXF1aXZhbGVudCBmb3IgSVB2NiBtdWx0aWNhc3QgcGFja2V0cy4KCkp1c3QgYSBxdWljayBtZW50YWwgbm90ZSDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnB1dCBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuIEkgc2hvdWxkIGNoZWNrIGlmIGBpcDZfbWNfaW5wdXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCYjMzk7bGwgaW5mb3JtIGhvdyB3aWRlbHkgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaXA2X21jX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmM9NTUyPUVYUE9SVF9TWU1CT0xfR1BMKGlwNl9pbnB1dCk7XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NTMtXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1NTQ6aW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFdm9sdmluZyBVbmRlcnN0YW5kaW5nKioKCkl0JiMzOTtzIGNsZWFyLCB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nOyB0aGluZ3MgYXJlIGluIGZsdXguIFRoZSBjdXJyZW50IHN0YXRlIGlzIGp1c3QgYSBzbmFwc2hvdCwgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBoYXZlIGEgZHluYW1pYyBlbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpbmdzIHdvcmsgaGVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGlwX21yX2lucHV0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGR5bmFtaWMgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhpcyBjcml0aWNhbCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGlwX21yX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0yMTYyPXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfcnRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBtci5jLTIxODgtICovXG5uZXQvaXB2NC9pcG1yLmM6MjE4OTppbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwbXIuYy0yMTkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJbnB1dCBTeW1ib2xzKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc2l0dWF0aW9uOyB0aGluZ3MgYXJlIGluIGZsdXguIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gVGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgSVBfTVJPVVRFYCBhbmQgYElQVjZgLCByZXNwZWN0aXZlbHkuCgpOb3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBEb2VzIGBpcDZfbWNfaW5wdXRgIG5lY2Vzc2FyaWx5IGRlcGVuZCBvbiBgSVBWNl9NUk9VVEVgPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbi4gQSBxdWljayBjaGVjayBvZiBgaXA2X2lucHV0LmNgIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXIuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTQ6XHRpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gNTU1Olx0e1xuIDU1NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gNTU3Olx0XHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcbiA1NTg6XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XG4gNTU5Olx0XHRib29sIGRlbGl2ZXI7XG4gNTYwOlx0XG4gNTYxOlx0XHRfX0lQNl9VUERfUE9fU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLFxuIDU2MjpcdFx0XHRcdCAgIF9faW42X2Rldl9nZXRfc2FmZWx5KGRldiksIElQU1RBVFNfTUlCX0lOTUNBU1QsXG4gNTYzOlx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbik7XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBza2ItXHUwMDNlZGV2IHBhc3NlZCBtYXkgYmUgbWFzdGVyIGRldiBmb3IgdnJmcy4gKi9cbiA1NjY6XHRcdGlmIChzZGlmKSB7XG4gNTY3Olx0XHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGRldl9uZXRfcmN1KGRldiksIHNkaWYpO1xuIDU2ODpcdFx0XHRpZiAoIWRldikge1xuIDU2OTpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDU3MDpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDU3MTpcdFx0XHR9XG4gNTcyOlx0XHR9XG4gNTczOlx0XG4gNTc0Olx0XHRoZHIgPSBpcHY2X2hkcihza2IpO1xuIDU3NTpcdFx0ZGVsaXZlciA9IGlwdjZfY2hrX21jYXN0X2FkZHIoZGV2LCBcdTAwMjZoZHItXHUwMDNlZGFkZHIsIE5VTEwpO1xuIDU3NjpcdFxuIDU3NzpcdCNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbiA1Nzg6XHRcdC8qXG4gNTc5Olx0XHQgKiAgICAgIElQdjYgbXVsdGljYXN0IHJvdXRlciBtb2RlIGlzIG5vdyBzdXBwb3J0ZWQgOylcbiA1ODA6XHRcdCAqL1xuIDU4MTpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRldl9uZXRfcmN1KHNrYi1cdTAwM2VkZXYpLVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbWNfZm9yd2FyZGluZykgXHUwMDI2XHUwMDI2XG4gNTgyOlx0XHQgICAgIShpcHY2X2FkZHJfdHlwZShcdTAwMjZoZHItXHUwMDNlZGFkZHIpIFx1MDAyNlxuIDU4MzpcdFx0ICAgICAgKElQVjZfQUREUl9MT09QQkFDS3xJUFY2X0FERFJfTElOS0xPQ0FMKSkgXHUwMDI2XHUwMDI2XG4gNTg0Olx0XHQgICAgbGlrZWx5KCEoSVA2Q0Ioc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSVA2U0tCX0ZPUldBUkRFRCkpKSB7XG4gNTg1Olx0XHRcdC8qXG4gNTg2Olx0XHRcdCAqIE9rYXksIHdlIHRyeSB0byBmb3J3YXJkIC0gc3BsaXQgYW5kIGR1cGxpY2F0ZVxuIDU4NzpcdFx0XHQgKiBwYWNrZXRzLlxuIDU4ODpcdFx0XHQgKi9cbiA1ODk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4gNTkwOlx0XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA1OTE6XHRcbiA1OTI6XHRcdFx0LyogQ2hlY2sgZm9yIE1MRCAqL1xuIDU5MzpcdFx0XHRpZiAodW5saWtlbHkob3B0LVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZTS0JfUk9VVEVSQUxFUlQpKSB7XG4gNTk0Olx0XHRcdFx0LyogQ2hlY2sgaWYgdGhpcyBpcyBhIG1sZCBtZXNzYWdlICovXG4gNTk1Olx0XHRcdFx0dTggbmV4dGhkciA9IGhkci1cdTAwM2VuZXh0aGRyO1xuIDU5NjpcdFx0XHRcdF9fYmUxNiBmcmFnX29mZjtcbiA1OTc6XHRcdFx0XHRpbnQgb2Zmc2V0O1xuIDU5ODpcdFxuIDU5OTpcdFx0XHRcdC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBvZiBSb3V0ZXIgQWxlcnRcbiA2MDA6XHRcdFx0XHQgKiBpcyBmb3IgTUxEICgweDAwMDApLlxuIDYwMTpcdFx0XHRcdCAqL1xuIDYwMjpcdFx0XHRcdGlmIChvcHQtXHUwMDNlcmEgPT0gaHRvbnMoSVBWNl9PUFRfUk9VVEVSQUxFUlRfTUxEKSkge1xuIDYwMzpcdFx0XHRcdFx0ZGVsaXZlciA9IGZhbHNlO1xuIDYwNDpcdFxuIDYwNTpcdFx0XHRcdFx0aWYgKCFpcHY2X2V4dF9oZHIobmV4dGhkcikpIHtcbiA2MDY6XHRcdFx0XHRcdFx0LyogQlVHICovXG4gNjA3Olx0XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDYwODpcdFx0XHRcdFx0fVxuIDYwOTpcdFx0XHRcdFx0b2Zmc2V0ID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIHNpemVvZigqaGRyKSxcbiA2MTA6XHRcdFx0XHRcdFx0XHRcdCAgXHUwMDI2bmV4dGhkciwgXHUwMDI2ZnJhZ19vZmYpO1xuIDYxMTpcdFx0XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbiA2MTI6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4gNjEzOlx0XG4gNjE0Olx0XHRcdFx0XHRpZiAoaXB2Nl9pc19tbGQoc2tiLCBuZXh0aGRyLCBvZmZzZXQpKVxuIDYxNTpcdFx0XHRcdFx0XHRkZWxpdmVyID0gdHJ1ZTtcbiA2MTY6XHRcbiA2MTc6XHRcdFx0XHRcdGdvdG8gb3V0O1xuIDYxODpcdFx0XHRcdH1cbiA2MTk6XHRcdFx0XHQvKiB1bmtub3duIFJBIC0gcHJvY2VzcyBpdCBub3JtYWxseSAqL1xuIDYyMDpcdFx0XHR9XG4gNjIxOlx0XG4gNjIyOlx0XHRcdGlmIChkZWxpdmVyKSB7XG4gNjIzOlx0XHRcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIDYyNDpcdFx0XHR9IGVsc2Uge1xuIDYyNTpcdFx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiA2MjY6XHRcdFx0XHRza2IyID0gc2tiO1xuIDYyNzpcdFx0XHRcdHNrYiA9IE5VTEw7XG4gNjI4Olx0XHRcdH1cbiA2Mjk6XHRcbiA2MzA6XHRcdFx0aWYgKHNrYjIpXG4gNjMxOlx0XHRcdFx0aXA2X21yX2lucHV0KHNrYjIpO1xuIDYzMjpcdFx0fVxuIDYzMzpcdG91dDpcbiA2MzQ6XHQjZW5kaWZcbiA2MzU6XHRcdGlmIChsaWtlbHkoZGVsaXZlcikpIHtcbiA2MzY6XHRcdFx0aXA2X2lucHV0KHNrYik7XG4gNjM3Olx0XHR9IGVsc2Uge1xuIDYzODpcdFx0XHQvKiBkaXNjYXJkICovXG4gNjM5Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDY0MDpcdFx0fVxuIDY0MTpcdFxuIDY0MjpcdFx0cmV0dXJuIDA7XG4gNjQzOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSVB2NiBNdWx0aWNhc3QgUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBJUHY2IG11bHRpY2FzdCBpbnB1dCBoYW5kbGluZywgYW5kIEkgc2VlIHRoaXMgYHNrYl9vcnBoYW4oc2tiKWAgY2FsbCB3aXRoaW4gdGhlIGBpcDZfbWNfaW5wdXRgIGZ1bmN0aW9uLiBBaGEhIEkgcmVtZW1iZXIgdGhhdCBgc2tiX29ycGhhbmAgaXMgY29uZGl0aW9uYWxpemVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY2x1ZGVkLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfSVBWNl9NUk9VVEVgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LgoKSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY3Jvc3MtcmVmZXJlbmNlLCBsZXQgbWUgcGl2b3Qgb3ZlciBhbmQgdGFrZSBhIGxvb2sgYXQgYGlwX21yX2lucHV0YCBpbiBgbmV0L2lwdjQvaXBtci5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpcyBzaW1pbGFybHkgaGFuZGxlZC4gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBjb21wYXJlIGFuZCBjb250cmFzdCB0aGUgSVB2NCBhbmQgSVB2NiBhcHByb2FjaGVzIGhlcmUsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE4OTpcdGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMjE5MDpcdHtcbjIxOTE6XHRcdHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlO1xuMjE5MjpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbjIxOTM6XHRcdGludCBsb2NhbCA9IHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTDtcbjIxOTQ6XHRcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuMjE5NTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjIxOTY6XHRcbjIxOTc6XHRcdC8qIHNrYi1cdTAwM2VkZXYgcGFzc2VkIGluIGlzIHRoZSBsb1ggbWFzdGVyIGRldiBmb3IgdnJmcy5cbjIxOTg6XHRcdCAqIEFzIHRoZXJlIGFyZSBubyB2aWZzIGFzc29jaWF0ZWQgd2l0aCBsb29wYmFjayBkZXZpY2VzLFxuMjE5OTpcdFx0ICogZ2V0IHRoZSBwcm9wZXIgaW50ZXJmYWNlIHRoYXQgZG9lcyBoYXZlIGEgdmlmIGFzc29jaWF0ZWQgd2l0aCBpdC5cbjIyMDA6XHRcdCAqL1xuMjIwMTpcdFx0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbjIyMDI6XHRcdGlmIChuZXRpZl9pc19sM19tYXN0ZXIoc2tiLVx1MDAzZWRldikpIHtcbjIyMDM6XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBJUENCKHNrYiktXHUwMDNlaWlmKTtcbjIyMDQ6XHRcdFx0aWYgKCFkZXYpIHtcbjIyMDU6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjIyMDY6XHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjIyMDc6XHRcdFx0fVxuMjIwODpcdFx0fVxuMjIwOTpcdFxuMjIxMDpcdFx0LyogUGFja2V0IGlzIGxvb3BlZCBiYWNrIGFmdGVyIGZvcndhcmQsIGl0IHNob3VsZCBub3QgYmVcbjIyMTE6XHRcdCAqIGZvcndhcmRlZCBzZWNvbmQgdGltZSwgYnV0IHN0aWxsIGNhbiBiZSBkZWxpdmVyZWQgbG9jYWxseS5cbjIyMTI6XHRcdCAqL1xuMjIxMzpcdFx0aWYgKElQQ0Ioc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSVBTS0JfRk9SV0FSREVEKVxuMjIxNDpcdFx0XHRnb3RvIGRvbnRfZm9yd2FyZDtcbjIyMTU6XHRcbjIyMTY6XHRcdGlmICghbG9jYWwpXG4yMjE3Olx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbjIyMTg6XHRcbjIyMTk6XHRcdG1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7XG4yMjIwOlx0XHRpZiAoSVNfRVJSKG1ydCkpIHtcbjIyMjE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4yMjIyOlx0XHRcdHJldHVybiBQVFJfRVJSKG1ydCk7XG4yMjIzOlx0XHR9XG4yMjI0Olx0XHRpZiAoIWxvY2FsKSB7XG4yMjI1Olx0XHRcdGlmIChJUENCKHNrYiktXHUwMDNlb3B0LnJvdXRlcl9hbGVydCkge1xuMjIyNjpcdFx0XHRcdGlmIChpcF9jYWxsX3JhX2NoYWluKHNrYikpXG4yMjI3Olx0XHRcdFx0XHRyZXR1cm4gMDtcbjIyMjg6XHRcdFx0fSBlbHNlIGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lHTVApIHtcbjIyMjk6XHRcdFx0XHQvKiBJR01QdjEgKGFuZCBicm9rZW4gSUdNUHYyIGltcGxlbWVudGF0aW9ucyBzb3J0IG9mXG4yMjMwOlx0XHRcdFx0ICogQ2lzY28gSU9TIFx1MDAzYz0gMTEuMig4KSkgZG8gbm90IHB1dCByb3V0ZXIgYWxlcnRcbjIyMzE6XHRcdFx0XHQgKiBvcHRpb24gdG8gSUdNUCBwYWNrZXRzIGRlc3RpbmVkIHRvIHJvdXRhYmxlXG4yMjMyOlx0XHRcdFx0ICogZ3JvdXBzLiBJdCBpcyB2ZXJ5IGJhZCwgYmVjYXVzZSBpdCBtZWFuc1xuMjIzMzpcdFx0XHRcdCAqIHRoYXQgd2UgY2FuIGZvcndhcmQgTk8gSUdNUCBtZXNzYWdlcy5cbjIyMzQ6XHRcdFx0XHQgKi9cbjIyMzU6XHRcdFx0XHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xuMjIzNjpcdFxuMjIzNzpcdFx0XHRcdG1yb3V0ZV9zayA9IHJjdV9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKTtcbjIyMzg6XHRcdFx0XHRpZiAobXJvdXRlX3NrKSB7XG4yMjM5Olx0XHRcdFx0XHRuZl9yZXNldF9jdChza2IpO1xuMjI0MDpcdFx0XHRcdFx0cmF3X3Jjdihtcm91dGVfc2ssIHNrYik7XG4yMjQxOlx0XHRcdFx0XHRyZXR1cm4gMDtcbjIyNDI6XHRcdFx0XHR9XG4yMjQzOlx0XHRcdH1cbjIyNDQ6XHRcdH1cbjIyNDU6XHRcbjIyNDY6XHRcdC8qIGFscmVhZHkgdW5kZXIgcmN1X3JlYWRfbG9jaygpICovXG4yMjQ3Olx0XHRjYWNoZSA9IGlwbXJfY2FjaGVfZmluZChtcnQsIGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLCBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcik7XG4yMjQ4Olx0XHRpZiAoIWNhY2hlKSB7XG4yMjQ5Olx0XHRcdGludCB2aWYgPSBpcG1yX2ZpbmRfdmlmKG1ydCwgZGV2KTtcbjIyNTA6XHRcbjIyNTE6XHRcdFx0aWYgKHZpZiBcdTAwM2U9IDApXG4yMjUyOlx0XHRcdFx0Y2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmRfYW55KG1ydCwgaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4yMjUzOlx0XHRcdFx0XHRcdFx0ICAgIHZpZik7XG4yMjU0Olx0XHR9XG4yMjU1Olx0XG4yMjU2Olx0XHQvKiBObyB1c2FibGUgY2FjaGUgZW50cnkgKi9cbjIyNTc6XHRcdGlmICghY2FjaGUpIHtcbjIyNTg6XHRcdFx0aW50IHZpZjtcbjIyNTk6XHRcbjIyNjA6XHRcdFx0aWYgKGxvY2FsKSB7XG4yMjYxOlx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbjIyNjI6XHRcdFx0XHRpcF9sb2NhbF9kZWxpdmVyKHNrYik7XG4yMjYzOlx0XHRcdFx0aWYgKCFza2IyKVxuMjI2NDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMjI2NTpcdFx0XHRcdHNrYiA9IHNrYjI7XG4yMjY2Olx0XHRcdH1cbjIyNjc6XHRcbjIyNjg6XHRcdFx0dmlmID0gaXBtcl9maW5kX3ZpZihtcnQsIGRldik7XG4yMjY5Olx0XHRcdGlmICh2aWYgXHUwMDNlPSAwKVxuMjI3MDpcdFx0XHRcdHJldHVybiBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTtcbjIyNzE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4yMjcyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMjI3MzpcdFx0fVxuMjI3NDpcdFxuMjI3NTpcdFx0aXBfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlLCBsb2NhbCk7XG4yMjc2Olx0XG4yMjc3Olx0XHRpZiAobG9jYWwpXG4yMjc4Olx0XHRcdHJldHVybiBpcF9sb2NhbF9kZWxpdmVyKHNrYik7XG4yMjc5Olx0XG4yMjgwOlx0XHRyZXR1cm4gMDtcbjIyODE6XHRcbjIyODI6XHRkb250X2ZvcndhcmQ6XG4yMjgzOlx0XHRpZiAobG9jYWwpXG4yMjg0Olx0XHRcdHJldHVybiBpcF9sb2NhbF9kZWxpdmVyKHNrYik7XG4yMjg1Olx0XHRrZnJlZV9za2Ioc2tiKTtcbjIyODY6XHRcdHJldHVybiAwO1xuMjI4NzpcdH1cbjIyODg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqRm9jdXNpbmcgb24gSVAgTXVsdGljYXN0IFJvdXRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBpcyBoYW5kbGVkIGludGVybmFsbHkuIEkgc2VlIHRoYXQgYGlwX21yX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiwgb3IgJiMzNDtmb2N1cyBzeW1ib2wsJiMzNDsgZm9yIElQdjQsIGFuZCBgaXA2X21jX2lucHV0YCBpcyB0aGUgY29ycmVzcG9uZGluZyBvbmUgZm9yIElQdjYuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gSSYjMzk7dmUgZ290IGBJUF9NUk9VVEVgLCBgSVBWNmAsIGFuZCBgSVBWNl9NUk9VVEVgIGZsYWdnZWQgYXMgcG90ZW50aWFsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBKdXN0IHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYElQVjZfTVJPVVRFYCBpcyB0aGUgZXhhY3QgbmFtZSwgaXQgc2VlbXMgbGlrZWx5IGJ1dCB2ZXJpZmljYXRpb24gaXMgZXNzZW50aWFsLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBwcmVjaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9NUk9VVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBNdWx0aWNhc3QgUm91dGluZyBQcm90b2NvbHMqKgoKUmlnaHQsIHRoYXQmIzM5O3MgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCB0aGUgZm91bmRhdGlvbmFsIHN0dWZmIHBpbm5lZCBkb3duLiBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgSVBWNl9NUk9VVEVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb25zLiBObyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwganVzdCBhcyBhIGRvdWJsZSBjaGVjayB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIHZlcmlmeWluZyB0aGF0IGBJUF9NUk9VVEVgIHJlbWFpbnMgdGhlIGFwcHJvcHJpYXRlIHNvY2tldCBvcHRpb24gZm9yIGhhbmRsaW5nIElQdjQgbXVsdGljYXN0IHJvdXRpbmcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IG1lbnRhbCBtYXAgb2YgdGhlc2UgdGhpbmdzIGlzIGNvcnJlY3QuIEFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGJhc2ljcyBzaGFycCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01ST1VURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIzMS1cbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQ1CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmtpbmcgU3RhY2sgUGF0Y2gqKgoKT2theSwgc28gdGhlIGBJUF9NUk9VVEVgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUsIHRoYXQgY2hlY2tzIG91dC4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrOyBhbHRlcmluZyBob3cgc29ja2V0IGJ1ZmZlcnMgYXJlIGhhbmRsZWQuICBUaGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBubyBkb3VidCBhYm91dCBpdC4KCkxldCYjMzk7cyBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuIFdlIGNhbiBzYXk6CgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUKKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAsIGVzc2VudGlhbGx5IGRlY291cGxpbmcgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSBpbiBhIGNydWNpYWwgc2VjdGlvbiBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBpcF9tcl9pbnB1dGAsIGFuZCBgaXA2X21jX2lucHV0YCDigJMgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGRpcmVjdGx5LgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgSVBfTVJPVVRFYCwgYElQVjZgLCBgSVBWNl9NUk9VVEVgLgoKTm93LCByZWdhcmRpbmcgdGhvc2UgY29uZmlncy4gIGBJUFY2YCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl04oCZcyBhbHdheXMgYmV0dGVyIHRvIGJlIGV4cGxpY2l0LiAgV2FpdCBhIG1pbnV0ZS4uLiBgSVBWNl9NUk9VVEVgIGRlcGVuZHMgb24gYElQVjZgLCBzbyBgSVBWNmAgaXMsIG9mIGNvdXJzZSwgcmVxdWlyZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdG8gYmUgY29tcGxldGVseSBzdXJlLiBgaXBfbXJfaW5wdXRgIHJlc2lkZXMgaW4gYG5ldC9pcHY0L2lwbXIuY2AsIGFuZCB0aGF0JiMzOTtzIGJ1aWx0IHdpdGggYENPTkZJR19JUF9NUk9VVEVgLiAgYGlwNl9tY19pbnB1dGAgaXMgaW4gYG5ldC9pcHY2L2lwNl9pbnB1dC5jYCwgYW5kIGl0IGlzIGJ1aWx0IHdpdGggYENPTkZJR19JUFY2YC4gUGx1cywgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgd2l0aGluIGBpcDZfbWNfaW5wdXRgIGFyZSBjb250aW5nZW50IG9uIGAjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFYC4KClllcCwgYWxsIGNsZWFyLCB0aGUgY29uZmlncyBhcmU6IGBJUF9NUk9VVEVgLCBgSVBWNmAsIGFuZCBgSVBWNl9NUk9VVEVgLgoKQWxyaWdodCwgdGltZSB0byBleGVjdXRlIHRoZSBzZXQtcmVzdWx0cyBjb21tYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcDZfbWNfaW5wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMgYnkgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIHRvIGRpc2Fzc29jaWF0ZSB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiBiZWZvcmUgZm9yd2FyZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIG11bHRpY2FzdCByb3V0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tY19pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjYWxscyB0byBgc2tiX29ycGhhbihza2IpYCBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocy4gYHNrYl9vcnBoYW5gIGRldGFjaGVzIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIChjbGVhcmluZyBgc2tiLVx1MDAzZXNrYCBhbmQgY2FsbGluZyB0aGUgZGVzdHJ1Y3RvcikuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCByZWZlcmVuY2UgbGVha3MsIG1lbW9yeSBhY2NvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZXJlIGFuIHNrYiBvdXRsaXZlcyBpdHMgYXNzb2NpYXRlZCBzb2NrZXQuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDc5Y2FlNDNhMDdhZDMxNTMzNGZjNmRlYjMyNDY5YmQzYjlmNWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTk6NDQ6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggMWQ5YTRhYzE0ZmNlZi4uZTVmMmIxYzYxNTBkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMjIxMyw2ICYjNDM7MjIxMyw5IEBAIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChJUENCKHNrYiktJmd0O2ZsYWdzICZhbXA7IElQU0tCX0ZPUldBUkRFRCkKIAkJZ290byBkb250X2ZvcndhcmQ7CiAKJiM0MzsJaWYgKCFsb2NhbCkKJiM0MzsJCXNrYl9vcnBoYW4oc2tiKTsKJiM0MzsKIAltcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2IpOwogCWlmIChJU19FUlIobXJ0KSkgewogCQlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmMKaW5kZXggODk3Mjg2M2M5M2VlNS4uZDMzMmVjNjBmOTE1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X2lucHV0LmMKQEAgLTYyMiw2ICYjNDM7NjIyLDcgQEAgaW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlpZiAoZGVsaXZlcikgewogCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQl9IGVsc2UgewomIzQzOwkJCXNrYl9vcnBoYW4oc2tiKTsKIAkJCXNrYjIgPSBza2I7CiAJCQlza2IgPSBOVUxMOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc3CgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBgc2tiX29ycGhhbihza2IpYCBjYWxscyBpbiBgaXBfbXJfaW5wdXRgIGZvciBJUHY0IGFuZCBgaXA2X21jX2lucHV0YCBmb3IgSVB2NiBtdWx0aWNhc3QgaW5wdXQuIEkgY2FuIHNlZSB0aGUgY29kZSBub3cuCgpUaGUgcHJpbWFyeSBnb2FsIG9mIGBza2Jfb3JwaGFuYCBpcyB0byBkZXRhY2ggdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBmcm9tIGl0cyBhc3NvY2lhdGVkIHNvY2tldCBieSBzZXR0aW5nIGBza2ItJmd0O3NrYCB0byBOVUxMLiBUaGlzIGFsc28gaW52b2tlcyB0aGUgZGVzdHJ1Y3Rvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFRoZSBmYWN0IHRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgbWVhbnMgdGhlcmUgd2FzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBzb2NrZXQgcmVmZXJlbmNlIGxlYWssIG9yIHBlcmhhcHMgbWVtb3J5IGFjY291bnRpbmcgaXNzdWUuIFRoZSBgc2tiYCBtaWdodCBoYXZlIGJlZW4gcGVyc2lzdGluZyBsb25nZXIgdGhhbiB0aGUgc29ja2V0LCB0aHVzIHRoZSBuZWVkIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRpb24uIE9yLCBpdCBwcmV2ZW50ZWQgcHJvcGVyIGRlc3RydWN0aW9uLgoKR2l2ZW4gdGhpcywgSSBkb24mIzM5O3Qgc2VlIGFueSBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgdHlwZSBvZiBidWcuIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBzaW1pbGFyIGJ1ZyB3aXRoIHRoZSBzb2NrZXQgcmVmZXJlbmNlLiBJIHRoaW5rIEtBU0FOLCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMgc29ydCBvZiBwcm9ibGVtLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybS4gYHNrYl9vcnBoYW4oc2tiKWAgaXMganVzdCBzZXR0aW5nIHRoZSBgc2tiLSZndDtza2AgYW5kIHRoZSBgc2tiLSZndDtkZXN0cnVjdG9yYCBmaWVsZHMuIEFmdGVyIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IsIG9mIGNvdXJzZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBoZXJlLiBNeSBkaWFnbm9zaXMgc2VlbXMgY29ycmVjdC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cdTAwM2Vza2AgYW5kIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IpLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGZpeCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgcmVmZXJlbmNlIGxlYWtzLCBtZW1vcnkgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVyZSBhbiBza2Igb3V0bGl2ZXMgaXRzIGFzc29jaWF0ZWQgc29ja2V0LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cdTAwM2Vza2AgYW5kIGNhbGxpbmcgdGhlIGRlc3RydWN0b3IpLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGZpeCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgcmVmZXJlbmNlIGxlYWtzLCBtZW1vcnkgYWNjb3VudGluZywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVyZSBhbiBza2Igb3V0bGl2ZXMgaXRzIGFzc29jaWF0ZWQgc29ja2V0LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG9yIGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MjUuMDA2MTg3MDMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3ODMzODkwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cXHUwMDNlc2tgIGFuZCBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBmaXggaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IHJlZmVyZW5jZSBsZWFrcywgbWVtb3J5IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlcmUgYW4gc2tiIG91dGxpdmVzIGl0cyBhc3NvY2lhdGVkIHNvY2tldC4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSkgb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMgYnkgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIHRvIGRpc2Fzc29jaWF0ZSB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiBiZWZvcmUgZm9yd2FyZGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIG11bHRpY2FzdCByb3V0aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDoyNS4wMDYxOTM5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjI3MDM1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDc5Y2FlNDNhMDdhZDMxNTMzNGZjNmRlYjMyNDY5YmQzYjlmNWNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE5OjQ0OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IDFkOWE0YWMxNGZjZWYuLmU1ZjJiMWM2MTUwZDIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXFxuKysrIGIvbmV0L2lwdjQvaXBtci5jXFxuQEAgLTIyMTMsNiArMjIxMyw5IEBAIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQU0tCX0ZPUldBUkRFRClcXG4gXFx0XFx0Z290byBkb250X2ZvcndhcmQ7XFxuIFxcbitcXHRpZiAoIWxvY2FsKVxcbitcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuK1xcbiBcXHRtcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2IpO1xcbiBcXHRpZiAoSVNfRVJSKG1ydCkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcXG5pbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcXG5AQCAtNjIyLDYgKzYyMiw3IEBAIGludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0aWYgKGRlbGl2ZXIpIHtcXG4gXFx0XFx0XFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuIFxcdFxcdFxcdHNrYjIgPSBza2I7XFxuIFxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MjYuMzI5ODUyNDc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDAxODgxNjkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkNzljYWU0M2EwN2FkMzE1MzM0ZmM2ZGViMzI0NjliZDNiOWY1Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo0NDoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xuaW5kZXggMWQ5YTRhYzE0ZmNlZi4uZTVmMmIxYzYxNTBkMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuKysrIGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMjIxMyw2ICsyMjEzLDkgQEAgaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoSVBDQihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFNLQl9GT1JXQVJERUQpXG4gXHRcdGdvdG8gZG9udF9mb3J3YXJkO1xuIFxuK1x0aWYgKCFsb2NhbClcbitcdFx0c2tiX29ycGhhbihza2IpO1xuK1xuIFx0bXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTtcbiBcdGlmIChJU19FUlIobXJ0KSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5pbmRleCA4OTcyODYzYzkzZWU1Li5kMzMyZWM2MGY5MTUwIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmNcbisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jXG5AQCAtNjIyLDYgKzYyMiw3IEBAIGludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKGRlbGl2ZXIpIHtcbiBcdFx0XHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0c2tiX29ycGhhbihza2IpO1xuIFx0XHRcdHNrYjIgPSBza2I7XG4gXHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MjYuMzI5ODUzOTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwOTIwNzA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9pcHY0L2lwbXIuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoYXQgdGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMg4oCTIHNwZWNpZmljYWxseSwgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QuIFRoZSBjaGFuZ2UgaXMgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIGluIGBpcF9tcl9pbnB1dGAgYW5kIGBpcDZfbWNfaW5wdXRgLiBDbGVhcmx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gSSBhbHJlYWR5IGtub3cgdGhhdCBgaXBfbXJfaW5wdXRgIGhhbmRsZXMgSVB2NCBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGBpcDZfbWNfaW5wdXRgIGhhbmRsZXMgSVB2NiBtdWx0aWNhc3QgaW5wdXQgYW5kIGRlbGl2ZXJ5LiBUaGUgYWRkaXRpb24gb2YgYHNrYl9vcnBoYW5gIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGltbWVkaWF0ZSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIGJlaW5nIGFkZGVkIGF0IHRob3NlIGNhbGwgc2l0ZXMuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYG5ldC9pcHY0L2lwbXIuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQX01ST1VURWAgaXMgZW5hYmxlZCwgYW5kIGBuZXQvaXB2Ni9pcDZfaW5wdXQuY2Agd2hlbiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0lQX01ST1VURWAgaXMsIGluIGZhY3QsIGVuYWJsZWQgb24gdGhlIHN5c3RlbXMgdGhpcyBpcyBpbnRlbmRlZCBmb3I7IGl0IGlzIGFuIGltcG9ydGFudCBwcmUtcmVxdWlzaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MzEuNjM5MDYzOTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MjI0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBtclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTKSArPSBmaWJfcnVsZXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19JUF9NUk9VVEUpICs9IGlwbXIub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI0LW9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDozMS42ODU3OTEwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODE1ODQzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk15IFF1aWNrIEFzc2Vzc21lbnQgb24gSVB2NCBhbmQgSVB2NiBNdWx0aWNhc3QgUmVxdWlyZW1lbnRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG11bHRpY2FzdCBpbnB1dCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiB0aGUgYGlwX21yX2lucHV0YCBmdW5jdGlvbiBpbiB0aGUgSVB2NCBzdGFjayBjbGVhcmx5IGhpbmdlcyBvbiB0aGUgYENPTkZJR19JUF9NUk9VVEVgIGtlcm5lbCBvcHRpb24uIE1ha2VzIHNlbnNlOyB0aGF0IGVuYWJsZXMgbXVsdGljYXN0IHJvdXRpbmcgZm9yIElQdjQsIHNvIHRoZSBpbnB1dCBmdW5jdGlvbiBpcyBpbmhlcmVudGx5IHRpZWQgdG8gdGhhdCBmdW5jdGlvbmFsaXR5LiBJZiB0aGF0J3Mgbm90IGVuYWJsZWQsIHRoaXMgY29kZSBwYXRoIGp1c3Qgd29uJ3QgYmUgY29tcGlsZWQgaW4uXG5cbk5vdywgZm9yIElQdjYgbXVsdGljYXN0Li4uIGFoLCBgaXA2X21jX2lucHV0YC4gVGhhdCBsaXZlcyB3aXRoaW4gYG5ldC9pcHY2L2lwNl9pbnB1dC5jYC4gQW5kIHRoYXQgY29kZSBpcyBndWFyZGVkIGJ5IGBDT05GSUdfSVBWNmAsIHNvIGl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIFlvdSBvYnZpb3VzbHkgbmVlZCBJUHY2IGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBiZWZvcmUgZGVhbGluZyB3aXRoIElQdjYgbXVsdGljYXN0IHRyYWZmaWMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gSnVzdCBtYWtpbmcgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzIGluIG15IGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6MzUuMjY3Mzc4MTQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODM5MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9pbnB1dFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSArPSBpcHY2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxcbm5ldC9pcHY2L01ha2VmaWxlOjg6aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDozNS4zMTQyMjQ2MzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQ1OTU5MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IE11bHRpY2FzdCBJbnB1dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfSVBWNmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGUgYGlwNl9tY19pbnB1dGAgZnVuY3Rpb24uIE1ha2VzIHNlbnNlLCB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgSVB2NiBzdHVmZiBsaXZlcy4gSG1tLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIGBpcDZfbWNfaW5wdXRgICphbHdheXMqIGNvbXBpbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0lQVjZgPyBZdXAsIGNvbmZpcm1lZCwgaXQncyByaWdodCB0aGVyZSBpbiBgaXA2X2lucHV0LmNgLiBUaGF0J3Mgbm90IHVuZXhwZWN0ZWQuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGdvb2Qgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLCBhbmQgSSdtIHdvbmRlcmluZyBpZiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YCBhcmUgZ29vZCBjaG9pY2VzLiBMZXQncyBzZWUuLi4gYGlwX21yX2lucHV0YCBpcyBjYWxsZWQgZm9yIGluYm91bmQgSVB2NCBtdWx0aWNhc3QgcGFja2V0cywgYXNzdW1pbmcgbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBBbmQsIGFzIHdlJ3ZlIGVzdGFibGlzaGVkLCBgaXA2X21jX2lucHV0YCBoYW5kbGVzIHRoZSBlcXVpdmFsZW50IGZvciBJUHY2IG11bHRpY2FzdCBwYWNrZXRzLlxuXG5KdXN0IGEgcXVpY2sgbWVudGFsIG5vdGUg4oCTIGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnB1dCBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuIEkgc2hvdWxkIGNoZWNrIGlmIGBpcDZfbWNfaW5wdXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gVGhhdCdsbCBpbmZvcm0gaG93IHdpZGVseSBpdCdzIGFjY2Vzc2libGUgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NDAuMjYwMTg1NDI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjUxMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpcDZfbWNfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmM9NTUyPUVYUE9SVF9TWU1CT0xfR1BMKGlwNl9pbnB1dCk7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTUzLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjU1NDppbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTU1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NDAuMzI4NDQ0MDE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NDY0MDQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipFdm9sdmluZyBVbmRlcnN0YW5kaW5nKipcblxuSXQncyBjbGVhciwgdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24uIEkgY2FuJ3QganVzdCBhc3N1bWUgYW55dGhpbmc7IHRoaW5ncyBhcmUgaW4gZmx1eC4gVGhlIGN1cnJlbnQgc3RhdGUgaXMganVzdCBhIHNuYXBzaG90LCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGhhdmUgYSBkeW5hbWljIGVsZW1lbnQgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLlxuXG5BbHJpZ2h0LCBsZXQncyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpbmdzIHdvcmsgaGVyZSwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaXBfbXJfaW5wdXRgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGZvciB0aGlzIHBhcnRpY3VsYXIgZHluYW1pYyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoaXMgY3JpdGljYWwgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo0My4zMDMwODc1MzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzE4MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpcF9tcl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcG1yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTIxNjI9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMTg4LSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMTg5OmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwbXIuYy0yMTkwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NDMuMzU0NDE0MzA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjA2NTk2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElucHV0IFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgZml4ZWQgc2l0dWF0aW9uOyB0aGluZ3MgYXJlIGluIGZsdXguIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gVGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgSVBfTVJPVVRFYCBhbmQgYElQVjZgLCByZXNwZWN0aXZlbHkuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gYXJpc2VzIGluIG15IG1pbmQ6IERvZXMgYGlwNl9tY19pbnB1dGAgbmVjZXNzYXJpbHkgZGVwZW5kIG9uIGBJUFY2X01ST1VURWA/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uLiBBIHF1aWNrIGNoZWNrIG9mIGBpcDZfaW5wdXQuY2Agc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlci4gVGhhdCdzIHdoZXJlIEknbGwgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo0Ny4yMTUwNzYzNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTU0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1NDpcXHRpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuIDU1NTpcXHR7XFxuIDU1NjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIDU1NzpcXHRcXHRpbnQgc2RpZiA9IGluZXQ2X3NkaWYoc2tiKTtcXG4gNTU4OlxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxuIDU1OTpcXHRcXHRib29sIGRlbGl2ZXI7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdF9fSVA2X1VQRF9QT19TVEFUUyhza2JfZHN0X2Rldl9uZXRfcmN1KHNrYiksXFxuIDU2MjpcXHRcXHRcXHRcXHQgICBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpLCBJUFNUQVRTX01JQl9JTk1DQVNULFxcbiA1NjM6XFx0XFx0XFx0XFx0ICAgc2tiLVxcdTAwM2VsZW4pO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBza2ItXFx1MDAzZWRldiBwYXNzZWQgbWF5IGJlIG1hc3RlciBkZXYgZm9yIHZyZnMuICovXFxuIDU2NjpcXHRcXHRpZiAoc2RpZikge1xcbiA1Njc6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZGV2X25ldF9yY3UoZGV2KSwgc2RpZik7XFxuIDU2ODpcXHRcXHRcXHRpZiAoIWRldikge1xcbiA1Njk6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTcxOlxcdFxcdFxcdH1cXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG4gNTc1OlxcdFxcdGRlbGl2ZXIgPSBpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIsIE5VTEwpO1xcbiA1NzY6XFx0XFxuIDU3NzpcXHQjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxuIDU3ODpcXHRcXHQvKlxcbiA1Nzk6XFx0XFx0ICogICAgICBJUHY2IG11bHRpY2FzdCByb3V0ZXIgbW9kZSBpcyBub3cgc3VwcG9ydGVkIDspXFxuIDU4MDpcXHRcXHQgKi9cXG4gNTgxOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2ZGV2X25ldF9yY3Uoc2tiLVxcdTAwM2VkZXYpLVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VtY19mb3J3YXJkaW5nKSBcXHUwMDI2XFx1MDAyNlxcbiA1ODI6XFx0XFx0ICAgICEoaXB2Nl9hZGRyX3R5cGUoXFx1MDAyNmhkci1cXHUwMDNlZGFkZHIpIFxcdTAwMjZcXG4gNTgzOlxcdFxcdCAgICAgIChJUFY2X0FERFJfTE9PUEJBQ0t8SVBWNl9BRERSX0xJTktMT0NBTCkpIFxcdTAwMjZcXHUwMDI2XFxuIDU4NDpcXHRcXHQgICAgbGlrZWx5KCEoSVA2Q0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZTS0JfRk9SV0FSREVEKSkpIHtcXG4gNTg1OlxcdFxcdFxcdC8qXFxuIDU4NjpcXHRcXHRcXHQgKiBPa2F5LCB3ZSB0cnkgdG8gZm9yd2FyZCAtIHNwbGl0IGFuZCBkdXBsaWNhdGVcXG4gNTg3OlxcdFxcdFxcdCAqIHBhY2tldHMuXFxuIDU4ODpcXHRcXHRcXHQgKi9cXG4gNTg5OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbiA1OTA6XFx0XFx0XFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRcXHQvKiBDaGVjayBmb3IgTUxEICovXFxuIDU5MzpcXHRcXHRcXHRpZiAodW5saWtlbHkob3B0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlNLQl9ST1VURVJBTEVSVCkpIHtcXG4gNTk0OlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIHRoaXMgaXMgYSBtbGQgbWVzc2FnZSAqL1xcbiA1OTU6XFx0XFx0XFx0XFx0dTggbmV4dGhkciA9IGhkci1cXHUwMDNlbmV4dGhkcjtcXG4gNTk2OlxcdFxcdFxcdFxcdF9fYmUxNiBmcmFnX29mZjtcXG4gNTk3OlxcdFxcdFxcdFxcdGludCBvZmZzZXQ7XFxuIDU5ODpcXHRcXG4gNTk5OlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIHRoZSB2YWx1ZSBvZiBSb3V0ZXIgQWxlcnRcXG4gNjAwOlxcdFxcdFxcdFxcdCAqIGlzIGZvciBNTEQgKDB4MDAwMCkuXFxuIDYwMTpcXHRcXHRcXHRcXHQgKi9cXG4gNjAyOlxcdFxcdFxcdFxcdGlmIChvcHQtXFx1MDAzZXJhID09IGh0b25zKElQVjZfT1BUX1JPVVRFUkFMRVJUX01MRCkpIHtcXG4gNjAzOlxcdFxcdFxcdFxcdFxcdGRlbGl2ZXIgPSBmYWxzZTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0XFx0XFx0XFx0aWYgKCFpcHY2X2V4dF9oZHIobmV4dGhkcikpIHtcXG4gNjA2OlxcdFxcdFxcdFxcdFxcdFxcdC8qIEJVRyAqL1xcbiA2MDc6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYwODpcXHRcXHRcXHRcXHRcXHR9XFxuIDYwOTpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgc2l6ZW9mKCpoZHIpLFxcbiA2MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmV4dGhkciwgXFx1MDAyNmZyYWdfb2ZmKTtcXG4gNjExOlxcdFxcdFxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYxMzpcXHRcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdGlmIChpcHY2X2lzX21sZChza2IsIG5leHRoZHIsIG9mZnNldCkpXFxuIDYxNTpcXHRcXHRcXHRcXHRcXHRcXHRkZWxpdmVyID0gdHJ1ZTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYxODpcXHRcXHRcXHRcXHR9XFxuIDYxOTpcXHRcXHRcXHRcXHQvKiB1bmtub3duIFJBIC0gcHJvY2VzcyBpdCBub3JtYWxseSAqL1xcbiA2MjA6XFx0XFx0XFx0fVxcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRcXHRpZiAoZGVsaXZlcikge1xcbiA2MjM6XFx0XFx0XFx0XFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbiA2MjQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNjI1OlxcdFxcdFxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4gNjI2OlxcdFxcdFxcdFxcdHNrYjIgPSBza2I7XFxuIDYyNzpcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbiA2Mjg6XFx0XFx0XFx0fVxcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRcXHRpZiAoc2tiMilcXG4gNjMxOlxcdFxcdFxcdFxcdGlwNl9tcl9pbnB1dChza2IyKTtcXG4gNjMyOlxcdFxcdH1cXG4gNjMzOlxcdG91dDpcXG4gNjM0OlxcdCNlbmRpZlxcbiA2MzU6XFx0XFx0aWYgKGxpa2VseShkZWxpdmVyKSkge1xcbiA2MzY6XFx0XFx0XFx0aXA2X2lucHV0KHNrYik7XFxuIDYzNzpcXHRcXHR9IGVsc2Uge1xcbiA2Mzg6XFx0XFx0XFx0LyogZGlzY2FyZCAqL1xcbiA2Mzk6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHJldHVybiAwO1xcbiA2NDM6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo0Ny4yMTUxNjg2NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMTA5OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUHY2IE11bHRpY2FzdCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBJUHY2IG11bHRpY2FzdCBpbnB1dCBoYW5kbGluZywgYW5kIEkgc2VlIHRoaXMgYHNrYl9vcnBoYW4oc2tiKWAgY2FsbCB3aXRoaW4gdGhlIGBpcDZfbWNfaW5wdXRgIGZ1bmN0aW9uLiBBaGEhIEkgcmVtZW1iZXIgdGhhdCBgc2tiX29ycGhhbmAgaXMgY29uZGl0aW9uYWxpemVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFYC4gTWFrZXMgc2Vuc2UuIFNvLCB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY2x1ZGVkLCB3ZSdyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYENPTkZJR19JUFY2X01ST1VURWAgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoYXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY3Jvc3MtcmVmZXJlbmNlLCBsZXQgbWUgcGl2b3Qgb3ZlciBhbmQgdGFrZSBhIGxvb2sgYXQgYGlwX21yX2lucHV0YCBpbiBgbmV0L2lwdjQvaXBtci5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBpcyBzaW1pbGFybHkgaGFuZGxlZC4gSXQncyBnb29kIHByYWN0aWNlIHRvIGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBJUHY0IGFuZCBJUHY2IGFwcHJvYWNoZXMgaGVyZSwganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGluIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo1MS4zMTYyNzA4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwbXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4OTpcXHRpbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4yMTkwOlxcdHtcXG4yMTkxOlxcdFxcdHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlO1xcbjIxOTI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuMjE5MzpcXHRcXHRpbnQgbG9jYWwgPSBza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTDtcXG4yMTk0OlxcdFxcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xcbjIxOTU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4yMTk2OlxcdFxcbjIxOTc6XFx0XFx0Lyogc2tiLVxcdTAwM2VkZXYgcGFzc2VkIGluIGlzIHRoZSBsb1ggbWFzdGVyIGRldiBmb3IgdnJmcy5cXG4yMTk4OlxcdFxcdCAqIEFzIHRoZXJlIGFyZSBubyB2aWZzIGFzc29jaWF0ZWQgd2l0aCBsb29wYmFjayBkZXZpY2VzLFxcbjIxOTk6XFx0XFx0ICogZ2V0IHRoZSBwcm9wZXIgaW50ZXJmYWNlIHRoYXQgZG9lcyBoYXZlIGEgdmlmIGFzc29jaWF0ZWQgd2l0aCBpdC5cXG4yMjAwOlxcdFxcdCAqL1xcbjIyMDE6XFx0XFx0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuMjIwMjpcXHRcXHRpZiAobmV0aWZfaXNfbDNfbWFzdGVyKHNrYi1cXHUwMDNlZGV2KSkge1xcbjIyMDM6XFx0XFx0XFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBJUENCKHNrYiktXFx1MDAzZWlpZik7XFxuMjIwNDpcXHRcXHRcXHRpZiAoIWRldikge1xcbjIyMDU6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjIwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yMjA3OlxcdFxcdFxcdH1cXG4yMjA4OlxcdFxcdH1cXG4yMjA5OlxcdFxcbjIyMTA6XFx0XFx0LyogUGFja2V0IGlzIGxvb3BlZCBiYWNrIGFmdGVyIGZvcndhcmQsIGl0IHNob3VsZCBub3QgYmVcXG4yMjExOlxcdFxcdCAqIGZvcndhcmRlZCBzZWNvbmQgdGltZSwgYnV0IHN0aWxsIGNhbiBiZSBkZWxpdmVyZWQgbG9jYWxseS5cXG4yMjEyOlxcdFxcdCAqL1xcbjIyMTM6XFx0XFx0aWYgKElQQ0Ioc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUFNLQl9GT1JXQVJERUQpXFxuMjIxNDpcXHRcXHRcXHRnb3RvIGRvbnRfZm9yd2FyZDtcXG4yMjE1OlxcdFxcbjIyMTY6XFx0XFx0aWYgKCFsb2NhbClcXG4yMjE3OlxcdFxcdFxcdHNrYl9vcnBoYW4oc2tiKTtcXG4yMjE4OlxcdFxcbjIyMTk6XFx0XFx0bXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTtcXG4yMjIwOlxcdFxcdGlmIChJU19FUlIobXJ0KSkge1xcbjIyMjE6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjIyMjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtcnQpO1xcbjIyMjM6XFx0XFx0fVxcbjIyMjQ6XFx0XFx0aWYgKCFsb2NhbCkge1xcbjIyMjU6XFx0XFx0XFx0aWYgKElQQ0Ioc2tiKS1cXHUwMDNlb3B0LnJvdXRlcl9hbGVydCkge1xcbjIyMjY6XFx0XFx0XFx0XFx0aWYgKGlwX2NhbGxfcmFfY2hhaW4oc2tiKSlcXG4yMjI3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIyMjg6XFx0XFx0XFx0fSBlbHNlIGlmIChpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JR01QKSB7XFxuMjIyOTpcXHRcXHRcXHRcXHQvKiBJR01QdjEgKGFuZCBicm9rZW4gSUdNUHYyIGltcGxlbWVudGF0aW9ucyBzb3J0IG9mXFxuMjIzMDpcXHRcXHRcXHRcXHQgKiBDaXNjbyBJT1MgXFx1MDAzYz0gMTEuMig4KSkgZG8gbm90IHB1dCByb3V0ZXIgYWxlcnRcXG4yMjMxOlxcdFxcdFxcdFxcdCAqIG9wdGlvbiB0byBJR01QIHBhY2tldHMgZGVzdGluZWQgdG8gcm91dGFibGVcXG4yMjMyOlxcdFxcdFxcdFxcdCAqIGdyb3Vwcy4gSXQgaXMgdmVyeSBiYWQsIGJlY2F1c2UgaXQgbWVhbnNcXG4yMjMzOlxcdFxcdFxcdFxcdCAqIHRoYXQgd2UgY2FuIGZvcndhcmQgTk8gSUdNUCBtZXNzYWdlcy5cXG4yMjM0OlxcdFxcdFxcdFxcdCAqL1xcbjIyMzU6XFx0XFx0XFx0XFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcXG4yMjM2OlxcdFxcbjIyMzc6XFx0XFx0XFx0XFx0bXJvdXRlX3NrID0gcmN1X2RlcmVmZXJlbmNlKG1ydC1cXHUwMDNlbXJvdXRlX3NrKTtcXG4yMjM4OlxcdFxcdFxcdFxcdGlmIChtcm91dGVfc2spIHtcXG4yMjM5OlxcdFxcdFxcdFxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuMjI0MDpcXHRcXHRcXHRcXHRcXHRyYXdfcmN2KG1yb3V0ZV9zaywgc2tiKTtcXG4yMjQxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIyNDI6XFx0XFx0XFx0XFx0fVxcbjIyNDM6XFx0XFx0XFx0fVxcbjIyNDQ6XFx0XFx0fVxcbjIyNDU6XFx0XFxuMjI0NjpcXHRcXHQvKiBhbHJlYWR5IHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqL1xcbjIyNDc6XFx0XFx0Y2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobXJ0LCBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcik7XFxuMjI0ODpcXHRcXHRpZiAoIWNhY2hlKSB7XFxuMjI0OTpcXHRcXHRcXHRpbnQgdmlmID0gaXBtcl9maW5kX3ZpZihtcnQsIGRldik7XFxuMjI1MDpcXHRcXG4yMjUxOlxcdFxcdFxcdGlmICh2aWYgXFx1MDAzZT0gMClcXG4yMjUyOlxcdFxcdFxcdFxcdGNhY2hlID0gaXBtcl9jYWNoZV9maW5kX2FueShtcnQsIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4yMjUzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2aWYpO1xcbjIyNTQ6XFx0XFx0fVxcbjIyNTU6XFx0XFxuMjI1NjpcXHRcXHQvKiBObyB1c2FibGUgY2FjaGUgZW50cnkgKi9cXG4yMjU3OlxcdFxcdGlmICghY2FjaGUpIHtcXG4yMjU4OlxcdFxcdFxcdGludCB2aWY7XFxuMjI1OTpcXHRcXG4yMjYwOlxcdFxcdFxcdGlmIChsb2NhbCkge1xcbjIyNjE6XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4yMjYyOlxcdFxcdFxcdFxcdGlwX2xvY2FsX2RlbGl2ZXIoc2tiKTtcXG4yMjYzOlxcdFxcdFxcdFxcdGlmICghc2tiMilcXG4yMjY0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4yMjY1OlxcdFxcdFxcdFxcdHNrYiA9IHNrYjI7XFxuMjI2NjpcXHRcXHRcXHR9XFxuMjI2NzpcXHRcXG4yMjY4OlxcdFxcdFxcdHZpZiA9IGlwbXJfZmluZF92aWYobXJ0LCBkZXYpO1xcbjIyNjk6XFx0XFx0XFx0aWYgKHZpZiBcXHUwMDNlPSAwKVxcbjIyNzA6XFx0XFx0XFx0XFx0cmV0dXJuIGlwbXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xcbjIyNzE6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjI3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yMjczOlxcdFxcdH1cXG4yMjc0OlxcdFxcbjIyNzU6XFx0XFx0aXBfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlLCBsb2NhbCk7XFxuMjI3NjpcXHRcXG4yMjc3OlxcdFxcdGlmIChsb2NhbClcXG4yMjc4OlxcdFxcdFxcdHJldHVybiBpcF9sb2NhbF9kZWxpdmVyKHNrYik7XFxuMjI3OTpcXHRcXG4yMjgwOlxcdFxcdHJldHVybiAwO1xcbjIyODE6XFx0XFxuMjI4MjpcXHRkb250X2ZvcndhcmQ6XFxuMjI4MzpcXHRcXHRpZiAobG9jYWwpXFxuMjI4NDpcXHRcXHRcXHRyZXR1cm4gaXBfbG9jYWxfZGVsaXZlcihza2IpO1xcbjIyODU6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjI4NjpcXHRcXHRyZXR1cm4gMDtcXG4yMjg3OlxcdH1cXG4yMjg4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo1MS4zMTY0NTM3MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNDAyMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipGb2N1c2luZyBvbiBJUCBNdWx0aWNhc3QgUm91dGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBpcyBoYW5kbGVkIGludGVybmFsbHkuIEkgc2VlIHRoYXQgYGlwX21yX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiwgb3IgXCJmb2N1cyBzeW1ib2wsXCIgZm9yIElQdjQsIGFuZCBgaXA2X21jX2lucHV0YCBpcyB0aGUgY29ycmVzcG9uZGluZyBvbmUgZm9yIElQdjYuIFRoYXQncyBnb29kLCB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZnVuY3Rpb25hbGl0aWVzLiBJJ3ZlIGdvdCBgSVBfTVJPVVRFYCwgYElQVjZgLCBhbmQgYElQVjZfTVJPVVRFYCBmbGFnZ2VkIGFzIHBvdGVudGlhbCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSnVzdCB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGBJUFY2X01ST1VURWAgaXMgdGhlIGV4YWN0IG5hbWUsIGl0IHNlZW1zIGxpa2VseSBidXQgdmVyaWZpY2F0aW9uIGlzIGVzc2VudGlhbCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBwcmVjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NDo1NS4wNTA0Nzk1ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X01ST1VURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE5OjQ0OjU1LjA5NjAwOTA3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3NjI4ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIE11bHRpY2FzdCBSb3V0aW5nIFByb3RvY29scyoqXG5cblJpZ2h0LCB0aGF0J3MgaXQuIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIGZvdW5kYXRpb25hbCBzdHVmZiBwaW5uZWQgZG93bi4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgSVBWNl9NUk9VVEVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzb2NrZXQgb3B0aW9uIGZvciBJUHY2IG11bHRpY2FzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb25zLiBObyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwganVzdCBhcyBhIGRvdWJsZSBjaGVjayB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJJ20gdmVyaWZ5aW5nIHRoYXQgYElQX01ST1VURWAgcmVtYWlucyB0aGUgYXBwcm9wcmlhdGUgc29ja2V0IG9wdGlvbiBmb3IgaGFuZGxpbmcgSVB2NCBtdWx0aWNhc3Qgcm91dGluZy4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1hcCBvZiB0aGVzZSB0aGluZ3MgaXMgY29ycmVjdC4gQWx3YXlzIGdvb2QgdG8gaGF2ZSB0aGUgYmFzaWNzIHNoYXJwIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTUxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NTguNzYzNjQwNzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg0ODAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVJPVVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjE1LVxcbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXFxubmV0L2lwdjQvS2NvbmZpZy0yMTctXFx0Ym9vbFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTktXFxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDQ6NTguODExNDkyNjIyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Mjc3NjQ1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKipcblxuT2theSwgc28gdGhlIGBJUF9NUk9VVEVgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUsIHRoYXQgY2hlY2tzIG91dC4gVGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2VzIGBza2Jfb3JwaGFuKHNrYilgIHdpdGhpbiBgaXBfbXJfaW5wdXRgIGFuZCBgaXA2X21jX2lucHV0YC4gIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2s7IGFsdGVyaW5nIGhvdyBzb2NrZXQgYnVmZmVycyBhcmUgaGFuZGxlZC4gIFRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIG5vIGRvdWJ0IGFib3V0IGl0LlxuXG5MZXQncyBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuIFdlIGNhbiBzYXk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZVxuKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAsIGVzc2VudGlhbGx5IGRlY291cGxpbmcgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSBpbiBhIGNydWNpYWwgc2VjdGlvbiBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgaXBfbXJfaW5wdXRgLCBhbmQgYGlwNl9tY19pbnB1dGAg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIHRhcmdldCBkaXJlY3RseS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBJUF9NUk9VVEVgLCBgSVBWNmAsIGBJUFY2X01ST1VURWAuXG5cbk5vdywgcmVnYXJkaW5nIHRob3NlIGNvbmZpZ3MuICBgSVBWNmAgaXMgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpdOKAmXMgYWx3YXlzIGJldHRlciB0byBiZSBleHBsaWNpdC4gIFdhaXQgYSBtaW51dGUuLi4gYElQVjZfTVJPVVRFYCBkZXBlbmRzIG9uIGBJUFY2YCwgc28gYElQVjZgIGlzLCBvZiBjb3Vyc2UsIHJlcXVpcmVkLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdG8gYmUgY29tcGxldGVseSBzdXJlLiBgaXBfbXJfaW5wdXRgIHJlc2lkZXMgaW4gYG5ldC9pcHY0L2lwbXIuY2AsIGFuZCB0aGF0J3MgYnVpbHQgd2l0aCBgQ09ORklHX0lQX01ST1VURWAuICBgaXA2X21jX2lucHV0YCBpcyBpbiBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLCBhbmQgaXQgaXMgYnVpbHQgd2l0aCBgQ09ORklHX0lQVjZgLiBQbHVzLCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGlwNl9tY19pbnB1dGAgYXJlIGNvbnRpbmdlbnQgb24gYCNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVgLlxuXG5ZZXAsIGFsbCBjbGVhciwgdGhlIGNvbmZpZ3MgYXJlOiBgSVBfTVJPVVRFYCwgYElQVjZgLCBhbmQgYElQVjZfTVJPVVRFYC5cblxuQWxyaWdodCwgdGltZSB0byBleGVjdXRlIHRoZSBzZXQtcmVzdWx0cyBjb21tYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQ1LCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NTowNi40MzkyNTk2NjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODc1ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X01ST1VURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcDZfbWNfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBpbnB1dCBwYXRocyBieSBhZGRpbmcgYHNrYl9vcnBoYW4oc2tiKWAgdG8gZGlzYXNzb2NpYXRlIHRoZSBzb2NrZXQgZnJvbSB0aGUgc2tiIGJlZm9yZSBmb3J3YXJkaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgbXVsdGljYXN0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE5OjQ1OjA2LjUxODAyNTMwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNzE1NDA2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NTowNi41MTg3OTI2NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTkyNzA3Njk1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cXHUwMDNlc2tgIGFuZCBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBmaXggaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IHJlZmVyZW5jZSBsZWFrcywgbWVtb3J5IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlcmUgYW4gc2tiIG91dGxpdmVzIGl0cyBhc3NvY2lhdGVkIHNvY2tldC4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSkgb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2Q3OWNhZTQzYTA3YWQzMTUzMzRmYzZkZWIzMjQ2OWJkM2I5ZjVjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE5OjQ0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCAxZDlhNGFjMTRmY2VmLi5lNWYyYjFjNjE1MGQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0yMjEzLDYgKzIyMTMsOSBAQCBpbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChJUENCKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQU0tCX0ZPUldBUkRFRClcbiBcdFx0Z290byBkb250X2ZvcndhcmQ7XG4gXG4rXHRpZiAoIWxvY2FsKVxuK1x0XHRza2Jfb3JwaGFuKHNrYik7XG4rXG4gXHRtcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2IpO1xuIFx0aWYgKElTX0VSUihtcnQpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcbmluZGV4IDg5NzI4NjNjOTNlZTUuLmQzMzJlYzYwZjkxNTAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuY1xuKysrIGIvbmV0L2lwdjYvaXA2X2lucHV0LmNcbkBAIC02MjIsNiArNjIyLDcgQEAgaW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAoZGVsaXZlcikge1xuIFx0XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4gXHRcdFx0c2tiMiA9IHNrYjtcbiBcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxOTo0NTowNi41MTg3OTM5MjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkyNzA3NDUzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaXB2NC9pcG1yLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBza2Jfb3JwaGFuKHNrYilgIGNhbGxzIGluIGBpcF9tcl9pbnB1dGAgZm9yIElQdjQgYW5kIGBpcDZfbWNfaW5wdXRgIGZvciBJUHY2IG11bHRpY2FzdCBpbnB1dC4gSSBjYW4gc2VlIHRoZSBjb2RlIG5vdy5cblxuVGhlIHByaW1hcnkgZ29hbCBvZiBgc2tiX29ycGhhbmAgaXMgdG8gZGV0YWNoIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgZnJvbSBpdHMgYXNzb2NpYXRlZCBzb2NrZXQgYnkgc2V0dGluZyBgc2tiLVx1MDAzZXNrYCB0byBOVUxMLiBUaGlzIGFsc28gaW52b2tlcyB0aGUgZGVzdHJ1Y3Rvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFRoZSBmYWN0IHRoZXkncmUgZG9pbmcgdGhpcyBtZWFucyB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHNvY2tldCByZWZlcmVuY2UgbGVhaywgb3IgcGVyaGFwcyBtZW1vcnkgYWNjb3VudGluZyBpc3N1ZS4gVGhlIGBza2JgIG1pZ2h0IGhhdmUgYmVlbiBwZXJzaXN0aW5nIGxvbmdlciB0aGFuIHRoZSBzb2NrZXQsIHRodXMgdGhlIG5lZWQgdG8gcmVtb3ZlIHRoZSBhc3NvY2lhdGlvbi4gT3IsIGl0IHByZXZlbnRlZCBwcm9wZXIgZGVzdHJ1Y3Rpb24uXG5cbkdpdmVuIHRoaXMsIEkgZG9uJ3Qgc2VlIGFueSBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBoZXJlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgdHlwZSBvZiBidWcuIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBzaW1pbGFyIGJ1ZyB3aXRoIHRoZSBzb2NrZXQgcmVmZXJlbmNlLiBJIHRoaW5rIEtBU0FOLCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMgc29ydCBvZiBwcm9ibGVtLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0uIGBza2Jfb3JwaGFuKHNrYilgIGlzIGp1c3Qgc2V0dGluZyB0aGUgYHNrYi1cdTAwM2Vza2AgYW5kIHRoZSBgc2tiLVx1MDAzZWRlc3RydWN0b3JgIGZpZWxkcy4gQWZ0ZXIgY2FsbGluZyB0aGUgZGVzdHJ1Y3Rvciwgb2YgY291cnNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGhlcmUuIE15IGRpYWdub3NpcyBzZWVtcyBjb3JyZWN0LlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzcsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTk6NDU6MjUuNzg5NTQyNjY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBza2Jfb3JwaGFuKHNrYilgIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGlucHV0IHBhdGhzLiBgc2tiX29ycGhhbmAgZGV0YWNoZXMgdGhlIHNvY2tldCBmcm9tIHRoZSBza2IgKGNsZWFyaW5nIGBza2ItXFx1MDAzZXNrYCBhbmQgY2FsbGluZyB0aGUgZGVzdHJ1Y3RvcikuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZml4IGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCByZWZlcmVuY2UgbGVha3MsIG1lbW9yeSBhY2NvdW50aW5nLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZXJlIGFuIHNrYiBvdXRsaXZlcyBpdHMgYXNzb2NpYXRlZCBzb2NrZXQuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3IgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYHNrYl9vcnBoYW4oc2tiKWAgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgaW5wdXQgcGF0aHMuIGBza2Jfb3JwaGFuYCBkZXRhY2hlcyB0aGUgc29ja2V0IGZyb20gdGhlIHNrYiAoY2xlYXJpbmcgYHNrYi1cXHUwMDNlc2tgIGFuZCBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yKS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBmaXggaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IHJlZmVyZW5jZSBsZWFrcywgbWVtb3J5IGFjY291bnRpbmcsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlcmUgYW4gc2tiIG91dGxpdmVzIGl0cyBhc3NvY2lhdGVkIHNvY2tldC4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSkgb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGUgbWVtb3J5IHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowh69z9[1] Phase: Succeeded StartedAt: 2026-08-12 19:45:37 +0000 UTC FinishedAt: 2026-08-12 19:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 19:45:37 +0000 UTC FinishedAt: 2026-08-12 19:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2] Phase: Succeeded StartedAt: 2026-08-12 19:45:37 +0000 UTC FinishedAt: 2026-08-12 23:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 19:45:37 +0000 UTC FinishedAt: 2026-08-12 23:32:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 19:45:37 +0000 UTC FinishedAt: 2026-08-12 19:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 19:45:37 +0000 UTC FinishedAt: 2026-08-12 19:45:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh69z9/series-workflowh69z9-convert-artifact-2926133678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 19:45:47 +0000 UTC FinishedAt: 2026-08-12 20:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 19:45:47 +0000 UTC FinishedAt: 2026-08-12 20:02:57 +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:*be5de198-ad79-4da4-8c04-b7cc0494472b,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-workflowh69z9/series-workflowh69z9-convert-artifact-2926133678/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": "686b166f-6533-4d86-ba87-3073972004d7", "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-workflowh69z9/series-workflowh69z9-build-action-259482900/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 19:45:47 +0000 UTC FinishedAt: 2026-08-12 20:02:47 +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:*be5de198-ad79-4da4-8c04-b7cc0494472b,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-workflowh69z9/series-workflowh69z9-convert-artifact-2926133678/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": "686b166f-6533-4d86-ba87-3073972004d7", "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-workflowh69z9/series-workflowh69z9-build-action-259482900/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 20:02:57 +0000 UTC FinishedAt: 2026-08-12 20:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 20:02:57 +0000 UTC FinishedAt: 2026-08-12 20:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 20:02:57 +0000 UTC FinishedAt: 2026-08-12 20:03:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 20:02:57 +0000 UTC FinishedAt: 2026-08-12 20:03:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh69z9/series-workflowh69z9-convert-artifact-1668108449/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 20:03:07 +0000 UTC FinishedAt: 2026-08-12 20:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 20:03:07 +0000 UTC FinishedAt: 2026-08-12 20:05:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*686b166f-6533-4d86-ba87-3073972004d7,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-workflowh69z9/series-workflowh69z9-build-action-259482900/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-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 20:05:12 +0000 UTC FinishedAt: 2026-08-12 20:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 20:05:12 +0000 UTC FinishedAt: 2026-08-12 20:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 20:05:12 +0000 UTC FinishedAt: 2026-08-12 20:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 20:05:12 +0000 UTC FinishedAt: 2026-08-12 20:28:09 +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:*be5de198-ad79-4da4-8c04-b7cc0494472b,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-workflowh69z9/series-workflowh69z9-convert-artifact-1668108449/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": "a4c5423b-a2da-4295-a52b-d4958759e355", "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-workflowh69z9/series-workflowh69z9-build-action-3655826349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 20:05:12 +0000 UTC FinishedAt: 2026-08-12 20:27:59 +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:*be5de198-ad79-4da4-8c04-b7cc0494472b,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-workflowh69z9/series-workflowh69z9-convert-artifact-1668108449/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": "a4c5423b-a2da-4295-a52b-d4958759e355", "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-workflowh69z9/series-workflowh69z9-build-action-3655826349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 20:28:09 +0000 UTC FinishedAt: 2026-08-12 20:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 20:28:09 +0000 UTC FinishedAt: 2026-08-12 20:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 20:28:09 +0000 UTC FinishedAt: 2026-08-12 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 20:28:09 +0000 UTC FinishedAt: 2026-08-12 20:30:07 +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:*a4c5423b-a2da-4295-a52b-d4958759e355,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-workflowh69z9/series-workflowh69z9-build-action-3655826349/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-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 23:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 23:32:14 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"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:*686b166f-6533-4d86-ba87-3073972004d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a4c5423b-a2da-4295-a52b-d4958759e355,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-workflowh69z9/series-workflowh69z9-build-action-259482900/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-workflowh69z9/series-workflowh69z9-build-action-3655826349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 20:30:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 20:30:30 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"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-workflowh69z9/series-workflowh69z9-convert-artifact-1083953462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 20:30:17 +0000 UTC FinishedAt: 2026-08-12 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 20:30:37 +0000 UTC FinishedAt: 2026-08-12 23:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh69z9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["ip_mr_input","ip6_mc_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7b53449540502cb21b32bca62a6258e22cd97bbe","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6","IPV6_MROUTE"],"series_id":"931efb3d-ea01-4d80-a431-13b9fac1dabd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 20:30:37 +0000 UTC FinishedAt: 2026-08-12 23:32:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*686b166f-6533-4d86-ba87-3073972004d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a4c5423b-a2da-4295-a52b-d4958759e355,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-workflowh69z9/series-workflowh69z9-build-action-259482900/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-workflowh69z9/series-workflowh69z9-build-action-3655826349/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-workflowh69z9/series-workflowh69z9-convert-artifact-1083953462/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,}